From 006bd9eef5771e0ef9d764af1be9a35b78f20736 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Sun, 23 Mar 2025 18:15:17 +0200 Subject: [PATCH 0001/1077] protocols/meson.build: use native wayland-scanner --- protocols/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/meson.build b/protocols/meson.build index 97594f06..7941a9ff 100644 --- a/protocols/meson.build +++ b/protocols/meson.build @@ -87,7 +87,7 @@ foreach protocol : protocols endforeach # wayland.xml generation -wayland_scanner = dependency('wayland-scanner') +wayland_scanner = dependency('wayland-scanner', native: true) wayland_scanner_datadir = wayland_scanner.get_variable('pkgdatadir') wayland_xml = wayland_scanner_datadir / 'wayland.xml' From e4abf26069b4d43c8f6ad6b3dfb56c952abb38c2 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Sun, 23 Mar 2025 18:19:34 +0200 Subject: [PATCH 0002/1077] Nix: add changes from Nixpkgs derivation --- nix/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nix/default.nix b/nix/default.nix index 2d9ee99f..f66bac93 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -11,6 +11,7 @@ aquamarine, binutils, cairo, + epoll-shim, git, glaze, hyprcursor, @@ -141,6 +142,7 @@ in wayland-scanner xorg.libXcursor ] + (optionals customStdenv.hostPlatform.isBSD [ epoll-shim ]) (optionals customStdenv.hostPlatform.isMusl [libexecinfo]) (optionals enableXWayland [ xorg.libxcb @@ -153,6 +155,8 @@ in (optional withSystemd systemd) ]; + strictDeps = true; + mesonBuildType = if debug then "debug" @@ -162,6 +166,7 @@ in (mapAttrsToList mesonEnable { "xwayland" = enableXWayland; "legacy_renderer" = legacyRenderer; + "systemd" = withSystemd; "uwsm" = false; "hyprpm" = false; }) From a852461c7d29f80739385b9175825b9f0af6e8fb Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:56:07 +0300 Subject: [PATCH 0003/1077] renderer: Simplify and fix hdr metadata setting (#9706) * simplify and fix hdr metadata setting * keep incorrect(?) cm skip till #9600 --- src/render/OpenGL.cpp | 6 +++--- src/render/Renderer.cpp | 44 ++++++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 6f148ba9..c12db0a3 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1382,9 +1382,9 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB const auto imageDescription = m_RenderData.surface.valid() && m_RenderData.surface->colorManagement.valid() ? m_RenderData.surface->colorManagement->imageDescription() : SImageDescription{}; - const bool skipCM = !*PENABLECM /* CM disabled by the user */ - || !m_RenderData.surface /* No surface - no point in CM */ - || !m_bCMSupported /* CM unsupported - hw failed to compile the shader probably */ + const bool skipCM = !*PENABLECM /* CM disabled by the user */ + || !m_RenderData.surface /* FIXME unknown texture settings should be treated as sRGB and go through CM if monitor isn't in sRGB mode */ + || !m_bCMSupported /* CM unsupported - hw failed to compile the shader probably */ || (imageDescription == m_RenderData.pMonitor->imageDescription) /* Source and target have the same image description */ || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->activeWorkspace && m_RenderData.pMonitor->activeWorkspace->m_bHasFullscreenWindow && diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 6f78e896..8a8fd27a 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1411,11 +1411,16 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { static const hdr_output_metadata NO_HDR_METADATA = {.hdmi_metadata_type1 = hdr_metadata_infoframe{.eotf = 0}}; static hdr_output_metadata createHDRMetadata(SImageDescription settings, Aquamarine::IOutput::SParsedEDID edid) { - if (settings.transferFunction != CM_TRANSFER_FUNCTION_ST2084_PQ) - return NO_HDR_METADATA; // empty metadata for SDR + uint8_t eotf = 0; + switch (settings.transferFunction) { + case CM_TRANSFER_FUNCTION_SRGB: eotf = 0; break; // used to send primaries and luminances to AQ. ignored for now + case CM_TRANSFER_FUNCTION_ST2084_PQ: eotf = 2; break; + // case CM_TRANSFER_FUNCTION_HLG: eotf = 3; break; TODO check display capabilities first + default: return NO_HDR_METADATA; // empty metadata for SDR + } const auto toNits = [](uint32_t value) { return uint16_t(std::round(value)); }; - const auto to16Bit = [](uint32_t value) { return uint16_t(std::round(value * 50000)); }; + const auto to16Bit = [](float value) { return uint16_t(std::round(value * 50000)); }; auto colorimetry = settings.primariesNameSet || settings.primaries == SPCPRimaries{} ? getPrimaries(settings.primariesNamed) : settings.primaries; auto luminances = settings.masteringLuminances.max > 0 ? @@ -1429,7 +1434,7 @@ static hdr_output_metadata createHDRMetadata(SImageDescription settings, A .metadata_type = 0, .hdmi_metadata_type1 = hdr_metadata_infoframe{ - .eotf = 2, + .eotf = eotf, .metadata_type = 0, .display_primaries = { @@ -1454,25 +1459,42 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { Debug::log(TRACE, "ColorManagement supportsBT2020 {}, supportsPQ {}", pMonitor->output->parsedEDID.supportsBT2020, SUPPORTSPQ); if (pMonitor->output->parsedEDID.supportsBT2020 && SUPPORTSPQ) { + // HDR metadata determined by + // PPASS = 0 monitor settings + // PPASS = 1 + // windowed: monitor settings + // fullscreen surface: surface settings FIXME: fullscreen SDR surface passthrough - pass degamma, ctm, gamma if needed + // PPASS = 2 + // windowed: monitor settings + // fullscreen SDR surface: monitor settings + // fullscreen HDR surface: surface settings + + bool wantHDR = PHDR; + bool hdrIsHandled = false; if (*PPASS && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_bHasFullscreenWindow && pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); const auto ROOT_SURF = WINDOW->m_pWLSurface->resource(); const auto SURF = ROOT_SURF->findFirstPreorder([ROOT_SURF](SP surf) { return surf->colorManagement.valid() && surf->extends() == ROOT_SURF->extends(); }); - const bool wantHDR = PHDR && *PPASS == 2; - if (SURF && SURF->colorManagement.valid() && SURF->colorManagement->hasImageDescription()) { + wantHDR = PHDR && *PPASS == 2; + + // we have a surface with image description and it's allowed by wantHDR + if (SURF && SURF->colorManagement.valid() && SURF->colorManagement->hasImageDescription() && + (!wantHDR || SURF->colorManagement->imageDescription().transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) { bool needsHdrMetadataUpdate = SURF->colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != WINDOW; if (SURF->colorManagement->needsHdrMetadataUpdate()) SURF->colorManagement->setHDRMetadata(createHDRMetadata(SURF->colorManagement->imageDescription(), pMonitor->output->parsedEDID)); if (needsHdrMetadataUpdate) pMonitor->output->state->setHDRMetadata(SURF->colorManagement->hdrMetadata()); - } else if ((pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != wantHDR) - pMonitor->output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->imageDescription, pMonitor->output->parsedEDID) : NO_HDR_METADATA); + hdrIsHandled = true; + } + pMonitor->m_previousFSWindow = WINDOW; - } else { - if ((pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != PHDR) - pMonitor->output->state->setHDRMetadata(PHDR ? createHDRMetadata(pMonitor->imageDescription, pMonitor->output->parsedEDID) : NO_HDR_METADATA); + } + if (!hdrIsHandled) { + if ((pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != wantHDR) + pMonitor->output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->imageDescription, pMonitor->output->parsedEDID) : NO_HDR_METADATA); pMonitor->m_previousFSWindow.reset(); } } From 4b968e5bc10244f90b7c51145d95135c0b0a36df Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Mon, 24 Mar 2025 12:57:34 +0000 Subject: [PATCH 0004/1077] [gha] Nix: update inputs --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 9dbd3bc8..69dd7a22 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1742669843, + "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "1e5b653dff12029333a6546c11e108ede13052eb", "type": "github" }, "original": { @@ -299,11 +299,11 @@ ] }, "locked": { - "lastModified": 1742058297, - "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", "type": "github" }, "original": { From aec69131cd3daa6915facef21b32c4914d22af90 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 24 Mar 2025 14:10:47 +0000 Subject: [PATCH 0005/1077] seat: avoid sending null surfaces in leave/enter events ref #9699 --- src/protocols/core/Seat.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 5bdb95f0..f6eee6e1 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -22,7 +22,7 @@ bool CWLTouchResource::good() { } void CWLTouchResource::sendDown(SP surface, uint32_t timeMs, int32_t id, const Vector2D& local) { - if (!owner) + if (!owner || !surface || !surface->getResource()->resource()) return; if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) @@ -145,7 +145,7 @@ bool CWLPointerResource::good() { } void CWLPointerResource::sendEnter(SP surface, const Vector2D& local) { - if (!owner || currentSurface == surface) + if (!owner || currentSurface == surface || !surface->getResource()->resource()) return; if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) @@ -165,7 +165,7 @@ void CWLPointerResource::sendEnter(SP surface, const Vector2 } void CWLPointerResource::sendLeave() { - if (!owner || !currentSurface) + if (!owner || !currentSurface || !currentSurface->getResource()->resource()) return; if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) @@ -336,7 +336,7 @@ void CWLKeyboardResource::sendKeymap(SP keyboard) { } void CWLKeyboardResource::sendEnter(SP surface) { - if (!owner || currentSurface == surface) + if (!owner || currentSurface == surface || !surface->getResource()->resource()) return; if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) @@ -361,7 +361,7 @@ void CWLKeyboardResource::sendEnter(SP surface) { } void CWLKeyboardResource::sendLeave() { - if (!owner || !currentSurface) + if (!owner || !currentSurface || !currentSurface->getResource()->resource()) return; if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) From 2a6d070774df4c17ca7d7d427065b04d0c77250a Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Mon, 24 Mar 2025 19:33:07 +0100 Subject: [PATCH 0006/1077] xwl: dont close the fd to early (#9715) dont close the fd until the wl_event_source is removed, so we dont get another event triggered with an already closed fd. --- src/xwayland/Server.cpp | 10 +++++----- src/xwayland/Server.hpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp index 6f057f9e..dd6206d2 100644 --- a/src/xwayland/Server.cpp +++ b/src/xwayland/Server.cpp @@ -177,8 +177,7 @@ static void startServer(void* data) { } static int xwaylandReady(int fd, uint32_t mask, void* data) { - CFileDescriptor xwlFd{fd}; - return g_pXWayland->pServer->ready(std::move(xwlFd), mask); + return g_pXWayland->pServer->ready(fd, mask); } static bool safeRemove(const std::string& path) { @@ -300,7 +299,7 @@ void CXWaylandServer::runXWayland(CFileDescriptor& notifyFD) { } auto cmd = - std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", displayName, xFDs[0].get(), xFDs[1].get(), notifyFD.get(), xwmFDs[1].get()); + std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", displayName, xFDs[0].get(), xFDs[1].get(), notifyFD.take(), xwmFDs[1].get()); auto waylandSocket = std::format("{}", waylandFDs[1].get()); setenv("WAYLAND_SOCKET", waylandSocket.c_str(), true); @@ -392,11 +391,11 @@ bool CXWaylandServer::start() { return true; } -int CXWaylandServer::ready(CFileDescriptor fd, uint32_t mask) { +int CXWaylandServer::ready(int fd, uint32_t mask) { if (mask & WL_EVENT_READABLE) { // xwayland writes twice char buf[64]; - ssize_t n = read(fd.get(), buf, sizeof(buf)); + ssize_t n = read(fd, buf, sizeof(buf)); if (n < 0 && errno != EINTR) { Debug::log(ERR, "Xwayland: read from displayFd failed"); mask = 0; @@ -421,6 +420,7 @@ int CXWaylandServer::ready(CFileDescriptor fd, uint32_t mask) { Debug::log(LOG, "XWayland is ready"); + close(fd); wl_event_source_remove(pipeSource); pipeSource = nullptr; diff --git a/src/xwayland/Server.hpp b/src/xwayland/Server.hpp index ccbcf6ea..e79f8beb 100644 --- a/src/xwayland/Server.hpp +++ b/src/xwayland/Server.hpp @@ -20,7 +20,7 @@ class CXWaylandServer { bool start(); // called on ready - int ready(Hyprutils::OS::CFileDescriptor fd, uint32_t mask); + int ready(int fd, uint32_t mask); void die(); From f3db1b172c6c61df7d5b8c960feccf3c19eb8e23 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 24 Mar 2025 23:57:23 +0000 Subject: [PATCH 0007/1077] decoration: bring back border_part_of_window fixes #9683, now under decoration: though --- src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/render/decorations/CHyprBorderDecoration.cpp | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 54223c1c..402780e0 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -247,6 +247,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_STRING_LONG, .data = SConfigOptionDescription::SStringData{""}, //##TODO UNSET? }, + SConfigOptionDescription{ + .value = "decoration:border_part_of_window", + .description = "whether the border should be treated as a part of the window.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, /* * blur: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 983681c9..ebbdb7c6 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -539,6 +539,7 @@ CConfigManager::CConfigManager() { registerConfigVar("decoration:dim_special", {0.2f}); registerConfigVar("decoration:dim_around", {0.4f}); registerConfigVar("decoration:screen_shader", {STRVAL_EMPTY}); + registerConfigVar("decoration:border_part_of_window", Hyprlang::INT{1}); registerConfigVar("dwindle:pseudotile", Hyprlang::INT{0}); registerConfigVar("dwindle:force_split", Hyprlang::INT{0}); diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 0d07c2ea..7ff1ee10 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -147,7 +147,9 @@ eDecorationLayer CHyprBorderDecoration::getDecorationLayer() { } uint64_t CHyprBorderDecoration::getDecorationFlags() { - return !doesntWantBorders() ? DECORATION_PART_OF_MAIN_WINDOW : 0; + static auto PPARTOFWINDOW = CConfigValue("decoration:border_part_of_window"); + + return *PPARTOFWINDOW && !doesntWantBorders() ? DECORATION_PART_OF_MAIN_WINDOW : 0; } std::string CHyprBorderDecoration::getDisplayName() { From f7ba86d1f335112ae0d13548947ddbd76b1477b6 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 24 Mar 2025 23:59:13 +0000 Subject: [PATCH 0008/1077] keybinds: add sendkeystate dispatcher (#9599) --- hyprctl/hyprctl.bash | 2 +- hyprctl/hyprctl.fish | 2 +- hyprctl/hyprctl.usage | 1 + hyprctl/hyprctl.zsh | 2 +- src/managers/KeybindManager.cpp | 43 +++++++++++++++++++++++++++++++++ src/managers/KeybindManager.hpp | 1 + 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/hyprctl/hyprctl.bash b/hyprctl/hyprctl.bash index e26e623e..ba541653 100644 --- a/hyprctl/hyprctl.bash +++ b/hyprctl/hyprctl.bash @@ -23,7 +23,7 @@ _hyprctl () { local words cword _get_comp_words_by_ref -n "$COMP_WORDBREAKS" words cword - declare -a literals=(resizeactive 2 changegroupactive -r moveintogroup forceallowsinput 4 ::= systeminfo all layouts setprop animationstyle switchxkblayout create denywindowfromgroup headless activebordercolor exec setcursor wayland focusurgentorlast workspacerules movecurrentworkspacetomonitor movetoworkspacesilent hyprpaper alpha inactivebordercolor movegroupwindow movecursortocorner movewindowpixel prev movewindow globalshortcuts clients dimaround setignoregrouplock splash execr monitors 0 forcenoborder -q animations 1 nomaxsize splitratio moveactive pass swapnext devices layers rounding lockactivegroup 5 moveworkspacetomonitor -f -i --quiet forcenodim pin 0 1 forceopaque forcenoshadow setfloating minsize alphaoverride sendshortcut workspaces cyclenext alterzorder togglegroup lockgroups bordersize dpms focuscurrentorlast -1 --batch notify remove instances 1 3 moveoutofgroup killactive 2 movetoworkspace movecursor configerrors closewindow swapwindow tagwindow forcerendererreload centerwindow auto focuswindow seterror nofocus alphafullscreen binds version -h togglespecialworkspace fullscreen windowdancecompat 0 keyword toggleopaque 3 --instance togglefloating renameworkspace alphafullscreenoverride activeworkspace x11 kill forceopaqueoverriden output global dispatch reload forcenoblur -j event --help disable -1 activewindow keepaspectratio dismissnotify focusmonitor movefocus plugin exit workspace fullscreenstate getoption alphainactiveoverride alphainactive decorations settiled config-only descriptions resizewindowpixel fakefullscreen rollinglog swapactiveworkspaces submap next movewindoworgroup cursorpos forcenoanims focusworkspaceoncurrentmonitor maxsize) + declare -a literals=(resizeactive 2 changegroupactive -r moveintogroup forceallowsinput 4 ::= systeminfo all layouts setprop animationstyle switchxkblayout create denywindowfromgroup headless activebordercolor exec setcursor wayland focusurgentorlast workspacerules movecurrentworkspacetomonitor movetoworkspacesilent hyprpaper alpha inactivebordercolor movegroupwindow movecursortocorner movewindowpixel prev movewindow globalshortcuts clients dimaround setignoregrouplock splash execr monitors 0 forcenoborder -q animations 1 nomaxsize splitratio moveactive pass swapnext devices layers rounding lockactivegroup 5 moveworkspacetomonitor -f -i --quiet forcenodim pin 0 1 forceopaque forcenoshadow setfloating minsize alphaoverride sendshortcut workspaces cyclenext alterzorder togglegroup lockgroups bordersize dpms focuscurrentorlast -1 --batch notify remove instances 1 3 moveoutofgroup killactive 2 movetoworkspace movecursor configerrors closewindow swapwindow tagwindow forcerendererreload centerwindow auto focuswindow seterror nofocus alphafullscreen binds version -h togglespecialworkspace fullscreen windowdancecompat 0 keyword toggleopaque 3 --instance togglefloating renameworkspace alphafullscreenoverride activeworkspace x11 kill forceopaqueoverriden output global dispatch reload forcenoblur -j event --help disable -1 activewindow keepaspectratio dismissnotify focusmonitor movefocus plugin exit workspace fullscreenstate getoption alphainactiveoverride alphainactive decorations settiled config-only descriptions resizewindowpixel fakefullscreen rollinglog swapactiveworkspaces submap next movewindoworgroup cursorpos forcenoanims focusworkspaceoncurrentmonitor maxsize sendkeystate) declare -A literal_transitions literal_transitions[0]="([120]=14 [43]=2 [125]=21 [81]=2 [3]=21 [51]=2 [50]=2 [128]=2 [89]=2 [58]=21 [8]=2 [10]=2 [11]=3 [130]=4 [13]=5 [97]=6 [101]=2 [102]=21 [133]=7 [100]=2 [137]=2 [22]=2 [19]=2 [140]=8 [25]=2 [143]=2 [107]=9 [146]=10 [69]=2 [33]=2 [34]=2 [78]=21 [114]=2 [37]=2 [151]=2 [116]=2 [121]=13 [123]=21 [39]=11 [42]=21 [79]=15 [118]=12)" literal_transitions[1]="([81]=2 [51]=2 [50]=2 [128]=2 [8]=2 [89]=2 [10]=2 [11]=3 [130]=4 [13]=5 [97]=6 [101]=2 [133]=7 [100]=2 [22]=2 [19]=2 [137]=2 [140]=8 [25]=2 [143]=2 [107]=9 [146]=10 [69]=2 [33]=2 [34]=2 [114]=2 [37]=2 [151]=2 [116]=2 [39]=11 [118]=12 [121]=13 [120]=14 [79]=15 [43]=2)" diff --git a/hyprctl/hyprctl.fish b/hyprctl/hyprctl.fish index 11309416..b43720eb 100644 --- a/hyprctl/hyprctl.fish +++ b/hyprctl/hyprctl.fish @@ -29,7 +29,7 @@ function _hyprctl set COMP_CWORD (count $COMP_WORDS) end - set literals "resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize" + set literals "resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize" "sendkeystate" set descriptions set descriptions[1] "Resize the active window" diff --git a/hyprctl/hyprctl.usage b/hyprctl/hyprctl.usage index b2c55682..17a0a10e 100644 --- a/hyprctl/hyprctl.usage +++ b/hyprctl/hyprctl.usage @@ -106,6 +106,7 @@ hyprctl []... | (execr) "Execute a raw shell command" | (pass) "Pass the key to a specified window" | (sendshortcut) "On shortcut X sends shortcut Y to a specified window" + | (sendkeystate) "Send a key with specific state (down/repeat/up) to a specified window (window must keep focus for events to continue)" | (killactive) "Close the active window" | (closewindow) "Close a specified window" | (workspace) "Change the workspace" diff --git a/hyprctl/hyprctl.zsh b/hyprctl/hyprctl.zsh index 9a858100..6209a3cc 100644 --- a/hyprctl/hyprctl.zsh +++ b/hyprctl/hyprctl.zsh @@ -17,7 +17,7 @@ _hyprctl_cmd_0 () { } _hyprctl () { - local -a literals=("resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize") + local -a literals=("resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize" "sendkeystate") local -A descriptions descriptions[1]="Resize the active window" diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 42e2bc14..cc912938 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -117,6 +117,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["submap"] = setSubmap; m_mDispatchers["pass"] = pass; m_mDispatchers["sendshortcut"] = sendshortcut; + m_mDispatchers["sendkeystate"] = sendkeystate; m_mDispatchers["layoutmsg"] = layoutmsg; m_mDispatchers["dpms"] = dpms; m_mDispatchers["movewindowpixel"] = moveWindow; @@ -3215,3 +3216,45 @@ SDispatchResult CKeybindManager::setProp(std::string args) { return {}; } + +SDispatchResult CKeybindManager::sendkeystate(std::string args) { + // args=[,WINDOW_RULES] + const auto ARGS = CVarList(args, 4); + if (ARGS.size() != 4) { + Debug::log(ERR, "sendkeystate: invalid args"); + return {.success = false, .error = "sendkeystate: invalid args"}; + } + + const auto STATE = ARGS[2]; + + if (STATE != "down" && STATE != "repeat" && STATE != "up") { + Debug::log(ERR, "sendkeystate: invalid state, must be 'down', 'repeat', or 'up'"); + return {.success = false, .error = "sendkeystate: invalid state, must be 'down', 'repeat', or 'up'"}; + } + + std::string modifiedArgs = ARGS[0] + "," + ARGS[1] + "," + ARGS[3]; + + const int oldPassPressed = g_pKeybindManager->m_iPassPressed; + + if (STATE == "down") + g_pKeybindManager->m_iPassPressed = 1; + else if (STATE == "up") + g_pKeybindManager->m_iPassPressed = 0; + else if (STATE == "repeat") + g_pKeybindManager->m_iPassPressed = 1; + + auto result = sendshortcut(modifiedArgs); + + if (STATE == "repeat" && result.success) + result = sendshortcut(modifiedArgs); + + g_pKeybindManager->m_iPassPressed = oldPassPressed; + + if (!result.success && !result.error.empty()) { + size_t pos = result.error.find("sendshortcut:"); + if (pos != std::string::npos) + result.error = "sendkeystate:" + result.error.substr(pos + 13); + } + + return result; +} diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 712fd58d..8b13bac2 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -203,6 +203,7 @@ class CKeybindManager { static SDispatchResult setSubmap(std::string); static SDispatchResult pass(std::string); static SDispatchResult sendshortcut(std::string); + static SDispatchResult sendkeystate(std::string); static SDispatchResult layoutmsg(std::string); static SDispatchResult dpms(std::string); static SDispatchResult swapnext(std::string); From 9a67354fa24b66dc35f2c702be085122d110c38a Mon Sep 17 00:00:00 2001 From: Arkady Buryakov Date: Wed, 26 Mar 2025 04:07:56 +0300 Subject: [PATCH 0009/1077] Groupbar: apply scaling factor to text (#9731) --- src/render/decorations/CHyprGroupBarDecoration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index d7858853..9e6db6ac 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -278,7 +278,7 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float const CHyprColor COLOR = CHyprColor(*PTEXTCOLOR); const auto FONTFAMILY = *PTITLEFONTFAMILY != STRVAL_EMPTY ? *PTITLEFONTFAMILY : *FALLBACKFONT; - tex = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE, false, FONTFAMILY, bufferSize.x - 2 /* some padding yk */); + tex = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2 /* some padding yk */); if (tex) texSize = tex->m_vSize; From 3fc3521a97eba0fa67da80f17ae7872b1073f08d Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Wed, 26 Mar 2025 02:22:09 +0100 Subject: [PATCH 0010/1077] pass: remove unusued timeline in texpass (#9734) remove unused timeline and waitpoint in texpass and especially remove the passing it to renderTextureInternalWithDamage that implicitly converted it to bool. setting discardActive and allowCustomUV --- src/managers/PointerManager.cpp | 10 +++------- src/managers/PointerManager.hpp | 2 -- src/render/pass/TexPassElement.cpp | 3 +-- src/render/pass/TexPassElement.hpp | 2 -- 4 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index e4f24230..89be4e99 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -621,14 +621,10 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, timespec* no box.y = std::round(box.y); CTexPassElement::SRenderData data; - data.tex = texture; - data.box = box.round(); - data.syncTimeline = currentCursorImage.waitTimeline; - data.syncPoint = currentCursorImage.waitPoint; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + data.tex = texture; + data.box = box.round(); - currentCursorImage.waitTimeline.reset(); - currentCursorImage.waitPoint = 0; + g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); if (currentCursorImage.surface) currentCursorImage.surface->resource()->frame(now); diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index d00b55ba..4bdd309c 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -148,8 +148,6 @@ class CPointerManager { CHyprSignalListener destroySurface; CHyprSignalListener commitSurface; - SP waitTimeline = nullptr; - uint64_t waitPoint = 0; } currentCursorImage; // TODO: support various sizes per-output so we can have pixel-perfect cursors Vector2D pointerPos = {0, 0}; diff --git a/src/render/pass/TexPassElement.cpp b/src/render/pass/TexPassElement.cpp index 8b577373..01302907 100644 --- a/src/render/pass/TexPassElement.cpp +++ b/src/render/pass/TexPassElement.cpp @@ -22,8 +22,7 @@ void CTexPassElement::draw(const CRegion& damage) { if (data.replaceProjection) g_pHyprOpenGL->m_RenderData.monitorProjection = *data.replaceProjection; - g_pHyprOpenGL->renderTextureInternalWithDamage(data.tex, data.box, data.a, data.damage.empty() ? damage : data.damage, data.round, data.roundingPower, data.syncTimeline, - data.syncPoint); + g_pHyprOpenGL->renderTextureInternalWithDamage(data.tex, data.box, data.a, data.damage.empty() ? damage : data.damage, data.round, data.roundingPower); if (data.replaceProjection) g_pHyprOpenGL->m_RenderData.monitorProjection = g_pHyprOpenGL->m_RenderData.pMonitor->projMatrix; } diff --git a/src/render/pass/TexPassElement.hpp b/src/render/pass/TexPassElement.hpp index 6faa0872..5f0f490f 100644 --- a/src/render/pass/TexPassElement.hpp +++ b/src/render/pass/TexPassElement.hpp @@ -16,8 +16,6 @@ class CTexPassElement : public IPassElement { int round = 0; float roundingPower = 2.0f; bool flipEndFrame = false; - SP syncTimeline; - int64_t syncPoint = 0; std::optional replaceProjection; CBox clipBox; }; From c2ef8fcc0014cfed4e465b184572e6acad9f750f Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 26 Mar 2025 11:44:38 +0000 Subject: [PATCH 0011/1077] groupbar: round boxes --- src/render/decorations/CHyprGroupBarDecoration.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 9e6db6ac..905a72c7 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -142,7 +142,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->vecPosition.y + m_pWindow->m_vFloatingOffset.y, m_fBarWidth, *PINDICATORHEIGHT}; - rect.scale(pMonitor->scale); + rect.scale(pMonitor->scale).round(); const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_sGroupData.locked || g_pKeybindManager->m_bGroupsLocked; const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; @@ -573,5 +573,5 @@ CBox CHyprGroupBarDecoration::assignedBoxGlobal() { if (PWORKSPACE && !m_pWindow->m_bPinned) box.translate(PWORKSPACE->m_vRenderOffset->value()); - return box; + return box.round(); } From cec084c178de979621cb520aa4f74a40c96567f2 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 26 Mar 2025 11:47:04 +0000 Subject: [PATCH 0012/1077] pass/rect: include clipBox in opaque calculations ref #9730 ref #9709 --- src/render/pass/RectPassElement.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/render/pass/RectPassElement.cpp b/src/render/pass/RectPassElement.cpp index aa024577..cd354844 100644 --- a/src/render/pass/RectPassElement.cpp +++ b/src/render/pass/RectPassElement.cpp @@ -33,5 +33,13 @@ std::optional CRectPassElement::boundingBox() { } CRegion CRectPassElement::opaqueRegion() { - return data.color.a >= 1.F ? boundingBox()->expand(-data.round) : CRegion{}; + if (data.color.a < 1.F) + return CRegion{}; + + CRegion rg = boundingBox()->expand(-data.round); + + if (!data.clipBox.empty()) + rg.intersect(data.clipBox); + + return rg; } From 1c2b9a9ce3a58c76632834774a4716af1de45fe6 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 26 Mar 2025 14:28:19 +0000 Subject: [PATCH 0013/1077] opengl: don't attempt to compile cm on gles3.0 also disable the error for the cm shader fixes #9738 --- src/render/OpenGL.cpp | 93 +++++++++++++++++++++++-------------------- src/render/OpenGL.hpp | 14 +++++-- 2 files changed, 60 insertions(+), 47 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index c12db0a3..2a96f1b7 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -158,6 +158,7 @@ void CHyprOpenGLImpl::initEGL(bool gbm) { #else attrs.push_back(EGL_CONTEXT_CLIENT_VERSION); attrs.push_back(2); + m_eglContextVersion = EGL_CONTEXT_GLES_2_0; #endif attrs.push_back(EGL_NONE); @@ -176,7 +177,8 @@ void CHyprOpenGLImpl::initEGL(bool gbm) { attrs.push_back(0); attrs.push_back(EGL_NONE); - m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); + m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); + m_eglContextVersion = EGL_CONTEXT_GLES_3_0; if (m_pEglContext == EGL_NO_CONTEXT) RASSERT(false, "EGL: failed to create a context with either GLES3.2 or 3.0"); @@ -564,7 +566,7 @@ EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAttrs& attr return image; } -void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program) { +void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program, bool silent) { GLint maxLength = 0; if (program) glGetProgramiv(shader, GL_INFO_LOG_LENGTH, &maxLength); @@ -582,18 +584,19 @@ void CHyprOpenGLImpl::logShaderError(const GLuint& shader, bool program) { Debug::log(ERR, "Failed to link shader: {}", FULLERROR); - g_pConfigManager->addParseError(FULLERROR); + if (!silent) + g_pConfigManager->addParseError(FULLERROR); } -GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string& frag, bool dynamic) { - auto vertCompiled = compileShader(GL_VERTEX_SHADER, vert, dynamic); +GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string& frag, bool dynamic, bool silent) { + auto vertCompiled = compileShader(GL_VERTEX_SHADER, vert, dynamic, silent); if (dynamic) { if (vertCompiled == 0) return 0; } else RASSERT(vertCompiled, "Compiling shader failed. VERTEX nullptr! Shader source:\n\n{}", vert); - auto fragCompiled = compileShader(GL_FRAGMENT_SHADER, frag, dynamic); + auto fragCompiled = compileShader(GL_FRAGMENT_SHADER, frag, dynamic, silent); if (dynamic) { if (fragCompiled == 0) return 0; @@ -614,7 +617,7 @@ GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string glGetProgramiv(prog, GL_LINK_STATUS, &ok); if (dynamic) { if (ok == GL_FALSE) { - logShaderError(prog, true); + logShaderError(prog, true, silent); return 0; } } else { @@ -626,7 +629,7 @@ GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string return prog; } -GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool dynamic) { +GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool dynamic, bool silent) { auto shader = glCreateShader(type); auto shaderSource = src.c_str(); @@ -639,7 +642,7 @@ GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool if (dynamic) { if (ok == GL_FALSE) { - logShaderError(shader, false); + logShaderError(shader, false, silent); return 0; } } else { @@ -868,41 +871,43 @@ void CHyprOpenGLImpl::initShaders() { m_RenderData.pCurrentMonData->m_shQUAD.roundingPower = glGetUniformLocation(prog, "roundingPower"); #ifndef GLES2 - prog = createProgram(TEXVERTSRC320, TEXFRAGSRCCM, true); - m_bCMSupported = prog > 0; - if (m_bCMSupported) { - m_RenderData.pCurrentMonData->m_shCM.program = prog; - m_RenderData.pCurrentMonData->m_shCM.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shCM.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shCM.texType = glGetUniformLocation(prog, "texType"); - m_RenderData.pCurrentMonData->m_shCM.sourceTF = glGetUniformLocation(prog, "sourceTF"); - m_RenderData.pCurrentMonData->m_shCM.targetTF = glGetUniformLocation(prog, "targetTF"); - m_RenderData.pCurrentMonData->m_shCM.sourcePrimaries = glGetUniformLocation(prog, "sourcePrimaries"); - m_RenderData.pCurrentMonData->m_shCM.targetPrimaries = glGetUniformLocation(prog, "targetPrimaries"); - m_RenderData.pCurrentMonData->m_shCM.maxLuminance = glGetUniformLocation(prog, "maxLuminance"); - m_RenderData.pCurrentMonData->m_shCM.dstMaxLuminance = glGetUniformLocation(prog, "dstMaxLuminance"); - m_RenderData.pCurrentMonData->m_shCM.dstRefLuminance = glGetUniformLocation(prog, "dstRefLuminance"); - m_RenderData.pCurrentMonData->m_shCM.sdrSaturation = glGetUniformLocation(prog, "sdrSaturation"); - m_RenderData.pCurrentMonData->m_shCM.sdrBrightness = glGetUniformLocation(prog, "sdrBrightnessMultiplier"); - m_RenderData.pCurrentMonData->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte"); - m_RenderData.pCurrentMonData->m_shCM.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); - m_RenderData.pCurrentMonData->m_shCM.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); - m_RenderData.pCurrentMonData->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); - m_RenderData.pCurrentMonData->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); - m_RenderData.pCurrentMonData->m_shCM.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shCM.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shCM.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shCM.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint"); - m_RenderData.pCurrentMonData->m_shCM.tint = glGetUniformLocation(prog, "tint"); - m_RenderData.pCurrentMonData->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); - } else { - Debug::log( - ERR, - "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports about this!"); + if (m_eglContextVersion == EGL_CONTEXT_GLES_3_2 /* GLES2 and GLES3.0 can't compile the CM shader */) { + prog = createProgram(TEXVERTSRC320, TEXFRAGSRCCM, true, true); + m_bCMSupported = prog > 0; + if (m_bCMSupported) { + m_RenderData.pCurrentMonData->m_shCM.program = prog; + m_RenderData.pCurrentMonData->m_shCM.proj = glGetUniformLocation(prog, "proj"); + m_RenderData.pCurrentMonData->m_shCM.tex = glGetUniformLocation(prog, "tex"); + m_RenderData.pCurrentMonData->m_shCM.texType = glGetUniformLocation(prog, "texType"); + m_RenderData.pCurrentMonData->m_shCM.sourceTF = glGetUniformLocation(prog, "sourceTF"); + m_RenderData.pCurrentMonData->m_shCM.targetTF = glGetUniformLocation(prog, "targetTF"); + m_RenderData.pCurrentMonData->m_shCM.sourcePrimaries = glGetUniformLocation(prog, "sourcePrimaries"); + m_RenderData.pCurrentMonData->m_shCM.targetPrimaries = glGetUniformLocation(prog, "targetPrimaries"); + m_RenderData.pCurrentMonData->m_shCM.maxLuminance = glGetUniformLocation(prog, "maxLuminance"); + m_RenderData.pCurrentMonData->m_shCM.dstMaxLuminance = glGetUniformLocation(prog, "dstMaxLuminance"); + m_RenderData.pCurrentMonData->m_shCM.dstRefLuminance = glGetUniformLocation(prog, "dstRefLuminance"); + m_RenderData.pCurrentMonData->m_shCM.sdrSaturation = glGetUniformLocation(prog, "sdrSaturation"); + m_RenderData.pCurrentMonData->m_shCM.sdrBrightness = glGetUniformLocation(prog, "sdrBrightnessMultiplier"); + m_RenderData.pCurrentMonData->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte"); + m_RenderData.pCurrentMonData->m_shCM.alpha = glGetUniformLocation(prog, "alpha"); + m_RenderData.pCurrentMonData->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord"); + m_RenderData.pCurrentMonData->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); + m_RenderData.pCurrentMonData->m_shCM.posAttrib = glGetAttribLocation(prog, "pos"); + m_RenderData.pCurrentMonData->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); + m_RenderData.pCurrentMonData->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); + m_RenderData.pCurrentMonData->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); + m_RenderData.pCurrentMonData->m_shCM.topLeft = glGetUniformLocation(prog, "topLeft"); + m_RenderData.pCurrentMonData->m_shCM.fullSize = glGetUniformLocation(prog, "fullSize"); + m_RenderData.pCurrentMonData->m_shCM.radius = glGetUniformLocation(prog, "radius"); + m_RenderData.pCurrentMonData->m_shCM.roundingPower = glGetUniformLocation(prog, "roundingPower"); + m_RenderData.pCurrentMonData->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint"); + m_RenderData.pCurrentMonData->m_shCM.tint = glGetUniformLocation(prog, "tint"); + m_RenderData.pCurrentMonData->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); + } else { + Debug::log( + ERR, + "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports about this!"); + } } #endif diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index fa6c575d..34bb7e9c 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -276,6 +276,14 @@ class CHyprOpenGLImpl { } m_sExts; private: + enum eEGLContextVersion : uint8_t { + EGL_CONTEXT_GLES_2_0 = 0, + EGL_CONTEXT_GLES_3_0, + EGL_CONTEXT_GLES_3_2, + }; + + eEGLContextVersion m_eglContextVersion = EGL_CONTEXT_GLES_3_2; + std::list m_lBuffers; std::list m_lTextures; @@ -297,9 +305,9 @@ class CHyprOpenGLImpl { SP m_pMissingAssetTexture, m_pBackgroundTexture, m_pLockDeadTexture, m_pLockDead2Texture, m_pLockTtyTextTexture; // TODO: don't always load lock - void logShaderError(const GLuint&, bool program = false); - GLuint createProgram(const std::string&, const std::string&, bool dynamic = false); - GLuint compileShader(const GLuint&, std::string, bool dynamic = false); + void logShaderError(const GLuint&, bool program = false, bool silent = false); + GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false); + GLuint compileShader(const GLuint&, std::string, bool dynamic = false, bool silent = false); void createBGTextureForMonitor(PHLMONITOR); void initShaders(); void initDRMFormats(); From 0cd04bd666665bfdeafc0f55a93e532cd8978827 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 26 Mar 2025 15:11:19 +0000 Subject: [PATCH 0014/1077] surfacestate: track and apply updated state fixes #9729 --- src/protocols/DRMSyncobj.cpp | 11 +++++--- src/protocols/core/Compositor.cpp | 42 ++++++++++++++++++---------- src/protocols/types/SurfaceState.cpp | 34 ++++++++++++++++++++++ src/protocols/types/SurfaceState.hpp | 18 ++++++++++-- 4 files changed, 85 insertions(+), 20 deletions(-) diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index 5238d1fb..0a4ca439 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -75,20 +75,22 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UPevents.precommit.registerListener([this](std::any d) { - if (!surface->pending.buffer && surface->pending.newBuffer && !surface->pending.texture) { + const bool PENDING_HAS_NEW_BUFFER = surface->pending.updated & SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER; + + if (!surface->pending.buffer && PENDING_HAS_NEW_BUFFER && !surface->pending.texture) { removeAllWaiters(); surface->commitPendingState(surface->pending); return; // null buffer attached. } - if (!surface->pending.buffer && !surface->pending.newBuffer && surface->current.buffer) { + if (!surface->pending.buffer && !PENDING_HAS_NEW_BUFFER && surface->current.buffer) { surface->current.bufferDamage.clear(); surface->current.damage.clear(); surface->commitPendingState(surface->current); return; // no new buffer, but we still have current around and a commit happend, commit current again. } - if (!surface->pending.buffer && !surface->pending.newBuffer && !surface->current.buffer) { + if (!surface->pending.buffer && !PENDING_HAS_NEW_BUFFER && !surface->current.buffer) { surface->commitPendingState(surface->pending); // no pending buffer, no current buffer. probably first commit return; } @@ -109,7 +111,8 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UP(surface->pending)); surface->pending.damage.clear(); surface->pending.bufferDamage.clear(); - surface->pending.newBuffer = false; + surface->pending.updated &= ~SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER; + surface->pending.updated &= ~SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; surface->pending.buffer.reset(); state->buffer->buffer->syncReleaser = state->buffer->release->createSyncRelease(); diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 2dd374a8..974207a4 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -71,8 +71,8 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso resource->setOnDestroy([this](CWlSurface* r) { destroy(); }); resource->setAttach([this](CWlSurface* r, wl_resource* buffer, int32_t x, int32_t y) { - pending.offset = {x, y}; - pending.newBuffer = true; + pending.offset = {x, y}; + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OFFSET; if (!buffer) { pending.buffer.reset(); @@ -119,11 +119,23 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso commitPendingState(pending); }); - resource->setDamage([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { pending.damage.add(CBox{x, y, w, h}); }); - resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { pending.bufferDamage.add(CBox{x, y, w, h}); }); + resource->setDamage([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.damage.add(CBox{x, y, w, h}); + }); + resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.bufferDamage.add(CBox{x, y, w, h}); + }); - resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { pending.scale = scale; }); - resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { pending.transform = (wl_output_transform)tr; }); + resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_SCALE; + pending.scale = scale; + }); + resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_TRANSFORM; + pending.transform = (wl_output_transform)tr; + }); resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { if (!region) { @@ -131,6 +143,8 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso return; } + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_INPUT; + auto RG = CWLRegionResource::fromResource(region); pending.input = RG->region; }); @@ -141,13 +155,18 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso return; } + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OPAQUE; + auto RG = CWLRegionResource::fromResource(region); pending.opaque = RG->region; }); resource->setFrame([this](CWlSurface* r, uint32_t id) { callbacks.emplace_back(makeShared(makeShared(pClient, 1, id))); }); - resource->setOffset([this](CWlSurface* r, int32_t x, int32_t y) { pending.offset = {x, y}; }); + resource->setOffset([this](CWlSurface* r, int32_t x, int32_t y) { + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OFFSET; + pending.offset = {x, y}; + }); } CWLSurfaceResource::~CWLSurfaceResource() { @@ -403,13 +422,8 @@ CBox CWLSurfaceResource::extends() { void CWLSurfaceResource::commitPendingState(SSurfaceState& state) { auto lastTexture = current.texture; - if (state.newBuffer) { - state.newBuffer = false; - current = state; - state.damage.clear(); - state.bufferDamage.clear(); - state.buffer.reset(); - } + current.updateFrom(state); + state.updated = 0; if (current.buffer) { if (current.buffer->buffer->isSynchronous()) diff --git a/src/protocols/types/SurfaceState.cpp b/src/protocols/types/SurfaceState.cpp index 6f9636ff..bb58b9ae 100644 --- a/src/protocols/types/SurfaceState.cpp +++ b/src/protocols/types/SurfaceState.cpp @@ -56,3 +56,37 @@ void SSurfaceState::reset() { offset = {}; size = {}; } + +void SSurfaceState::updateFrom(SSurfaceState& ref) { + updated = ref.updated; + + if (ref.updated & SURFACE_UPDATED_BUFFER) { + *this = ref; + ref.damage.clear(); + ref.bufferDamage.clear(); + ref.buffer.reset(); + } else { + if (ref.updated & SURFACE_UPDATED_DAMAGE) { + damage = ref.damage; + bufferDamage = ref.bufferDamage; + } + + if (ref.updated & SURFACE_UPDATED_INPUT) + input = ref.input; + + if (ref.updated & SURFACE_UPDATED_OPAQUE) + opaque = ref.opaque; + + if (ref.updated & SURFACE_UPDATED_OFFSET) + offset = ref.offset; + + if (ref.updated & SURFACE_UPDATED_SCALE) + scale = ref.scale; + + if (ref.updated & SURFACE_UPDATED_VIEWPORT) + viewport = ref.viewport; + + if (ref.updated & SURFACE_UPDATED_TRANSFORM) + transform = ref.transform; + } +} diff --git a/src/protocols/types/SurfaceState.hpp b/src/protocols/types/SurfaceState.hpp index b5093759..4c995bb0 100644 --- a/src/protocols/types/SurfaceState.hpp +++ b/src/protocols/types/SurfaceState.hpp @@ -7,6 +7,17 @@ class CHLBufferReference; class CTexture; struct SSurfaceState { + enum eUpdatedProperties : uint8_t { + SURFACE_UPDATED_OPAQUE = 1 << 0, + SURFACE_UPDATED_INPUT = 1 << 1, + SURFACE_UPDATED_DAMAGE = 1 << 2, + SURFACE_UPDATED_SCALE = 1 << 3, + SURFACE_UPDATED_BUFFER = 1 << 4, + SURFACE_UPDATED_OFFSET = 1 << 5, + SURFACE_UPDATED_VIEWPORT = 1 << 6, + SURFACE_UPDATED_TRANSFORM = 1 << 7, + }; + CRegion opaque, input = CBox{{}, {INT32_MAX, INT32_MAX}}, damage, bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}} /* initial damage */; wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL; int scale = 1; @@ -20,12 +31,15 @@ struct SSurfaceState { Vector2D destination; CBox source; } viewport; - bool rejected = false; - bool newBuffer = false; + bool rejected = false; + uint8_t updated = 0; // eUpdatedProperties. Stores what the last update changed Vector2D sourceSize(); // Translates damage into bufferDamage, clearing damage and returning the updated bufferDamage CRegion accumulateBufferDamage(); void updateSynchronousTexture(SP lastTexture); void reset(); + // updates this state from a reference state. Mutates the reference state. If a new buffer is committed, + // reference state gets its damage and buffer cleared. + void updateFrom(SSurfaceState& ref); }; From 9ea76428b68fad5a68e9153bcb246547ac2e5d6c Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Wed, 26 Mar 2025 18:22:44 +0100 Subject: [PATCH 0015/1077] internal: fix minor ubsan errors (#9743) * opengl: check if g_pHyprOpengl exist on compositor destruction we can hit a race where a CEGLSync destructs and tries to call eglDestroySyncKHR on a null g_pHyprOpengl. /src/render/OpenGL.cpp:3019:32: runtime error: member access within null pointer of type 'struct CHyprOpenGLImpl' #0 0x555565eed979 in CEGLSync::~CEGLSync() /src/render/OpenGL.cpp:3019 #1 0x555565f6271e in std::default_delete::operator()(CEGLSync*) const /usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/unique_ptr.h:93 * xdgshell: dont apply state on empty states setsize can be called before a state has been added to pending, resulting in calling ApplyState with a empty state. /src/protocols/XDGShell.cpp:323:11: runtime error: null pointer passed as argument 2, which is declared to never be null #0 0x5555659bf67e in CXDGToplevelResource::applyState() /src/protocols/XDGShell.cpp:323 #1 0x5555659bcedc in CXDGToplevelResource::setSize(Hyprutils::Math::Vector2D const&) /src/protocols/XDGShell.cpp: 256 #2 0x555563eed0ef in Events::listener_commitWindow(void*, void*) /src/events/Windows.cpp:841 --- src/protocols/XDGShell.cpp | 7 +++++-- src/render/OpenGL.cpp | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index db274e3c..4170d4dd 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -319,8 +319,11 @@ uint32_t CXDGToplevelResource::setSuspeneded(bool sus) { void CXDGToplevelResource::applyState() { wl_array arr; wl_array_init(&arr); - wl_array_add(&arr, pendingApply.states.size() * sizeof(int)); - memcpy(arr.data, pendingApply.states.data(), pendingApply.states.size() * sizeof(int)); + + if (!pendingApply.states.empty()) { + wl_array_add(&arr, pendingApply.states.size() * sizeof(int)); + memcpy(arr.data, pendingApply.states.data(), pendingApply.states.size() * sizeof(int)); + } resource->sendConfigure(pendingApply.size.x, pendingApply.size.y, &arr); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 2a96f1b7..675955ee 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -3021,7 +3021,7 @@ CEGLSync::~CEGLSync() { if (sync == EGL_NO_SYNC_KHR) return; - if (g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) + if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) Debug::log(ERR, "eglDestroySyncKHR failed"); } From 5380cbcddac97ab037317532bd9efd1f56ba7bf9 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Thu, 27 Mar 2025 13:59:45 +0000 Subject: [PATCH 0016/1077] workspaces: minor fixes to persistence fixes #9741 --- src/Compositor.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index a4acbecc..9aff1bb5 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2627,7 +2627,13 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO const bool SPECIAL = id >= SPECIAL_WORKSPACE_START && id <= -2; - const auto PWORKSPACE = m_vWorkspaces.emplace_back(CWorkspace::create(id, getMonitorFromID(monID), NAME, SPECIAL, isEmpty)); + const auto PMONITOR = getMonitorFromID(monID); + if (!PMONITOR) { + Debug::log(ERR, "BUG THIS: No pMonitor for new workspace in createNewWorkspace"); + return nullptr; + } + + const auto PWORKSPACE = m_vWorkspaces.emplace_back(CWorkspace::create(id, PMONITOR, NAME, SPECIAL, isEmpty)); PWORKSPACE->m_fAlpha->setValueAndWarp(0); @@ -3061,6 +3067,8 @@ bool CCompositor::shouldChangePreferredImageDescription() { } void CCompositor::ensurePersistentWorkspacesPresent(const std::vector& rules, PHLWORKSPACE pWorkspace) { + if (!m_pLastMonitor) + return; for (const auto& rule : rules) { if (!rule.isPersistent) @@ -3076,6 +3084,9 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorID : m_pLastMonitor->ID, wsname, false); } if (PWORKSPACE) From c93140a5f12a25f0a08b162caf31fe68fec62290 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 28 Mar 2025 12:32:07 +0000 Subject: [PATCH 0017/1077] surfacestate: reset buffer bit before applying to current fixes #9759 --- src/protocols/types/SurfaceState.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/protocols/types/SurfaceState.cpp b/src/protocols/types/SurfaceState.cpp index bb58b9ae..b57fef81 100644 --- a/src/protocols/types/SurfaceState.cpp +++ b/src/protocols/types/SurfaceState.cpp @@ -61,6 +61,7 @@ void SSurfaceState::updateFrom(SSurfaceState& ref) { updated = ref.updated; if (ref.updated & SURFACE_UPDATED_BUFFER) { + ref.updated &= ~SURFACE_UPDATED_BUFFER; *this = ref; ref.damage.clear(); ref.bufferDamage.clear(); From 10035a85cc05f4ee572efb13e62aa1a1cfec6c8b Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 28 Mar 2025 11:00:39 -0500 Subject: [PATCH 0018/1077] core: Don't damage the entire surface every frame (#9763) * core: Don't damage the entire surface every frame * core: Damage buffer on dims or transform change * core: Use guards for scale and tr equality checks --- src/protocols/core/Compositor.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 974207a4..cb1aa69a 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -77,6 +77,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso if (!buffer) { pending.buffer.reset(); pending.texture.reset(); + pending.bufferSize = Vector2D{}; } else { auto res = CWLBufferResource::fromResource(buffer); pending.buffer = res && res->buffer ? makeShared(res->buffer.lock(), self.lock()) : nullptr; @@ -85,10 +86,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso pending.bufferSize = res && res->buffer ? res->buffer->size : Vector2D{}; } - Vector2D oldBufSize = current.buffer ? current.bufferSize : Vector2D{}; - Vector2D newBufSize = pending.buffer ? pending.bufferSize : Vector2D{}; - - if (oldBufSize != newBufSize || current.buffer != pending.buffer) + if (pending.bufferSize != current.bufferSize) pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); @@ -129,12 +127,18 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso }); resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_SCALE; - pending.scale = scale; + if (scale == pending.scale) + return; + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_SCALE | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.scale = scale; + pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_TRANSFORM; - pending.transform = (wl_output_transform)tr; + if (tr == pending.transform) + return; + pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_TRANSFORM | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.transform = (wl_output_transform)tr; + pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { From a46576afc32d7fbad6c358cc72ead7f4489d8ea8 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 28 Mar 2025 11:12:25 -0500 Subject: [PATCH 0019/1077] xwayland: Cleanup server startup and FDs (#9769) --- src/xwayland/Server.cpp | 24 +++++------------------- src/xwayland/Server.hpp | 2 -- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp index dd6206d2..b4f05ac6 100644 --- a/src/xwayland/Server.cpp +++ b/src/xwayland/Server.cpp @@ -299,7 +299,7 @@ void CXWaylandServer::runXWayland(CFileDescriptor& notifyFD) { } auto cmd = - std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", displayName, xFDs[0].get(), xFDs[1].get(), notifyFD.take(), xwmFDs[1].get()); + std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", displayName, xFDs[0].get(), xFDs[1].get(), notifyFD.get(), xwmFDs[1].get()); auto waylandSocket = std::format("{}", waylandFDs[1].get()); setenv("WAYLAND_SOCKET", waylandSocket.c_str(), true); @@ -352,7 +352,7 @@ bool CXWaylandServer::start() { return false; } - waylandFDs[0].take(); // does this leak? + waylandFDs[0].take(); // wl_client owns this fd now int notify[2] = {-1, -1}; if (pipe(notify) < 0) { @@ -372,19 +372,13 @@ bool CXWaylandServer::start() { pipeSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, notifyFds[0].get(), WL_EVENT_READABLE, ::xwaylandReady, nullptr); pipeFd = std::move(notifyFds[0]); - serverPID = fork(); + auto serverPID = fork(); if (serverPID < 0) { Debug::log(ERR, "fork failed"); die(); return false; } else if (serverPID == 0) { - pid_t pid = fork(); - if (pid < 0) { - Debug::log(ERR, "second fork failed"); - _exit(1); - } else if (pid == 0) - runXWayland(notifyFds[1]); - + runXWayland(notifyFds[1]); _exit(0); } @@ -403,14 +397,6 @@ int CXWaylandServer::ready(int fd, uint32_t mask) { return 1; } - while (waitpid(serverPID, nullptr, 0) < 0) { - if (errno == EINTR) - continue; - Debug::log(ERR, "Xwayland: waitpid for fork failed"); - g_pXWayland->pServer.reset(); - return 1; - } - // if we don't have readable here, it failed if (!(mask & WL_EVENT_READABLE)) { Debug::log(ERR, "Xwayland: startup failed, not setting up xwm"); @@ -420,8 +406,8 @@ int CXWaylandServer::ready(int fd, uint32_t mask) { Debug::log(LOG, "XWayland is ready"); - close(fd); wl_event_source_remove(pipeSource); + pipeFd.reset(); pipeSource = nullptr; // start the wm diff --git a/src/xwayland/Server.hpp b/src/xwayland/Server.hpp index e79f8beb..553d99ad 100644 --- a/src/xwayland/Server.hpp +++ b/src/xwayland/Server.hpp @@ -34,8 +34,6 @@ class CXWaylandServer { bool tryOpenSockets(); void runXWayland(Hyprutils::OS::CFileDescriptor& notifyFD); - pid_t serverPID = 0; - std::string displayName; int display = -1; std::array xFDs; From 7374a023eff964817c9e5fbe75a661540516f798 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Sat, 29 Mar 2025 03:19:35 +0300 Subject: [PATCH 0020/1077] renderer/opengl: Extract shaders from source (#9600) --------- Co-authored-by: Mihai Fufezan --- .gitignore | 2 + CMakeLists.txt | 6 +- meson.build | 4 +- scripts/generateShaderIncludes.sh | 24 + src/debug/HyprCtl.cpp | 9 + src/render/OpenGL.cpp | 864 +++++++++++------- src/render/OpenGL.hpp | 46 +- src/render/Shader.cpp | 12 - src/render/Shader.hpp | 3 +- src/render/Shaders.hpp | 5 - src/render/shaders/SharedValues.hpp | 3 - src/render/shaders/Textures.hpp | 541 ----------- src/render/shaders/glsl/CM.frag | 55 ++ src/render/shaders/{CM.frag => glsl/CM.glsl} | 120 +-- src/render/shaders/glsl/blur1.frag | 141 +++ src/render/shaders/glsl/blur2.frag | 23 + src/render/shaders/glsl/blurfinish.frag | 32 + .../shaders/glsl/blurfinish_legacy.frag | 28 + src/render/shaders/glsl/blurprepare.frag | 58 ++ .../shaders/glsl/blurprepare_legacy.frag | 29 + src/render/shaders/glsl/border.frag | 183 ++++ .../{Border.hpp => glsl/border_legacy.frag} | 21 +- src/render/shaders/glsl/ext.frag | 35 + src/render/shaders/glsl/glitch.frag | 64 ++ src/render/shaders/glsl/passthru.frag | 7 + src/render/shaders/glsl/quad.frag | 14 + src/render/shaders/glsl/rgba.frag | 36 + src/render/shaders/glsl/rgbamatte.frag | 8 + src/render/shaders/glsl/rgbx.frag | 33 + src/render/shaders/glsl/rounding.glsl | 29 + src/render/shaders/glsl/shadow.frag | 100 ++ .../{Shadow.hpp => glsl/shadow_legacy.frag} | 8 +- src/render/shaders/glsl/tex.vert | 15 + src/render/shaders/glsl/tex300.vert | 17 + src/render/shaders/glsl/tex320.vert | 17 + 35 files changed, 1533 insertions(+), 1059 deletions(-) create mode 100755 scripts/generateShaderIncludes.sh delete mode 100644 src/render/Shaders.hpp delete mode 100644 src/render/shaders/SharedValues.hpp delete mode 100644 src/render/shaders/Textures.hpp create mode 100644 src/render/shaders/glsl/CM.frag rename src/render/shaders/{CM.frag => glsl/CM.glsl} (79%) create mode 100644 src/render/shaders/glsl/blur1.frag create mode 100644 src/render/shaders/glsl/blur2.frag create mode 100644 src/render/shaders/glsl/blurfinish.frag create mode 100644 src/render/shaders/glsl/blurfinish_legacy.frag create mode 100644 src/render/shaders/glsl/blurprepare.frag create mode 100644 src/render/shaders/glsl/blurprepare_legacy.frag create mode 100644 src/render/shaders/glsl/border.frag rename src/render/shaders/{Border.hpp => glsl/border_legacy.frag} (92%) create mode 100644 src/render/shaders/glsl/ext.frag create mode 100644 src/render/shaders/glsl/glitch.frag create mode 100644 src/render/shaders/glsl/passthru.frag create mode 100644 src/render/shaders/glsl/quad.frag create mode 100644 src/render/shaders/glsl/rgba.frag create mode 100644 src/render/shaders/glsl/rgbamatte.frag create mode 100644 src/render/shaders/glsl/rgbx.frag create mode 100644 src/render/shaders/glsl/rounding.glsl create mode 100644 src/render/shaders/glsl/shadow.frag rename src/render/shaders/{Shadow.hpp => glsl/shadow_legacy.frag} (96%) create mode 100644 src/render/shaders/glsl/tex.vert create mode 100644 src/render/shaders/glsl/tex300.vert create mode 100644 src/render/shaders/glsl/tex320.vert diff --git a/.gitignore b/.gitignore index a7934790..4ced1678 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,8 @@ protocols/*.c* protocols/*.h* .ccls-cache *.so +src/render/shaders/*.inc +src/render/shaders/Shaders.hpp hyprctl/hyprctl diff --git a/CMakeLists.txt b/CMakeLists.txt index c4ad4ca0..b4c36158 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,9 @@ message(STATUS "Gathering git info") # Get git info hash and branch execute_process(COMMAND ./scripts/generateVersion.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) +# Make shader files includable +execute_process(COMMAND ./scripts/generateShaderIncludes.sh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) find_package(PkgConfig REQUIRED) @@ -445,4 +448,5 @@ install( DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hyprland FILES_MATCHING PATTERN "*.h*" - PATTERN "*.frag") + PATTERN "*.inc" + ) diff --git a/meson.build b/meson.build index d9635a27..a40975aa 100644 --- a/meson.build +++ b/meson.build @@ -87,9 +87,11 @@ endif # Generate hyprland version and populate version.h run_command('sh', '-c', 'scripts/generateVersion.sh', check: true) +# Make shader files includable +run_command('sh', '-c', 'scripts/generateShaderIncludes.sh', check: true) # Install headers -globber = run_command('find', 'src', '-name', '*.h*', '-o', '-name', '*.frag', check: true) +globber = run_command('find', 'src', '-name', '*.h*', '-o', '-name', '*.inc', check: true) headers = globber.stdout().strip().split('\n') foreach file : headers install_headers(file, subdir: 'hyprland', preserve_path: true) diff --git a/scripts/generateShaderIncludes.sh b/scripts/generateShaderIncludes.sh new file mode 100755 index 00000000..20c78e9d --- /dev/null +++ b/scripts/generateShaderIncludes.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +SHADERS_SRC="./src/render/shaders/glsl" + +echo "-- Generating shader includes" + +if [ ! -d ./src/render/shaders ]; then + mkdir ./src/render/shaders +fi + +echo '#pragma once' > ./src/render/shaders/Shaders.hpp +echo '#include ' >> ./src/render/shaders/Shaders.hpp +echo 'static const std::map SHADERS = {' >> ./src/render/shaders/Shaders.hpp + +for filename in `ls ${SHADERS_SRC}`; do + echo "-- ${filename}" + + { echo 'R"#('; cat ${SHADERS_SRC}/${filename}; echo ')#"'; } > ./src/render/shaders/${filename}.inc + echo "{\"${filename}\"," >> ./src/render/shaders/Shaders.hpp + echo "#include \"./${filename}.inc\"" >> ./src/render/shaders/Shaders.hpp + echo "}," >> ./src/render/shaders/Shaders.hpp +done + +echo '};' >> ./src/render/shaders/Shaders.hpp diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 3f955f6c..23385be8 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -51,6 +51,7 @@ using namespace Hyprutils::OS; #include "../managers/AnimationManager.hpp" #include "../debug/HyprNotificationOverlay.hpp" #include "../render/Renderer.hpp" +#include "../render/OpenGL.hpp" static void trimTrailingComma(std::string& str) { if (!str.empty() && str.back() == ',') @@ -1643,6 +1644,13 @@ static std::string submapRequest(eHyprCtlOutputFormat format, std::string reques return format == FORMAT_JSON ? std::format("{{\"{}\"}}\n", escapeJSONStrings(submap)) : (submap + "\n"); } +static std::string reloadShaders(eHyprCtlOutputFormat format, std::string request) { + if (g_pHyprOpenGL->initShaders()) + return format == FORMAT_JSON ? "{\"ok\": true}" : "ok"; + else + return format == FORMAT_JSON ? "{\"ok\": false}" : "error"; +} + CHyprCtl::CHyprCtl() { registerCommand(SHyprCtlCommand{"workspaces", true, workspacesRequest}); registerCommand(SHyprCtlCommand{"workspacerules", true, workspaceRulesRequest}); @@ -1665,6 +1673,7 @@ CHyprCtl::CHyprCtl() { registerCommand(SHyprCtlCommand{"locked", true, getIsLocked}); registerCommand(SHyprCtlCommand{"descriptions", true, getDescriptions}); registerCommand(SHyprCtlCommand{"submap", true, submapRequest}); + registerCommand(SHyprCtlCommand{.name = "reloadshaders", .exact = true, .fn = reloadShaders}); registerCommand(SHyprCtlCommand{"monitors", false, monitorsRequest}); registerCommand(SHyprCtlCommand{"reload", false, reloadRequest}); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 675955ee..2c455ba0 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1,6 +1,7 @@ +#include +#include #include #include -#include "Shaders.hpp" #include "OpenGL.hpp" #include "Renderer.hpp" #include "../Compositor.hpp" @@ -10,16 +11,24 @@ #include "../protocols/LayerShell.hpp" #include "../protocols/core/Compositor.hpp" #include "../protocols/ColorManagement.hpp" +#include "../protocols/types/ColorManagement.hpp" #include "../managers/HookSystemManager.hpp" #include "../managers/input/InputManager.hpp" +#include "../helpers/fs/FsUtils.hpp" +#include "debug/HyprNotificationOverlay.hpp" +#include "hyprerror/HyprError.hpp" #include "pass/TexPassElement.hpp" #include "pass/RectPassElement.hpp" #include "pass/PreBlurElement.hpp" #include "pass/ClearPassElement.hpp" +#include "render/Shader.hpp" +#include #include #include #include #include +#include "./shaders/Shaders.hpp" + using namespace Hyprutils::OS; using namespace NColorManagement; @@ -688,7 +697,7 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; - if (!m_RenderData.pCurrentMonData->m_bShadersInitialized) + if (!m_bShadersInitialized) initShaders(); m_RenderData.damage.set(damage); @@ -737,7 +746,7 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; - if (!m_RenderData.pCurrentMonData->m_bShadersInitialized) + if (!m_bShadersInitialized) initShaders(); // ensure a framebuffer for the monitor exists @@ -859,217 +868,326 @@ void CHyprOpenGLImpl::setDamage(const CRegion& damage_, std::optional f m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); } -void CHyprOpenGLImpl::initShaders() { - GLuint prog = createProgram(QUADVERTSRC, QUADFRAGSRC); - m_RenderData.pCurrentMonData->m_shQUAD.program = prog; - m_RenderData.pCurrentMonData->m_shQUAD.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shQUAD.color = glGetUniformLocation(prog, "color"); - m_RenderData.pCurrentMonData->m_shQUAD.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shQUAD.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shQUAD.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shQUAD.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shQUAD.roundingPower = glGetUniformLocation(prog, "roundingPower"); - -#ifndef GLES2 - if (m_eglContextVersion == EGL_CONTEXT_GLES_3_2 /* GLES2 and GLES3.0 can't compile the CM shader */) { - prog = createProgram(TEXVERTSRC320, TEXFRAGSRCCM, true, true); - m_bCMSupported = prog > 0; - if (m_bCMSupported) { - m_RenderData.pCurrentMonData->m_shCM.program = prog; - m_RenderData.pCurrentMonData->m_shCM.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shCM.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shCM.texType = glGetUniformLocation(prog, "texType"); - m_RenderData.pCurrentMonData->m_shCM.sourceTF = glGetUniformLocation(prog, "sourceTF"); - m_RenderData.pCurrentMonData->m_shCM.targetTF = glGetUniformLocation(prog, "targetTF"); - m_RenderData.pCurrentMonData->m_shCM.sourcePrimaries = glGetUniformLocation(prog, "sourcePrimaries"); - m_RenderData.pCurrentMonData->m_shCM.targetPrimaries = glGetUniformLocation(prog, "targetPrimaries"); - m_RenderData.pCurrentMonData->m_shCM.maxLuminance = glGetUniformLocation(prog, "maxLuminance"); - m_RenderData.pCurrentMonData->m_shCM.dstMaxLuminance = glGetUniformLocation(prog, "dstMaxLuminance"); - m_RenderData.pCurrentMonData->m_shCM.dstRefLuminance = glGetUniformLocation(prog, "dstRefLuminance"); - m_RenderData.pCurrentMonData->m_shCM.sdrSaturation = glGetUniformLocation(prog, "sdrSaturation"); - m_RenderData.pCurrentMonData->m_shCM.sdrBrightness = glGetUniformLocation(prog, "sdrBrightnessMultiplier"); - m_RenderData.pCurrentMonData->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte"); - m_RenderData.pCurrentMonData->m_shCM.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); - m_RenderData.pCurrentMonData->m_shCM.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); - m_RenderData.pCurrentMonData->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); - m_RenderData.pCurrentMonData->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); - m_RenderData.pCurrentMonData->m_shCM.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shCM.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shCM.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shCM.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint"); - m_RenderData.pCurrentMonData->m_shCM.tint = glGetUniformLocation(prog, "tint"); - m_RenderData.pCurrentMonData->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); - } else { - Debug::log( - ERR, - "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports about this!"); - } +// TODO notify user if bundled shader is newer than ~/.config override +static std::string loadShader(const std::string& filename) { + const auto home = Hyprutils::Path::getHome(); + if (home.has_value()) { + const auto src = NFsUtils::readFileAsString(home.value() + "/hypr/shaders/" + filename); + if (src.has_value()) + return src.value(); } + for (auto& e : ASSET_PATHS) { + const auto src = NFsUtils::readFileAsString(std::string{e} + "/hypr/shaders/" + filename); + if (src.has_value()) + return src.value(); + } + if (SHADERS.contains(filename)) + return SHADERS.at(filename); + throw std::runtime_error(std::format("Couldn't load shader {}", filename)); +} + +static void loadShaderInclude(const std::string& filename, std::map& includes) { + includes.insert({filename, loadShader(filename)}); +} + +static void processShaderIncludes(std::string& source, const std::map& includes) { + for (auto it = includes.begin(); it != includes.end(); ++it) { + Hyprutils::String::replaceInString(source, "#include \"" + it->first + "\"", it->second); + } +} + +static std::string processShader(const std::string& filename, const std::map& includes) { + auto source = loadShader(filename); + processShaderIncludes(source, includes); + return source; +} + +// shader has #include "CM.glsl" +static void getCMShaderUniforms(CShader& shader) { + shader.skipCM = glGetUniformLocation(shader.program, "skipCM"); + shader.sourceTF = glGetUniformLocation(shader.program, "sourceTF"); + shader.targetTF = glGetUniformLocation(shader.program, "targetTF"); + shader.sourcePrimaries = glGetUniformLocation(shader.program, "sourcePrimaries"); + shader.targetPrimaries = glGetUniformLocation(shader.program, "targetPrimaries"); + shader.maxLuminance = glGetUniformLocation(shader.program, "maxLuminance"); + shader.dstMaxLuminance = glGetUniformLocation(shader.program, "dstMaxLuminance"); + shader.dstRefLuminance = glGetUniformLocation(shader.program, "dstRefLuminance"); + shader.sdrSaturation = glGetUniformLocation(shader.program, "sdrSaturation"); + shader.sdrBrightness = glGetUniformLocation(shader.program, "sdrBrightnessMultiplier"); +} + +// shader has #include "rounding.glsl" +static void getRoundingShaderUniforms(CShader& shader) { + shader.topLeft = glGetUniformLocation(shader.program, "topLeft"); + shader.fullSize = glGetUniformLocation(shader.program, "fullSize"); + shader.radius = glGetUniformLocation(shader.program, "radius"); + shader.roundingPower = glGetUniformLocation(shader.program, "roundingPower"); +} + +bool CHyprOpenGLImpl::initShaders() { + auto shaders = makeShared(); + const bool isDynamic = m_bShadersInitialized; + static const auto PCM = CConfigValue("render:cm_enabled"); + + try { + std::map includes; + loadShaderInclude("rounding.glsl", includes); + loadShaderInclude("CM.glsl", includes); + + shaders->TEXVERTSRC = processShader("tex.vert", includes); + shaders->TEXVERTSRC300 = processShader("tex300.vert", includes); + shaders->TEXVERTSRC320 = processShader("tex320.vert", includes); + + GLuint prog; +#ifdef GLES2 + m_bCMSupported = false; +#else + if (!*PCM) + m_bCMSupported = false; + else { + const auto TEXFRAGSRCCM = processShader("CM.frag", includes); + + prog = createProgram(shaders->TEXVERTSRC300, TEXFRAGSRCCM, true, true); + if (m_bShadersInitialized && m_bCMSupported && prog == 0) + g_pHyprNotificationOverlay->addNotification("CM shader reload failed, falling back to rgba/rgbx", CHyprColor{}, 15000, ICON_WARNING); + + m_bCMSupported = prog > 0; + if (m_bCMSupported) { + shaders->m_shCM.program = prog; + getCMShaderUniforms(shaders->m_shCM); + getRoundingShaderUniforms(shaders->m_shCM); + shaders->m_shCM.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shCM.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shCM.texType = glGetUniformLocation(prog, "texType"); + shaders->m_shCM.alphaMatte = glGetUniformLocation(prog, "texMatte"); + shaders->m_shCM.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shCM.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shCM.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); + shaders->m_shCM.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shCM.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); + shaders->m_shCM.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); + shaders->m_shCM.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); + shaders->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint"); + shaders->m_shCM.tint = glGetUniformLocation(prog, "tint"); + shaders->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); + } else + Debug::log(ERR, + "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports " + "about this!"); + } #endif - prog = createProgram(TEXVERTSRC, TEXFRAGSRCRGBA); - m_RenderData.pCurrentMonData->m_shRGBA.program = prog; - m_RenderData.pCurrentMonData->m_shRGBA.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shRGBA.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shRGBA.alphaMatte = glGetUniformLocation(prog, "texMatte"); - m_RenderData.pCurrentMonData->m_shRGBA.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shRGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shRGBA.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); - m_RenderData.pCurrentMonData->m_shRGBA.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shRGBA.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); - m_RenderData.pCurrentMonData->m_shRGBA.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); - m_RenderData.pCurrentMonData->m_shRGBA.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); - m_RenderData.pCurrentMonData->m_shRGBA.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shRGBA.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shRGBA.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shRGBA.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shRGBA.applyTint = glGetUniformLocation(prog, "applyTint"); - m_RenderData.pCurrentMonData->m_shRGBA.tint = glGetUniformLocation(prog, "tint"); - m_RenderData.pCurrentMonData->m_shRGBA.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); + const auto FRAGSHADOW = processShader(m_bCMSupported ? "shadow.frag" : "shadow_legacy.frag", includes); + const auto FRAGBORDER1 = processShader(m_bCMSupported ? "border.frag" : "border_legacy.frag", includes); + const auto FRAGBLURPREPARE = processShader(m_bCMSupported ? "blurprepare.frag" : "blurprepare_legacy.frag", includes); + const auto FRAGBLURFINISH = processShader(m_bCMSupported ? "blurfinish.frag" : "blurfinish_legacy.frag", includes); + const auto QUADFRAGSRC = processShader("quad.frag", includes); + const auto TEXFRAGSRCRGBA = processShader("rgba.frag", includes); + const auto TEXFRAGSRCRGBAPASSTHRU = processShader("passthru.frag", includes); + const auto TEXFRAGSRCRGBAMATTE = processShader("rgbamatte.frag", includes); + const auto FRAGGLITCH = processShader("glitch.frag", includes); + const auto TEXFRAGSRCRGBX = processShader("rgbx.frag", includes); + const auto TEXFRAGSRCEXT = processShader("ext.frag", includes); + const auto FRAGBLUR1 = processShader("blur1.frag", includes); + const auto FRAGBLUR2 = processShader("blur2.frag", includes); - prog = createProgram(TEXVERTSRC, TEXFRAGSRCRGBAPASSTHRU); - m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.program = prog; - m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.posAttrib = glGetAttribLocation(prog, "pos"); + prog = createProgram(shaders->TEXVERTSRC, QUADFRAGSRC, isDynamic); + if (!prog) + return false; + shaders->m_shQUAD.program = prog; + getRoundingShaderUniforms(shaders->m_shQUAD); + shaders->m_shQUAD.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shQUAD.color = glGetUniformLocation(prog, "color"); + shaders->m_shQUAD.posAttrib = glGetAttribLocation(prog, "pos"); - prog = createProgram(TEXVERTSRC, TEXFRAGSRCRGBAMATTE); - m_RenderData.pCurrentMonData->m_shMATTE.program = prog; - m_RenderData.pCurrentMonData->m_shMATTE.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shMATTE.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shMATTE.alphaMatte = glGetUniformLocation(prog, "texMatte"); - m_RenderData.pCurrentMonData->m_shMATTE.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shMATTE.posAttrib = glGetAttribLocation(prog, "pos"); + prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBA, isDynamic); + if (!prog) + return false; + shaders->m_shRGBA.program = prog; + getRoundingShaderUniforms(shaders->m_shRGBA); + shaders->m_shRGBA.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shRGBA.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shRGBA.alphaMatte = glGetUniformLocation(prog, "texMatte"); + shaders->m_shRGBA.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shRGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shRGBA.matteTexAttrib = glGetAttribLocation(prog, "texcoordMatte"); + shaders->m_shRGBA.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shRGBA.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); + shaders->m_shRGBA.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); + shaders->m_shRGBA.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); + shaders->m_shRGBA.applyTint = glGetUniformLocation(prog, "applyTint"); + shaders->m_shRGBA.tint = glGetUniformLocation(prog, "tint"); + shaders->m_shRGBA.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); - prog = createProgram(TEXVERTSRC, FRAGGLITCH); - m_RenderData.pCurrentMonData->m_shGLITCH.program = prog; - m_RenderData.pCurrentMonData->m_shGLITCH.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shGLITCH.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shGLITCH.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shGLITCH.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shGLITCH.distort = glGetUniformLocation(prog, "distort"); - m_RenderData.pCurrentMonData->m_shGLITCH.time = glGetUniformLocation(prog, "time"); - m_RenderData.pCurrentMonData->m_shGLITCH.fullSize = glGetUniformLocation(prog, "screenSize"); + prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBAPASSTHRU, isDynamic); + if (!prog) + return false; + shaders->m_shPASSTHRURGBA.program = prog; + shaders->m_shPASSTHRURGBA.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shPASSTHRURGBA.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shPASSTHRURGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shPASSTHRURGBA.posAttrib = glGetAttribLocation(prog, "pos"); - prog = createProgram(TEXVERTSRC, TEXFRAGSRCRGBX); - m_RenderData.pCurrentMonData->m_shRGBX.program = prog; - m_RenderData.pCurrentMonData->m_shRGBX.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shRGBX.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shRGBX.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shRGBX.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shRGBX.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shRGBX.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); - m_RenderData.pCurrentMonData->m_shRGBX.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); - m_RenderData.pCurrentMonData->m_shRGBX.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); - m_RenderData.pCurrentMonData->m_shRGBX.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shRGBX.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shRGBX.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shRGBX.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shRGBX.applyTint = glGetUniformLocation(prog, "applyTint"); - m_RenderData.pCurrentMonData->m_shRGBX.tint = glGetUniformLocation(prog, "tint"); + prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBAMATTE, isDynamic); + if (!prog) + return false; + shaders->m_shMATTE.program = prog; + shaders->m_shMATTE.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shMATTE.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shMATTE.alphaMatte = glGetUniformLocation(prog, "texMatte"); + shaders->m_shMATTE.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shMATTE.posAttrib = glGetAttribLocation(prog, "pos"); - prog = createProgram(TEXVERTSRC, TEXFRAGSRCEXT); - m_RenderData.pCurrentMonData->m_shEXT.program = prog; - m_RenderData.pCurrentMonData->m_shEXT.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shEXT.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shEXT.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shEXT.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shEXT.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shEXT.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); - m_RenderData.pCurrentMonData->m_shEXT.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); - m_RenderData.pCurrentMonData->m_shEXT.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); - m_RenderData.pCurrentMonData->m_shEXT.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shEXT.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shEXT.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shEXT.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shEXT.applyTint = glGetUniformLocation(prog, "applyTint"); - m_RenderData.pCurrentMonData->m_shEXT.tint = glGetUniformLocation(prog, "tint"); + prog = createProgram(shaders->TEXVERTSRC, FRAGGLITCH, isDynamic); + if (!prog) + return false; + shaders->m_shGLITCH.program = prog; + shaders->m_shGLITCH.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shGLITCH.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shGLITCH.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shGLITCH.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shGLITCH.distort = glGetUniformLocation(prog, "distort"); + shaders->m_shGLITCH.time = glGetUniformLocation(prog, "time"); + shaders->m_shGLITCH.fullSize = glGetUniformLocation(prog, "screenSize"); - prog = createProgram(TEXVERTSRC, FRAGBLUR1); - m_RenderData.pCurrentMonData->m_shBLUR1.program = prog; - m_RenderData.pCurrentMonData->m_shBLUR1.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shBLUR1.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shBLUR1.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shBLUR1.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shBLUR1.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shBLUR1.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shBLUR1.halfpixel = glGetUniformLocation(prog, "halfpixel"); - m_RenderData.pCurrentMonData->m_shBLUR1.passes = glGetUniformLocation(prog, "passes"); - m_RenderData.pCurrentMonData->m_shBLUR1.vibrancy = glGetUniformLocation(prog, "vibrancy"); - m_RenderData.pCurrentMonData->m_shBLUR1.vibrancy_darkness = glGetUniformLocation(prog, "vibrancy_darkness"); + prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBX, isDynamic); + if (!prog) + return false; + shaders->m_shRGBX.program = prog; + getRoundingShaderUniforms(shaders->m_shRGBX); + shaders->m_shRGBX.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shRGBX.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shRGBX.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shRGBX.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shRGBX.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shRGBX.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); + shaders->m_shRGBX.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); + shaders->m_shRGBX.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); + shaders->m_shRGBX.applyTint = glGetUniformLocation(prog, "applyTint"); + shaders->m_shRGBX.tint = glGetUniformLocation(prog, "tint"); - prog = createProgram(TEXVERTSRC, FRAGBLUR2); - m_RenderData.pCurrentMonData->m_shBLUR2.program = prog; - m_RenderData.pCurrentMonData->m_shBLUR2.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shBLUR2.alpha = glGetUniformLocation(prog, "alpha"); - m_RenderData.pCurrentMonData->m_shBLUR2.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shBLUR2.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shBLUR2.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shBLUR2.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shBLUR2.halfpixel = glGetUniformLocation(prog, "halfpixel"); + prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCEXT, isDynamic); + if (!prog) + return false; + shaders->m_shEXT.program = prog; + getRoundingShaderUniforms(shaders->m_shEXT); + shaders->m_shEXT.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shEXT.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shEXT.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shEXT.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shEXT.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shEXT.discardOpaque = glGetUniformLocation(prog, "discardOpaque"); + shaders->m_shEXT.discardAlpha = glGetUniformLocation(prog, "discardAlpha"); + shaders->m_shEXT.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); + shaders->m_shEXT.applyTint = glGetUniformLocation(prog, "applyTint"); + shaders->m_shEXT.tint = glGetUniformLocation(prog, "tint"); - prog = createProgram(TEXVERTSRC, FRAGBLURPREPARE); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.program = prog; - m_RenderData.pCurrentMonData->m_shBLURPREPARE.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.contrast = glGetUniformLocation(prog, "contrast"); - m_RenderData.pCurrentMonData->m_shBLURPREPARE.brightness = glGetUniformLocation(prog, "brightness"); + prog = createProgram(shaders->TEXVERTSRC, FRAGBLUR1, isDynamic); + if (!prog) + return false; + shaders->m_shBLUR1.program = prog; + shaders->m_shBLUR1.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shBLUR1.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shBLUR1.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shBLUR1.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shBLUR1.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shBLUR1.radius = glGetUniformLocation(prog, "radius"); + shaders->m_shBLUR1.halfpixel = glGetUniformLocation(prog, "halfpixel"); + shaders->m_shBLUR1.passes = glGetUniformLocation(prog, "passes"); + shaders->m_shBLUR1.vibrancy = glGetUniformLocation(prog, "vibrancy"); + shaders->m_shBLUR1.vibrancy_darkness = glGetUniformLocation(prog, "vibrancy_darkness"); - prog = createProgram(TEXVERTSRC, FRAGBLURFINISH); - m_RenderData.pCurrentMonData->m_shBLURFINISH.program = prog; - m_RenderData.pCurrentMonData->m_shBLURFINISH.tex = glGetUniformLocation(prog, "tex"); - m_RenderData.pCurrentMonData->m_shBLURFINISH.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shBLURFINISH.brightness = glGetUniformLocation(prog, "brightness"); - m_RenderData.pCurrentMonData->m_shBLURFINISH.noise = glGetUniformLocation(prog, "noise"); + prog = createProgram(shaders->TEXVERTSRC, FRAGBLUR2, isDynamic); + if (!prog) + return false; + shaders->m_shBLUR2.program = prog; + shaders->m_shBLUR2.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shBLUR2.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shBLUR2.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shBLUR2.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shBLUR2.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shBLUR2.radius = glGetUniformLocation(prog, "radius"); + shaders->m_shBLUR2.halfpixel = glGetUniformLocation(prog, "halfpixel"); - prog = createProgram(QUADVERTSRC, FRAGSHADOW); - m_RenderData.pCurrentMonData->m_shSHADOW.program = prog; - m_RenderData.pCurrentMonData->m_shSHADOW.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shSHADOW.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shSHADOW.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shSHADOW.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shSHADOW.bottomRight = glGetUniformLocation(prog, "bottomRight"); - m_RenderData.pCurrentMonData->m_shSHADOW.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shSHADOW.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shSHADOW.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shSHADOW.range = glGetUniformLocation(prog, "range"); - m_RenderData.pCurrentMonData->m_shSHADOW.shadowPower = glGetUniformLocation(prog, "shadowPower"); - m_RenderData.pCurrentMonData->m_shSHADOW.color = glGetUniformLocation(prog, "color"); + prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURPREPARE, isDynamic); + if (!prog) + return false; + shaders->m_shBLURPREPARE.program = prog; + if (m_bCMSupported) + getCMShaderUniforms(shaders->m_shBLURPREPARE); - prog = createProgram(QUADVERTSRC, FRAGBORDER1); - m_RenderData.pCurrentMonData->m_shBORDER1.program = prog; - m_RenderData.pCurrentMonData->m_shBORDER1.proj = glGetUniformLocation(prog, "proj"); - m_RenderData.pCurrentMonData->m_shBORDER1.thick = glGetUniformLocation(prog, "thick"); - m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib = glGetAttribLocation(prog, "pos"); - m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib = glGetAttribLocation(prog, "texcoord"); - m_RenderData.pCurrentMonData->m_shBORDER1.topLeft = glGetUniformLocation(prog, "topLeft"); - m_RenderData.pCurrentMonData->m_shBORDER1.bottomRight = glGetUniformLocation(prog, "bottomRight"); - m_RenderData.pCurrentMonData->m_shBORDER1.fullSize = glGetUniformLocation(prog, "fullSize"); - m_RenderData.pCurrentMonData->m_shBORDER1.fullSizeUntransformed = glGetUniformLocation(prog, "fullSizeUntransformed"); - m_RenderData.pCurrentMonData->m_shBORDER1.radius = glGetUniformLocation(prog, "radius"); - m_RenderData.pCurrentMonData->m_shBORDER1.radiusOuter = glGetUniformLocation(prog, "radiusOuter"); - m_RenderData.pCurrentMonData->m_shBORDER1.roundingPower = glGetUniformLocation(prog, "roundingPower"); - m_RenderData.pCurrentMonData->m_shBORDER1.gradient = glGetUniformLocation(prog, "gradient"); - m_RenderData.pCurrentMonData->m_shBORDER1.gradient2 = glGetUniformLocation(prog, "gradient2"); - m_RenderData.pCurrentMonData->m_shBORDER1.gradientLength = glGetUniformLocation(prog, "gradientLength"); - m_RenderData.pCurrentMonData->m_shBORDER1.gradient2Length = glGetUniformLocation(prog, "gradient2Length"); - m_RenderData.pCurrentMonData->m_shBORDER1.angle = glGetUniformLocation(prog, "angle"); - m_RenderData.pCurrentMonData->m_shBORDER1.angle2 = glGetUniformLocation(prog, "angle2"); - m_RenderData.pCurrentMonData->m_shBORDER1.gradientLerp = glGetUniformLocation(prog, "gradientLerp"); - m_RenderData.pCurrentMonData->m_shBORDER1.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shBLURPREPARE.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shBLURPREPARE.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shBLURPREPARE.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shBLURPREPARE.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shBLURPREPARE.contrast = glGetUniformLocation(prog, "contrast"); + shaders->m_shBLURPREPARE.brightness = glGetUniformLocation(prog, "brightness"); - m_RenderData.pCurrentMonData->m_bShadersInitialized = true; + prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURFINISH, isDynamic); + if (!prog) + return false; + shaders->m_shBLURFINISH.program = prog; + // getCMShaderUniforms(shaders->m_shBLURFINISH); + + shaders->m_shBLURFINISH.tex = glGetUniformLocation(prog, "tex"); + shaders->m_shBLURFINISH.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shBLURFINISH.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shBLURFINISH.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shBLURFINISH.brightness = glGetUniformLocation(prog, "brightness"); + shaders->m_shBLURFINISH.noise = glGetUniformLocation(prog, "noise"); + + prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGSHADOW, isDynamic); + if (!prog) + return false; + if (m_bCMSupported) + shaders->m_shSHADOW.program = prog; + getCMShaderUniforms(shaders->m_shSHADOW); + getRoundingShaderUniforms(shaders->m_shSHADOW); + shaders->m_shSHADOW.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shSHADOW.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shSHADOW.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shSHADOW.bottomRight = glGetUniformLocation(prog, "bottomRight"); + shaders->m_shSHADOW.range = glGetUniformLocation(prog, "range"); + shaders->m_shSHADOW.shadowPower = glGetUniformLocation(prog, "shadowPower"); + shaders->m_shSHADOW.color = glGetUniformLocation(prog, "color"); + + prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBORDER1, isDynamic); + if (!prog) + return false; + shaders->m_shBORDER1.program = prog; + if (m_bCMSupported) + getCMShaderUniforms(shaders->m_shBORDER1); + + getRoundingShaderUniforms(shaders->m_shBORDER1); + shaders->m_shBORDER1.proj = glGetUniformLocation(prog, "proj"); + shaders->m_shBORDER1.thick = glGetUniformLocation(prog, "thick"); + shaders->m_shBORDER1.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shBORDER1.texAttrib = glGetAttribLocation(prog, "texcoord"); + shaders->m_shBORDER1.bottomRight = glGetUniformLocation(prog, "bottomRight"); + shaders->m_shBORDER1.fullSizeUntransformed = glGetUniformLocation(prog, "fullSizeUntransformed"); + shaders->m_shBORDER1.radiusOuter = glGetUniformLocation(prog, "radiusOuter"); + shaders->m_shBORDER1.gradient = glGetUniformLocation(prog, "gradient"); + shaders->m_shBORDER1.gradient2 = glGetUniformLocation(prog, "gradient2"); + shaders->m_shBORDER1.gradientLength = glGetUniformLocation(prog, "gradientLength"); + shaders->m_shBORDER1.gradient2Length = glGetUniformLocation(prog, "gradient2Length"); + shaders->m_shBORDER1.angle = glGetUniformLocation(prog, "angle"); + shaders->m_shBORDER1.angle2 = glGetUniformLocation(prog, "angle2"); + shaders->m_shBORDER1.gradientLerp = glGetUniformLocation(prog, "gradientLerp"); + shaders->m_shBORDER1.alpha = glGetUniformLocation(prog, "alpha"); + } catch (const std::exception& e) { + if (!m_bShadersInitialized) + throw e; + + Debug::log(ERR, "Shaders update failed: {}", e.what()); + return false; + } + + m_shaders = shaders; + m_bShadersInitialized = true; Debug::log(LOG, "Shaders initialized successfully."); + g_pHyprError->destroy(); + return true; } void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { @@ -1090,7 +1208,15 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { std::string fragmentShader((std::istreambuf_iterator(infile)), (std::istreambuf_iterator())); - m_sFinalScreenShader.program = createProgram(fragmentShader.starts_with("#version 320 es") ? TEXVERTSRC320 : TEXVERTSRC, fragmentShader, true); + m_sFinalScreenShader.program = createProgram( // + fragmentShader.starts_with("#version 320 es") // do not break existing custom shaders + ? + m_shaders->TEXVERTSRC320 : + (fragmentShader.starts_with("#version 300 es") // support lower es versions + ? + m_shaders->TEXVERTSRC300 : + m_shaders->TEXVERTSRC), + fragmentShader, true); if (!m_sFinalScreenShader.program) { // Error will have been sent by now by the underlying cause @@ -1242,17 +1368,17 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)), newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); - glUseProgram(m_RenderData.pCurrentMonData->m_shQUAD.program); + glUseProgram(m_shaders->m_shQUAD.program); #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shQUAD.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shQUAD.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shQUAD.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif // premultiply the color as well as we don't work with straight alpha - glUniform4f(m_RenderData.pCurrentMonData->m_shQUAD.color, col.r * col.a, col.g * col.a, col.b * col.a, col.a); + glUniform4f(m_shaders->m_shQUAD.color, col.r * col.a, col.g * col.a, col.b * col.a, col.a); CBox transformedBox = box; transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, @@ -1262,14 +1388,14 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); // Rounded corners - glUniform2f(m_RenderData.pCurrentMonData->m_shQUAD.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shQUAD.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); - glUniform1f(m_RenderData.pCurrentMonData->m_shQUAD.radius, round); - glUniform1f(m_RenderData.pCurrentMonData->m_shQUAD.roundingPower, roundingPower); + glUniform2f(m_shaders->m_shQUAD.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); + glUniform2f(m_shaders->m_shQUAD.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); + glUniform1f(m_shaders->m_shQUAD.radius, round); + glUniform1f(m_shaders->m_shQUAD.roundingPower, roundingPower); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shQUAD.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shQUAD.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shQUAD.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shQUAD.posAttrib); if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; @@ -1288,7 +1414,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shQUAD.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shQUAD.posAttrib); scissor(nullptr); } @@ -1310,6 +1436,45 @@ void CHyprOpenGLImpl::renderTextureWithDamage(SP tex, const CBox& box, scissor(nullptr); } +void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManagement::SImageDescription& imageDescription, + const NColorManagement::SImageDescription& targetImageDescription, bool modifySDR) { + glUniform1i(shader.sourceTF, imageDescription.transferFunction); + glUniform1i(shader.targetTF, targetImageDescription.transferFunction); + const auto sourcePrimaries = + imageDescription.primariesNameSet || imageDescription.primaries == SPCPRimaries{} ? getPrimaries(imageDescription.primariesNamed) : imageDescription.primaries; + const auto targetPrimaries = targetImageDescription.primariesNameSet || targetImageDescription.primaries == SPCPRimaries{} ? + getPrimaries(targetImageDescription.primariesNamed) : + targetImageDescription.primaries; + + const GLfloat glSourcePrimaries[8] = { + sourcePrimaries.red.x, sourcePrimaries.red.y, sourcePrimaries.green.x, sourcePrimaries.green.y, + sourcePrimaries.blue.x, sourcePrimaries.blue.y, sourcePrimaries.white.x, sourcePrimaries.white.y, + }; + const GLfloat glTargetPrimaries[8] = { + targetPrimaries.red.x, targetPrimaries.red.y, targetPrimaries.green.x, targetPrimaries.green.y, + targetPrimaries.blue.x, targetPrimaries.blue.y, targetPrimaries.white.x, targetPrimaries.white.y, + }; + glUniformMatrix4x2fv(shader.sourcePrimaries, 1, false, glSourcePrimaries); + glUniformMatrix4x2fv(shader.targetPrimaries, 1, false, glTargetPrimaries); + + const float maxLuminance = imageDescription.luminances.max > 0 ? imageDescription.luminances.max : imageDescription.luminances.reference; + glUniform1f(shader.maxLuminance, maxLuminance * targetImageDescription.luminances.reference / imageDescription.luminances.reference); + glUniform1f(shader.dstMaxLuminance, targetImageDescription.luminances.max > 0 ? targetImageDescription.luminances.max : 10000); + glUniform1f(shader.dstRefLuminance, targetImageDescription.luminances.reference); + glUniform1f(shader.sdrSaturation, + modifySDR && m_RenderData.pMonitor->sdrSaturation > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->sdrSaturation : + 1.0f); + glUniform1f(shader.sdrBrightness, + modifySDR && m_RenderData.pMonitor->sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->sdrBrightness : + 1.0f); +} + +void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const SImageDescription& imageDescription) { + passCMUniforms(shader, imageDescription, m_RenderData.pMonitor->imageDescription, true); +} + void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CBox& box, float alpha, const CRegion& damage, int round, float roundingPower, bool discardActive, bool noAA, bool allowCustomUV, bool allowDim) { RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); @@ -1347,28 +1512,30 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB auto texType = tex->m_iType; if (CRASHING) { - shader = &m_RenderData.pCurrentMonData->m_shGLITCH; + shader = &m_shaders->m_shGLITCH; usingFinalShader = true; } else if (m_bApplyFinalShader && m_sFinalScreenShader.program) { shader = &m_sFinalScreenShader; usingFinalShader = true; } else { if (m_bApplyFinalShader) { - shader = &m_RenderData.pCurrentMonData->m_shPASSTHRURGBA; + shader = &m_shaders->m_shPASSTHRURGBA; usingFinalShader = true; } else { switch (tex->m_iType) { - case TEXTURE_RGBA: shader = &m_RenderData.pCurrentMonData->m_shRGBA; break; - case TEXTURE_RGBX: shader = &m_RenderData.pCurrentMonData->m_shRGBX; break; + case TEXTURE_RGBA: shader = &m_shaders->m_shRGBA; break; + case TEXTURE_RGBX: shader = &m_shaders->m_shRGBX; break; - case TEXTURE_EXTERNAL: shader = &m_RenderData.pCurrentMonData->m_shEXT; break; // might be unused + case TEXTURE_EXTERNAL: shader = &m_shaders->m_shEXT; break; // might be unused default: RASSERT(false, "tex->m_iTarget unsupported!"); } } } - if (m_RenderData.currentWindow && m_RenderData.currentWindow->m_sWindowData.RGBX.valueOrDefault()) + if (m_RenderData.currentWindow && m_RenderData.currentWindow->m_sWindowData.RGBX.valueOrDefault()) { + shader = &m_shaders->m_shRGBX; texType = TEXTURE_RGBX; + } glActiveTexture(GL_TEXTURE0); glBindTexture(tex->m_iTarget, tex->m_iTexID); @@ -1387,56 +1554,21 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB const auto imageDescription = m_RenderData.surface.valid() && m_RenderData.surface->colorManagement.valid() ? m_RenderData.surface->colorManagement->imageDescription() : SImageDescription{}; - const bool skipCM = !*PENABLECM /* CM disabled by the user */ - || !m_RenderData.surface /* FIXME unknown texture settings should be treated as sRGB and go through CM if monitor isn't in sRGB mode */ - || !m_bCMSupported /* CM unsupported - hw failed to compile the shader probably */ + const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ || (imageDescription == m_RenderData.pMonitor->imageDescription) /* Source and target have the same image description */ || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->activeWorkspace && m_RenderData.pMonitor->activeWorkspace->m_bHasFullscreenWindow && m_RenderData.pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; + if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) + shader = &m_shaders->m_shCM; + glUseProgram(shader->program); -#ifndef GLES2 - if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) { - shader = &m_RenderData.pCurrentMonData->m_shCM; - glUseProgram(shader->program); + if (shader == &m_shaders->m_shCM) { glUniform1i(shader->texType, texType); - const auto imageDescription = - m_RenderData.surface && m_RenderData.surface->colorManagement ? m_RenderData.surface->colorManagement->imageDescription() : SImageDescription{}; - glUniform1i(shader->sourceTF, imageDescription.transferFunction); - glUniform1i(shader->targetTF, m_RenderData.pMonitor->imageDescription.transferFunction); - const auto sourcePrimaries = - imageDescription.primariesNameSet || imageDescription.primaries == SPCPRimaries{} ? getPrimaries(imageDescription.primariesNamed) : imageDescription.primaries; - const auto targetPrimaries = m_RenderData.pMonitor->imageDescription.primariesNameSet || m_RenderData.pMonitor->imageDescription.primaries == SPCPRimaries{} ? - getPrimaries(m_RenderData.pMonitor->imageDescription.primariesNamed) : - m_RenderData.pMonitor->imageDescription.primaries; - - const GLfloat glSourcePrimaries[8] = { - sourcePrimaries.red.x, sourcePrimaries.red.y, sourcePrimaries.green.x, sourcePrimaries.green.y, - sourcePrimaries.blue.x, sourcePrimaries.blue.y, sourcePrimaries.white.x, sourcePrimaries.white.y, - }; - const GLfloat glTargetPrimaries[8] = { - targetPrimaries.red.x, targetPrimaries.red.y, targetPrimaries.green.x, targetPrimaries.green.y, - targetPrimaries.blue.x, targetPrimaries.blue.y, targetPrimaries.white.x, targetPrimaries.white.y, - }; - glUniformMatrix4x2fv(shader->sourcePrimaries, 1, false, glSourcePrimaries); - glUniformMatrix4x2fv(shader->targetPrimaries, 1, false, glTargetPrimaries); - - const float maxLuminance = imageDescription.luminances.max > 0 ? imageDescription.luminances.max : imageDescription.luminances.reference; - glUniform1f(shader->maxLuminance, maxLuminance * m_RenderData.pMonitor->imageDescription.luminances.reference / imageDescription.luminances.reference); - glUniform1f(shader->dstMaxLuminance, m_RenderData.pMonitor->imageDescription.luminances.max > 0 ? m_RenderData.pMonitor->imageDescription.luminances.max : 10000); - glUniform1f(shader->dstRefLuminance, m_RenderData.pMonitor->imageDescription.luminances.reference); - glUniform1f(shader->sdrSaturation, - m_RenderData.pMonitor->sdrSaturation > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrSaturation : - 1.0f); - glUniform1f(shader->sdrBrightness, - m_RenderData.pMonitor->sdrBrightness > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrBrightness : - 1.0f); + passCMUniforms(*shader, imageDescription); } -#endif #ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -1568,7 +1700,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); - CShader* shader = &m_RenderData.pCurrentMonData->m_shPASSTHRURGBA; + CShader* shader = &m_shaders->m_shPASSTHRURGBA; glActiveTexture(GL_TEXTURE0); glBindTexture(tex->m_iTarget, tex->m_iTexID); @@ -1619,7 +1751,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); - CShader* shader = &m_RenderData.pCurrentMonData->m_shMATTE; + CShader* shader = &m_shaders->m_shMATTE; glUseProgram(shader->program); @@ -1715,23 +1847,38 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glTexParameteri(currentTex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glUseProgram(m_RenderData.pCurrentMonData->m_shBLURPREPARE.program); + glUseProgram(m_shaders->m_shBLURPREPARE.program); + + // From FB to sRGB + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + glUniform1i(m_shaders->m_shBLURPREPARE.skipCM, skipCM); + if (!skipCM) { + passCMUniforms(m_shaders->m_shBLURPREPARE, m_RenderData.pMonitor->imageDescription, SImageDescription{}); + glUniform1f(m_shaders->m_shBLURPREPARE.sdrSaturation, + m_RenderData.pMonitor->sdrSaturation > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->sdrSaturation : + 1.0f); + glUniform1f(m_shaders->m_shBLURPREPARE.sdrBrightness, + m_RenderData.pMonitor->sdrBrightness > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->sdrBrightness : + 1.0f); + } #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURPREPARE.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBLURPREPARE.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURPREPARE.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBLURPREPARE.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform1f(m_RenderData.pCurrentMonData->m_shBLURPREPARE.contrast, *PBLURCONTRAST); - glUniform1f(m_RenderData.pCurrentMonData->m_shBLURPREPARE.brightness, *PBLURBRIGHTNESS); - glUniform1i(m_RenderData.pCurrentMonData->m_shBLURPREPARE.tex, 0); + glUniform1f(m_shaders->m_shBLURPREPARE.contrast, *PBLURCONTRAST); + glUniform1f(m_shaders->m_shBLURPREPARE.brightness, *PBLURBRIGHTNESS); + glUniform1i(m_shaders->m_shBLURPREPARE.tex, 0); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURPREPARE.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURPREPARE.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBLURPREPARE.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBLURPREPARE.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURPREPARE.posAttrib); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURPREPARE.texAttrib); + glEnableVertexAttribArray(m_shaders->m_shBLURPREPARE.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shBLURPREPARE.texAttrib); if (!damage.empty()) { for (auto const& RECT : damage.getRects()) { @@ -1740,8 +1887,8 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURPREPARE.posAttrib); - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURPREPARE.texAttrib); + glDisableVertexAttribArray(m_shaders->m_shBLURPREPARE.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shBLURPREPARE.texAttrib); currentRenderToFB = PMIRRORSWAPFB; } @@ -1771,15 +1918,13 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glUniformMatrix3fv(pShader->proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif glUniform1f(pShader->radius, *PBLURSIZE * a); // this makes the blursize change with a - if (pShader == &m_RenderData.pCurrentMonData->m_shBLUR1) { - glUniform2f(m_RenderData.pCurrentMonData->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x / 2.f), - 0.5f / (m_RenderData.pMonitor->vecPixelSize.y / 2.f)); - glUniform1i(m_RenderData.pCurrentMonData->m_shBLUR1.passes, *PBLURPASSES); - glUniform1f(m_RenderData.pCurrentMonData->m_shBLUR1.vibrancy, *PBLURVIBRANCY); - glUniform1f(m_RenderData.pCurrentMonData->m_shBLUR1.vibrancy_darkness, *PBLURVIBRANCYDARKNESS); + if (pShader == &m_shaders->m_shBLUR1) { + glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y / 2.f)); + glUniform1i(m_shaders->m_shBLUR1.passes, *PBLURPASSES); + glUniform1f(m_shaders->m_shBLUR1.vibrancy, *PBLURVIBRANCY); + glUniform1f(m_shaders->m_shBLUR1.vibrancy_darkness, *PBLURVIBRANCYDARKNESS); } else - glUniform2f(m_RenderData.pCurrentMonData->m_shBLUR2.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x * 2.f), - 0.5f / (m_RenderData.pMonitor->vecPixelSize.y * 2.f)); + glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x * 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y * 2.f)); glUniform1i(pShader->tex, 0); glVertexAttribPointer(pShader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); @@ -1815,12 +1960,12 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o // and draw for (auto i = 1; i <= *PBLURPASSES; ++i) { tempDamage = damage.copy().scale(1.f / (1 << i)); - drawPass(&m_RenderData.pCurrentMonData->m_shBLUR1, &tempDamage); // down + drawPass(&m_shaders->m_shBLUR1, &tempDamage); // down } for (auto i = *PBLURPASSES - 1; i >= 0; --i) { - tempDamage = damage.copy().scale(1.f / (1 << i)); // when upsampling we make the region twice as big - drawPass(&m_RenderData.pCurrentMonData->m_shBLUR2, &tempDamage); // up + tempDamage = damage.copy().scale(1.f / (1 << i)); // when upsampling we make the region twice as big + drawPass(&m_shaders->m_shBLUR2, &tempDamage); // up } // finalize the image @@ -1841,24 +1986,24 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glTexParameteri(currentTex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glUseProgram(m_RenderData.pCurrentMonData->m_shBLURFINISH.program); + glUseProgram(m_shaders->m_shBLURFINISH.program); #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBLURFINISH.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.noise, *PBLURNOISE); - glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.brightness, *PBLURBRIGHTNESS); + glUniform1f(m_shaders->m_shBLURFINISH.noise, *PBLURNOISE); + glUniform1f(m_shaders->m_shBLURFINISH.brightness, *PBLURBRIGHTNESS); - glUniform1i(m_RenderData.pCurrentMonData->m_shBLURFINISH.tex, 0); + glUniform1i(m_shaders->m_shBLURFINISH.tex, 0); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBLURFINISH.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBLURFINISH.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib); + glEnableVertexAttribArray(m_shaders->m_shBLURFINISH.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shBLURFINISH.texAttrib); if (!damage.empty()) { for (auto const& RECT : damage.getRects()) { @@ -1867,8 +2012,8 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib); - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib); + glDisableVertexAttribArray(m_shaders->m_shBLURFINISH.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shBLURFINISH.texAttrib); if (currentRenderToFB != PMIRRORFB) currentRenderToFB = PMIRRORFB; @@ -2184,20 +2329,25 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto BLEND = m_bBlend; blend(true); - glUseProgram(m_RenderData.pCurrentMonData->m_shBORDER1.program); + glUseProgram(m_shaders->m_shBORDER1.program); + + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + glUniform1i(m_shaders->m_shBORDER1.skipCM, skipCM); + if (!skipCM) + passCMUniforms(m_shaders->m_shBORDER1, SImageDescription{}); #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform4fv(m_RenderData.pCurrentMonData->m_shBORDER1.gradient, grad.m_vColorsOkLabA.size() / 4, (float*)grad.m_vColorsOkLabA.data()); - glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradientLength, grad.m_vColorsOkLabA.size() / 4); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.angle, (int)(grad.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.alpha, a); - glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradient2Length, 0); + glUniform4fv(m_shaders->m_shBORDER1.gradient, grad.m_vColorsOkLabA.size() / 4, (float*)grad.m_vColorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad.m_vColorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); + glUniform1f(m_shaders->m_shBORDER1.alpha, a); + glUniform1i(m_shaders->m_shBORDER1.gradient2Length, 0); CBox transformedBox = newBox; transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, @@ -2206,19 +2356,19 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSizeUntransformed, (float)newBox.width, (float)newBox.height); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radius, round); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radiusOuter, outerRound == -1 ? round : outerRound); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.roundingPower, roundingPower); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.thick, scaledBorderSize); + glUniform2f(m_shaders->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); + glUniform2f(m_shaders->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); + glUniform2f(m_shaders->m_shBORDER1.fullSizeUntransformed, (float)newBox.width, (float)newBox.height); + glUniform1f(m_shaders->m_shBORDER1.radius, round); + glUniform1f(m_shaders->m_shBORDER1.radiusOuter, outerRound == -1 ? round : outerRound); + glUniform1f(m_shaders->m_shBORDER1.roundingPower, roundingPower); + glUniform1f(m_shaders->m_shBORDER1.thick, scaledBorderSize); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib); + glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; @@ -2237,8 +2387,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib); - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib); + glDisableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); blend(BLEND); } @@ -2277,24 +2427,24 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto BLEND = m_bBlend; blend(true); - glUseProgram(m_RenderData.pCurrentMonData->m_shBORDER1.program); + glUseProgram(m_shaders->m_shBORDER1.program); #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform4fv(m_RenderData.pCurrentMonData->m_shBORDER1.gradient, grad1.m_vColorsOkLabA.size() / 4, (float*)grad1.m_vColorsOkLabA.data()); - glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradientLength, grad1.m_vColorsOkLabA.size() / 4); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.angle, (int)(grad1.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); + glUniform4fv(m_shaders->m_shBORDER1.gradient, grad1.m_vColorsOkLabA.size() / 4, (float*)grad1.m_vColorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad1.m_vColorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad1.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); if (grad2.m_vColorsOkLabA.size() > 0) - glUniform4fv(m_RenderData.pCurrentMonData->m_shBORDER1.gradient2, grad2.m_vColorsOkLabA.size() / 4, (float*)grad2.m_vColorsOkLabA.data()); - glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.gradient2Length, grad2.m_vColorsOkLabA.size() / 4); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.angle2, (int)(grad2.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.alpha, a); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.gradientLerp, lerp); + glUniform4fv(m_shaders->m_shBORDER1.gradient2, grad2.m_vColorsOkLabA.size() / 4, (float*)grad2.m_vColorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradient2Length, grad2.m_vColorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle2, (int)(grad2.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); + glUniform1f(m_shaders->m_shBORDER1.alpha, a); + glUniform1f(m_shaders->m_shBORDER1.gradientLerp, lerp); CBox transformedBox = newBox; transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, @@ -2303,19 +2453,19 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSizeUntransformed, (float)newBox.width, (float)newBox.height); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radius, round); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radiusOuter, outerRound == -1 ? round : outerRound); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.roundingPower, roundingPower); - glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.thick, scaledBorderSize); + glUniform2f(m_shaders->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); + glUniform2f(m_shaders->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); + glUniform2f(m_shaders->m_shBORDER1.fullSizeUntransformed, (float)newBox.width, (float)newBox.height); + glUniform1f(m_shaders->m_shBORDER1.radius, round); + glUniform1f(m_shaders->m_shBORDER1.radiusOuter, outerRound == -1 ? round : outerRound); + glUniform1f(m_shaders->m_shBORDER1.roundingPower, roundingPower); + glUniform1f(m_shaders->m_shBORDER1.thick, scaledBorderSize); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib); + glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; @@ -2334,8 +2484,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.posAttrib); - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBORDER1.texAttrib); + glDisableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); blend(BLEND); } @@ -2365,34 +2515,38 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun blend(true); - glUseProgram(m_RenderData.pCurrentMonData->m_shSHADOW.program); + glUseProgram(m_shaders->m_shSHADOW.program); + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + glUniform1i(m_shaders->m_shSHADOW.skipCM, skipCM); + if (!skipCM) + passCMUniforms(m_shaders->m_shSHADOW, SImageDescription{}); #ifndef GLES2 - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shSHADOW.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shSHADOW.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shSHADOW.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_shaders->m_shSHADOW.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform4f(m_RenderData.pCurrentMonData->m_shSHADOW.color, col.r, col.g, col.b, col.a * a); + glUniform4f(m_shaders->m_shSHADOW.color, col.r, col.g, col.b, col.a * a); const auto TOPLEFT = Vector2D(range + round, range + round); const auto BOTTOMRIGHT = Vector2D(newBox.width - (range + round), newBox.height - (range + round)); const auto FULLSIZE = Vector2D(newBox.width, newBox.height); // Rounded corners - glUniform2f(m_RenderData.pCurrentMonData->m_shSHADOW.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shSHADOW.bottomRight, (float)BOTTOMRIGHT.x, (float)BOTTOMRIGHT.y); - glUniform2f(m_RenderData.pCurrentMonData->m_shSHADOW.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); - glUniform1f(m_RenderData.pCurrentMonData->m_shSHADOW.radius, range + round); - glUniform1f(m_RenderData.pCurrentMonData->m_shSHADOW.roundingPower, roundingPower); - glUniform1f(m_RenderData.pCurrentMonData->m_shSHADOW.range, range); - glUniform1f(m_RenderData.pCurrentMonData->m_shSHADOW.shadowPower, SHADOWPOWER); + glUniform2f(m_shaders->m_shSHADOW.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); + glUniform2f(m_shaders->m_shSHADOW.bottomRight, (float)BOTTOMRIGHT.x, (float)BOTTOMRIGHT.y); + glUniform2f(m_shaders->m_shSHADOW.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); + glUniform1f(m_shaders->m_shSHADOW.radius, range + round); + glUniform1f(m_shaders->m_shSHADOW.roundingPower, roundingPower); + glUniform1f(m_shaders->m_shSHADOW.range, range); + glUniform1f(m_shaders->m_shSHADOW.shadowPower, SHADOWPOWER); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shSHADOW.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shSHADOW.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shSHADOW.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); + glVertexAttribPointer(m_shaders->m_shSHADOW.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shSHADOW.posAttrib); - glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shSHADOW.texAttrib); + glEnableVertexAttribArray(m_shaders->m_shSHADOW.posAttrib); + glEnableVertexAttribArray(m_shaders->m_shSHADOW.texAttrib); if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; @@ -2411,8 +2565,8 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun } } - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shSHADOW.posAttrib); - glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shSHADOW.texAttrib); + glDisableVertexAttribArray(m_shaders->m_shSHADOW.posAttrib); + glDisableVertexAttribArray(m_shaders->m_shSHADOW.texAttrib); } void CHyprOpenGLImpl::saveBufferForMirror(const CBox& box) { @@ -3021,7 +3175,7 @@ CEGLSync::~CEGLSync() { if (sync == EGL_NO_SYNC_KHR) return; - if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) + if (g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) Debug::log(ERR, "eglDestroySyncKHR failed"); } diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 34bb7e9c..c3091f15 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -9,6 +9,7 @@ #include "../helpers/sync/SyncTimeline.hpp" #include #include +#include #include #include @@ -78,6 +79,26 @@ enum eMonitorExtraRenderFBs : uint8_t { FB_MONITOR_RENDER_EXTRA_BLUR, }; +struct SPreparedShaders { + std::string TEXVERTSRC; + std::string TEXVERTSRC300; + std::string TEXVERTSRC320; + CShader m_shQUAD; + CShader m_shRGBA; + CShader m_shPASSTHRURGBA; + CShader m_shMATTE; + CShader m_shRGBX; + CShader m_shEXT; + CShader m_shBLUR1; + CShader m_shBLUR2; + CShader m_shBLURPREPARE; + CShader m_shBLURFINISH; + CShader m_shSHADOW; + CShader m_shBORDER1; + CShader m_shGLITCH; + CShader m_shCM; +}; + struct SMonitorRenderData { CFramebuffer offloadFB; CFramebuffer mirrorFB; // these are used for some effects, @@ -90,23 +111,6 @@ struct SMonitorRenderData { bool blurFBDirty = true; bool blurFBShouldRender = false; - - // Shaders - bool m_bShadersInitialized = false; - CShader m_shQUAD; - CShader m_shRGBA; - CShader m_shPASSTHRURGBA; - CShader m_shMATTE; - CShader m_shRGBX; - CShader m_shEXT; - CShader m_shBLUR1; - CShader m_shBLUR2; - CShader m_shBLURPREPARE; - CShader m_shBLURFINISH; - CShader m_shSHADOW; - CShader m_shBORDER1; - CShader m_shGLITCH; - CShader m_shCM; }; struct SCurrentRenderData { @@ -232,6 +236,10 @@ class CHyprOpenGLImpl { EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); SP createEGLSync(int fence = -1); + bool initShaders(); + bool m_bShadersInitialized = false; + SP m_shaders; + SCurrentRenderData m_RenderData; Hyprutils::OS::CFileDescriptor m_iGBMFD; @@ -309,7 +317,6 @@ class CHyprOpenGLImpl { GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false); GLuint compileShader(const GLuint&, std::string, bool dynamic = false, bool silent = false); void createBGTextureForMonitor(PHLMONITOR); - void initShaders(); void initDRMFormats(); void initEGL(bool gbm); EGLDeviceEXT eglDeviceFromDRMFD(int drmFD); @@ -322,6 +329,9 @@ class CHyprOpenGLImpl { // returns the out FB, can be either Mirror or MirrorSwap CFramebuffer* blurMainFramebufferWithDamage(float a, CRegion* damage); + void passCMUniforms(const CShader&, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, + bool modifySDR = false); + void passCMUniforms(const CShader&, const NColorManagement::SImageDescription& imageDescription); void renderTextureInternalWithDamage(SP, const CBox& box, float a, const CRegion& damage, int round = 0, float roundingPower = 2.0f, bool discardOpaque = false, bool noAA = false, bool allowCustomUV = false, bool allowDim = false); void renderTexturePrimitive(SP tex, const CBox& box); diff --git a/src/render/Shader.cpp b/src/render/Shader.cpp index 984d8ce3..97bcf761 100644 --- a/src/render/Shader.cpp +++ b/src/render/Shader.cpp @@ -1,17 +1,5 @@ #include "Shader.hpp" -GLint CShader::getUniformLocation(const std::string& unif) { - const auto itpos = m_muUniforms.find(unif); - - if (itpos == m_muUniforms.end()) { - const auto unifLoc = glGetUniformLocation(program, unif.c_str()); - m_muUniforms[unif] = unifLoc; - return unifLoc; - } - - return itpos->second; -} - CShader::~CShader() { destroy(); } diff --git a/src/render/Shader.hpp b/src/render/Shader.hpp index 413f3ef0..1d21894c 100644 --- a/src/render/Shader.hpp +++ b/src/render/Shader.hpp @@ -12,6 +12,7 @@ class CShader { GLint color = -1; GLint alphaMatte = -1; GLint texType = -1; + GLint skipCM = -1; GLint sourceTF = -1; GLint targetTF = -1; GLint sourcePrimaries = -1; @@ -74,8 +75,6 @@ class CShader { GLint brightness = -1; GLint noise = -1; - GLint getUniformLocation(const std::string&); - void destroy(); private: diff --git a/src/render/Shaders.hpp b/src/render/Shaders.hpp deleted file mode 100644 index 1849c621..00000000 --- a/src/render/Shaders.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include "shaders/Textures.hpp" -#include "shaders/Shadow.hpp" -#include "shaders/Border.hpp" \ No newline at end of file diff --git a/src/render/shaders/SharedValues.hpp b/src/render/shaders/SharedValues.hpp deleted file mode 100644 index 9a74c892..00000000 --- a/src/render/shaders/SharedValues.hpp +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -constexpr float SHADER_ROUNDED_SMOOTHING_FACTOR = M_PI / 5.34665792551; \ No newline at end of file diff --git a/src/render/shaders/Textures.hpp b/src/render/shaders/Textures.hpp deleted file mode 100644 index 002c3459..00000000 --- a/src/render/shaders/Textures.hpp +++ /dev/null @@ -1,541 +0,0 @@ -#pragma once - -#include -#include -#include "SharedValues.hpp" - -inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVarName) -> std::string { - return R"#( - - // shoutout me: I fixed this shader being a bit pixelated while watching hentai - - highp vec2 pixCoord = vec2(gl_FragCoord); - pixCoord -= topLeft + fullSize * 0.5; - pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0; - pixCoord -= fullSize * 0.5 - radius; - pixCoord += vec2(1.0, 1.0) / fullSize; // center the pix dont make it top-left - - // smoothing constant for the edge: more = blurrier, but smoother - const float SMOOTHING_CONSTANT = )#" + - std::format("{:.7f}", SHADER_ROUNDED_SMOOTHING_FACTOR) + R"#(; - - if (pixCoord.x + pixCoord.y > radius) { - - float dist = pow(pow(pixCoord.x, roundingPower) + pow(pixCoord.y, roundingPower), 1.0/roundingPower); - - if (dist > radius + SMOOTHING_CONSTANT) - discard; - - float normalized = 1.0 - smoothstep(0.0, 1.0, (dist - radius + SMOOTHING_CONSTANT) / (SMOOTHING_CONSTANT * 2.0)); - - )#" + - colorVarName + R"#( = )#" + colorVarName + R"#( * normalized; - } -)#"; -}; - -inline const std::string QUADVERTSRC = R"#( -uniform mat3 proj; -uniform vec4 color; -attribute vec2 pos; -attribute vec2 texcoord; -attribute vec2 texcoordMatte; -varying vec4 v_color; -varying vec2 v_texcoord; -varying vec2 v_texcoordMatte; - -void main() { - gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); - v_color = color; - v_texcoord = texcoord; - v_texcoordMatte = texcoordMatte; -})#"; - -inline const std::string QUADFRAGSRC = R"#( -precision highp float; -varying vec4 v_color; - -uniform vec2 topLeft; -uniform vec2 fullSize; -uniform float radius; -uniform float roundingPower; - -void main() { - - vec4 pixColor = v_color; - - if (radius > 0.0) { - )#" + - ROUNDED_SHADER_FUNC("pixColor") + R"#( - } - - gl_FragColor = pixColor; -})#"; - -inline const std::string TEXVERTSRC = R"#( -uniform mat3 proj; -attribute vec2 pos; -attribute vec2 texcoord; -varying vec2 v_texcoord; - -void main() { - gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); - v_texcoord = texcoord; -})#"; - -inline const std::string TEXVERTSRC320 = R"#(#version 320 es -uniform mat3 proj; -in vec2 pos; -in vec2 texcoord; -out vec2 v_texcoord; - -void main() { - gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); - v_texcoord = texcoord; -})#"; - -inline const std::string TEXFRAGSRCCM = -#include "CM.frag" - ; - -inline const std::string TEXFRAGSRCRGBA = R"#( -precision highp float; -varying vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; -uniform float alpha; - -uniform vec2 topLeft; -uniform vec2 fullSize; -uniform float radius; -uniform float roundingPower; - -uniform int discardOpaque; -uniform int discardAlpha; -uniform float discardAlphaValue; - -uniform int applyTint; -uniform vec3 tint; - -void main() { - - vec4 pixColor = texture2D(tex, v_texcoord); - - if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) - discard; - - if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue) - discard; - - if (applyTint == 1) { - pixColor[0] = pixColor[0] * tint[0]; - pixColor[1] = pixColor[1] * tint[1]; - pixColor[2] = pixColor[2] * tint[2]; - } - - if (radius > 0.0) { - )#" + - ROUNDED_SHADER_FUNC("pixColor") + R"#( - } - - gl_FragColor = pixColor * alpha; -})#"; - -inline const std::string TEXFRAGSRCRGBAPASSTHRU = R"#( -precision highp float; -varying vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; - -void main() { - gl_FragColor = texture2D(tex, v_texcoord); -})#"; - -inline const std::string TEXFRAGSRCRGBAMATTE = R"#( -precision highp float; -varying vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; -uniform sampler2D texMatte; - -void main() { - gl_FragColor = texture2D(tex, v_texcoord) * texture2D(texMatte, v_texcoord)[0]; // I know it only uses R, but matte should be black/white anyways. -})#"; - -inline const std::string TEXFRAGSRCRGBX = R"#( -precision highp float; -varying vec2 v_texcoord; -uniform sampler2D tex; -uniform float alpha; - -uniform vec2 topLeft; -uniform vec2 fullSize; -uniform float radius; -uniform float roundingPower; - -uniform int discardOpaque; -uniform int discardAlpha; -uniform int discardAlphaValue; - -uniform int applyTint; -uniform vec3 tint; - -void main() { - - if (discardOpaque == 1 && alpha == 1.0) - discard; - - vec4 pixColor = vec4(texture2D(tex, v_texcoord).rgb, 1.0); - - if (applyTint == 1) { - pixColor[0] = pixColor[0] * tint[0]; - pixColor[1] = pixColor[1] * tint[1]; - pixColor[2] = pixColor[2] * tint[2]; - } - - if (radius > 0.0) { - )#" + - ROUNDED_SHADER_FUNC("pixColor") + R"#( - } - - gl_FragColor = pixColor * alpha; -})#"; - -inline const std::string FRAGBLUR1 = R"#( -#version 100 -precision highp float; -varying highp vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; - -uniform float radius; -uniform vec2 halfpixel; -uniform int passes; -uniform float vibrancy; -uniform float vibrancy_darkness; - -// see http://alienryderflex.com/hsp.html -const float Pr = 0.299; -const float Pg = 0.587; -const float Pb = 0.114; - -// Y is "v" ( brightness ). X is "s" ( saturation ) -// see https://www.desmos.com/3d/a88652b9a4 -// Determines if high brightness or high saturation is more important -const float a = 0.93; -const float b = 0.11; -const float c = 0.66; // Determines the smoothness of the transition of unboosted to boosted colors -// - -// http://www.flong.com/archive/texts/code/shapers_circ/ -float doubleCircleSigmoid(float x, float a) { - a = clamp(a, 0.0, 1.0); - - float y = .0; - if (x <= a) { - y = a - sqrt(a * a - x * x); - } else { - y = a + sqrt(pow(1. - a, 2.) - pow(x - 1., 2.)); - } - return y; -} - -vec3 rgb2hsl(vec3 col) { - float red = col.r; - float green = col.g; - float blue = col.b; - - float minc = min(col.r, min(col.g, col.b)); - float maxc = max(col.r, max(col.g, col.b)); - float delta = maxc - minc; - - float lum = (minc + maxc) * 0.5; - float sat = 0.0; - float hue = 0.0; - - if (lum > 0.0 && lum < 1.0) { - float mul = (lum < 0.5) ? (lum) : (1.0 - lum); - sat = delta / (mul * 2.0); - } - - if (delta > 0.0) { - vec3 maxcVec = vec3(maxc); - vec3 masks = vec3(equal(maxcVec, col)) * vec3(notEqual(maxcVec, vec3(green, blue, red))); - vec3 adds = vec3(0.0, 2.0, 4.0) + vec3(green - blue, blue - red, red - green) / delta; - - hue += dot(adds, masks); - hue /= 6.0; - - if (hue < 0.0) - hue += 1.0; - } - - return vec3(hue, sat, lum); -} - -vec3 hsl2rgb(vec3 col) { - const float onethird = 1.0 / 3.0; - const float twothird = 2.0 / 3.0; - const float rcpsixth = 6.0; - - float hue = col.x; - float sat = col.y; - float lum = col.z; - - vec3 xt = vec3(0.0); - - if (hue < onethird) { - xt.r = rcpsixth * (onethird - hue); - xt.g = rcpsixth * hue; - xt.b = 0.0; - } else if (hue < twothird) { - xt.r = 0.0; - xt.g = rcpsixth * (twothird - hue); - xt.b = rcpsixth * (hue - onethird); - } else - xt = vec3(rcpsixth * (hue - twothird), 0.0, rcpsixth * (1.0 - hue)); - - xt = min(xt, 1.0); - - float sat2 = 2.0 * sat; - float satinv = 1.0 - sat; - float luminv = 1.0 - lum; - float lum2m1 = (2.0 * lum) - 1.0; - vec3 ct = (sat2 * xt) + satinv; - - vec3 rgb; - if (lum >= 0.5) - rgb = (luminv * ct) + lum2m1; - else - rgb = lum * ct; - - return rgb; -} - -void main() { - vec2 uv = v_texcoord * 2.0; - - vec4 sum = texture2D(tex, uv) * 4.0; - sum += texture2D(tex, uv - halfpixel.xy * radius); - sum += texture2D(tex, uv + halfpixel.xy * radius); - sum += texture2D(tex, uv + vec2(halfpixel.x, -halfpixel.y) * radius); - sum += texture2D(tex, uv - vec2(halfpixel.x, -halfpixel.y) * radius); - - vec4 color = sum / 8.0; - - if (vibrancy == 0.0) { - gl_FragColor = color; - } else { - // Invert it so that it correctly maps to the config setting - float vibrancy_darkness1 = 1.0 - vibrancy_darkness; - - // Decrease the RGB components based on their perceived brightness, to prevent visually dark colors from overblowing the rest. - vec3 hsl = rgb2hsl(color.rgb); - // Calculate perceived brightness, as not boost visually dark colors like deep blue as much as equally saturated yellow - float perceivedBrightness = doubleCircleSigmoid(sqrt(color.r * color.r * Pr + color.g * color.g * Pg + color.b * color.b * Pb), 0.8 * vibrancy_darkness1); - - float b1 = b * vibrancy_darkness1; - float boostBase = hsl[1] > 0.0 ? smoothstep(b1 - c * 0.5, b1 + c * 0.5, 1.0 - (pow(1.0 - hsl[1] * cos(a), 2.0) + pow(1.0 - perceivedBrightness * sin(a), 2.0))) : 0.0; - - float saturation = clamp(hsl[1] + (boostBase * vibrancy) / float(passes), 0.0, 1.0); - - vec3 newColor = hsl2rgb(vec3(hsl[0], saturation, hsl[2])); - - gl_FragColor = vec4(newColor, color[3]); - } -} -)#"; - -inline const std::string FRAGBLUR2 = R"#( -#version 100 -precision highp float; -varying highp vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; - -uniform float radius; -uniform vec2 halfpixel; - -void main() { - vec2 uv = v_texcoord / 2.0; - - vec4 sum = texture2D(tex, uv + vec2(-halfpixel.x * 2.0, 0.0) * radius); - - sum += texture2D(tex, uv + vec2(-halfpixel.x, halfpixel.y) * radius) * 2.0; - sum += texture2D(tex, uv + vec2(0.0, halfpixel.y * 2.0) * radius); - sum += texture2D(tex, uv + vec2(halfpixel.x, halfpixel.y) * radius) * 2.0; - sum += texture2D(tex, uv + vec2(halfpixel.x * 2.0, 0.0) * radius); - sum += texture2D(tex, uv + vec2(halfpixel.x, -halfpixel.y) * radius) * 2.0; - sum += texture2D(tex, uv + vec2(0.0, -halfpixel.y * 2.0) * radius); - sum += texture2D(tex, uv + vec2(-halfpixel.x, -halfpixel.y) * radius) * 2.0; - - gl_FragColor = sum / 12.0; -} -)#"; - -inline const std::string FRAGBLURPREPARE = R"#( -precision highp float; -varying vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; - -uniform float contrast; -uniform float brightness; - -float gain(float x, float k) { - float a = 0.5 * pow(2.0 * ((x < 0.5) ? x : 1.0 - x), k); - return (x < 0.5) ? a : 1.0 - a; -} - -void main() { - vec4 pixColor = texture2D(tex, v_texcoord); - - // contrast - if (contrast != 1.0) { - pixColor.r = gain(pixColor.r, contrast); - pixColor.g = gain(pixColor.g, contrast); - pixColor.b = gain(pixColor.b, contrast); - } - - // brightness - if (brightness > 1.0) { - pixColor.rgb *= brightness; - } - - gl_FragColor = pixColor; -} -)#"; - -inline const std::string FRAGBLURFINISH = R"#( -precision highp float; -varying vec2 v_texcoord; // is in 0-1 -uniform sampler2D tex; - -uniform float noise; -uniform float brightness; - -float hash(vec2 p) { - vec3 p3 = fract(vec3(p.xyx) * 1689.1984); - p3 += dot(p3, p3.yzx + 33.33); - return fract((p3.x + p3.y) * p3.z); -} - -void main() { - vec4 pixColor = texture2D(tex, v_texcoord); - - // noise - float noiseHash = hash(v_texcoord); - float noiseAmount = (mod(noiseHash, 1.0) - 0.5); - pixColor.rgb += noiseAmount * noise; - - // brightness - if (brightness < 1.0) { - pixColor.rgb *= brightness; - } - - gl_FragColor = pixColor; -} -)#"; - -inline const std::string TEXFRAGSRCEXT = R"#( -#extension GL_OES_EGL_image_external : require - -precision highp float; -varying vec2 v_texcoord; -uniform samplerExternalOES texture0; -uniform float alpha; - -uniform vec2 topLeft; -uniform vec2 fullSize; -uniform float radius; -uniform float roundingPower; - -uniform int discardOpaque; -uniform int discardAlpha; -uniform int discardAlphaValue; - -uniform int applyTint; -uniform vec3 tint; - -void main() { - - vec4 pixColor = texture2D(texture0, v_texcoord); - - if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) - discard; - - if (applyTint == 1) { - pixColor[0] = pixColor[0] * tint[0]; - pixColor[1] = pixColor[1] * tint[1]; - pixColor[2] = pixColor[2] * tint[2]; - } - - if (radius > 0.0) { - )#" + - ROUNDED_SHADER_FUNC("pixColor") + R"#( - } - - gl_FragColor = pixColor * alpha; -} -)#"; - -static const std::string FRAGGLITCH = R"#( -precision highp float; -varying vec2 v_texcoord; -uniform sampler2D tex; -uniform float time; // quirk: time is set to 0 at the beginning, should be around 10 when crash. -uniform float distort; -uniform vec2 screenSize; - -float rand(float co) { - return fract(sin(dot(vec2(co, co), vec2(12.9898, 78.233))) * 43758.5453); -} - -float rand(vec2 co) { - return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); -} - -float noise(vec2 point) { - vec2 floored = floor(point); - vec2 fractal = fract(point); - fractal = fractal * fractal * (3.0 - 2.0 * fractal); - - float mixed = mix( - mix(rand(floored), rand(floored + vec2(1.0, 0.0)), fractal.x), - mix(rand(floored + vec2(0.0,1.0)), rand(floored + vec2(1.0,1.0)), fractal.x), fractal.y); - return mixed * mixed; -} - -void main() { - float ABERR_OFFSET = 4.0 * (distort / 5.5) * time; - float TEAR_AMOUNT = 9000.0 * (1.0 - (distort / 5.5)); - float TEAR_BANDS = 108.0 / 2.0 * (distort / 5.5) * 2.0; - float MELT_AMOUNT = (distort * 8.0) / screenSize.y; - - float NOISE = abs(mod(noise(v_texcoord) * distort * time * 2.771, 1.0)) * time / 10.0; - if (time < 2.0) - NOISE = 0.0; - - float offset = (mod(rand(floor(v_texcoord.y * TEAR_BANDS)) * 318.772 * time, 20.0) - 10.0) / TEAR_AMOUNT; - - vec2 blockOffset = vec2(((abs(mod(rand(floor(v_texcoord.x * 37.162)) * 721.43, 100.0))) - 50.0) / 200000.0 * pow(time, 3.0), - ((abs(mod(rand(floor(v_texcoord.y * 45.882)) * 733.923, 100.0))) - 50.0) / 200000.0 * pow(time, 3.0)); - if (time < 3.0) - blockOffset = vec2(0,0); - - float meltSeed = abs(mod(rand(floor(v_texcoord.x * screenSize.x * 17.719)) * 281.882, 1.0)); - if (meltSeed < 0.8) { - meltSeed = 0.0; - } else { - meltSeed *= 25.0 * NOISE; - } - float meltAmount = MELT_AMOUNT * meltSeed; - - vec2 pixCoord = vec2(v_texcoord.x + offset + NOISE * 3.0 / screenSize.x + blockOffset.x, v_texcoord.y - meltAmount + 0.02 * NOISE / screenSize.x + NOISE * 3.0 / screenSize.y + blockOffset.y); - - vec4 pixColor = texture2D(tex, pixCoord); - vec4 pixColorLeft = texture2D(tex, pixCoord + vec2(ABERR_OFFSET / screenSize.x, 0)); - vec4 pixColorRight = texture2D(tex, pixCoord + vec2(-ABERR_OFFSET / screenSize.x, 0)); - - pixColor[0] = pixColorLeft[0]; - pixColor[2] = pixColorRight[2]; - - pixColor[0] += distort / 90.0; - - gl_FragColor = pixColor; -} -)#"; diff --git a/src/render/shaders/glsl/CM.frag b/src/render/shaders/glsl/CM.frag new file mode 100644 index 00000000..369e9cf0 --- /dev/null +++ b/src/render/shaders/glsl/CM.frag @@ -0,0 +1,55 @@ +#version 300 es +//#extension GL_OES_EGL_image_external : require +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec2 v_texcoord; +uniform sampler2D tex; +//uniform samplerExternalOES texture0; + +uniform int texType; // eTextureType: 0 - rgba, 1 - rgbx, 2 - ext +// uniform int skipCM; +uniform int sourceTF; // eTransferFunction +uniform int targetTF; // eTransferFunction +uniform mat4x2 sourcePrimaries; +uniform mat4x2 targetPrimaries; + +uniform float alpha; + +uniform int discardOpaque; +uniform int discardAlpha; +uniform float discardAlphaValue; + +uniform int applyTint; +uniform vec3 tint; + +#include "rounding.glsl" +#include "CM.glsl" + +layout(location = 0) out vec4 fragColor; +void main() { + vec4 pixColor; + if (texType == 1) + pixColor = vec4(texture(tex, v_texcoord).rgb, 1.0); +// else if (texType == 2) +// pixColor = texture(texture0, v_texcoord); + else // assume rgba + pixColor = texture(tex, v_texcoord); + + if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) + discard; + + if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue) + discard; + + // this shader shouldn't be used when skipCM == 1 + pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + + if (applyTint == 1) + pixColor = vec4(pixColor.rgb * tint.rgb, pixColor[3]); + + if (radius > 0.0) + pixColor = rounding(pixColor); + + fragColor = pixColor * alpha; +} diff --git a/src/render/shaders/CM.frag b/src/render/shaders/glsl/CM.glsl similarity index 79% rename from src/render/shaders/CM.frag rename to src/render/shaders/glsl/CM.glsl index aa26f97d..4cf2745c 100644 --- a/src/render/shaders/CM.frag +++ b/src/render/shaders/glsl/CM.glsl @@ -1,37 +1,9 @@ -R"#( -#version 320 es -//#extension GL_OES_EGL_image_external : require - -precision highp float; -in vec2 v_texcoord; -uniform sampler2D tex; -//uniform samplerExternalOES texture0; - -uniform int texType; // eTextureType: 0 - rgba, 1 - rgbx, 2 - ext -uniform int sourceTF; // eTransferFunction -uniform int targetTF; // eTransferFunction -uniform mat4x2 sourcePrimaries; -uniform mat4x2 targetPrimaries; uniform float maxLuminance; uniform float dstMaxLuminance; uniform float dstRefLuminance; uniform float sdrSaturation; uniform float sdrBrightnessMultiplier; -uniform float alpha; - -uniform vec2 topLeft; -uniform vec2 fullSize; -uniform float radius; -uniform float roundingPower; - -uniform int discardOpaque; -uniform int discardAlpha; -uniform float discardAlphaValue; - -uniform int applyTint; -uniform vec3 tint; - //enum eTransferFunction #define CM_TRANSFER_FUNCTION_BT1886 1 #define CM_TRANSFER_FUNCTION_GAMMA22 2 @@ -78,31 +50,7 @@ uniform vec3 tint; #define HDR_MAX_LUMINANCE 10000.0 #define HLG_MAX_LUMINANCE 1000.0 -// smoothing constant for the edge: more = blurrier, but smoother -#define M_PI 3.1415926535897932384626433832795 #define M_E 2.718281828459045 -#define SMOOTHING_CONSTANT (M_PI / 5.34665792551) - -vec4 rounding(vec4 color) { - highp vec2 pixCoord = vec2(gl_FragCoord); - pixCoord -= topLeft + fullSize * 0.5; - pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0; - pixCoord -= fullSize * 0.5 - radius; - pixCoord += vec2(1.0, 1.0) / fullSize; // center the pix dont make it top-left - - if (pixCoord.x + pixCoord.y > radius) { - float dist = pow(pow(pixCoord.x, roundingPower) + pow(pixCoord.y, roundingPower), 1.0/roundingPower); - - if (dist > radius + SMOOTHING_CONSTANT) - discard; - - float normalized = 1.0 - smoothstep(0.0, 1.0, (dist - radius + SMOOTHING_CONSTANT) / (SMOOTHING_CONSTANT * 2.0)); - - color *= normalized; - } - - return color; -} vec3 xy2xyz(vec2 xy) { if (xy.y == 0.0) @@ -391,50 +339,26 @@ vec4 tonemap(vec4 color, mat3 dstXYZ) { return vec4(fromLMS * toLinear(vec4(ICtCpPQInv * ICtCp, 1.0), CM_TRANSFER_FUNCTION_ST2084_PQ).rgb * HDR_MAX_LUMINANCE, color[3]); } -layout(location = 0) out vec4 fragColor; -void main() { - vec4 pixColor; - if (texType == 1) - pixColor = vec4(texture(tex, v_texcoord).rgb, 1.0); -// else if (texType == 2) -// pixColor = texture(texture0, v_texcoord); - else // assume rgba - pixColor = texture(tex, v_texcoord); - - if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) - discard; - - if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue) - discard; - - pixColor.rgb /= max(pixColor.a, 0.001); - pixColor.rgb = toLinearRGB(pixColor.rgb, sourceTF); - mat3 srcxyz = primaries2xyz(sourcePrimaries); - mat3 dstxyz; - - if (sourcePrimaries == targetPrimaries) - dstxyz = srcxyz; - else { - dstxyz = primaries2xyz(targetPrimaries); - pixColor = convertPrimaries(pixColor, srcxyz, sourcePrimaries[3], dstxyz, targetPrimaries[3]); - } - - pixColor = toNit(pixColor, sourceTF); - pixColor.rgb *= pixColor.a; - pixColor = tonemap(pixColor, dstxyz); - - if (sourceTF == CM_TRANSFER_FUNCTION_SRGB && targetTF == CM_TRANSFER_FUNCTION_ST2084_PQ) - pixColor = saturate(pixColor, srcxyz, sdrSaturation); - - pixColor *= sdrBrightnessMultiplier; - pixColor = fromLinearNit(pixColor, targetTF); - - if (applyTint == 1) - pixColor = vec4(pixColor.rgb * tint.rgb, pixColor[3]); - - if (radius > 0.0) - pixColor = rounding(pixColor); - - fragColor = pixColor * alpha; +vec4 doColorManagement(vec4 pixColor, int srcTF, mat4x2 srcPrimaries, int dstTF, mat4x2 dstPrimaries) { + pixColor.rgb /= max(pixColor.a, 0.001); + pixColor.rgb = toLinearRGB(pixColor.rgb, srcTF); + mat3 srcxyz = primaries2xyz(srcPrimaries); + mat3 dstxyz; + if (srcPrimaries == dstPrimaries) + dstxyz = srcxyz; + else { + dstxyz = primaries2xyz(dstPrimaries); + pixColor = convertPrimaries(pixColor, srcxyz, srcPrimaries[3], dstxyz, dstPrimaries[3]); + } + pixColor = toNit(pixColor, srcTF); + pixColor.rgb *= pixColor.a; + pixColor = tonemap(pixColor, dstxyz); + pixColor = fromLinearNit(pixColor, dstTF); + if (srcTF == CM_TRANSFER_FUNCTION_SRGB && dstTF == CM_TRANSFER_FUNCTION_ST2084_PQ) { + pixColor = saturate(pixColor, srcxyz, sdrSaturation); + pixColor.rgb /= pixColor.a; + pixColor.rgb *= sdrBrightnessMultiplier; + pixColor.rgb *= pixColor.a; + } + return pixColor; } -)#" diff --git a/src/render/shaders/glsl/blur1.frag b/src/render/shaders/glsl/blur1.frag new file mode 100644 index 00000000..dbabd610 --- /dev/null +++ b/src/render/shaders/glsl/blur1.frag @@ -0,0 +1,141 @@ +#version 100 +precision highp float; +varying highp vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float radius; +uniform vec2 halfpixel; +uniform int passes; +uniform float vibrancy; +uniform float vibrancy_darkness; + +// see http://alienryderflex.com/hsp.html +const float Pr = 0.299; +const float Pg = 0.587; +const float Pb = 0.114; + +// Y is "v" ( brightness ). X is "s" ( saturation ) +// see https://www.desmos.com/3d/a88652b9a4 +// Determines if high brightness or high saturation is more important +const float a = 0.93; +const float b = 0.11; +const float c = 0.66; // Determines the smoothness of the transition of unboosted to boosted colors +// + +// http://www.flong.com/archive/texts/code/shapers_circ/ +float doubleCircleSigmoid(float x, float a) { + a = clamp(a, 0.0, 1.0); + + float y = .0; + if (x <= a) { + y = a - sqrt(a * a - x * x); + } else { + y = a + sqrt(pow(1. - a, 2.) - pow(x - 1., 2.)); + } + return y; +} + +vec3 rgb2hsl(vec3 col) { + float red = col.r; + float green = col.g; + float blue = col.b; + + float minc = min(col.r, min(col.g, col.b)); + float maxc = max(col.r, max(col.g, col.b)); + float delta = maxc - minc; + + float lum = (minc + maxc) * 0.5; + float sat = 0.0; + float hue = 0.0; + + if (lum > 0.0 && lum < 1.0) { + float mul = (lum < 0.5) ? (lum) : (1.0 - lum); + sat = delta / (mul * 2.0); + } + + if (delta > 0.0) { + vec3 maxcVec = vec3(maxc); + vec3 masks = vec3(equal(maxcVec, col)) * vec3(notEqual(maxcVec, vec3(green, blue, red))); + vec3 adds = vec3(0.0, 2.0, 4.0) + vec3(green - blue, blue - red, red - green) / delta; + + hue += dot(adds, masks); + hue /= 6.0; + + if (hue < 0.0) + hue += 1.0; + } + + return vec3(hue, sat, lum); +} + +vec3 hsl2rgb(vec3 col) { + const float onethird = 1.0 / 3.0; + const float twothird = 2.0 / 3.0; + const float rcpsixth = 6.0; + + float hue = col.x; + float sat = col.y; + float lum = col.z; + + vec3 xt = vec3(0.0); + + if (hue < onethird) { + xt.r = rcpsixth * (onethird - hue); + xt.g = rcpsixth * hue; + xt.b = 0.0; + } else if (hue < twothird) { + xt.r = 0.0; + xt.g = rcpsixth * (twothird - hue); + xt.b = rcpsixth * (hue - onethird); + } else + xt = vec3(rcpsixth * (hue - twothird), 0.0, rcpsixth * (1.0 - hue)); + + xt = min(xt, 1.0); + + float sat2 = 2.0 * sat; + float satinv = 1.0 - sat; + float luminv = 1.0 - lum; + float lum2m1 = (2.0 * lum) - 1.0; + vec3 ct = (sat2 * xt) + satinv; + + vec3 rgb; + if (lum >= 0.5) + rgb = (luminv * ct) + lum2m1; + else + rgb = lum * ct; + + return rgb; +} + +void main() { + vec2 uv = v_texcoord * 2.0; + + vec4 sum = texture2D(tex, uv) * 4.0; + sum += texture2D(tex, uv - halfpixel.xy * radius); + sum += texture2D(tex, uv + halfpixel.xy * radius); + sum += texture2D(tex, uv + vec2(halfpixel.x, -halfpixel.y) * radius); + sum += texture2D(tex, uv - vec2(halfpixel.x, -halfpixel.y) * radius); + + vec4 color = sum / 8.0; + + if (vibrancy == 0.0) { + gl_FragColor = color; + } else { + // Invert it so that it correctly maps to the config setting + float vibrancy_darkness1 = 1.0 - vibrancy_darkness; + + // Decrease the RGB components based on their perceived brightness, to prevent visually dark colors from overblowing the rest. + vec3 hsl = rgb2hsl(color.rgb); + // Calculate perceived brightness, as not boost visually dark colors like deep blue as much as equally saturated yellow + float perceivedBrightness = doubleCircleSigmoid(sqrt(color.r * color.r * Pr + color.g * color.g * Pg + color.b * color.b * Pb), 0.8 * vibrancy_darkness1); + + float b1 = b * vibrancy_darkness1; + float boostBase = hsl[1] > 0.0 ? smoothstep(b1 - c * 0.5, b1 + c * 0.5, 1.0 - (pow(1.0 - hsl[1] * cos(a), 2.0) + pow(1.0 - perceivedBrightness * sin(a), 2.0))) : 0.0; + + float saturation = clamp(hsl[1] + (boostBase * vibrancy) / float(passes), 0.0, 1.0); + + vec3 newColor = hsl2rgb(vec3(hsl[0], saturation, hsl[2])); + + gl_FragColor = vec4(newColor, color[3]); + } +} diff --git a/src/render/shaders/glsl/blur2.frag b/src/render/shaders/glsl/blur2.frag new file mode 100644 index 00000000..dfd8eeab --- /dev/null +++ b/src/render/shaders/glsl/blur2.frag @@ -0,0 +1,23 @@ +#version 100 +precision highp float; +varying highp vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float radius; +uniform vec2 halfpixel; + +void main() { + vec2 uv = v_texcoord / 2.0; + + vec4 sum = texture2D(tex, uv + vec2(-halfpixel.x * 2.0, 0.0) * radius); + + sum += texture2D(tex, uv + vec2(-halfpixel.x, halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, uv + vec2(0.0, halfpixel.y * 2.0) * radius); + sum += texture2D(tex, uv + vec2(halfpixel.x, halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, uv + vec2(halfpixel.x * 2.0, 0.0) * radius); + sum += texture2D(tex, uv + vec2(halfpixel.x, -halfpixel.y) * radius) * 2.0; + sum += texture2D(tex, uv + vec2(0.0, -halfpixel.y * 2.0) * radius); + sum += texture2D(tex, uv + vec2(-halfpixel.x, -halfpixel.y) * radius) * 2.0; + + gl_FragColor = sum / 12.0; +} diff --git a/src/render/shaders/glsl/blurfinish.frag b/src/render/shaders/glsl/blurfinish.frag new file mode 100644 index 00000000..6ab48337 --- /dev/null +++ b/src/render/shaders/glsl/blurfinish.frag @@ -0,0 +1,32 @@ +#version 300 es +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float noise; +uniform float brightness; + +float hash(vec2 p) { + vec3 p3 = fract(vec3(p.xyx) * 1689.1984); + p3 += dot(p3, p3.yzx + 33.33); + return fract((p3.x + p3.y) * p3.z); +} + +layout(location = 0) out vec4 fragColor; +void main() { + vec4 pixColor = texture(tex, v_texcoord); + + // noise + float noiseHash = hash(v_texcoord); + float noiseAmount = (mod(noiseHash, 1.0) - 0.5); + pixColor.rgb += noiseAmount * noise; + + // brightness + if (brightness < 1.0) { + pixColor.rgb *= brightness; + } + + fragColor = pixColor; +} diff --git a/src/render/shaders/glsl/blurfinish_legacy.frag b/src/render/shaders/glsl/blurfinish_legacy.frag new file mode 100644 index 00000000..2a7ebca1 --- /dev/null +++ b/src/render/shaders/glsl/blurfinish_legacy.frag @@ -0,0 +1,28 @@ +precision highp float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float noise; +uniform float brightness; + +float hash(vec2 p) { + vec3 p3 = fract(vec3(p.xyx) * 1689.1984); + p3 += dot(p3, p3.yzx + 33.33); + return fract((p3.x + p3.y) * p3.z); +} + +void main() { + vec4 pixColor = texture2D(tex, v_texcoord); + + // noise + float noiseHash = hash(v_texcoord); + float noiseAmount = (mod(noiseHash, 1.0) - 0.5); + pixColor.rgb += noiseAmount * noise; + + // brightness + if (brightness < 1.0) { + pixColor.rgb *= brightness; + } + + gl_FragColor = pixColor; +} diff --git a/src/render/shaders/glsl/blurprepare.frag b/src/render/shaders/glsl/blurprepare.frag new file mode 100644 index 00000000..0be2d53a --- /dev/null +++ b/src/render/shaders/glsl/blurprepare.frag @@ -0,0 +1,58 @@ +#version 300 es +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float contrast; +uniform float brightness; + +uniform int skipCM; +uniform int sourceTF; // eTransferFunction +uniform int targetTF; // eTransferFunction +uniform mat4x2 sourcePrimaries; +uniform mat4x2 targetPrimaries; + +#include "CM.glsl" + +float gain(float x, float k) { + float a = 0.5 * pow(2.0 * ((x < 0.5) ? x : 1.0 - x), k); + return (x < 0.5) ? a : 1.0 - a; +} + +layout(location = 0) out vec4 fragColor; +void main() { + vec4 pixColor = texture(tex, v_texcoord); + + if (skipCM == 0) { + if (sourceTF == CM_TRANSFER_FUNCTION_ST2084_PQ) { + pixColor.rgb /= sdrBrightnessMultiplier; + } + pixColor.rgb = toLinearRGB(pixColor.rgb, sourceTF); + mat3 srcxyz = primaries2xyz(sourcePrimaries); + mat3 dstxyz; + if (sourcePrimaries == targetPrimaries) + dstxyz = srcxyz; + else { + dstxyz = primaries2xyz(targetPrimaries); + pixColor = convertPrimaries(pixColor, srcxyz, sourcePrimaries[3], dstxyz, targetPrimaries[3]); + } + pixColor = toNit(pixColor, sourceTF); + pixColor = fromLinearNit(pixColor, targetTF); + } + + // contrast + if (contrast != 1.0) { + pixColor.r = gain(pixColor.r, contrast); + pixColor.g = gain(pixColor.g, contrast); + pixColor.b = gain(pixColor.b, contrast); + } + + // brightness + if (brightness > 1.0) { + pixColor.rgb *= brightness; + } + + fragColor = pixColor; +} diff --git a/src/render/shaders/glsl/blurprepare_legacy.frag b/src/render/shaders/glsl/blurprepare_legacy.frag new file mode 100644 index 00000000..2df933d5 --- /dev/null +++ b/src/render/shaders/glsl/blurprepare_legacy.frag @@ -0,0 +1,29 @@ +precision highp float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +uniform float contrast; +uniform float brightness; + +float gain(float x, float k) { + float a = 0.5 * pow(2.0 * ((x < 0.5) ? x : 1.0 - x), k); + return (x < 0.5) ? a : 1.0 - a; +} + +void main() { + vec4 pixColor = texture2D(tex, v_texcoord); + + // contrast + if (contrast != 1.0) { + pixColor.r = gain(pixColor.r, contrast); + pixColor.g = gain(pixColor.g, contrast); + pixColor.b = gain(pixColor.b, contrast); + } + + // brightness + if (brightness > 1.0) { + pixColor.rgb *= brightness; + } + + gl_FragColor = pixColor; +} diff --git a/src/render/shaders/glsl/border.frag b/src/render/shaders/glsl/border.frag new file mode 100644 index 00000000..68541e14 --- /dev/null +++ b/src/render/shaders/glsl/border.frag @@ -0,0 +1,183 @@ +#version 300 es +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec2 v_texcoord; + +uniform int skipCM; +uniform int sourceTF; // eTransferFunction +uniform int targetTF; // eTransferFunction +uniform mat4x2 sourcePrimaries; +uniform mat4x2 targetPrimaries; + +uniform vec2 fullSizeUntransformed; +uniform float radiusOuter; +uniform float thick; + +// Gradients are in OkLabA!!!! {l, a, b, alpha} +uniform vec4 gradient[10]; +uniform vec4 gradient2[10]; +uniform int gradientLength; +uniform int gradient2Length; +uniform float angle; +uniform float angle2; +uniform float gradientLerp; +uniform float alpha; + +#include "rounding.glsl" +#include "CM.glsl" + +vec4 okLabAToSrgb(vec4 lab) { + float l = pow(lab[0] + lab[1] * 0.3963377774 + lab[2] * 0.2158037573, 3.0); + float m = pow(lab[0] + lab[1] * (-0.1055613458) + lab[2] * (-0.0638541728), 3.0); + float s = pow(lab[0] + lab[1] * (-0.0894841775) + lab[2] * (-1.2914855480), 3.0); + + return vec4(fromLinearRGB( + vec3( + l * 4.0767416621 + m * -3.3077115913 + s * 0.2309699292, + l * (-1.2684380046) + m * 2.6097574011 + s * (-0.3413193965), + l * (-0.0041960863) + m * (-0.7034186147) + s * 1.7076147010 + ), CM_TRANSFER_FUNCTION_SRGB + ), lab[3]); +} + +vec4 getOkColorForCoordArray1(vec2 normalizedCoord) { + if (gradientLength < 2) + return gradient[0]; + + float finalAng = 0.0; + + if (angle > 4.71 /* 270 deg */) { + normalizedCoord[1] = 1.0 - normalizedCoord[1]; + finalAng = 6.28 - angle; + } else if (angle > 3.14 /* 180 deg */) { + normalizedCoord[0] = 1.0 - normalizedCoord[0]; + normalizedCoord[1] = 1.0 - normalizedCoord[1]; + finalAng = angle - 3.14; + } else if (angle > 1.57 /* 90 deg */) { + normalizedCoord[0] = 1.0 - normalizedCoord[0]; + finalAng = 3.14 - angle; + } else { + finalAng = angle; + } + + float sine = sin(finalAng); + + float progress = (normalizedCoord[1] * sine + normalizedCoord[0] * (1.0 - sine)) * float(gradientLength - 1); + int bottom = int(floor(progress)); + int top = bottom + 1; + + return gradient[top] * (progress - float(bottom)) + gradient[bottom] * (float(top) - progress); +} + +vec4 getOkColorForCoordArray2(vec2 normalizedCoord) { + if (gradient2Length < 2) + return gradient2[0]; + + float finalAng = 0.0; + + if (angle2 > 4.71 /* 270 deg */) { + normalizedCoord[1] = 1.0 - normalizedCoord[1]; + finalAng = 6.28 - angle; + } else if (angle2 > 3.14 /* 180 deg */) { + normalizedCoord[0] = 1.0 - normalizedCoord[0]; + normalizedCoord[1] = 1.0 - normalizedCoord[1]; + finalAng = angle - 3.14; + } else if (angle2 > 1.57 /* 90 deg */) { + normalizedCoord[0] = 1.0 - normalizedCoord[0]; + finalAng = 3.14 - angle2; + } else { + finalAng = angle2; + } + + float sine = sin(finalAng); + + float progress = (normalizedCoord[1] * sine + normalizedCoord[0] * (1.0 - sine)) * float(gradient2Length - 1); + int bottom = int(floor(progress)); + int top = bottom + 1; + + return gradient2[top] * (progress - float(bottom)) + gradient2[bottom] * (float(top) - progress); +} + +vec4 getColorForCoord(vec2 normalizedCoord) { + vec4 result1 = getOkColorForCoordArray1(normalizedCoord); + + if (gradient2Length <= 0) + return okLabAToSrgb(result1); + + vec4 result2 = getOkColorForCoordArray2(normalizedCoord); + + return okLabAToSrgb(mix(result1, result2, gradientLerp)); +} + +layout(location = 0) out vec4 fragColor; +void main() { + highp vec2 pixCoord = vec2(gl_FragCoord); + highp vec2 pixCoordOuter = pixCoord; + highp vec2 originalPixCoord = v_texcoord; + originalPixCoord *= fullSizeUntransformed; + float additionalAlpha = 1.0; + + vec4 pixColor = vec4(1.0, 1.0, 1.0, 1.0); + + bool done = false; + + pixCoord -= topLeft + fullSize * 0.5; + pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0; + pixCoordOuter = pixCoord; + pixCoord -= fullSize * 0.5 - radius; + pixCoordOuter -= fullSize * 0.5 - radiusOuter; + + // center the pixes dont make it top-left + pixCoord += vec2(1.0, 1.0) / fullSize; + pixCoordOuter += vec2(1.0, 1.0) / fullSize; + + if (min(pixCoord.x, pixCoord.y) > 0.0 && radius > 0.0) { + float dist = pow(pow(pixCoord.x,roundingPower)+pow(pixCoord.y,roundingPower),1.0/roundingPower); + float distOuter = pow(pow(pixCoordOuter.x,roundingPower)+pow(pixCoordOuter.y,roundingPower),1.0/roundingPower); + float h = (thick / 2.0); + + if (dist < radius - h) { + // lower + float normalized = smoothstep(0.0, 1.0, (dist - radius + thick + SMOOTHING_CONSTANT) / (SMOOTHING_CONSTANT * 2.0)); + additionalAlpha *= normalized; + done = true; + } else if (min(pixCoordOuter.x, pixCoordOuter.y) > 0.0) { + // higher + float normalized = 1.0 - smoothstep(0.0, 1.0, (distOuter - radiusOuter + SMOOTHING_CONSTANT) / (SMOOTHING_CONSTANT * 2.0)); + additionalAlpha *= normalized; + done = true; + } else if (distOuter < radiusOuter - h) { + additionalAlpha = 1.0; + done = true; + } + } + + // now check for other shit + if (!done) { + // distance to all straight bb borders + float distanceT = originalPixCoord[1]; + float distanceB = fullSizeUntransformed[1] - originalPixCoord[1]; + float distanceL = originalPixCoord[0]; + float distanceR = fullSizeUntransformed[0] - originalPixCoord[0]; + + // get the smallest + float smallest = min(min(distanceT, distanceB), min(distanceL, distanceR)); + + if (smallest > thick) + discard; + } + + if (additionalAlpha == 0.0) + discard; + + pixColor = getColorForCoord(v_texcoord); + pixColor.rgb *= pixColor[3]; + + if (skipCM == 0) + pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + + pixColor *= alpha * additionalAlpha; + + fragColor = pixColor; +} diff --git a/src/render/shaders/Border.hpp b/src/render/shaders/glsl/border_legacy.frag similarity index 92% rename from src/render/shaders/Border.hpp rename to src/render/shaders/glsl/border_legacy.frag index 3b9a91f0..39842be5 100644 --- a/src/render/shaders/Border.hpp +++ b/src/render/shaders/glsl/border_legacy.frag @@ -1,21 +1,11 @@ -#pragma once +#extension GL_ARB_shading_language_include : enable -#include -#include -#include "SharedValues.hpp" - -// makes a stencil without corners -inline const std::string FRAGBORDER1 = R"#( precision highp float; varying vec4 v_color; varying vec2 v_texcoord; -uniform vec2 topLeft; -uniform vec2 fullSize; uniform vec2 fullSizeUntransformed; -uniform float radius; uniform float radiusOuter; -uniform float roundingPower; uniform float thick; // Gradients are in OkLabA!!!! {l, a, b, alpha} @@ -28,6 +18,8 @@ uniform float angle2; uniform float gradientLerp; uniform float alpha; +#include "rounding.glsl" + float linearToGamma(float x) { return x >= 0.0031308 ? 1.055 * pow(x, 0.416666666) - 0.055 : 12.92 * x; } @@ -135,13 +127,9 @@ void main() { pixCoordOuter += vec2(1.0, 1.0) / fullSize; if (min(pixCoord.x, pixCoord.y) > 0.0 && radius > 0.0) { - // smoothing constant for the edge: more = blurrier, but smoother - const float SMOOTHING_CONSTANT = )#" + - std::format("{:.7f}", SHADER_ROUNDED_SMOOTHING_FACTOR) + R"#(; - float dist = pow(pow(pixCoord.x,roundingPower)+pow(pixCoord.y,roundingPower),1.0/roundingPower); float distOuter = pow(pow(pixCoordOuter.x,roundingPower)+pow(pixCoordOuter.y,roundingPower),1.0/roundingPower); - float h = (thick / 2.0); + float h = (thick / 2.0); if (dist < radius - h) { // lower @@ -184,4 +172,3 @@ void main() { gl_FragColor = pixColor; } -)#"; diff --git a/src/render/shaders/glsl/ext.frag b/src/render/shaders/glsl/ext.frag new file mode 100644 index 00000000..3b71f59c --- /dev/null +++ b/src/render/shaders/glsl/ext.frag @@ -0,0 +1,35 @@ +#extension GL_ARB_shading_language_include : enable +#extension GL_OES_EGL_image_external : require + +precision highp float; +varying vec2 v_texcoord; +uniform samplerExternalOES texture0; +uniform float alpha; + +#include "rounding.glsl" + +uniform int discardOpaque; +uniform int discardAlpha; +uniform int discardAlphaValue; + +uniform int applyTint; +uniform vec3 tint; + +void main() { + + vec4 pixColor = texture2D(texture0, v_texcoord); + + if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) + discard; + + if (applyTint == 1) { + pixColor[0] = pixColor[0] * tint[0]; + pixColor[1] = pixColor[1] * tint[1]; + pixColor[2] = pixColor[2] * tint[2]; + } + + if (radius > 0.0) + pixColor = rounding(pixColor); + + gl_FragColor = pixColor * alpha; +} diff --git a/src/render/shaders/glsl/glitch.frag b/src/render/shaders/glsl/glitch.frag new file mode 100644 index 00000000..f1dc121e --- /dev/null +++ b/src/render/shaders/glsl/glitch.frag @@ -0,0 +1,64 @@ +precision highp float; +varying vec2 v_texcoord; +uniform sampler2D tex; +uniform float time; // quirk: time is set to 0 at the beginning, should be around 10 when crash. +uniform float distort; +uniform vec2 screenSize; + +float rand(float co) { + return fract(sin(dot(vec2(co, co), vec2(12.9898, 78.233))) * 43758.5453); +} + +float rand(vec2 co) { + return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); +} + +float noise(vec2 point) { + vec2 floored = floor(point); + vec2 fractal = fract(point); + fractal = fractal * fractal * (3.0 - 2.0 * fractal); + + float mixed = mix( + mix(rand(floored), rand(floored + vec2(1.0, 0.0)), fractal.x), + mix(rand(floored + vec2(0.0,1.0)), rand(floored + vec2(1.0,1.0)), fractal.x), fractal.y); + return mixed * mixed; +} + +void main() { + float ABERR_OFFSET = 4.0 * (distort / 5.5) * time; + float TEAR_AMOUNT = 9000.0 * (1.0 - (distort / 5.5)); + float TEAR_BANDS = 108.0 / 2.0 * (distort / 5.5) * 2.0; + float MELT_AMOUNT = (distort * 8.0) / screenSize.y; + + float NOISE = abs(mod(noise(v_texcoord) * distort * time * 2.771, 1.0)) * time / 10.0; + if (time < 2.0) + NOISE = 0.0; + + float offset = (mod(rand(floor(v_texcoord.y * TEAR_BANDS)) * 318.772 * time, 20.0) - 10.0) / TEAR_AMOUNT; + + vec2 blockOffset = vec2(((abs(mod(rand(floor(v_texcoord.x * 37.162)) * 721.43, 100.0))) - 50.0) / 200000.0 * pow(time, 3.0), + ((abs(mod(rand(floor(v_texcoord.y * 45.882)) * 733.923, 100.0))) - 50.0) / 200000.0 * pow(time, 3.0)); + if (time < 3.0) + blockOffset = vec2(0,0); + + float meltSeed = abs(mod(rand(floor(v_texcoord.x * screenSize.x * 17.719)) * 281.882, 1.0)); + if (meltSeed < 0.8) { + meltSeed = 0.0; + } else { + meltSeed *= 25.0 * NOISE; + } + float meltAmount = MELT_AMOUNT * meltSeed; + + vec2 pixCoord = vec2(v_texcoord.x + offset + NOISE * 3.0 / screenSize.x + blockOffset.x, v_texcoord.y - meltAmount + 0.02 * NOISE / screenSize.x + NOISE * 3.0 / screenSize.y + blockOffset.y); + + vec4 pixColor = texture2D(tex, pixCoord); + vec4 pixColorLeft = texture2D(tex, pixCoord + vec2(ABERR_OFFSET / screenSize.x, 0)); + vec4 pixColorRight = texture2D(tex, pixCoord + vec2(-ABERR_OFFSET / screenSize.x, 0)); + + pixColor[0] = pixColorLeft[0]; + pixColor[2] = pixColorRight[2]; + + pixColor[0] += distort / 90.0; + + gl_FragColor = pixColor; +} diff --git a/src/render/shaders/glsl/passthru.frag b/src/render/shaders/glsl/passthru.frag new file mode 100644 index 00000000..532b5525 --- /dev/null +++ b/src/render/shaders/glsl/passthru.frag @@ -0,0 +1,7 @@ +precision highp float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; + +void main() { + gl_FragColor = texture2D(tex, v_texcoord); +} diff --git a/src/render/shaders/glsl/quad.frag b/src/render/shaders/glsl/quad.frag new file mode 100644 index 00000000..303d1a81 --- /dev/null +++ b/src/render/shaders/glsl/quad.frag @@ -0,0 +1,14 @@ +#extension GL_ARB_shading_language_include : enable +precision highp float; +varying vec4 v_color; + +#include "rounding.glsl" + +void main() { + vec4 pixColor = v_color; + + if (radius > 0.0) + pixColor = rounding(pixColor); + + gl_FragColor = pixColor; +} diff --git a/src/render/shaders/glsl/rgba.frag b/src/render/shaders/glsl/rgba.frag new file mode 100644 index 00000000..ac2d237d --- /dev/null +++ b/src/render/shaders/glsl/rgba.frag @@ -0,0 +1,36 @@ +#extension GL_ARB_shading_language_include : enable +precision highp float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; +uniform float alpha; + +#include "rounding.glsl" + +uniform int discardOpaque; +uniform int discardAlpha; +uniform float discardAlphaValue; + +uniform int applyTint; +uniform vec3 tint; + +void main() { + + vec4 pixColor = texture2D(tex, v_texcoord); + + if (discardOpaque == 1 && pixColor[3] * alpha == 1.0) + discard; + + if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue) + discard; + + if (applyTint == 1) { + pixColor[0] = pixColor[0] * tint[0]; + pixColor[1] = pixColor[1] * tint[1]; + pixColor[2] = pixColor[2] * tint[2]; + } + + if (radius > 0.0) + pixColor = rounding(pixColor); + + gl_FragColor = pixColor * alpha; +} diff --git a/src/render/shaders/glsl/rgbamatte.frag b/src/render/shaders/glsl/rgbamatte.frag new file mode 100644 index 00000000..618e495f --- /dev/null +++ b/src/render/shaders/glsl/rgbamatte.frag @@ -0,0 +1,8 @@ +precision highp float; +varying vec2 v_texcoord; // is in 0-1 +uniform sampler2D tex; +uniform sampler2D texMatte; + +void main() { + gl_FragColor = texture2D(tex, v_texcoord) * texture2D(texMatte, v_texcoord)[0]; // I know it only uses R, but matte should be black/white anyways. +} diff --git a/src/render/shaders/glsl/rgbx.frag b/src/render/shaders/glsl/rgbx.frag new file mode 100644 index 00000000..2a2aad63 --- /dev/null +++ b/src/render/shaders/glsl/rgbx.frag @@ -0,0 +1,33 @@ +#extension GL_ARB_shading_language_include : enable +precision highp float; +varying vec2 v_texcoord; +uniform sampler2D tex; +uniform float alpha; + +#include "rounding.glsl" + +uniform int discardOpaque; +uniform int discardAlpha; +uniform int discardAlphaValue; + +uniform int applyTint; +uniform vec3 tint; + +void main() { + + if (discardOpaque == 1 && alpha == 1.0) + discard; + + vec4 pixColor = vec4(texture2D(tex, v_texcoord).rgb, 1.0); + + if (applyTint == 1) { + pixColor[0] = pixColor[0] * tint[0]; + pixColor[1] = pixColor[1] * tint[1]; + pixColor[2] = pixColor[2] * tint[2]; + } + + if (radius > 0.0) + pixColor = rounding(pixColor); + + gl_FragColor = pixColor * alpha; +} diff --git a/src/render/shaders/glsl/rounding.glsl b/src/render/shaders/glsl/rounding.glsl new file mode 100644 index 00000000..cae34465 --- /dev/null +++ b/src/render/shaders/glsl/rounding.glsl @@ -0,0 +1,29 @@ +// smoothing constant for the edge: more = blurrier, but smoother +#define M_PI 3.1415926535897932384626433832795 +#define SMOOTHING_CONSTANT (M_PI / 5.34665792551) + +uniform float radius; +uniform float roundingPower; +uniform vec2 topLeft; +uniform vec2 fullSize; + +vec4 rounding(vec4 color) { + vec2 pixCoord = vec2(gl_FragCoord); + pixCoord -= topLeft + fullSize * 0.5; + pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0; + pixCoord -= fullSize * 0.5 - radius; + pixCoord += vec2(1.0, 1.0) / fullSize; // center the pix dont make it top-left + + if (pixCoord.x + pixCoord.y > radius) { + float dist = pow(pow(pixCoord.x, roundingPower) + pow(pixCoord.y, roundingPower), 1.0/roundingPower); + + if (dist > radius + SMOOTHING_CONSTANT) + discard; + + float normalized = 1.0 - smoothstep(0.0, 1.0, (dist - radius + SMOOTHING_CONSTANT) / (SMOOTHING_CONSTANT * 2.0)); + + color *= normalized; + } + + return color; +} diff --git a/src/render/shaders/glsl/shadow.frag b/src/render/shaders/glsl/shadow.frag new file mode 100644 index 00000000..7a930f96 --- /dev/null +++ b/src/render/shaders/glsl/shadow.frag @@ -0,0 +1,100 @@ +#version 300 es +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec4 v_color; +in vec2 v_texcoord; + +uniform int skipCM; +uniform int sourceTF; // eTransferFunction +uniform int targetTF; // eTransferFunction +uniform mat4x2 sourcePrimaries; +uniform mat4x2 targetPrimaries; + +uniform vec2 topLeft; +uniform vec2 bottomRight; +uniform vec2 fullSize; +uniform float radius; +uniform float roundingPower; +uniform float range; +uniform float shadowPower; + +#include "CM.glsl" + +float pixAlphaRoundedDistance(float distanceToCorner) { + if (distanceToCorner > radius) { + return 0.0; + } + + if (distanceToCorner > radius - range) { + return pow((range - (distanceToCorner - radius + range)) / range, shadowPower); // i think? + } + + return 1.0; +} + +float modifiedLength(vec2 a) { + return pow(pow(abs(a.x),roundingPower)+pow(abs(a.y),roundingPower),1.0/roundingPower); +} + +layout(location = 0) out vec4 fragColor; +void main() { + + vec4 pixColor = v_color; + float originalAlpha = pixColor[3]; + + bool done = false; + + vec2 pixCoord = fullSize * v_texcoord; + + // ok, now we check the distance to a border. + + if (pixCoord[0] < topLeft[0]) { + if (pixCoord[1] < topLeft[1]) { + // top left + pixColor[3] = pixColor[3] * pixAlphaRoundedDistance(modifiedLength(pixCoord - topLeft)); + done = true; + } else if (pixCoord[1] > bottomRight[1]) { + // bottom left + pixColor[3] = pixColor[3] * pixAlphaRoundedDistance(modifiedLength(pixCoord - vec2(topLeft[0], bottomRight[1]))); + done = true; + } + } else if (pixCoord[0] > bottomRight[0]) { + if (pixCoord[1] < topLeft[1]) { + // top right + pixColor[3] = pixColor[3] * pixAlphaRoundedDistance(modifiedLength(pixCoord - vec2(bottomRight[0], topLeft[1]))); + done = true; + } else if (pixCoord[1] > bottomRight[1]) { + // bottom right + pixColor[3] = pixColor[3] * pixAlphaRoundedDistance(modifiedLength(pixCoord - bottomRight)); + done = true; + } + } + + if (!done) { + // distance to all straight bb borders + float distanceT = pixCoord[1]; + float distanceB = fullSize[1] - pixCoord[1]; + float distanceL = pixCoord[0]; + float distanceR = fullSize[0] - pixCoord[0]; + + // get the smallest + float smallest = min(min(distanceT, distanceB), min(distanceL, distanceR)); + + if (smallest < range) { + pixColor[3] = pixColor[3] * pow((smallest / range), shadowPower); + } + } + + if (pixColor[3] == 0.0) { + discard; return; + } + + // premultiply + pixColor.rgb *= pixColor[3]; + + if (skipCM == 0) + pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + + fragColor = pixColor; +} \ No newline at end of file diff --git a/src/render/shaders/Shadow.hpp b/src/render/shaders/glsl/shadow_legacy.frag similarity index 96% rename from src/render/shaders/Shadow.hpp rename to src/render/shaders/glsl/shadow_legacy.frag index c04d4bf3..bf929e63 100644 --- a/src/render/shaders/Shadow.hpp +++ b/src/render/shaders/glsl/shadow_legacy.frag @@ -1,8 +1,4 @@ -#pragma once - -#include - -inline const std::string FRAGSHADOW = R"#( +#extension GL_ARB_shading_language_include : enable precision highp float; varying vec4 v_color; varying vec2 v_texcoord; @@ -87,4 +83,4 @@ void main() { pixColor.rgb *= pixColor[3]; gl_FragColor = pixColor; -})#"; +} diff --git a/src/render/shaders/glsl/tex.vert b/src/render/shaders/glsl/tex.vert new file mode 100644 index 00000000..6ede6a8e --- /dev/null +++ b/src/render/shaders/glsl/tex.vert @@ -0,0 +1,15 @@ +uniform mat3 proj; +uniform vec4 color; +attribute vec2 pos; +attribute vec2 texcoord; +attribute vec2 texcoordMatte; +varying vec4 v_color; +varying vec2 v_texcoord; +varying vec2 v_texcoordMatte; + +void main() { + gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); + v_color = color; + v_texcoord = texcoord; + v_texcoordMatte = texcoordMatte; +} \ No newline at end of file diff --git a/src/render/shaders/glsl/tex300.vert b/src/render/shaders/glsl/tex300.vert new file mode 100644 index 00000000..f9f12998 --- /dev/null +++ b/src/render/shaders/glsl/tex300.vert @@ -0,0 +1,17 @@ +#version 300 es + +uniform mat3 proj; +uniform vec4 color; +in vec2 pos; +in vec2 texcoord; +in vec2 texcoordMatte; +out vec4 v_color; +out vec2 v_texcoord; +out vec2 v_texcoordMatte; + +void main() { + gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); + v_color = color; + v_texcoord = texcoord; + v_texcoordMatte = texcoordMatte; +} diff --git a/src/render/shaders/glsl/tex320.vert b/src/render/shaders/glsl/tex320.vert new file mode 100644 index 00000000..309bc02b --- /dev/null +++ b/src/render/shaders/glsl/tex320.vert @@ -0,0 +1,17 @@ +#version 320 es + +uniform mat3 proj; +uniform vec4 color; +in vec2 pos; +in vec2 texcoord; +in vec2 texcoordMatte; +out vec4 v_color; +out vec2 v_texcoord; +out vec2 v_texcoordMatte; + +void main() { + gl_Position = vec4(proj * vec3(pos, 1.0), 1.0); + v_color = color; + v_texcoord = texcoord; + v_texcoordMatte = texcoordMatte; +} From 4a79eea6dc7a2b121fc9ce9a3c9ecd0a89666dd8 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Sat, 29 Mar 2025 21:52:27 +0100 Subject: [PATCH 0021/1077] opengl: check for g_pHyprOpengl pointer (#9791) restore the pointer check to avoid null ptr dereference on compositor destruction. --- src/render/OpenGL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 2c455ba0..2a3723bd 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -3175,7 +3175,7 @@ CEGLSync::~CEGLSync() { if (sync == EGL_NO_SYNC_KHR) return; - if (g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) + if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) Debug::log(ERR, "eglDestroySyncKHR failed"); } From 46b00a4a861370e2ba560732df6f0783cf5cf9b5 Mon Sep 17 00:00:00 2001 From: micha4w <85169193+micha4w@users.noreply.github.com> Date: Sun, 30 Mar 2025 01:25:02 +0100 Subject: [PATCH 0022/1077] makefile: add new shaders to `make installheaders` (#9783) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6c79b8db..74cf0c66 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ installheaders: cmake --build ./build --config Release --target generate-protocol-headers - find src -name '*.h*' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland + find src -name '*.h*' -o -name '*.inc' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland cp ./protocols/*.h* ${PREFIX}/include/hyprland/protocols cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig if [ -d /usr/share/pkgconfig ]; then cp ./build/hyprland.pc /usr/share/pkgconfig 2>/dev/null || true; fi From 86c279d7d0df9a6f2a78b47f3ca966272a9b9ee0 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Sat, 29 Mar 2025 19:25:27 -0500 Subject: [PATCH 0023/1077] protocols: Don't update hdr metadata if image description is unchanged (#9776) --- src/protocols/ColorManagement.cpp | 9 +++++++-- src/protocols/ColorManagement.hpp | 1 + src/protocols/XXColorManagement.cpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index b6aee17b..91dc0eac 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -331,11 +331,16 @@ const hdr_output_metadata& CColorManagementSurface::hdrMetadata() { } void CColorManagementSurface::setHDRMetadata(const hdr_output_metadata& metadata) { - m_hdrMetadata = metadata; - m_needsNewMetadata = false; + m_hdrMetadata = metadata; + m_lastImageDescription = m_imageDescription; + m_needsNewMetadata = false; } bool CColorManagementSurface::needsHdrMetadataUpdate() { + if (!m_needsNewMetadata) + return false; + if (m_imageDescription == m_lastImageDescription) + m_needsNewMetadata = false; return m_needsNewMetadata; } diff --git a/src/protocols/ColorManagement.hpp b/src/protocols/ColorManagement.hpp index 55219b8f..5a94920d 100644 --- a/src/protocols/ColorManagement.hpp +++ b/src/protocols/ColorManagement.hpp @@ -65,6 +65,7 @@ class CColorManagementSurface { SP m_resource; wl_client* pClient = nullptr; NColorManagement::SImageDescription m_imageDescription; + NColorManagement::SImageDescription m_lastImageDescription; bool m_hasImageDescription = false; bool m_needsNewMetadata = false; hdr_output_metadata m_hdrMetadata; diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index 056a2cef..8231ec22 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -245,8 +245,8 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPcolorManagement->setHasImageDescription(true); surface->colorManagement->m_imageDescription = imageDescription->get()->settings; + surface->colorManagement->setHasImageDescription(true); } else LOGM(ERR, "Set image description for invalid surface"); }); From fc7223edc08a2e330052e699e91ba35402aa088b Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Sun, 30 Mar 2025 01:53:23 +0100 Subject: [PATCH 0024/1077] synctimeline: check if fd is readable before wait (#9789) a lot of the time the fd is already readable, and done. so just call the waiter directly instead of making a waiter and adding it to the eventloop. --- src/helpers/sync/SyncTimeline.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/helpers/sync/SyncTimeline.cpp b/src/helpers/sync/SyncTimeline.cpp index 224b2c0f..9f5f5a8a 100644 --- a/src/helpers/sync/SyncTimeline.cpp +++ b/src/helpers/sync/SyncTimeline.cpp @@ -91,28 +91,28 @@ static int handleWaiterFD(int fd, uint32_t mask, void* data) { } bool CSyncTimeline::addWaiter(const std::function& waiter, uint64_t point, uint32_t flags) { - auto w = makeShared(); - w->fn = waiter; - w->timeline = self; - w->eventFd = CFileDescriptor{eventfd(0, EFD_CLOEXEC)}; + CFileDescriptor eventFd = CFileDescriptor{eventfd(0, EFD_CLOEXEC)}; - if (!w->eventFd.isValid()) { + if (!eventFd.isValid()) { Debug::log(ERR, "CSyncTimeline::addWaiter: failed to acquire an eventfd"); return false; } - drm_syncobj_eventfd syncobjEventFD = { - .handle = handle, - .flags = flags, - .point = point, - .fd = w->eventFd.get(), - }; - - if (drmIoctl(drmFD, DRM_IOCTL_SYNCOBJ_EVENTFD, &syncobjEventFD) != 0) { - Debug::log(ERR, "CSyncTimeline::addWaiter: drmIoctl failed"); + if (drmSyncobjEventfd(drmFD, handle, point, eventFd.get(), flags)) { + Debug::log(ERR, "CSyncTimeline::addWaiter: drmSyncobjEventfd failed"); return false; } + if (eventFd.isReadable()) { + waiter(); + return true; + } + + auto w = makeShared(); + w->fn = waiter; + w->timeline = self; + w->eventFd = std::move(eventFd); + w->source = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, w->eventFd.get(), WL_EVENT_READABLE, ::handleWaiterFD, w.get()); if (!w->source) { Debug::log(ERR, "CSyncTimeline::addWaiter: wl_event_loop_add_fd failed"); From 05eb0aa43ded10f008be3cfcde33fe0bfe6e45b1 Mon Sep 17 00:00:00 2001 From: LeviVanDerMaas <80783230+LeviVanDerMaas@users.noreply.github.com> Date: Sun, 30 Mar 2025 03:11:39 +0200 Subject: [PATCH 0025/1077] workspaces: Add binds:hide_special_on_workspace_change (#9728) --- src/Compositor.cpp | 5 +++++ src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/managers/KeybindManager.cpp | 15 +++++++++++---- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 9aff1bb5..cb94116d 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2117,6 +2117,8 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { } void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMonitor, bool noWarpCursor) { + static auto PHIDESPECIALONWORKSPACECHANGE = CConfigValue("binds:hide_special_on_workspace_change"); + if (!pWorkspace || !pMonitor) return; @@ -2199,6 +2201,9 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo pMonitor->activeWorkspace->startAnim(false, false); } + if (*PHIDESPECIALONWORKSPACECHANGE) + pMonitor->setSpecialWorkspace(nullptr); + setActiveMonitor(pMonitor); pMonitor->activeWorkspace = pWorkspace; g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->ID); diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 402780e0..3e9563ee 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1246,6 +1246,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, + SConfigOptionDescription{ + .value = "binds:hide_special_on_workspace_change", + .description = "If enabled, changing the active workspace (including to itself) will hide the special workspace on the monitor where the newly active workspace resides.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, SConfigOptionDescription{ .value = "binds:allow_workspace_cycles", .description = "If enabled, workspaces don’t forget their previous workspace, so cycles can be created by switching to the first workspace in a sequence, then endlessly " diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index ebbdb7c6..b32a2d03 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -626,6 +626,7 @@ CConfigManager::CConfigManager() { registerConfigVar("binds:pass_mouse_when_bound", Hyprlang::INT{0}); registerConfigVar("binds:scroll_event_delay", Hyprlang::INT{300}); registerConfigVar("binds:workspace_back_and_forth", Hyprlang::INT{0}); + registerConfigVar("binds:hide_special_on_workspace_change", Hyprlang::INT{0}); registerConfigVar("binds:allow_workspace_cycles", Hyprlang::INT{0}); registerConfigVar("binds:workspace_center_on", Hyprlang::INT{1}); registerConfigVar("binds:focus_preferred_method", Hyprlang::INT{0}); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index cc912938..9a22a13a 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1215,9 +1215,10 @@ static SWorkspaceIDName getWorkspaceToChangeFromArgs(std::string args, PHLWORKSP SDispatchResult CKeybindManager::changeworkspace(std::string args) { // Workspace_back_and_forth being enabled means that an attempt to switch to // the current workspace will instead switch to the previous. - static auto PBACKANDFORTH = CConfigValue("binds:workspace_back_and_forth"); - static auto PALLOWWORKSPACECYCLES = CConfigValue("binds:allow_workspace_cycles"); - static auto PWORKSPACECENTERON = CConfigValue("binds:workspace_center_on"); + static auto PBACKANDFORTH = CConfigValue("binds:workspace_back_and_forth"); + static auto PALLOWWORKSPACECYCLES = CConfigValue("binds:allow_workspace_cycles"); + static auto PWORKSPACECENTERON = CConfigValue("binds:workspace_center_on"); + static auto PHIDESPECIALONWORKSPACECHANGE = CConfigValue("binds:hide_special_on_workspace_change"); const auto PMONITOR = g_pCompositor->m_pLastMonitor.lock(); @@ -1239,8 +1240,12 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { const SWorkspaceIDName PPREVWS = args.contains("_per_monitor") ? PMONITOR->getPrevWorkspaceIDName(PCURRENTWORKSPACE->m_iID) : PCURRENTWORKSPACE->getPrevWorkspaceIDName(); const bool BISWORKSPACECURRENT = workspaceToChangeTo == PCURRENTWORKSPACE->m_iID; - if (BISWORKSPACECURRENT && (!(*PBACKANDFORTH || EXPLICITPREVIOUS) || PPREVWS.id == -1)) + if (BISWORKSPACECURRENT && (!(*PBACKANDFORTH || EXPLICITPREVIOUS) || PPREVWS.id == -1)) { + if (*PHIDESPECIALONWORKSPACECHANGE) + PMONITOR->setSpecialWorkspace(nullptr); + return {.success = false, .error = "Previous workspace doesn't exist"}; + } g_pInputManager->unconstrainMouse(); g_pInputManager->m_bEmptyFocusCursorSet = false; @@ -1275,6 +1280,8 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { } else pWorkspaceToChangeTo->rememberPrevWorkspace(PCURRENTWORKSPACE); + if (*PHIDESPECIALONWORKSPACECHANGE) + PMONITORWORKSPACEOWNER->setSpecialWorkspace(nullptr); PMONITORWORKSPACEOWNER->changeWorkspace(pWorkspaceToChangeTo, false, true); if (PMONITOR != PMONITORWORKSPACEOWNER) { From da2d7c3971d40f841f2afd7def8e4bad9a351e41 Mon Sep 17 00:00:00 2001 From: Emad Elsaid <54403+emad-elsaid@users.noreply.github.com> Date: Sun, 30 Mar 2025 03:12:15 +0200 Subject: [PATCH 0026/1077] config: Fix matching monitor by description to allow space prefix (#9788) --- src/config/ConfigManager.cpp | 8 ++++---- src/helpers/Monitor.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index b32a2d03..276e6db0 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1707,8 +1707,8 @@ void CConfigManager::addParseError(const std::string& err) { PHLMONITOR CConfigManager::getBoundMonitorForWS(const std::string& wsname) { auto monitor = getBoundMonitorStringForWS(wsname); - if (monitor.substr(0, 5) == "desc:") - return g_pCompositor->getMonitorFromDesc(monitor.substr(5)); + if (monitor.starts_with("desc:")) + return g_pCompositor->getMonitorFromDesc(trim(monitor.substr(5))); else return g_pCompositor->getMonitorFromName(monitor); } @@ -1798,8 +1798,8 @@ std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) { if (other->isDefault) { if (other->monitor == name) return other->workspaceString; - if (other->monitor.substr(0, 5) == "desc:") { - auto const monitor = g_pCompositor->getMonitorFromDesc(other->monitor.substr(5)); + if (other->monitor.starts_with("desc:")) { + auto const monitor = g_pCompositor->getMonitorFromDesc(trim(other->monitor.substr(5))); if (monitor && monitor->szName == name) return other->workspaceString; } diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 75c0d8b9..98f45cce 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -881,7 +881,7 @@ bool CMonitor::isMirror() { bool CMonitor::matchesStaticSelector(const std::string& selector) const { if (selector.starts_with("desc:")) { // match by description - const auto DESCRIPTIONSELECTOR = selector.substr(5); + const auto DESCRIPTIONSELECTOR = trim(selector.substr(5)); return szDescription.starts_with(DESCRIPTIONSELECTOR) || szShortDescription.starts_with(DESCRIPTIONSELECTOR); } else { From 10a335631e71f5bdbd8f311a3aaeeef89debae11 Mon Sep 17 00:00:00 2001 From: Shockingly Good Date: Sun, 30 Mar 2025 20:29:39 +0200 Subject: [PATCH 0027/1077] solitary: Fix the non-working tearing #9429 (#9772) Fixes the non-working tearing by removing the incorrect opaqueness check for the windows. Fixes #9429 --- src/desktop/Window.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 2cd8b438..c26e0d9f 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1148,9 +1148,6 @@ bool CWindow::opaque() { if (m_fAlpha->value() != 1.f || m_fActiveInactiveAlpha->value() != 1.f) return false; - if (m_vRealSize->goal().floor() != m_vReportedSize) - return false; - const auto PWORKSPACE = m_pWorkspace; if (m_pWLSurface->small() && !m_pWLSurface->m_bFillIgnoreSmall) From 8aaffda969bcff6708b47fab776ea45979ea7d9f Mon Sep 17 00:00:00 2001 From: nyx Date: Sun, 30 Mar 2025 17:18:04 -0400 Subject: [PATCH 0028/1077] core: fix null ref when resuming system (#9794) * core: fix null ref when resuming system * e --- src/Compositor.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index cb94116d..8a3a8cbf 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2154,11 +2154,13 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with new {}", nextWorkspaceOnMonitorID); - g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->ID); + if (POLDMON) + g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->ID); } Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing {}", nextWorkspaceOnMonitorID); - POLDMON->changeWorkspace(nextWorkspaceOnMonitorID, false, true, true); + if (POLDMON) + POLDMON->changeWorkspace(nextWorkspaceOnMonitorID, false, true, true); } // move the workspace From 075bbecabd6d41c02ebb823d91774a95cc9d50da Mon Sep 17 00:00:00 2001 From: nyx Date: Sun, 30 Mar 2025 17:28:12 -0400 Subject: [PATCH 0029/1077] core: fix artifacts when fullscreening (#9778) * core: fix artifacts when fullscreening fixes an issue where fullscreening a floating window that is between two monitors causes artifacts to appear on the monitor where it did not become fullscreened on * e --- src/Compositor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8a3a8cbf..90e03bcd 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2315,6 +2315,9 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS const eFullscreenMode CURRENT_EFFECTIVE_MODE = (eFullscreenMode)std::bit_floor((uint8_t)PWINDOW->m_sFullscreenState.internal); const eFullscreenMode EFFECTIVE_MODE = (eFullscreenMode)std::bit_floor((uint8_t)state.internal); + if (PWINDOW->m_bIsFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE && EFFECTIVE_MODE != FSMODE_NONE) + g_pHyprRenderer->damageWindow(PWINDOW); + if (*PALLOWPINFULLSCREEN && !PWINDOW->m_bPinFullscreened && !PWINDOW->isFullscreen() && PWINDOW->m_bPinned) { PWINDOW->m_bPinned = false; PWINDOW->m_bPinFullscreened = true; From 79b526a04199a05d1e9b0bbb035ba20b652a7a2b Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 30 Mar 2025 22:34:46 +0100 Subject: [PATCH 0030/1077] socket2: add minimized event for foreign-wlr ref #995 --- src/protocols/ForeignToplevelWlr.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index e50c85d9..945d802d 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -4,6 +4,7 @@ #include "protocols/core/Output.hpp" #include "render/Renderer.hpp" #include "../managers/HookSystemManager.hpp" +#include "../managers/EventManager.hpp" CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SP resource_, PHLWINDOW pWindow_) : resource(resource_), pWindow(pWindow_) { if UNLIKELY (!resource_->resource()) @@ -95,6 +96,30 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPchangeWindowFullscreenModeClient(PWINDOW, FSMODE_MAXIMIZED, false); }); + resource->setSetMinimized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = pWindow.lock(); + + if UNLIKELY (!PWINDOW) + return; + + if UNLIKELY (!PWINDOW->m_bIsMapped) + return; + + g_pEventManager->postEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},1", (uintptr_t)PWINDOW.get())}); + }); + + resource->setUnsetMinimized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = pWindow.lock(); + + if UNLIKELY (!PWINDOW) + return; + + if UNLIKELY (!PWINDOW->m_bIsMapped) + return; + + g_pEventManager->postEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},0", (uintptr_t)PWINDOW.get())}); + }); + resource->setClose([this](CZwlrForeignToplevelHandleV1* p) { const auto PWINDOW = pWindow.lock(); From 2309270752383be30857d9c15cd3e259c4e6ed58 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 31 Mar 2025 12:06:17 -0400 Subject: [PATCH 0031/1077] anr: add config for ping number before popup shows up (#9782) * anr: make pings configurable makes the pings of the dialog popup configurable --- src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/managers/ANRManager.cpp | 13 ++++++++----- src/managers/ANRManager.hpp | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 3e9563ee..234c3743 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1223,6 +1223,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, + SConfigOptionDescription{ + .value = "misc:anr_missed_pings", + .description = "number of missed pings before showing the ANR dialog", + .type = CONFIG_OPTION_INT, + .data = SConfigOptionDescription::SRangeData{1, 1, 10}, + }, /* * binds: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 276e6db0..9fae42e1 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -460,6 +460,7 @@ CConfigManager::CConfigManager() { registerConfigVar("misc:disable_hyprland_qtutils_check", Hyprlang::INT{0}); registerConfigVar("misc:lockdead_screen_delay", Hyprlang::INT{1000}); registerConfigVar("misc:enable_anr_dialog", Hyprlang::INT{1}); + registerConfigVar("misc:anr_missed_pings", Hyprlang::INT{1}); registerConfigVar("group:insert_after_current", Hyprlang::INT{1}); registerConfigVar("group:focus_removed_window", Hyprlang::INT{1}); diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index ebf02001..3debcda8 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -41,7 +41,8 @@ CANRManager::CANRManager() { void CANRManager::onTick() { std::erase_if(m_data, [](const auto& e) { return e->isDefunct(); }); - static auto PENABLEANR = CConfigValue("misc:enable_anr_dialog"); + static auto PENABLEANR = CConfigValue("misc:enable_anr_dialog"); + static auto PANRTHRESHOLD = CConfigValue("misc:anr_missed_pings"); if (!*PENABLEANR) { m_timer->updateTimeout(TIMER_TIMEOUT * 10); @@ -66,7 +67,7 @@ void CANRManager::onTick() { if (count == 0) continue; - if (data->missedResponses > 0) { + if (data->missedResponses >= *PANRTHRESHOLD) { if (!data->isThreadRunning() && !data->dialogThreadSaidWait) { data->runDialog("Application Not Responding", firstWindow->m_szTitle, firstWindow->m_szClass, data->getPid()); @@ -128,7 +129,8 @@ bool CANRManager::isNotResponding(PHLWINDOW pWindow) { } bool CANRManager::isNotResponding(SP data) { - return data->missedResponses > 1; + static auto PANRTHRESHOLD = CConfigValue("misc:anr_missed_pings"); + return data->missedResponses > *PANRTHRESHOLD; } SP CANRManager::dataFor(PHLWINDOW pWindow) { @@ -203,12 +205,13 @@ bool CANRManager::SANRData::isThreadRunning() { return pthread_kill(dialogThread.native_handle(), 0) != ESRCH; } -void CANRManager::SANRData::killDialog() const { +void CANRManager::SANRData::killDialog() { if (!dialogProc) return; if (!dialogProc->pid()) { - Debug::log(ERR, "ANR: cannot kill dialogProc, as it doesn't have a pid. If you have hyprutils <= 0.6.0, you will crash soon. Otherwise, dialog failed to spawn??"); + Debug::log(ERR, "ANR: cannot kill dialogProc, as it doesn't have a pid."); + dialogProc = nullptr; return; } diff --git a/src/managers/ANRManager.hpp b/src/managers/ANRManager.hpp index 26319776..4d838f57 100644 --- a/src/managers/ANRManager.hpp +++ b/src/managers/ANRManager.hpp @@ -43,7 +43,7 @@ class CANRManager { void runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID); bool isThreadRunning(); - void killDialog() const; + void killDialog(); bool isDefunct() const; bool fitsWindow(PHLWINDOW pWindow) const; pid_t getPid() const; From 4c987b20e28362410d0c9f9a37bafd6f128b0a2c Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 31 Mar 2025 17:13:17 +0100 Subject: [PATCH 0032/1077] makefile: fix find command in installheaders fixes #9812 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 74cf0c66..7405cfad 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ installheaders: cmake --build ./build --config Release --target generate-protocol-headers - find src -name '*.h*' -o -name '*.inc' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland + find src -type f \( -name '*.hpp' -o -name '*.h' -o -name '*.inc' \) -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland cp ./protocols/*.h* ${PREFIX}/include/hyprland/protocols cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig if [ -d /usr/share/pkgconfig ]; then cp ./build/hyprland.pc /usr/share/pkgconfig 2>/dev/null || true; fi From d1a59ec39eb4c0d6a7d3d38a26f8924e6bca5cef Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 1 Apr 2025 00:25:09 +0100 Subject: [PATCH 0033/1077] renderer: render tiled fading out above other tiled windows fixes #9717 closes #9796 --- src/render/Renderer.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 8a8fd27a..dca76f63 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -360,7 +360,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS); - std::vector windows; + std::vector windows, tiledFadingOut; windows.reserve(g_pCompositor->m_vWindows.size()); for (auto const& w : g_pCompositor->m_vWindows) { @@ -390,6 +390,13 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo continue; } + // render tiled fading out after others + if (w->m_bFadingOut) { + tiledFadingOut.emplace_back(w); + w.reset(); + continue; + } + // render the bad boy renderWindow(w.lock(), pMonitor, time, true, RENDER_PASS_MAIN); w.reset(); @@ -400,6 +407,11 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo lastWindow.reset(); + // render tiled windows that are fading out after other tiled to not hide them behind + for (auto& w : tiledFadingOut) { + renderWindow(w.lock(), pMonitor, time, true, RENDER_PASS_MAIN); + } + // Non-floating popup for (auto& w : windows) { if (!w) From 1f0fd79b910b798e650d6f0c546273bc83422526 Mon Sep 17 00:00:00 2001 From: X2E4VXpZKv <92685821+X2E4VXpZKv@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:20:38 +0200 Subject: [PATCH 0034/1077] internal: Don't force default cursor on config reload/monitor reconfigure (#9815) --- src/managers/CursorManager.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index 160ef2eb..cad456ba 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -302,8 +302,6 @@ void CCursorManager::updateTheme() { m_pHyprcursor->loadThemeStyle(m_sCurrentStyleInfo); } - setCursorFromName("left_ptr"); - for (auto const& m : g_pCompositor->m_vMonitors) { m->forceFullFrames = 5; g_pCompositor->scheduleFrameForMonitor(m, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_SHAPE); From 3a47c73f34d358c55e97927b0682dbdda19e24c1 Mon Sep 17 00:00:00 2001 From: nyx Date: Tue, 1 Apr 2025 18:45:51 -0400 Subject: [PATCH 0035/1077] layout: center floating window at cursor when picked up from fullscreen (#9780) * layout: center floating window at cursor when picked up from fullscreen when picking up a floating window after it had been fullscreened before it would return to its previous position which looked ugly because the cursor could be no where near the windows original position, this patch makes it so that the window is returned to the users current cursor position * E --- src/layout/IHyprLayout.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index dc6de9e3..b353a50c 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -240,7 +240,8 @@ void IHyprLayout::onBeginDragWindow() { return; } - if (DRAGGINGWINDOW->isFullscreen()) { + const bool WAS_FULLSCREEN = DRAGGINGWINDOW->isFullscreen(); + if (WAS_FULLSCREEN) { Debug::log(LOG, "Dragging a fullscreen window"); g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); } @@ -257,7 +258,10 @@ void IHyprLayout::onBeginDragWindow() { m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; - if (!DRAGGINGWINDOW->m_bIsFloating) { + if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_bIsFloating) { + const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); + *DRAGGINGWINDOW->m_vRealPosition = MOUSECOORDS - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; + } else if (!DRAGGINGWINDOW->m_bIsFloating) { if (g_pInputManager->dragMode == MBIND_MOVE) { DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor(); changeWindowFloatingMode(DRAGGINGWINDOW); From a4e6c5d678e8dd27ab07a6d6eb4ba2834fab81d1 Mon Sep 17 00:00:00 2001 From: nyx Date: Tue, 1 Apr 2025 18:51:37 -0400 Subject: [PATCH 0036/1077] window: don't deactivate unfocused xwayland windows in groups (#9781) * window: don't deactivate unfocused xwayland windows in groups we dont want to deactivate unfocused xwayland windows because X is weird, keep the behavior for wayland windows --- src/desktop/Window.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index c26e0d9f..41af094b 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1788,9 +1788,11 @@ void CWindow::deactivateGroupMembers() { auto curr = getGroupHead(); while (curr) { if (curr != m_pSelf.lock()) { - if (curr->m_bIsX11) - curr->m_pXWaylandSurface->activate(false); - else if (curr->m_pXDGSurface && curr->m_pXDGSurface->toplevel) + // we dont want to deactivate unfocused xwayland windows + // because X is weird, keep the behavior for wayland windows + // also its not really needed for xwayland windows + // ref: #9760 #9294 + if (!curr->m_bIsX11 && curr->m_pXDGSurface && curr->m_pXDGSurface->toplevel) curr->m_pXDGSurface->toplevel->setActive(false); } From 8654029f8662d388eefa65711a2fda360d2aa73f Mon Sep 17 00:00:00 2001 From: Armin <159054879+arminius-smh@users.noreply.github.com> Date: Wed, 2 Apr 2025 22:21:05 +0200 Subject: [PATCH 0037/1077] versionkeeper: create version file if not present (#9829) --- src/managers/VersionKeeperManager.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/managers/VersionKeeperManager.cpp b/src/managers/VersionKeeperManager.cpp index cc03a7b9..95c11b4b 100644 --- a/src/managers/VersionKeeperManager.cpp +++ b/src/managers/VersionKeeperManager.cpp @@ -26,10 +26,12 @@ CVersionKeeperManager::CVersionKeeperManager() { if (!DATAROOT) return; - const auto LASTVER = NFsUtils::readFileAsString(*DATAROOT + "/" + VERSION_FILE_NAME); + auto LASTVER = NFsUtils::readFileAsString(*DATAROOT + "/" + VERSION_FILE_NAME); - if (!LASTVER) - return; + if (!LASTVER) { + NFsUtils::writeToFile(*DATAROOT + "/" + VERSION_FILE_NAME, "0.0.0"); + LASTVER = "0.0.0"; + } if (!isVersionOlderThanRunning(*LASTVER)) { Debug::log(LOG, "CVersionKeeperManager: Read version {} matches or is older than running.", *LASTVER); From a41b8d5e977a7382bce3de251a3a014ae7b3c625 Mon Sep 17 00:00:00 2001 From: Arkady Buryakov Date: Wed, 2 Apr 2025 23:26:46 +0300 Subject: [PATCH 0038/1077] groupbar: add text offset and upper gap settings (#9733) * Groupbar: add keep_upper_gap setting to apply/remove outer gap offset to the upper side of groupbar * Groupbar: add text_offset setting to adjust text vertical position in a group header --- src/config/ConfigDescriptions.hpp | 12 ++++++++++++ src/config/ConfigManager.cpp | 2 ++ src/render/decorations/CHyprGroupBarDecoration.cpp | 13 ++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 234c3743..e7266940 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1011,6 +1011,18 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_INT, .data = SConfigOptionDescription::SRangeData{2, 0, 20}, }, + SConfigOptionDescription{ + .value = "group:groupbar:keep_upper_gap", + .description = "keep an upper gap above gradient", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, + SConfigOptionDescription{ + .value = "group:groupbar:text_offset", + .description = "set an offset for a text", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SRangeData{0, -20, 20}, + }, /* * misc: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 9fae42e1..0d12e29c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -487,6 +487,8 @@ CConfigManager::CConfigManager() { registerConfigVar("group:groupbar:gradient_round_only_edges", Hyprlang::INT{1}); registerConfigVar("group:groupbar:gaps_out", Hyprlang::INT{2}); registerConfigVar("group:groupbar:gaps_in", Hyprlang::INT{2}); + registerConfigVar("group:groupbar:keep_upper_gap", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:text_offset", Hyprlang::INT{0}); registerConfigVar("debug:log_damage", Hyprlang::INT{0}); registerConfigVar("debug:overlay", Hyprlang::INT{0}); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 905a72c7..1f2211e0 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -34,6 +34,7 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { static auto PPRIORITY = CConfigValue("group:groupbar:priority"); static auto PSTACKED = CConfigValue("group:groupbar:stacked"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); + static auto PKEEPUPPERGAP = CConfigValue("group:groupbar:keep_upper_gap"); SDecorationPositioningInfo info; info.policy = DECORATION_POSITION_STICKY; @@ -44,9 +45,9 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { if (*PENABLED && m_pWindow->m_sWindowData.decorate.valueOrDefault()) { if (*PSTACKED) { const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); - info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + 2 + *POUTERGAP}, {0, 0}}; + info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + (*PKEEPUPPERGAP * *POUTERGAP)}, {0, 0}}; } else - info.desiredExtents = {{0, *POUTERGAP * 2 + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}, {0, 0}}; + info.desiredExtents = {{0, *POUTERGAP * (1 + *PKEEPUPPERGAP) + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}, {0, 0}}; } else info.desiredExtents = {{0, 0}, {0, 0}}; return info; @@ -117,6 +118,8 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { static auto PGROUPCOLINACTIVELOCKED = CConfigValue("group:groupbar:col.locked_inactive"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); + static auto PKEEPUPPERGAP = CConfigValue("group:groupbar:keep_upper_gap"); + static auto PTEXTOFFSET = CConfigValue("group:groupbar:text_offset"); auto* const GROUPCOLACTIVE = (CGradientValueData*)(PGROUPCOLACTIVE.ptr())->getData(); auto* const GROUPCOLINACTIVE = (CGradientValueData*)(PGROUPCOLINACTIVE.ptr())->getData(); auto* const GROUPCOLACTIVELOCKED = (CGradientValueData*)(PGROUPCOLACTIVELOCKED.ptr())->getData(); @@ -126,9 +129,9 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); m_fBarWidth = *PSTACKED ? ASSIGNEDBOX.w : (ASSIGNEDBOX.w - *PINNERGAP * (barsToDraw - 1)) / barsToDraw; - m_fBarHeight = *PSTACKED ? ((ASSIGNEDBOX.h - 2 - *POUTERGAP) - *POUTERGAP * (barsToDraw)) / barsToDraw : ASSIGNEDBOX.h - *POUTERGAP; + m_fBarHeight = *PSTACKED ? ((ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP) - *POUTERGAP * (barsToDraw)) / barsToDraw : ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP; - const auto DESIREDHEIGHT = *PSTACKED ? (ONEBARHEIGHT * m_dwGroupMembers.size()) + 2 + *POUTERGAP : *POUTERGAP * 2L + ONEBARHEIGHT; + const auto DESIREDHEIGHT = *PSTACKED ? (ONEBARHEIGHT * m_dwGroupMembers.size()) + *POUTERGAP * *PKEEPUPPERGAP : *POUTERGAP * (1 + *PKEEPUPPERGAP) + ONEBARHEIGHT; if (DESIREDHEIGHT != ASSIGNEDBOX.h) g_pDecorationPositioner->repositionDeco(this); @@ -232,7 +235,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { .emplace_back(makeUnique(m_dwGroupMembers[WINDOWINDEX].lock(), Vector2D{m_fBarWidth * pMonitor->scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->scale}, pMonitor->scale)) .get(); - rect.y += std::ceil((rect.height - pTitleTex->texSize.y) / 2.0); + rect.y += std::ceil(((rect.height - pTitleTex->texSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->scale)); rect.height = pTitleTex->texSize.y; rect.width = pTitleTex->texSize.x; rect.x += std::round(((m_fBarWidth * pMonitor->scale) / 2.0) - (pTitleTex->texSize.x / 2.0)); From b496e2c71817aae5560af04b8c6439c39f4e05d8 Mon Sep 17 00:00:00 2001 From: Amadej Kastelic Date: Thu, 3 Apr 2025 09:43:06 +0200 Subject: [PATCH 0039/1077] nix/module: load plugins using exec-once (#9836) --- nix/module.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nix/module.nix b/nix/module.nix index 0b8c4f42..10a8c97c 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -126,13 +126,14 @@ in { bottomCommandsPrefixes = cfg.bottomPrefixes; } { - plugin = let + "exec-once" = let mkEntry = entry: if lib.types.package.check entry then "${entry}/lib/lib${entry.pname}.so" else entry; + hyprctl = lib.getExe' config.programs.hyprland.package "hyprctl"; in - map mkEntry cfg.plugins; + map (p: "${hyprctl} plugin load ${mkEntry p}") cfg.plugins; }; in lib.mkIf shouldGenerate { From 5e8bb7178501ea65fe54be5614e6ba4a6369c600 Mon Sep 17 00:00:00 2001 From: Maximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com> Date: Thu, 3 Apr 2025 16:40:59 +0200 Subject: [PATCH 0040/1077] ctm: fix crash when finishing ctm progress with a destroyed monitor (#9835) --- src/protocols/CTMControl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index 322f95e2..750c6f8b 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -158,7 +158,8 @@ void CHyprlandCTMControlProtocol::setCTM(PHLMONITOR monitor, const Mat3x3& ctm) data->progress->setCallbackOnEnd([monitor = PHLMONITORREF{monitor}, this](auto) { if (!monitor || !m_mCTMDatas.contains(monitor)) { - monitor->setCTM(Mat3x3::identity()); + if (monitor) + monitor->setCTM(Mat3x3::identity()); return; } auto& data = m_mCTMDatas.at(monitor); From ff97d18c4c61ae14f8f3b80178e6b72c8a4b7901 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Thu, 3 Apr 2025 18:08:55 +0000 Subject: [PATCH 0041/1077] flake.lock: update --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 69dd7a22..ff2935a2 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1742213273, - "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", + "lastModified": 1743265529, + "narHash": "sha256-QbjP15/2N+VJl0b5jxrrTc+VOt39aU4XrDvtP0Lz5ik=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", + "rev": "1d2dbd72c2bbaceab031c592d4810f744741d203", "type": "github" }, "original": { @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1738422629, - "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", + "lastModified": 1743549251, + "narHash": "sha256-yf+AXt0RkAkCyF6iSnJt6EJAnNG/l6qv70CVzhRP6Bg=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", + "rev": "4ab17ccac08456cb5e00e8bd323de2efd30612be", "type": "github" }, "original": { @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1741534688, - "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", + "lastModified": 1742984269, + "narHash": "sha256-uz9FaCIbga/gQ5ZG1Hb4HVVjTWT1qjjCAFlCXiaefxg=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", + "rev": "7248194a2ce0106ae647b70d0526a96dc9d6ad60", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1742669843, - "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", + "lastModified": 1743583204, + "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1e5b653dff12029333a6546c11e108ede13052eb", + "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", "type": "github" }, "original": { From 8ba20fcae124591718bddadd94c5e8c381d02097 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 5 Apr 2025 00:30:27 +0100 Subject: [PATCH 0042/1077] compositor: avoid crash on null window monitor move ref #9809 --- src/Compositor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 90e03bcd..058eeaa7 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2733,8 +2733,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor const PHLWINDOW pFirstWindowOnWorkspace = pWorkspace->getFirstWindow(); const int visibleWindowsOnWorkspace = pWorkspace->getWindows(std::nullopt, true); - const auto PWINDOWMONITOR = pWindow->m_pMonitor.lock(); - const auto POSTOMON = pWindow->m_vRealPosition->goal() - PWINDOWMONITOR->vecPosition; + const auto POSTOMON = pWindow->m_vRealPosition->goal() - (pWindow->m_pMonitor ? pWindow->m_pMonitor->vecPosition : Vector2D{}); const auto PWORKSPACEMONITOR = pWorkspace->m_pMonitor.lock(); if (!pWindow->m_bIsFloating) From c62fb08da6128a598e4900de45dc5e0d48b9690d Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 5 Apr 2025 18:45:52 +0100 Subject: [PATCH 0043/1077] github: remove issue templates --- .github/ISSUE_TEMPLATE/bug.yml | 116 ++--------------------------- .github/ISSUE_TEMPLATE/feature.yml | 19 ----- 2 files changed, 7 insertions(+), 128 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature.yml diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 5a20b890..fd5797d5 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -1,117 +1,15 @@ -name: Bug Report -description: Something is not working right -labels: ["bug"] +name: Do not open issues, go to discussions please! +description: Do not open an issue body: - type: checkboxes attributes: - label: Already reported ? * - description: Before opening a new bug report, please take a moment to search through the current open issues. If the same bug is already reported, don't open new issue - instead go upvote/comment on an existing one. + label: Please close this issue. + description: Users cannot open issues. I want my issue to be closed. options: - - label: I have searched the existing open and closed issues. + - label: Yes, I want this issue to be closed. required: true - - type: dropdown - id: type - attributes: - label: Regression? - description: | - Regression means that something used to work but no longer does. - **BEFORE CONTINUING**, please check if this bug is a regression or not, and if it is, we need you to bisect with the help of the wiki: https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue - multiple: true - options: - - "Definitely a regression - something broke after update (requires bisect)" - - "Probably not a regression / I don't remember it happening before" - - "Not a regression - it's bug regarding new feature" - - "Not a regression - it's an old bug" - - "I don't know, I started using Hyprland only recently" - validations: - required: true - - type: textarea - id: ver + id: body attributes: - label: System Info and Hyprland Version - description: | - Paste the output of `hyprctl systeminfo` here. If you can't - launch Hyprland, paste the output of `Hyprland --systeminfo`. - value: "
- System/Version info - - - ``` - - - - ``` - - -
" - validations: - required: true - - - type: textarea - id: desc - attributes: - label: Description - description: "What went wrong?" - validations: - required: true - - - type: textarea - id: repro - attributes: - label: How to reproduce - description: "How can someone else reproduce the issue?" - placeholder: | - 1. ... - 2. ... - 3. ... - - validations: - required: true - - - type: markdown - attributes: - value: | - ## Additional info section - - In the section below you will be asked to upload some files. - - When including text files (such as logs or config), please **always ATTACH** them, and not paste them directly. - - This is important to avoid clutter, spam, and make the issues more readable. - Thanks for your understanding. - - # The main reason to disallow pasting directly or in a dropdown, is to not clutter - # the issue with unnecessary keywords, making the github issue search useless. - - type: checkboxes - attributes: - label: Attach not paste - options: - - label: I understand that all text files must be *attached*, and not pasted directly. If not respected, this issue will likely get closed as spam - required: true - - - type: markdown - attributes: - value: >- - Please be sure to upload the following files below if they are relevant to the issue: - - - Logs can be found in $XDG_RUNTIME_DIR/hypr (sort by date to grab the latest) - - Crash reports are stored in ~/.cache/hyprland or $XDG_CACHE_HOME/hyprland - - Hyprland config files - `hyprctl systeminfo -c > /tmp/hyprland_config_dump.txt` use this command to dump full configuration to a single file. - - - type: checkboxes - attributes: - label: Checklist of files to include below - options: - - label: Hyprland config - `hyprctl systeminfo -c` (always include) - - label: Crash report (always include in case of crash) - - label: Video (always include in case of a visual bug) - - label: Logs (might contain useful info such as errors) - - - type: textarea - id: logs - attributes: - label: Additional info & File uploads - description: | - Tip: You can attach files by clicking this area to highlight it and then dragging files in. + label: Issue body diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml deleted file mode 100644 index b34786a0..00000000 --- a/.github/ISSUE_TEMPLATE/feature.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Feature Request -description: I'd like to request additional functionality -labels: ["enhancement"] -body: - - type: markdown - attributes: - value: | - Before opening a new issue, take a moment to search through the current open ones. - - --- - - - type: textarea - id: desc - attributes: - label: Description - description: "Describe your idea" - validations: - required: true - From ed05f14300adecfa2c289d2100a00ca60da72992 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 5 Apr 2025 19:28:42 +0100 Subject: [PATCH 0044/1077] ci: nuke stalebot --- .github/workflows/stale.yml | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 .github/workflows/stale.yml diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 9d2eed80..00000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,28 +0,0 @@ -# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. -# -# You can adjust the behavior by modifying this file. -# For more information, see: -# https://github.com/actions/stale -name: Mark stale issues and pull requests - -on: - schedule: - - cron: "7 */4 * * *" - workflow_dispatch: - -jobs: - stale: - if: github.repository == 'hyprwm/Hyprland' - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - - steps: - - uses: actions/stale@v9 - with: - repo-token: ${{ secrets.STALEBOT_PAT }} - stale-issue-label: "stale" - stale-pr-label: "stale" - operations-per-run: 40 - days-before-close: -1 From 433b7881a3a46473fbc9df526870e23562b31bf8 Mon Sep 17 00:00:00 2001 From: Maximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com> Date: Sun, 6 Apr 2025 00:54:29 +0200 Subject: [PATCH 0045/1077] compositor: fix crash when moving a workspace to a monitor with size 0x0 (#9848) --- src/Compositor.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 058eeaa7..594bd85a 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2186,9 +2186,11 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo *w->m_vRealPosition = pMonitor->vecPosition; *w->m_vRealSize = pMonitor->vecSize; } - } else { - *w->m_vRealPosition = Vector2D{(int)w->m_vRealPosition->goal().x % (int)pMonitor->vecSize.x, (int)w->m_vRealPosition->goal().y % (int)pMonitor->vecSize.y}; - } + } else + *w->m_vRealPosition = Vector2D{ + (pMonitor->vecSize.x != 0) ? (int)w->m_vRealPosition->goal().x % (int)pMonitor->vecSize.x : 0, + (pMonitor->vecSize.y != 0) ? (int)w->m_vRealPosition->goal().y % (int)pMonitor->vecSize.y : 0, + }; } w->updateToplevel(); From e96b8ce4cc5e5856b6da653f1d92af856b5e72c9 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 6 Apr 2025 00:30:13 +0100 Subject: [PATCH 0046/1077] window: send fractional scale on updateScaleTransform fixes #9889 --- src/desktop/Window.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 41af094b..100300d4 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -17,6 +17,7 @@ #include "../protocols/XDGShell.hpp" #include "../protocols/core/Compositor.hpp" #include "../protocols/ContentType.hpp" +#include "../protocols/FractionalScale.hpp" #include "../xwayland/XWayland.hpp" #include "../helpers/Color.hpp" #include "../events/Events.hpp" @@ -397,6 +398,7 @@ void CWindow::updateSurfaceScaleTransformDetails(bool force) { if (PSURFACE && PSURFACE->m_fLastScale == PMONITOR->scale) return; + PROTO::fractional->sendScale(s, PMONITOR->scale); g_pCompositor->setPreferredScaleForSurface(s, PMONITOR->scale); g_pCompositor->setPreferredTransformForSurface(s, PMONITOR->transform); }, From 3c128679ee8c86bbbeb5ae38621f6de622525cf1 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 6 Apr 2025 17:31:58 +0200 Subject: [PATCH 0047/1077] helpers: Add an async dialog box impl (#9919) Adds an async dialog box, way safer than our previous local solution for ANR --- CMakeLists.txt | 2 +- flake.lock | 18 +-- meson.build | 2 +- src/helpers/AsyncDialogBox.cpp | 122 ++++++++++++++++++++ src/helpers/AsyncDialogBox.hpp | 45 ++++++++ src/managers/ANRManager.cpp | 71 ++++-------- src/managers/ANRManager.hpp | 30 +++-- src/managers/eventLoop/EventLoopManager.hpp | 1 + 8 files changed, 215 insertions(+), 76 deletions(-) create mode 100644 src/helpers/AsyncDialogBox.cpp create mode 100644 src/helpers/AsyncDialogBox.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b4c36158..65586f5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,7 +108,7 @@ find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION}) pkg_check_modules(aquamarine_dep REQUIRED IMPORTED_TARGET aquamarine>=0.8.0) pkg_check_modules(hyprlang_dep REQUIRED IMPORTED_TARGET hyprlang>=0.3.2) pkg_check_modules(hyprcursor_dep REQUIRED IMPORTED_TARGET hyprcursor>=0.1.7) -pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=0.5.1) +pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=0.6.0) pkg_check_modules(hyprgraphics_dep REQUIRED IMPORTED_TARGET hyprgraphics>=0.1.1) string(REPLACE "." ";" AQ_VERSION_LIST ${aquamarine_dep_VERSION}) diff --git a/flake.lock b/flake.lock index ff2935a2..b7f2f4a2 100644 --- a/flake.lock +++ b/flake.lock @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1743549251, - "narHash": "sha256-yf+AXt0RkAkCyF6iSnJt6EJAnNG/l6qv70CVzhRP6Bg=", + "lastModified": 1743714874, + "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "4ab17ccac08456cb5e00e8bd323de2efd30612be", + "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", "type": "github" }, "original": { @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1742984269, - "narHash": "sha256-uz9FaCIbga/gQ5ZG1Hb4HVVjTWT1qjjCAFlCXiaefxg=", + "lastModified": 1743950287, + "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "7248194a2ce0106ae647b70d0526a96dc9d6ad60", + "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", + "lastModified": 1743827369, + "narHash": "sha256-rpqepOZ8Eo1zg+KJeWoq1HAOgoMCDloqv5r2EAa9TSA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", + "rev": "42a1c966be226125b48c384171c44c651c236c22", "type": "github" }, "original": { diff --git a/meson.build b/meson.build index a40975aa..66ef1539 100644 --- a/meson.build +++ b/meson.build @@ -35,7 +35,7 @@ aquamarine = dependency('aquamarine', version: '>=0.8.0') hyprcursor = dependency('hyprcursor', version: '>=0.1.7') hyprgraphics = dependency('hyprgraphics', version: '>= 0.1.1') hyprlang = dependency('hyprlang', version: '>= 0.3.2') -hyprutils = dependency('hyprutils', version: '>= 0.2.3') +hyprutils = dependency('hyprutils', version: '>= 0.6.0') aquamarine_version_list = aquamarine.version().split('.') add_project_arguments(['-DAQUAMARINE_VERSION="@0@"'.format(aquamarine.version())], language: 'cpp') add_project_arguments(['-DAQUAMARINE_VERSION_MAJOR=@0@'.format(aquamarine_version_list.get(0))], language: 'cpp') diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp new file mode 100644 index 00000000..2ca99ab9 --- /dev/null +++ b/src/helpers/AsyncDialogBox.cpp @@ -0,0 +1,122 @@ +#include "AsyncDialogBox.hpp" +#include "./fs/FsUtils.hpp" +#include +#include "../managers/eventLoop/EventLoopManager.hpp" + +using namespace Hyprutils::OS; + +SP CAsyncDialogBox::create(const std::string& title, const std::string& description, std::vector buttons) { + if (!NFsUtils::executableExistsInPath("hyprland-dialog")) { + Debug::log(ERR, "CAsyncDialogBox: cannot create, no hyprland-dialog"); + return nullptr; + } + + auto dialog = SP(new CAsyncDialogBox(title, description, buttons)); + + dialog->m_selfWeakReference = dialog; + + return dialog; +} + +CAsyncDialogBox::CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons) : + m_title(title), m_description(description), m_buttons(buttons) { + ; +} + +static int onFdWrite(int fd, uint32_t mask, void* data) { + auto box = (CAsyncDialogBox*)data; + + box->onWrite(fd, mask); + + return 0; +} + +void CAsyncDialogBox::onWrite(int fd, uint32_t mask) { + if (mask & WL_EVENT_READABLE) { + std::array buf; + int ret = 0; + + // make the FD nonblock for a moment + // TODO: can we avoid this without risking a blocking read()? + int fdFlags = fcntl(fd, F_GETFL, 0); + if (fcntl(fd, F_SETFL, fdFlags | O_NONBLOCK) < 0) { + Debug::log(ERR, "CAsyncDialogBox::onWrite: fcntl 1 failed!"); + return; + } + + while ((ret = read(m_pipeReadFd.get(), buf.data(), 1023)) > 0) { + m_stdout += std::string_view{(char*)buf.data(), (size_t)ret}; + } + + // restore the flags (otherwise libwayland wont give us a hangup) + if (fcntl(fd, F_SETFL, fdFlags) < 0) { + Debug::log(ERR, "CAsyncDialogBox::onWrite: fcntl 2 failed!"); + return; + } + } + + if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) { + Debug::log(LOG, "CAsyncDialogBox: dialog {:x} hung up, closed."); + + if (m_onResolution) + m_onResolution(m_stdout); + + wl_event_source_remove(m_readEventSource); + m_selfReference.reset(); + return; + } +} + +void CAsyncDialogBox::open(std::function onResolution) { + m_onResolution = onResolution; + + std::string buttonsString = ""; + for (auto& b : m_buttons) { + buttonsString += b + ";"; + } + if (!buttonsString.empty()) + buttonsString.pop_back(); + + CProcess proc("hyprland-dialog", std::vector{"--title", m_title, "--text", m_description, "--buttons", buttonsString}); + + int outPipe[2]; + if (pipe(outPipe)) { + Debug::log(ERR, "CAsyncDialogBox::open: failed to pipe()"); + return; + } + + m_pipeReadFd = CFileDescriptor(outPipe[0]); + + proc.setStdoutFD(outPipe[1]); + + m_readEventSource = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, m_pipeReadFd.get(), WL_EVENT_READABLE, ::onFdWrite, this); + + if (!m_readEventSource) { + Debug::log(ERR, "CAsyncDialogBox::open: failed to add read fd to loop"); + return; + } + + m_selfReference = m_selfWeakReference.lock(); + + m_dialogPid = proc.pid(); + + if (!proc.runAsync()) { + Debug::log(ERR, "CAsyncDialogBox::open: failed to run async"); + wl_event_source_remove(m_readEventSource); + return; + } + + // close the write fd, only the dialog owns it now + close(outPipe[1]); +} + +void CAsyncDialogBox::kill() { + if (m_dialogPid <= 0) + return; + + ::kill(m_dialogPid, SIGKILL); +} + +bool CAsyncDialogBox::isRunning() const { + return m_readEventSource; +} \ No newline at end of file diff --git a/src/helpers/AsyncDialogBox.hpp b/src/helpers/AsyncDialogBox.hpp new file mode 100644 index 00000000..d3cc242c --- /dev/null +++ b/src/helpers/AsyncDialogBox.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include "../macros.hpp" +#include "./memory/Memory.hpp" + +#include +#include + +#include +#include + +struct wl_event_source; + +class CAsyncDialogBox { + public: + static SP create(const std::string& title, const std::string& description, std::vector buttons); + + CAsyncDialogBox(const CAsyncDialogBox&) = delete; + CAsyncDialogBox(CAsyncDialogBox&&) = delete; + CAsyncDialogBox& operator=(const CAsyncDialogBox&) = delete; + CAsyncDialogBox& operator=(CAsyncDialogBox&&) = delete; + + void open(std::function onResolution); + void kill(); + bool isRunning() const; + + void onWrite(int fd, uint32_t mask); + + private: + CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons); + + pid_t m_dialogPid = 0; + wl_event_source* m_readEventSource = nullptr; + std::function m_onResolution; + Hyprutils::OS::CFileDescriptor m_pipeReadFd; + std::string m_stdout = ""; + + const std::string m_title; + const std::string m_description; + const std::vector m_buttons; + + // WARNING: cyclic reference. This will be removed once the event source is removed to avoid dangling pointers + SP m_selfReference; + WP m_selfWeakReference; +}; \ No newline at end of file diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index 3debcda8..acdb39b7 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -39,8 +39,6 @@ CANRManager::CANRManager() { } void CANRManager::onTick() { - std::erase_if(m_data, [](const auto& e) { return e->isDefunct(); }); - static auto PENABLEANR = CConfigValue("misc:enable_anr_dialog"); static auto PANRTHRESHOLD = CConfigValue("misc:anr_missed_pings"); @@ -68,7 +66,7 @@ void CANRManager::onTick() { continue; if (data->missedResponses >= *PANRTHRESHOLD) { - if (!data->isThreadRunning() && !data->dialogThreadSaidWait) { + if (!data->isRunning() && !data->dialogSaidWait) { data->runDialog("Application Not Responding", firstWindow->m_szTitle, firstWindow->m_szClass, data->getPid()); for (const auto& w : g_pCompositor->m_vWindows) { @@ -81,11 +79,11 @@ void CANRManager::onTick() { *w->m_notRespondingTint = 0.2F; } } - } else if (data->isThreadRunning()) + } else if (data->isRunning()) data->killDialog(); if (data->missedResponses == 0) - data->dialogThreadSaidWait = false; + data->dialogSaidWait = false; data->missedResponses++; @@ -115,7 +113,7 @@ void CANRManager::onResponse(SP pXwaylandSurface) { void CANRManager::onResponse(SP data) { data->missedResponses = 0; - if (data->isThreadRunning()) + if (data->isRunning()) data->killDialog(); } @@ -158,64 +156,39 @@ CANRManager::SANRData::SANRData(PHLWINDOW pWindow) : } CANRManager::SANRData::~SANRData() { - if (dialogThread.joinable()) { + if (dialogBox && dialogBox->isRunning()) killDialog(); - // dangerous: might lock if the above failed!! - dialogThread.join(); - } } void CANRManager::SANRData::runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID) { - if (!dialogThreadExited) + if (dialogBox && dialogBox->isRunning()) killDialog(); - // dangerous: might lock if the above failed!! - if (dialogThread.joinable()) - dialogThread.join(); + dialogBox = CAsyncDialogBox::create(title, + std::format("Application {} with class of {} is not responding.\nWhat do you want to do with it?", appName.empty() ? "unknown" : appName, + appClass.empty() ? "unknown" : appClass), + std::vector{"Terminate", "Wait"}); - dialogThreadExited = false; - dialogThreadSaidWait = false; - dialogThread = std::thread([title, appName, appClass, dialogWmPID, this]() { - SP proc = makeShared("hyprland-dialog", - std::vector{"--title", title, "--text", - std::format("Application {} with class of {} is not responding.\nWhat do you want to do with it?", - appName.empty() ? "unknown" : appName, appClass.empty() ? "unknown" : appClass), - "--buttons", "Terminate;Wait"}); - - dialogProc = proc; - proc->runSync(); - - dialogThreadExited = true; - - if (proc->stdOut().empty()) - return; - - if (proc->stdOut().starts_with("Terminate")) - kill(dialogWmPID, SIGKILL); - if (proc->stdOut().starts_with("Wait")) - dialogThreadSaidWait = true; + dialogBox->open([dialogWmPID, this](std::string result) { + if (result.starts_with("Terminate")) + ::kill(dialogWmPID, SIGKILL); + else if (result.starts_with("Wait")) + dialogSaidWait = true; + else + Debug::log(ERR, "CANRManager::SANRData::runDialog: lambda: unrecognized result: {}", result); }); } -bool CANRManager::SANRData::isThreadRunning() { - if (dialogThread.native_handle() == 0) - return false; - if (dialogThreadExited) - return false; - return pthread_kill(dialogThread.native_handle(), 0) != ESRCH; +bool CANRManager::SANRData::isRunning() { + return dialogBox && dialogBox->isRunning(); } void CANRManager::SANRData::killDialog() { - if (!dialogProc) + if (!dialogBox) return; - if (!dialogProc->pid()) { - Debug::log(ERR, "ANR: cannot kill dialogProc, as it doesn't have a pid."); - dialogProc = nullptr; - return; - } - - kill(dialogProc->pid(), SIGKILL); + dialogBox->kill(); + dialogBox = nullptr; } bool CANRManager::SANRData::fitsWindow(PHLWINDOW pWindow) const { diff --git a/src/managers/ANRManager.hpp b/src/managers/ANRManager.hpp index 4d838f57..f5c0085b 100644 --- a/src/managers/ANRManager.hpp +++ b/src/managers/ANRManager.hpp @@ -7,8 +7,7 @@ #include #include "./eventLoop/EventLoopTimer.hpp" #include "../helpers/signal/Signal.hpp" -#include -#include +#include "../helpers/AsyncDialogBox.hpp" #include class CXDGWMBase; @@ -32,22 +31,21 @@ class CANRManager { SANRData(PHLWINDOW pWindow); ~SANRData(); - WP xwaylandSurface; - WP xdgBase; + WP xwaylandSurface; + WP xdgBase; - int missedResponses = 0; - std::thread dialogThread; - SP dialogProc; - std::atomic dialogThreadExited = false; - std::atomic dialogThreadSaidWait = false; + int missedResponses = 0; - void runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID); - bool isThreadRunning(); - void killDialog(); - bool isDefunct() const; - bool fitsWindow(PHLWINDOW pWindow) const; - pid_t getPid() const; - void ping(); + bool dialogSaidWait = false; + SP dialogBox; + + void runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID); + bool isRunning(); + void killDialog(); + bool isDefunct() const; + bool fitsWindow(PHLWINDOW pWindow) const; + pid_t getPid() const; + void ping(); }; void onResponse(SP data); diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index ebeb2160..f240dae9 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -68,6 +68,7 @@ class CEventLoopManager { wl_event_source* m_configWatcherInotifySource = nullptr; friend class CSyncTimeline; + friend class CAsyncDialogBox; }; inline UP g_pEventLoopManager; From 9b3925009aaacc236a4ed6ea91c0d1e157f2ca0a Mon Sep 17 00:00:00 2001 From: nyx Date: Sun, 6 Apr 2025 17:24:14 -0400 Subject: [PATCH 0048/1077] DataDevice: position icon at cursor hotspot (#9895) * DataDevice: position icon at cursor hotspot ref: https://wayland.app/protocols/wayland#wl_data_device:request:start_drag --- src/protocols/core/DataDevice.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index f4044ec5..83226e3a 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -808,15 +808,19 @@ void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, timespec* when) { const auto POS = g_pInputManager->getMouseCoordsInternal(); - CBox box = CBox{POS, dnd.dndSurface->current.size}.translate(-pMonitor->vecPosition + g_pPointerManager->cursorSizeLogical() / 2.F).scale(pMonitor->scale); + Vector2D surfacePos = POS; + + surfacePos += dnd.dndSurface->current.offset; + + CBox box = CBox{surfacePos, dnd.dndSurface->current.size}.translate(-pMonitor->vecPosition).scale(pMonitor->scale); CTexPassElement::SRenderData data; data.tex = dnd.dndSurface->current.texture; data.box = box; g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); - box = CBox{POS, dnd.dndSurface->current.size}.translate(g_pPointerManager->cursorSizeLogical() / 2.F).expand(5); - g_pHyprRenderer->damageBox(box); + CBox damageBox = CBox{surfacePos, dnd.dndSurface->current.size}.expand(5); + g_pHyprRenderer->damageBox(damageBox); dnd.dndSurface->frame(when); } From 85f874d10f97b8bb35e79a9a219b0217e2938794 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 6 Apr 2025 22:35:26 +0100 Subject: [PATCH 0049/1077] swipe: fix prev workspace remembering fixes #9904 --- src/managers/input/Swipe.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index b5282e3c..d199aef4 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -135,6 +135,7 @@ void CInputManager::endWorkspaceSwipe() { else { m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_sActiveSwipe.pMonitor->ID)); PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); + PWORKSPACEL->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } PWORKSPACEL->m_vRenderOffset->setValue(RENDEROFFSET); @@ -161,6 +162,7 @@ void CInputManager::endWorkspaceSwipe() { else { m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_sActiveSwipe.pMonitor->ID)); PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); + PWORKSPACER->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } PWORKSPACER->m_vRenderOffset->setValue(RENDEROFFSET); From 51838fb5f5b5b03bca99b324fb1f6494d3854f89 Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Sun, 6 Apr 2025 23:41:27 +0200 Subject: [PATCH 0050/1077] layout: properly track floating window position (#9937) --- src/layout/IHyprLayout.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index b353a50c..a0f15f5c 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -618,6 +618,8 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { DRAGGINGWINDOW->sendWindowSize(); } + DRAGGINGWINDOW->m_vPosition = wb.pos(); + } else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) { if (DRAGGINGWINDOW->m_bIsFloating) { @@ -689,6 +691,9 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { DRAGGINGWINDOW->m_vRealPosition->setValueAndWarp(wb.pos()); DRAGGINGWINDOW->sendWindowSize(); } + + DRAGGINGWINDOW->m_vPosition = wb.pos(); + DRAGGINGWINDOW->m_vSize = wb.size(); } else { resizeActiveWindow(TICKDELTA, m_eGrabbedCorner, DRAGGINGWINDOW); } @@ -780,8 +785,8 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { *pWindow->m_vRealPosition = wb.pos(); *pWindow->m_vRealSize = wb.size(); - pWindow->m_vSize = wb.pos(); - pWindow->m_vPosition = wb.size(); + pWindow->m_vSize = wb.size(); + pWindow->m_vPosition = wb.pos(); g_pHyprRenderer->damageMonitor(pWindow->m_pMonitor.lock()); @@ -810,6 +815,7 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, PHLWINDOW pWindow) { PWINDOW->setAnimationsToMove(); + PWINDOW->m_vPosition += delta; *PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition->goal() + delta; g_pHyprRenderer->damageWindow(PWINDOW); From 8a8f394da70e40043d1ba2c193b81867560b2b05 Mon Sep 17 00:00:00 2001 From: kerty0 <81302457+kerty0@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:46:31 +0300 Subject: [PATCH 0051/1077] swipe: fix swiping onto a new workspace bound to another monitor (#8176) (#9927) The previous code didn't check if the chosen new workspace was bound to another monitor, causing buggy behavior where workspace was simultaneously open and not. The fix simply uses `r+1` for new workspace selection. Also, the previous code would select rightmost workspace + 1, creating large gaps in workspace IDs in some scenarios. Example (`()` and `[]` indicate workspaces on different monitors): `(1), 2, 3, 4, 5, 6, 7, 8, 9, [10]` Swipe right on `()` monitor would create: `(1), 2, 3, 4, 5, 6, 7, 8, 9, [10], (11)` But with this commit: `(1), (2), 3, 4, 5, 6, 7, 8, 9, [10]` --- src/managers/input/Swipe.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index d199aef4..70700bf4 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -71,19 +71,8 @@ void CInputManager::endWorkspaceSwipe() { // If we've been swiping off the right end with PSWIPENEW enabled, there is // no workspace there yet, and we need to choose an ID for a new one now. - // With multiple monitors, it might not be appropriate to choose one more - // than the ID of the workspace we're swiping from, because that ID might - // just be on another monitor. It's also not just the smallest unused ID, - // because that could be a gap in the existing workspace numbers, and it'd - // be counterintuitive to swipe rightwards onto a new workspace and end up - // left of where we started. Instead, it's one more than the greatest - // workspace ID that currently exists. if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID && *PSWIPENEW) { - WORKSPACEID maxWorkspace = 0; - for (const auto& ws : g_pCompositor->m_vWorkspaces) { - maxWorkspace = std::max(maxWorkspace, ws->m_iID); - } - workspaceIDRight = maxWorkspace + 1; + workspaceIDRight = getWorkspaceIDNameFromString("r+1").id; } auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER From a8eda7f978ed367969d0de2adc836ceb268ccd54 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Mon, 7 Apr 2025 18:36:01 +0000 Subject: [PATCH 0052/1077] helpers: add missing include for BSDs after 3c128679ee8c (#9982) src/helpers/AsyncDialogBox.cpp:47:23: error: use of undeclared identifier 'read' 47 | while ((ret = read(m_pipeReadFd.get(), buf.data(), 1023)) > 0) { | ^ src/helpers/AsyncDialogBox.cpp:83:9: error: use of undeclared identifier 'pipe' 83 | if (pipe(outPipe)) { | ^ src/helpers/AsyncDialogBox.cpp:110:5: error: use of undeclared identifier 'close' 110 | close(outPipe[1]); | ^ --- src/helpers/AsyncDialogBox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 2ca99ab9..3010d10e 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -1,6 +1,7 @@ #include "AsyncDialogBox.hpp" #include "./fs/FsUtils.hpp" #include +#include #include "../managers/eventLoop/EventLoopManager.hpp" using namespace Hyprutils::OS; From 70ae99f52162a0ed2723d45c63adfb2e61f4e2f5 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Mon, 7 Apr 2025 20:52:11 +0200 Subject: [PATCH 0053/1077] input/layers: Fix exclusive LS focus / refocus after unmap (#9984) --- src/desktop/LayerSurface.cpp | 7 ++++--- src/managers/input/InputManager.cpp | 26 ++++++++++++++++++++------ src/managers/input/InputManager.hpp | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 428dcbbc..8747d079 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -234,9 +234,10 @@ void CLayerSurface::onUnmap() { // refocus if needed // vvvvvvvvvvvvv if there is a last focus and the last focus is not keyboard focusable, fallback to window - if (WASLASTFOCUS || (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus->hlSurface && !g_pCompositor->m_pLastFocus->hlSurface->keyboardFocusable())) - g_pInputManager->refocusLastWindow(PMONITOR); - else if (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus != surface->resource()) + if (WASLASTFOCUS || (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus->hlSurface && !g_pCompositor->m_pLastFocus->hlSurface->keyboardFocusable())) { + if (!g_pInputManager->refocusLastWindow(PMONITOR)) + g_pInputManager->refocus(); + } else if (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus != surface->resource()) g_pSeatManager->setKeyboardFocus(g_pCompositor->m_pLastFocus.lock()); CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height}; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 8ca8c21d..2153b916 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -306,6 +306,17 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pLayoutManager->getCurrentLayout()->onMouseMove(getMouseCoordsInternal()); + // forced above all + if (!g_pInputManager->m_dExclusiveLSes.empty()) { + if (!foundSurface) + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &g_pInputManager->m_dExclusiveLSes, &surfaceCoords, &pFoundLayerSurface); + + if (!foundSurface) { + foundSurface = (*g_pInputManager->m_dExclusiveLSes.begin())->surface->resource(); + surfacePos = (*g_pInputManager->m_dExclusiveLSes.begin())->realPosition->goal(); + } + } + if (!foundSurface) foundSurface = g_pCompositor->vectorToLayerPopupSurface(mouseCoords, PMONITOR, &surfaceCoords, &pFoundLayerSurface); @@ -1420,10 +1431,15 @@ void CInputManager::refocus() { mouseMoveUnified(0, true); } -void CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { +bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { + if (!m_dExclusiveLSes.empty()) { + Debug::log(LOG, "CInputManager::refocusLastWindow: ignoring, exclusive LS present."); + return false; + } + if (!pMonitor) { refocus(); - return; + return true; } Vector2D surfaceCoords; @@ -1432,10 +1448,6 @@ void CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { g_pInputManager->releaseAllMouseButtons(); - // first try for an exclusive layer - if (!m_dExclusiveLSes.empty()) - foundSurface = m_dExclusiveLSes[m_dExclusiveLSes.size() - 1]->surface->resource(); - // then any surfaces above windows on the same monitor if (!foundSurface) { foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], @@ -1465,6 +1477,8 @@ void CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { refocus(); } + + return true; } void CInputManager::unconstrainMouse() { diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index 7774a6db..fa06454f 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -114,7 +114,7 @@ class CInputManager { Vector2D getMouseCoordsInternal(); void refocus(); - void refocusLastWindow(PHLMONITOR pMonitor); + bool refocusLastWindow(PHLMONITOR pMonitor); void simulateMouseMovement(); void sendMotionEventsToFocused(); From da86db43d47141b9d7332d3cb756ff7c05dbb39a Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Mon, 7 Apr 2025 14:03:27 -0500 Subject: [PATCH 0054/1077] core: refactor and improve surface commit (#9805) * make CHLBufferReference not a SP anymore * copy over release and acquire points in CHLBufferReference * use CHLBufferReference in screencopy and toplevel export TODO: use CHLBufferReference in direct scanout properly the only problem is the scanout buffer release timing, specifically the onBackendRelease mechanism * cleanup SSurfaceState and surface pending commit tracking * move surface code from DRMSyncobj, and move acquire to SSurfaceState * use queue for comitted pending surface states like proto says "The content update is placed in a queue until it becomes active." - wl_surface::commit * drop, not release, prev buffer if 2nd buffer wl_surface.attach is sent "A wl_buffer that has been attached and then replaced by another attach instead of committed will not receive a release event, and is not used by the compositor." - wl_surface::attach --- src/helpers/Monitor.cpp | 10 +-- src/protocols/DRMSyncobj.cpp | 107 ++++++------------------- src/protocols/DRMSyncobj.hpp | 11 +-- src/protocols/Screencopy.cpp | 11 +-- src/protocols/Screencopy.hpp | 4 +- src/protocols/ToplevelExport.cpp | 11 +-- src/protocols/ToplevelExport.hpp | 3 +- src/protocols/Viewporter.cpp | 4 + src/protocols/core/Compositor.cpp | 113 +++++++++++++++++++-------- src/protocols/core/Compositor.hpp | 4 +- src/protocols/types/Buffer.cpp | 54 ++++++++++++- src/protocols/types/Buffer.hpp | 24 ++++-- src/protocols/types/SurfaceState.cpp | 77 +++++++++--------- src/protocols/types/SurfaceState.hpp | 71 ++++++++++------- src/render/Renderer.cpp | 4 +- 15 files changed, 285 insertions(+), 223 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 98f45cce..97f74609 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1348,13 +1348,13 @@ bool CMonitor::attemptDirectScanout() { return false; // we can't scanout shm buffers. - const auto params = PSURFACE->current.buffer->buffer->dmabuf(); + const auto params = PSURFACE->current.buffer->dmabuf(); if (!params.success || !PSURFACE->current.texture->m_pEglImage /* dmabuf */) return false; - Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->current.buffer->buffer.get()); + Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->current.buffer.buffer.get()); - auto PBUFFER = PSURFACE->current.buffer->buffer; + auto PBUFFER = PSURFACE->current.buffer.buffer; if (PBUFFER == output->state->state().buffer) { if (scanoutNeedsCursorUpdate) { @@ -1407,10 +1407,10 @@ bool CMonitor::attemptDirectScanout() { auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(output); - bool DOEXPLICIT = PSURFACE->syncobj && PSURFACE->current.buffer && PSURFACE->current.buffer->acquire && explicitOptions.explicitKMSEnabled; + bool DOEXPLICIT = PSURFACE->syncobj && PSURFACE->current.buffer && PSURFACE->current.acquire && explicitOptions.explicitKMSEnabled; if (DOEXPLICIT) { // wait for surface's explicit fence if present - inFence = PSURFACE->current.buffer->acquire->exportAsFD(); + inFence = PSURFACE->current.acquire.exportAsFD(); if (inFence.isValid()) { Debug::log(TRACE, "attemptDirectScanout: setting IN_FENCE for aq to {}", inFence.get()); output->state->setExplicitInFence(inFence.get()); diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index 0a4ca439..c2960746 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -75,98 +75,41 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UPevents.precommit.registerListener([this](std::any d) { - const bool PENDING_HAS_NEW_BUFFER = surface->pending.updated & SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER; - - if (!surface->pending.buffer && PENDING_HAS_NEW_BUFFER && !surface->pending.texture) { - removeAllWaiters(); - surface->commitPendingState(surface->pending); - return; // null buffer attached. - } - - if (!surface->pending.buffer && !PENDING_HAS_NEW_BUFFER && surface->current.buffer) { - surface->current.bufferDamage.clear(); - surface->current.damage.clear(); - surface->commitPendingState(surface->current); - return; // no new buffer, but we still have current around and a commit happend, commit current again. - } - - if (!surface->pending.buffer && !PENDING_HAS_NEW_BUFFER && !surface->current.buffer) { - surface->commitPendingState(surface->pending); // no pending buffer, no current buffer. probably first commit + if (!surface->pending.updated.buffer || !surface->pending.buffer) { + if (pendingAcquire.timeline() || pendingRelease.timeline()) { + resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_BUFFER, "Missing buffer"); + surface->pending.rejected = true; + } return; } - if (pendingAcquire.timeline()) { - surface->pending.buffer->acquire = makeUnique(std::move(pendingAcquire)); - pendingAcquire = {}; - } - - if (pendingRelease.timeline()) { - surface->pending.buffer->release = makeUnique(std::move(pendingRelease)); - pendingRelease = {}; - } - - if (protocolError()) + if (!pendingAcquire.timeline()) { + resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline"); + surface->pending.rejected = true; return; + } - const auto& state = pendingStates.emplace_back(makeShared(surface->pending)); - surface->pending.damage.clear(); - surface->pending.bufferDamage.clear(); - surface->pending.updated &= ~SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER; - surface->pending.updated &= ~SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; - surface->pending.buffer.reset(); + if (!pendingRelease.timeline()) { + resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline"); + surface->pending.rejected = true; + return; + } - state->buffer->buffer->syncReleaser = state->buffer->release->createSyncRelease(); - state->buffer->acquire->addWaiter([this, surf = surface, wp = CWeakPointer(*std::prev(pendingStates.end()))] { - if (!surf) - return; - - surf->commitPendingState(*wp.lock()); - std::erase(pendingStates, wp); - }); - }); -} - -void CDRMSyncobjSurfaceResource::removeAllWaiters() { - for (auto& s : pendingStates) { - if (s && s->buffer && s->buffer->acquire) - s->buffer->acquire->timeline()->removeAllWaiters(); - } - - pendingStates.clear(); -} - -CDRMSyncobjSurfaceResource::~CDRMSyncobjSurfaceResource() { - removeAllWaiters(); -} - -bool CDRMSyncobjSurfaceResource::protocolError() { - if (!surface->pending.buffer) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_BUFFER, "Missing buffer"); - surface->pending.rejected = true; - return true; - } - - if (!surface->pending.buffer->acquire || !surface->pending.buffer->acquire->timeline()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline"); - surface->pending.rejected = true; - return true; - } - - if (!surface->pending.buffer->release || !surface->pending.buffer->release->timeline()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline"); - surface->pending.rejected = true; - return true; - } - - if (surface->pending.buffer->acquire->timeline() == surface->pending.buffer->release->timeline()) { - if (surface->pending.buffer->acquire->point() >= surface->pending.buffer->release->point()) { + if (pendingAcquire.timeline() == pendingRelease.timeline() && pendingAcquire.point() >= pendingRelease.point()) { resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_CONFLICTING_POINTS, "Acquire and release points are on the same timeline, and acquire >= release"); surface->pending.rejected = true; - return true; + return; } - } - return false; + surface->pending.updated.acquire = true; + surface->pending.acquire = pendingAcquire; + pendingAcquire = {}; + + surface->pending.buffer.release = pendingRelease; + pendingRelease = {}; + + surface->pending.buffer->syncReleaser = surface->pending.buffer.release.createSyncRelease(); + }); } bool CDRMSyncobjSurfaceResource::good() { diff --git a/src/protocols/DRMSyncobj.hpp b/src/protocols/DRMSyncobj.hpp index d2259a34..a724258b 100644 --- a/src/protocols/DRMSyncobj.hpp +++ b/src/protocols/DRMSyncobj.hpp @@ -5,14 +5,11 @@ #include "../helpers/sync/SyncReleaser.hpp" #include "linux-drm-syncobj-v1.hpp" #include "../helpers/signal/Signal.hpp" -#include "types/SurfaceState.hpp" #include -#include class CWLSurfaceResource; class CDRMSyncobjTimelineResource; class CSyncTimeline; -struct SSurfaceState; class CDRMSyncPointState { public: @@ -28,6 +25,10 @@ class CDRMSyncPointState { Hyprutils::OS::CFileDescriptor exportAsFD(); void signal(); + operator bool() const { + return m_timeline; + } + private: SP m_timeline = {}; uint64_t m_point = 0; @@ -38,19 +39,15 @@ class CDRMSyncPointState { class CDRMSyncobjSurfaceResource { public: CDRMSyncobjSurfaceResource(UP&& resource_, SP surface_); - ~CDRMSyncobjSurfaceResource(); - bool protocolError(); bool good(); private: - void removeAllWaiters(); WP surface; UP resource; CDRMSyncPointState pendingAcquire; CDRMSyncPointState pendingRelease; - std::vector> pendingStates; struct { CHyprSignalListener surfacePrecommit; diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 3fd9b9f2..c124e6d2 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -14,11 +14,6 @@ #include #include -CScreencopyFrame::~CScreencopyFrame() { - if (buffer && buffer->locked()) - buffer->unlock(); -} - CScreencopyFrame::CScreencopyFrame(SP resource_, int32_t overlay_cursor, wl_resource* output, CBox box_) : resource(resource_) { if UNLIKELY (!good()) return; @@ -102,8 +97,6 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - PBUFFER->buffer->lock(); - if UNLIKELY (PBUFFER->buffer->size != box.size()) { LOGM(ERR, "Invalid dimensions in {:x}", (uintptr_t)this); resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); @@ -146,7 +139,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - buffer = PBUFFER->buffer; + buffer = CHLBufferReference(PBUFFER->buffer.lock()); PROTO::screencopy->m_vFramesAwaitingWrite.emplace_back(self); @@ -207,7 +200,7 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; - if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.lock(), nullptr, true)) { + if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer, nullptr, true)) { LOGM(ERR, "Can't copy: failed to begin rendering to dma frame"); callback(false); return; diff --git a/src/protocols/Screencopy.hpp b/src/protocols/Screencopy.hpp index 3b46b0b8..99dbcc2b 100644 --- a/src/protocols/Screencopy.hpp +++ b/src/protocols/Screencopy.hpp @@ -1,6 +1,7 @@ #pragma once #include "../defines.hpp" +#include "./types/Buffer.hpp" #include "wlr-screencopy-unstable-v1.hpp" #include "WaylandProtocol.hpp" @@ -50,7 +51,6 @@ class CScreencopyClient { class CScreencopyFrame { public: CScreencopyFrame(SP resource, int32_t overlay_cursor, wl_resource* output, CBox box); - ~CScreencopyFrame(); bool good(); @@ -65,7 +65,7 @@ class CScreencopyFrame { bool withDamage = false; bool lockedSWCursors = false; - WP buffer; + CHLBufferReference buffer; bool bufferDMA = false; uint32_t shmFormat = 0; uint32_t dmabufFormat = 0; diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index fb0bd9c7..66e74164 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -73,11 +73,6 @@ bool CToplevelExportClient::good() { return resource->resource(); } -CToplevelExportFrame::~CToplevelExportFrame() { - if (buffer && buffer->locked()) - buffer->unlock(); -} - CToplevelExportFrame::CToplevelExportFrame(SP resource_, int32_t overlayCursor_, PHLWINDOW pWindow_) : resource(resource_), pWindow(pWindow_) { if UNLIKELY (!good()) return; @@ -159,8 +154,6 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - PBUFFER->buffer->lock(); - if UNLIKELY (PBUFFER->buffer->size != box.size()) { resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); PROTO::toplevelExport->destroyResource(this); @@ -197,7 +190,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - buffer = PBUFFER->buffer; + buffer = CHLBufferReference(PBUFFER->buffer.lock()); m_ignoreDamage = ignoreDamage; @@ -340,7 +333,7 @@ bool CToplevelExportFrame::copyDmabuf(timespec* now) { g_pPointerManager->damageCursor(PMONITOR->self.lock()); } - if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.lock())) + if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer)) return false; g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); diff --git a/src/protocols/ToplevelExport.hpp b/src/protocols/ToplevelExport.hpp index 8d734dbd..21aafde5 100644 --- a/src/protocols/ToplevelExport.hpp +++ b/src/protocols/ToplevelExport.hpp @@ -40,7 +40,6 @@ class CToplevelExportClient { class CToplevelExportFrame { public: CToplevelExportFrame(SP resource_, int32_t overlayCursor, PHLWINDOW pWindow); - ~CToplevelExportFrame(); bool good(); @@ -55,7 +54,7 @@ class CToplevelExportFrame { bool m_ignoreDamage = false; bool lockedSWCursors = false; - WP buffer; + CHLBufferReference buffer; bool bufferDMA = false; uint32_t shmFormat = 0; uint32_t dmabufFormat = 0; diff --git a/src/protocols/Viewporter.cpp b/src/protocols/Viewporter.cpp index d14e7ee5..674b8373 100644 --- a/src/protocols/Viewporter.cpp +++ b/src/protocols/Viewporter.cpp @@ -15,6 +15,8 @@ CViewportResource::CViewportResource(SP resource_, SPpending.updated.viewport = true; + if (x == -1 && y == -1) { surface->pending.viewport.hasDestination = false; return; @@ -35,6 +37,8 @@ CViewportResource::CViewportResource(SP resource_, SPpending.updated.viewport = true; + double x = wl_fixed_to_double(fx), y = wl_fixed_to_double(fy), w = wl_fixed_to_double(fw), h = wl_fixed_to_double(fh); if (x == -1 && y == -1 && w == -1 && h == -1) { diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index cb1aa69a..57f0ff3f 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -71,23 +71,32 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso resource->setOnDestroy([this](CWlSurface* r) { destroy(); }); resource->setAttach([this](CWlSurface* r, wl_resource* buffer, int32_t x, int32_t y) { - pending.offset = {x, y}; - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_BUFFER | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OFFSET; + pending.updated.buffer = true; + pending.updated.offset = true; - if (!buffer) { - pending.buffer.reset(); - pending.texture.reset(); - pending.bufferSize = Vector2D{}; + pending.offset = {x, y}; + + if (pending.buffer) + pending.buffer.drop(); + + auto buf = buffer ? CWLBufferResource::fromResource(buffer) : nullptr; + + if (buf && buf->buffer) { + pending.buffer = CHLBufferReference(buf->buffer.lock()); + pending.texture = buf->buffer->texture; + pending.size = buf->buffer->size; + pending.bufferSize = buf->buffer->size; } else { - auto res = CWLBufferResource::fromResource(buffer); - pending.buffer = res && res->buffer ? makeShared(res->buffer.lock(), self.lock()) : nullptr; - pending.size = res && res->buffer ? res->buffer->size : Vector2D{}; - pending.texture = res && res->buffer ? res->buffer->texture : nullptr; - pending.bufferSize = res && res->buffer ? res->buffer->size : Vector2D{}; + pending.buffer = {}; + pending.texture.reset(); + pending.size = Vector2D{}; + pending.bufferSize = Vector2D{}; } - if (pending.bufferSize != current.bufferSize) - pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + if (pending.bufferSize != current.bufferSize) { + pending.updated.damage = true; + pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + } }); resource->setCommit([this](CWlSurface* r) { @@ -109,34 +118,78 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso events.precommit.emit(); if (pending.rejected) { + pending.rejected = false; dropPendingBuffer(); return; } - if (!syncobj) - commitPendingState(pending); + if ((!pending.updated.buffer) || // no new buffer attached + (!pending.buffer && !pending.texture) || // null buffer attached + (!pending.updated.acquire && pending.buffer->isSynchronous()) // synchronous buffers (ex. shm) can be read immediately + ) { + commitState(pending); + pending.reset(); + return; + } + + // save state while we wait for buffer to become ready + const auto& state = pendingStates.emplace(makeUnique(pending)); + pending.reset(); + + auto whenReadable = [this, surf = self, state = WP(pendingStates.back())] { + if (!surf || state.expired()) + return; + + while (!pendingStates.empty() && pendingStates.front() != state) { + commitState(*pendingStates.front()); + pendingStates.pop(); + } + + commitState(*pendingStates.front()); + pendingStates.pop(); + }; + + if (state->updated.acquire) { + // wait on acquire point for this surface, from explicit sync protocol + state->acquire.addWaiter(whenReadable); + } else if (state->buffer->dmabuf().success) { + // https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html#implicit-fence-poll-support + // TODO: wait for the dma-buf fd's to become readable + whenReadable(); + } else { + // huh??? only buffers with acquire or dmabuf should get through here... + Debug::log(ERR, "BUG THIS: wl_surface.commit: non-acquire non-dmabuf buffers needs wait..."); + whenReadable(); + } }); resource->setDamage([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.updated.damage = true; pending.damage.add(CBox{x, y, w, h}); }); resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + pending.updated.damage = true; pending.bufferDamage.add(CBox{x, y, w, h}); }); resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { if (scale == pending.scale) return; - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_SCALE | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + + pending.updated.scale = true; + pending.updated.damage = true; + pending.scale = scale; pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); + resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { if (tr == pending.transform) return; - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_TRANSFORM | SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_DAMAGE; + + pending.updated.transform = true; + pending.updated.damage = true; + pending.transform = (wl_output_transform)tr; pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); @@ -147,7 +200,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso return; } - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_INPUT; + pending.updated.input = true; auto RG = CWLRegionResource::fromResource(region); pending.input = RG->region; @@ -159,7 +212,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso return; } - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OPAQUE; + pending.updated.opaque = true; auto RG = CWLRegionResource::fromResource(region); pending.opaque = RG->region; @@ -168,8 +221,8 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso resource->setFrame([this](CWlSurface* r, uint32_t id) { callbacks.emplace_back(makeShared(makeShared(pClient, 1, id))); }); resource->setOffset([this](CWlSurface* r, int32_t x, int32_t y) { - pending.updated |= SSurfaceState::eUpdatedProperties::SURFACE_UPDATED_OFFSET; - pending.offset = {x, y}; + pending.updated.offset = true; + pending.offset = {x, y}; }); } @@ -188,11 +241,11 @@ void CWLSurfaceResource::destroy() { } void CWLSurfaceResource::dropPendingBuffer() { - pending.buffer.reset(); + pending.buffer = {}; } void CWLSurfaceResource::dropCurrentBuffer() { - current.buffer.reset(); + current.buffer = {}; } SP CWLSurfaceResource::fromResource(wl_resource* res) { @@ -279,7 +332,6 @@ void CWLSurfaceResource::resetRole() { } void CWLSurfaceResource::bfHelper(std::vector> const& nodes, std::function, const Vector2D&, void*)> fn, void* data) { - std::vector> nodes2; nodes2.reserve(nodes.size() * 2); @@ -424,13 +476,12 @@ CBox CWLSurfaceResource::extends() { return full.getExtents(); } -void CWLSurfaceResource::commitPendingState(SSurfaceState& state) { +void CWLSurfaceResource::commitState(SSurfaceState& state) { auto lastTexture = current.texture; current.updateFrom(state); - state.updated = 0; if (current.buffer) { - if (current.buffer->buffer->isSynchronous()) + if (current.buffer->isSynchronous()) current.updateSynchronousTexture(lastTexture); // if the surface is a cursor, update the shm buffer @@ -465,7 +516,7 @@ void CWLSurfaceResource::commitPendingState(SSurfaceState& state) { // release the buffer if it's synchronous (SHM) as update() has done everything thats needed // so we can let the app know we're done. // if it doesn't have a role, we can't release it yet, in case it gets turned into a cursor. - if (current.buffer && current.buffer->buffer && current.buffer->buffer->isSynchronous() && role->role() != SURFACE_ROLE_UNASSIGNED) + if (current.buffer && current.buffer->isSynchronous() && role->role() != SURFACE_ROLE_UNASSIGNED) dropCurrentBuffer(); } @@ -473,7 +524,7 @@ void CWLSurfaceResource::updateCursorShm(CRegion damage) { if (damage.empty()) return; - auto buf = current.buffer ? current.buffer->buffer : SP{}; + auto buf = current.buffer ? current.buffer : SP{}; if UNLIKELY (!buf) return; diff --git a/src/protocols/core/Compositor.hpp b/src/protocols/core/Compositor.hpp index c732f797..ccfcf0cc 100644 --- a/src/protocols/core/Compositor.hpp +++ b/src/protocols/core/Compositor.hpp @@ -9,6 +9,7 @@ */ #include +#include #include #include "../WaylandProtocol.hpp" #include "../../render/Texture.hpp" @@ -87,6 +88,7 @@ class CWLSurfaceResource { } events; SSurfaceState current, pending; + std::queue> pendingStates; std::vector> callbacks; WP self; @@ -103,7 +105,7 @@ class CWLSurfaceResource { void breadthfirst(std::function, const Vector2D&, void*)> fn, void* data); SP findFirstPreorder(std::function)> fn); void presentFeedback(timespec* when, PHLMONITOR pMonitor, bool discarded = false); - void commitPendingState(SSurfaceState& state); + void commitState(SSurfaceState& state); // returns a pair: found surface (null if not found) and surface local coords. // localCoords param is relative to 0,0 of this surface diff --git a/src/protocols/types/Buffer.cpp b/src/protocols/types/Buffer.cpp index 2623435b..22745c06 100644 --- a/src/protocols/types/Buffer.cpp +++ b/src/protocols/types/Buffer.cpp @@ -40,13 +40,61 @@ void IHLBuffer::onBackendRelease(const std::function& fn) { }); } -CHLBufferReference::CHLBufferReference(SP buffer_, SP surface_) : buffer(buffer_), surface(surface_) { - buffer->lock(); +CHLBufferReference::CHLBufferReference() : buffer(nullptr) { + ; +} + +CHLBufferReference::CHLBufferReference(const CHLBufferReference& other) : release(other.release), buffer(other.buffer) { + if (buffer) + buffer->lock(); +} + +CHLBufferReference::CHLBufferReference(SP buffer_) : buffer(buffer_) { + if (buffer) + buffer->lock(); } CHLBufferReference::~CHLBufferReference() { + if (buffer) + buffer->unlock(); +} + +CHLBufferReference& CHLBufferReference::operator=(const CHLBufferReference& other) { + if (other.buffer) + other.buffer->lock(); + if (buffer) + buffer->unlock(); + buffer = other.buffer; + release = other.release; + return *this; +} + +bool CHLBufferReference::operator==(const CHLBufferReference& other) const { + return buffer == other.buffer; +} + +bool CHLBufferReference::operator==(const SP& other) const { + return buffer == other; +} + +bool CHLBufferReference::operator==(const SP& other) const { + return buffer == other; +} + +SP CHLBufferReference::operator->() const { + return buffer; +} + +CHLBufferReference::operator bool() const { + return buffer; +} + +void CHLBufferReference::drop() { if (!buffer) return; - buffer->unlock(); + buffer->nLocks--; + ASSERT(buffer->nLocks >= 0); + + buffer = nullptr; } diff --git a/src/protocols/types/Buffer.hpp b/src/protocols/types/Buffer.hpp index a0b4e9a8..1bf7583c 100644 --- a/src/protocols/types/Buffer.hpp +++ b/src/protocols/types/Buffer.hpp @@ -8,6 +8,7 @@ #include class CSyncReleaser; +class CHLBufferReference; class IHLBuffer : public Aquamarine::IBuffer { public: @@ -36,19 +37,28 @@ class IHLBuffer : public Aquamarine::IBuffer { private: int nLocks = 0; + + friend class CHLBufferReference; }; // for ref-counting. Releases in ~dtor -// surface optional class CHLBufferReference { public: - CHLBufferReference(SP buffer, SP surface); + CHLBufferReference(); + CHLBufferReference(const CHLBufferReference& other); + CHLBufferReference(SP buffer); ~CHLBufferReference(); - SP buffer; - UP acquire; - UP release; + CHLBufferReference& operator=(const CHLBufferReference& other); + bool operator==(const CHLBufferReference& other) const; + bool operator==(const SP& other) const; + bool operator==(const SP& other) const; + SP operator->() const; + operator bool() const; - private: - WP surface; + // unlock and drop the buffer without sending release + void drop(); + + CDRMSyncPointState release; + SP buffer; }; diff --git a/src/protocols/types/SurfaceState.cpp b/src/protocols/types/SurfaceState.cpp index b57fef81..7d1f5702 100644 --- a/src/protocols/types/SurfaceState.cpp +++ b/src/protocols/types/SurfaceState.cpp @@ -35,7 +35,7 @@ CRegion SSurfaceState::accumulateBufferDamage() { } void SSurfaceState::updateSynchronousTexture(SP lastTexture) { - auto [dataPtr, fmt, size] = buffer->buffer->beginDataPtr(0); + auto [dataPtr, fmt, size] = buffer->beginDataPtr(0); if (dataPtr) { auto drmFmt = NFormatUtils::shmToDRM(fmt); auto stride = bufferSize.y ? size / bufferSize.y : 0; @@ -45,49 +45,56 @@ void SSurfaceState::updateSynchronousTexture(SP lastTexture) { } else texture = makeShared(drmFmt, dataPtr, stride, bufferSize); } - buffer->buffer->endDataPtr(); + buffer->endDataPtr(); } void SSurfaceState::reset() { + updated.all = false; + + // After commit, there is no pending buffer until the next attach. + buffer = {}; + + // applies only to the buffer that is attached to the surface + acquire = {}; + + // wl_surface.commit assings pending ... and clears pending damage. damage.clear(); bufferDamage.clear(); - transform = WL_OUTPUT_TRANSFORM_NORMAL; - scale = 1; - offset = {}; - size = {}; } void SSurfaceState::updateFrom(SSurfaceState& ref) { updated = ref.updated; - if (ref.updated & SURFACE_UPDATED_BUFFER) { - ref.updated &= ~SURFACE_UPDATED_BUFFER; - *this = ref; - ref.damage.clear(); - ref.bufferDamage.clear(); - ref.buffer.reset(); - } else { - if (ref.updated & SURFACE_UPDATED_DAMAGE) { - damage = ref.damage; - bufferDamage = ref.bufferDamage; - } - - if (ref.updated & SURFACE_UPDATED_INPUT) - input = ref.input; - - if (ref.updated & SURFACE_UPDATED_OPAQUE) - opaque = ref.opaque; - - if (ref.updated & SURFACE_UPDATED_OFFSET) - offset = ref.offset; - - if (ref.updated & SURFACE_UPDATED_SCALE) - scale = ref.scale; - - if (ref.updated & SURFACE_UPDATED_VIEWPORT) - viewport = ref.viewport; - - if (ref.updated & SURFACE_UPDATED_TRANSFORM) - transform = ref.transform; + if (ref.updated.buffer) { + buffer = ref.buffer; + texture = ref.texture; + size = ref.size; + bufferSize = ref.bufferSize; } + + if (ref.updated.damage) { + damage = ref.damage; + bufferDamage = ref.bufferDamage; + } + + if (ref.updated.input) + input = ref.input; + + if (ref.updated.opaque) + opaque = ref.opaque; + + if (ref.updated.offset) + offset = ref.offset; + + if (ref.updated.scale) + scale = ref.scale; + + if (ref.updated.transform) + transform = ref.transform; + + if (ref.updated.viewport) + viewport = ref.viewport; + + if (ref.updated.acquire) + acquire = ref.acquire; } diff --git a/src/protocols/types/SurfaceState.hpp b/src/protocols/types/SurfaceState.hpp index 4c995bb0..5a1b2b68 100644 --- a/src/protocols/types/SurfaceState.hpp +++ b/src/protocols/types/SurfaceState.hpp @@ -2,44 +2,59 @@ #include "../../helpers/math/Math.hpp" #include "../WaylandProtocol.hpp" +#include "./Buffer.hpp" -class CHLBufferReference; class CTexture; +class CDRMSyncPointState; struct SSurfaceState { - enum eUpdatedProperties : uint8_t { - SURFACE_UPDATED_OPAQUE = 1 << 0, - SURFACE_UPDATED_INPUT = 1 << 1, - SURFACE_UPDATED_DAMAGE = 1 << 2, - SURFACE_UPDATED_SCALE = 1 << 3, - SURFACE_UPDATED_BUFFER = 1 << 4, - SURFACE_UPDATED_OFFSET = 1 << 5, - SURFACE_UPDATED_VIEWPORT = 1 << 6, - SURFACE_UPDATED_TRANSFORM = 1 << 7, - }; + union { + uint16_t all = 0; + struct { + bool buffer : 1; + bool damage : 1; + bool opaque : 1; + bool input : 1; + bool transform : 1; + bool scale : 1; + bool offset : 1; + bool viewport : 1; + bool acquire : 1; + }; + } updated; - CRegion opaque, input = CBox{{}, {INT32_MAX, INT32_MAX}}, damage, bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}} /* initial damage */; - wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL; - int scale = 1; - SP buffer; // buffer ref will be released once the buffer is no longer locked. For checking if a buffer is attached to this state, check texture. - SP texture; - Vector2D offset; - Vector2D size, bufferSize; + bool rejected = false; + + // initial values, copied from protocol text + CHLBufferReference buffer = {}; // The initial surface contents are void + CRegion damage, bufferDamage; // The initial value for pending damage is empty + CRegion opaque; // The initial value for an opaque region is empty + CRegion input = CBox{{}, {INT32_MAX, INT32_MAX}}; // The initial value for an input region is infinite + wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL; // A newly created surface has its buffer transformation set to normal + int scale = 1; // A newly created surface has its buffer scale set to 1 + + // these don't have well defined initial values in the protocol, but these work + Vector2D size, bufferSize; + Vector2D offset; + + // viewporter protocol surface state struct { bool hasDestination = false; bool hasSource = false; Vector2D destination; CBox source; } viewport; - bool rejected = false; - uint8_t updated = 0; // eUpdatedProperties. Stores what the last update changed - Vector2D sourceSize(); - // Translates damage into bufferDamage, clearing damage and returning the updated bufferDamage - CRegion accumulateBufferDamage(); - void updateSynchronousTexture(SP lastTexture); - void reset(); - // updates this state from a reference state. Mutates the reference state. If a new buffer is committed, - // reference state gets its damage and buffer cleared. - void updateFrom(SSurfaceState& ref); + + // drm syncobj protocol surface state + CDRMSyncPointState acquire; + + // texture of surface content, used for rendering + SP texture; + void updateSynchronousTexture(SP lastTexture); + + // helpers + CRegion accumulateBufferDamage(); // transforms state.damage and merges it into state.bufferDamage + void updateFrom(SSurfaceState& ref); // updates this state based on a reference state. + void reset(); // resets pending state after commit }; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index dca76f63..dc5c1284 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1565,10 +1565,10 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { Debug::log(TRACE, "Explicit: can't add sync, monitor has no EGLSync"); else { for (auto const& e : explicitPresented) { - if (!e->current.buffer || !e->current.buffer->buffer->syncReleaser) + if (!e->current.buffer || !e->current.buffer->syncReleaser) continue; - e->current.buffer->buffer->syncReleaser->addReleaseSync(pMonitor->eglSync); + e->current.buffer->syncReleaser->addReleaseSync(pMonitor->eglSync); } } From b15c2bfff6941bd2072eade13177433d7ab58a00 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:08:16 +0200 Subject: [PATCH 0055/1077] CursorManager: Store cursor pixel data retrieved from X/HC as a copy (#9986) Instead of storing pointers as refs (which could randomly get invalid very easily) copy the data. --- src/managers/CursorManager.cpp | 12 ++++++++---- src/managers/CursorManager.hpp | 9 ++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index cad456ba..ee0cff35 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -18,12 +18,16 @@ static void hcLogger(enum eHyprcursorLogLevel level, char* message) { Debug::log(NONE, "[hc] {}", message); } -CCursorBuffer::CCursorBuffer(cairo_surface_t* surf, const Vector2D& size_, const Vector2D& hot_) : hotspot(hot_), surface(surf), stride(cairo_image_surface_get_stride(surf)) { +CCursorBuffer::CCursorBuffer(cairo_surface_t* surf, const Vector2D& size_, const Vector2D& hot_) : m_hotspot(hot_), m_stride(cairo_image_surface_get_stride(surf)) { size = size_; + + m_data = std::vector((uint8_t*)cairo_image_surface_get_data(surf), ((uint8_t*)cairo_image_surface_get_data(surf)) + (cairo_image_surface_get_height(surf) * m_stride)); } -CCursorBuffer::CCursorBuffer(uint8_t* pixelData_, const Vector2D& size_, const Vector2D& hot_) : hotspot(hot_), pixelData(pixelData_), stride(4 * size_.x) { +CCursorBuffer::CCursorBuffer(const uint8_t* pixelData, const Vector2D& size_, const Vector2D& hot_) : m_hotspot(hot_), m_stride(4 * size_.x) { size = size_; + + m_data = std::vector(pixelData, pixelData + ((int)size_.y * m_stride)); } Aquamarine::eBufferCapability CCursorBuffer::caps() { @@ -51,12 +55,12 @@ Aquamarine::SSHMAttrs CCursorBuffer::shm() { attrs.success = true; attrs.format = DRM_FORMAT_ARGB8888; attrs.size = size; - attrs.stride = stride; + attrs.stride = m_stride; return attrs; } std::tuple CCursorBuffer::beginDataPtr(uint32_t flags) { - return {pixelData ? pixelData : cairo_image_surface_get_data(surface), DRM_FORMAT_ARGB8888, stride}; + return {m_data.data(), DRM_FORMAT_ARGB8888, m_stride}; } void CCursorBuffer::endDataPtr() { diff --git a/src/managers/CursorManager.hpp b/src/managers/CursorManager.hpp index c5ded5da..30741a62 100644 --- a/src/managers/CursorManager.hpp +++ b/src/managers/CursorManager.hpp @@ -17,7 +17,7 @@ AQUAMARINE_FORWARD(IBuffer); class CCursorBuffer : public Aquamarine::IBuffer { public: CCursorBuffer(cairo_surface_t* surf, const Vector2D& size, const Vector2D& hotspot); - CCursorBuffer(uint8_t* pixelData, const Vector2D& size, const Vector2D& hotspot); + CCursorBuffer(const uint8_t* pixelData, const Vector2D& size, const Vector2D& hotspot); ~CCursorBuffer() = default; virtual Aquamarine::eBufferCapability caps(); @@ -30,10 +30,9 @@ class CCursorBuffer : public Aquamarine::IBuffer { virtual void endDataPtr(); private: - Vector2D hotspot; - cairo_surface_t* surface = nullptr; - uint8_t* pixelData = nullptr; - size_t stride = 0; + Vector2D m_hotspot; + std::vector m_data; + size_t m_stride = 0; }; class CCursorManager { From 642f394eb3f8fd99a51f4c8279497c458c40ba65 Mon Sep 17 00:00:00 2001 From: nyx Date: Tue, 8 Apr 2025 11:36:29 -0400 Subject: [PATCH 0056/1077] xwayland: sync primary selection with wayland (#9952) --- src/xwayland/XDataSource.cpp | 8 +++- src/xwayland/XWM.cpp | 71 +++++++++++++++++++++++++++--------- src/xwayland/XWM.hpp | 1 + 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/xwayland/XDataSource.cpp b/src/xwayland/XDataSource.cpp index 003f6c9f..14656d8b 100644 --- a/src/xwayland/XDataSource.cpp +++ b/src/xwayland/XDataSource.cpp @@ -77,7 +77,13 @@ void CXDataSource::send(const std::string& mime, CFileDescriptor fd) { xcb_create_window(g_pXWayland->pWM->connection, XCB_COPY_FROM_PARENT, transfer->incomingWindow, g_pXWayland->pWM->screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, g_pXWayland->pWM->screen->root_visual, XCB_CW_EVENT_MASK, &MASK); - xcb_convert_selection(g_pXWayland->pWM->connection, transfer->incomingWindow, HYPRATOMS["CLIPBOARD"], mimeAtom, HYPRATOMS["_WL_SELECTION"], XCB_TIME_CURRENT_TIME); + xcb_atom_t selection_atom = HYPRATOMS["CLIPBOARD"]; + if (&selection == &g_pXWayland->pWM->primarySelection) + selection_atom = HYPRATOMS["PRIMARY"]; + else if (&selection == &g_pXWayland->pWM->dndSelection) + selection_atom = HYPRATOMS["XdndSelection"]; + + xcb_convert_selection(g_pXWayland->pWM->connection, transfer->incomingWindow, selection_atom, mimeAtom, HYPRATOMS["_WL_SELECTION"], XCB_TIME_CURRENT_TIME); xcb_flush(g_pXWayland->pWM->connection); diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index efb080d6..6439c491 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -586,7 +586,7 @@ void CXWM::handleSelectionNotify(xcb_selection_notify_event_t* e) { Debug::log(TRACE, "[xwm] converting selection failed"); sel->transfers.erase(it); } - } else if (e->target == HYPRATOMS["TARGETS"] && sel == &clipboard) { + } else if (e->target == HYPRATOMS["TARGETS"]) { if (!focusedSurface) { Debug::log(TRACE, "[xwm] denying access to write to clipboard because no X client is in focus"); return; @@ -601,14 +601,16 @@ bool CXWM::handleSelectionPropertyNotify(xcb_property_notify_event_t* e) { if (e->state != XCB_PROPERTY_DELETE) return false; - auto it = std::ranges::find_if(clipboard.transfers, [e](const auto& t) { return t->incomingWindow == e->window; }); - if (it != clipboard.transfers.end()) { - if (!(*it)->getIncomingSelectionProp(true)) { - clipboard.transfers.erase(it); - return false; + for (auto* sel : {&clipboard, &primarySelection}) { + auto it = std::ranges::find_if(sel->transfers, [e](const auto& t) { return t->incomingWindow == e->window; }); + if (it != sel->transfers.end()) { + if (!(*it)->getIncomingSelectionProp(true)) { + sel->transfers.erase(it); + return false; + } + getTransferData(*sel); + return true; } - getTransferData(clipboard); - return true; } return false; @@ -617,6 +619,8 @@ bool CXWM::handleSelectionPropertyNotify(xcb_property_notify_event_t* e) { SXSelection* CXWM::getSelection(xcb_atom_t atom) { if (atom == HYPRATOMS["CLIPBOARD"]) return &clipboard; + else if (atom == HYPRATOMS["PRIMARY"]) + return &primarySelection; else if (atom == HYPRATOMS["XdndSelection"]) return &dndSelection; @@ -707,8 +711,12 @@ bool CXWM::handleSelectionXFixesNotify(xcb_xfixes_selection_notify_event_t* e) { return true; if (e->owner == XCB_WINDOW_NONE) { - if (sel->owner != sel->window && sel == &clipboard) - g_pSeatManager->setCurrentSelection(nullptr); + if (sel->owner != sel->window) { + if (sel == &clipboard) + g_pSeatManager->setCurrentSelection(nullptr); + else if (sel == &primarySelection) + g_pSeatManager->setCurrentPrimarySelection(nullptr); + } sel->owner = 0; return true; @@ -721,7 +729,10 @@ bool CXWM::handleSelectionXFixesNotify(xcb_xfixes_selection_notify_event_t* e) { return true; } - xcb_convert_selection(connection, sel->window, HYPRATOMS["CLIPBOARD"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); + if (sel == &clipboard) + xcb_convert_selection(connection, sel->window, HYPRATOMS["CLIPBOARD"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); + else if (sel == &primarySelection) + xcb_convert_selection(connection, sel->window, HYPRATOMS["PRIMARY"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); xcb_flush(connection); return true; @@ -1171,6 +1182,16 @@ void CXWM::initSelection() { clipboard.listeners.setSelection = g_pSeatManager->events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); }); clipboard.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); }); + primarySelection.window = xcb_generate_id(connection); + xcb_create_window(connection, XCB_COPY_FROM_PARENT, primarySelection.window, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, + XCB_CW_EVENT_MASK, mask); + xcb_set_selection_owner(connection, primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + + xcb_xfixes_select_selection_input(connection, primarySelection.window, HYPRATOMS["PRIMARY"], mask2); + + primarySelection.listeners.setSelection = g_pSeatManager->events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); }); + primarySelection.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); }); + dndSelection.window = xcb_generate_id(connection); xcb_create_window(connection, XCB_COPY_FROM_PARENT, dndSelection.window, screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, screen->root_visual, XCB_CW_EVENT_MASK, mask); @@ -1182,14 +1203,18 @@ void CXWM::initSelection() { void CXWM::setClipboardToWayland(SXSelection& sel) { auto source = makeShared(sel); if (source->mimes().empty()) { - Debug::log(ERR, "[xwm] can't set clipboard: no MIMEs"); + Debug::log(ERR, "[xwm] can't set selection: no MIMEs"); return; } sel.dataSource = source; - Debug::log(LOG, "[xwm] X clipboard at {:x} takes clipboard", (uintptr_t)sel.dataSource.get()); - g_pSeatManager->setCurrentSelection(sel.dataSource); + Debug::log(LOG, "[xwm] X selection at {:x} takes {}", (uintptr_t)sel.dataSource.get(), (&sel == &clipboard) ? "clipboard" : "primary selection"); + + if (&sel == &clipboard) + g_pSeatManager->setCurrentSelection(sel.dataSource); + else if (&sel == &primarySelection) + g_pSeatManager->setCurrentPrimarySelection(sel.dataSource); } static int writeDataSource(int fd, uint32_t mask, void* data) { @@ -1305,22 +1330,32 @@ SP CXWM::createX11DataOffer(SP surf, SPselection.currentSelection && g_pSeatManager->selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) + if ((this == &g_pXWayland->pWM->clipboard && g_pSeatManager->selection.currentSelection && g_pSeatManager->selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || + (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection && + g_pSeatManager->selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11)) return; - if (g_pSeatManager->selection.currentSelection) { + if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->selection.currentSelection) { xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); xcb_flush(g_pXWayland->pWM->connection); g_pXWayland->pWM->clipboard.notifyOnFocus = true; + } else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection) { + xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + xcb_flush(g_pXWayland->pWM->connection); + g_pXWayland->pWM->primarySelection.notifyOnFocus = true; } } void SXSelection::onKeyboardFocus() { if (!g_pSeatManager->state.keyboardFocusResource || g_pSeatManager->state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) return; - if (g_pXWayland->pWM->clipboard.notifyOnFocus) { + + if (this == &g_pXWayland->pWM->clipboard && g_pXWayland->pWM->clipboard.notifyOnFocus) { onSelection(); g_pXWayland->pWM->clipboard.notifyOnFocus = false; + } else if (this == &g_pXWayland->pWM->primarySelection && g_pXWayland->pWM->primarySelection.notifyOnFocus) { + onSelection(); + g_pXWayland->pWM->primarySelection.notifyOnFocus = false; } } @@ -1370,6 +1405,8 @@ bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) { WP selection; if (this == &g_pXWayland->pWM->clipboard) selection = g_pSeatManager->selection.currentSelection; + else if (this == &g_pXWayland->pWM->primarySelection) + selection = g_pSeatManager->selection.currentPrimarySelection; else if (!g_pXWayland->pWM->dndDataOffers.empty()) selection = g_pXWayland->pWM->dndDataOffers.at(0)->getSource(); diff --git a/src/xwayland/XWM.hpp b/src/xwayland/XWM.hpp index efd2f85a..25010b0b 100644 --- a/src/xwayland/XWM.hpp +++ b/src/xwayland/XWM.hpp @@ -201,6 +201,7 @@ class CXWM { uint64_t lastFocusSeq = 0; SXSelection clipboard; + SXSelection primarySelection; SXSelection dndSelection; SP dndDataDevice = makeShared(); std::vector> dndDataOffers; From 260d8e1f71b1dc6f3f354747debdc87d96b9e99f Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 8 Apr 2025 19:39:53 +0200 Subject: [PATCH 0057/1077] Permission Manager: add permission management for screencopy (#9930) --- example/hyprland.conf | 14 ++ src/Compositor.cpp | 5 + src/config/ConfigManager.cpp | 43 ++++ src/config/ConfigManager.hpp | 1 + src/config/defaultConfig.hpp | 14 ++ src/debug/CrashReporter.cpp | 2 +- .../permissions/DynamicPermissionManager.cpp | 234 ++++++++++++++++++ .../permissions/DynamicPermissionManager.hpp | 85 +++++++ src/plugins/PluginAPI.cpp | 2 +- src/protocols/Screencopy.cpp | 65 +++-- src/protocols/ToplevelExport.cpp | 44 +++- src/render/OpenGL.cpp | 2 + src/render/OpenGL.hpp | 2 + 13 files changed, 481 insertions(+), 32 deletions(-) create mode 100644 src/managers/permissions/DynamicPermissionManager.cpp create mode 100644 src/managers/permissions/DynamicPermissionManager.hpp diff --git a/example/hyprland.conf b/example/hyprland.conf index cfe5040b..e21b7844 100644 --- a/example/hyprland.conf +++ b/example/hyprland.conf @@ -52,6 +52,20 @@ env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 +################### +### PERMISSIONS ### +################### + +# See https://wiki.hyprland.org/Configuring/Permissions/ + +# ecosystem { +# enforce_permissions = 1 +# } + +# permission = /usr/(bin|local/bin)/grim, screencopy, allow +# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow + + ##################### ### LOOK AND FEEL ### ##################### diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 594bd85a..947b6549 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -15,6 +15,7 @@ #include "managers/DonationNagManager.hpp" #include "managers/ANRManager.hpp" #include "managers/eventLoop/EventLoopManager.hpp" +#include "managers/permissions/DynamicPermissionManager.hpp" #include #include #include @@ -570,6 +571,7 @@ void CCompositor::cleanup() { removeAllSignals(); g_pInputManager.reset(); + g_pDynamicPermissionManager.reset(); g_pDecorationPositioner.reset(); g_pCursorManager.reset(); g_pPluginSystem.reset(); @@ -624,6 +626,9 @@ void CCompositor::initManagers(eManagersInitStage stage) { Debug::log(LOG, "Creating the AnimationManager!"); g_pAnimationManager = makeUnique(); + Debug::log(LOG, "Creating the DynamicPermissionManager!"); + g_pDynamicPermissionManager = makeUnique(); + Debug::log(LOG, "Creating the ConfigManager!"); g_pConfigManager = makeUnique(); diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 0d12e29c..6399372c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -22,6 +22,7 @@ #include "../managers/eventLoop/EventLoopManager.hpp" #include "../managers/LayoutManager.hpp" #include "../managers/EventManager.hpp" +#include "../managers/permissions/DynamicPermissionManager.hpp" #include "../debug/HyprNotificationOverlay.hpp" #include "../plugins/PluginSystem.hpp" @@ -374,6 +375,18 @@ static Hyprlang::CParseResult handlePlugin(const char* c, const char* v) { return result; } +static Hyprlang::CParseResult handlePermission(const char* c, const char* v) { + const std::string VALUE = v; + const std::string COMMAND = c; + + const auto RESULT = g_pConfigManager->handlePermission(COMMAND, VALUE); + + Hyprlang::CParseResult result; + if (RESULT.has_value()) + result.setError(RESULT.value().c_str()); + return result; +} + void CConfigManager::registerConfigVar(const char* name, const Hyprlang::INT& val) { m_configValueNumber++; m_pConfig->addConfigValue(name, val); @@ -703,6 +716,7 @@ CConfigManager::CConfigManager() { registerConfigVar("ecosystem:no_update_news", Hyprlang::INT{0}); registerConfigVar("ecosystem:no_donation_nag", Hyprlang::INT{0}); + registerConfigVar("ecosystem:enforce_permissions", Hyprlang::INT{0}); registerConfigVar("experimental:xx_color_management_v4", Hyprlang::INT{0}); @@ -764,6 +778,7 @@ CConfigManager::CConfigManager() { m_pConfig->registerHandler(&::handleSubmap, "submap", {false}); m_pConfig->registerHandler(&::handleBlurLS, "blurls", {false}); m_pConfig->registerHandler(&::handlePlugin, "plugin", {false}); + m_pConfig->registerHandler(&::handlePermission, "permission", {false}); m_pConfig->registerHandler(&::handleEnv, "env", {true}); // pluginza @@ -946,6 +961,8 @@ std::optional CConfigManager::resetHLConfig() { m_vFailedPluginConfigValues.clear(); finalExecRequests.clear(); + g_pDynamicPermissionManager->clearConfigPermissions(); + // paths m_configPaths.clear(); std::string mainConfigPath = getMainConfigPath(); @@ -2831,6 +2848,32 @@ std::optional CConfigManager::handlePlugin(const std::string& comma return {}; } +std::optional CConfigManager::handlePermission(const std::string& command, const std::string& value) { + CVarList data(value); + + eDynamicPermissionType type = PERMISSION_TYPE_UNKNOWN; + eDynamicPermissionAllowMode mode = PERMISSION_RULE_ALLOW_MODE_UNKNOWN; + + if (data[1] == "screencopy") + type = PERMISSION_TYPE_SCREENCOPY; + + if (data[2] == "ask") + mode = PERMISSION_RULE_ALLOW_MODE_ASK; + else if (data[2] == "allow") + mode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + else if (data[2] == "deny") + mode = PERMISSION_RULE_ALLOW_MODE_DENY; + + if (type == PERMISSION_TYPE_UNKNOWN) + return "unknown permission type"; + if (mode == PERMISSION_RULE_ALLOW_MODE_UNKNOWN) + return "unknown permission allow mode"; + + g_pDynamicPermissionManager->addConfigPermissionRule(data[0], type, mode); + + return {}; +} + const std::vector& CConfigManager::getAllDescriptions() { return CONFIG_OPTIONS; } diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index 4da123c9..50ab798c 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -244,6 +244,7 @@ class CConfigManager { std::optional handleBindWS(const std::string&, const std::string&); std::optional handleEnv(const std::string&, const std::string&); std::optional handlePlugin(const std::string&, const std::string&); + std::optional handlePermission(const std::string&, const std::string&); std::string configCurrentPath; diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp index ff4a579d..01ad1e72 100644 --- a/src/config/defaultConfig.hpp +++ b/src/config/defaultConfig.hpp @@ -65,6 +65,20 @@ env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 +################### +### PERMISSIONS ### +################### + +# See https://wiki.hyprland.org/Configuring/Permissions/ + +# ecosystem { +# enforce_permissions = 1 +# } + +# permission = /usr/(bin|local/bin)/grim, screencopy, allow +# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow + + ##################### ### LOOK AND FEEL ### ##################### diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index f6e0b55f..0143b29c 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -192,7 +192,7 @@ void NCrashReporter::createAndSaveCrash(int sig) { #endif }; u_int miblen = sizeof(mib) / sizeof(mib[0]); - char exe[PATH_MAX] = ""; + char exe[PATH_MAX] = "/nonexistent"; size_t sz = sizeof(exe); sysctl(mib, miblen, &exe, &sz, NULL, 0); const auto FPATH = std::filesystem::canonical(exe); diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp new file mode 100644 index 00000000..fe795985 --- /dev/null +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -0,0 +1,234 @@ +#include +#include "DynamicPermissionManager.hpp" +#include +#include +#include +#include +#include "../../Compositor.hpp" +#include "../../config/ConfigValue.hpp" + +#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) +#include +#endif + +static void clientDestroyInternal(struct wl_listener* listener, void* data) { + SDynamicPermissionRuleDestroyWrapper* wrap = wl_container_of(listener, wrap, listener); + CDynamicPermissionRule* rule = wrap->parent; + g_pDynamicPermissionManager->removeRulesForClient(rule->client()); +} + +CDynamicPermissionRule::CDynamicPermissionRule(const std::string& binaryPathRegex, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode) : + m_type(type), m_source(PERMISSION_RULE_SOURCE_CONFIG), m_binaryRegex(makeUnique(binaryPathRegex)), m_allowMode(defaultAllowMode) { + ; +} + +CDynamicPermissionRule::CDynamicPermissionRule(wl_client* const client, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode) : + m_type(type), m_source(PERMISSION_RULE_SOURCE_RUNTIME_USER), m_client(client), m_allowMode(defaultAllowMode) { + wl_list_init(&m_destroyWrapper.listener.link); + m_destroyWrapper.listener.notify = ::clientDestroyInternal; + m_destroyWrapper.parent = this; + wl_display_add_destroy_listener(g_pCompositor->m_sWLDisplay, &m_destroyWrapper.listener); +} + +CDynamicPermissionRule::~CDynamicPermissionRule() { + if (m_client) { + wl_list_remove(&m_destroyWrapper.listener.link); + wl_list_init(&m_destroyWrapper.listener.link); + } + + if (m_dialogBox && m_dialogBox->isRunning()) + m_dialogBox->kill(); +} + +wl_client* CDynamicPermissionRule::client() const { + return m_client; +} + +static const char* permissionToString(eDynamicPermissionType type) { + switch (type) { + case PERMISSION_TYPE_UNKNOWN: return "PERMISSION_TYPE_UNKNOWN"; + case PERMISSION_TYPE_SCREENCOPY: return "PERMISSION_TYPE_SCREENCOPY"; + } + + return "error"; +} + +static const char* permissionToHumanString(eDynamicPermissionType type) { + switch (type) { + case PERMISSION_TYPE_UNKNOWN: return "requesting an unknown permission"; + case PERMISSION_TYPE_SCREENCOPY: return "trying to capture your screen"; + } + + return "error"; +} + +static std::expected binaryNameForWlClient(wl_client* client) { + pid_t pid = 0; + wl_client_get_credentials(client, &pid, nullptr, nullptr); + + if (pid <= 0) + return std::unexpected("No pid for client"); + +#if defined(KERN_PROC_PATHNAME) + int mib[] = { + CTL_KERN, +#if defined(__NetBSD__) + KERN_PROC_ARGS, + pid, + KERN_PROC_PATHNAME, +#else + KERN_PROC, + KERN_PROC_PATHNAME, + pid, +#endif + }; + u_int miblen = sizeof(mib) / sizeof(mib[0]); + char exe[PATH_MAX] = "/nonexistent"; + size_t sz = sizeof(exe); + sysctl(mib, miblen, &exe, &sz, NULL, 0); + std::string path = exe; +#else + std::string path = std::format("/proc/{}/exe", (uint64_t)pid); +#endif + std::error_code ec; + + std::string fullPath = std::filesystem::canonical(path, ec); + + if (ec) + return std::unexpected("canonical failed"); + + return fullPath; +} + +void CDynamicPermissionManager::clearConfigPermissions() { + std::erase_if(m_rules, [](const auto& e) { return e->m_source == PERMISSION_RULE_SOURCE_CONFIG; }); +} + +void CDynamicPermissionManager::addConfigPermissionRule(const std::string& binaryName, eDynamicPermissionType type, eDynamicPermissionAllowMode mode) { + m_rules.emplace_back(SP(new CDynamicPermissionRule(binaryName, type, mode))); +} + +eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionMode(wl_client* client, eDynamicPermissionType permission) { + + static auto PPERM = CConfigValue("ecosystem:enforce_permissions"); + + if (*PPERM == 0) + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + + const auto LOOKUP = binaryNameForWlClient(client); + + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: checking permission {} for client {:x} (binary {})", permissionToString(permission), (uintptr_t)client, + LOOKUP.has_value() ? LOOKUP.value() : "lookup failed: " + LOOKUP.error()); + + // first, check if we have the client + perm combo in our cache. + auto it = std::ranges::find_if(m_rules, [client, permission](const auto& e) { return e->m_client == client && e->m_type == permission; }); + if (it == m_rules.end()) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission not cached, checking binary name"); + + if (!LOOKUP.has_value()) + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: binary name check failed"); + else { + const auto BINNAME = LOOKUP.value().contains("/") ? LOOKUP.value().substr(LOOKUP.value().find_last_of('/') + 1) : LOOKUP.value(); + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: binary path {}, name {}", LOOKUP.value(), BINNAME); + + it = std::ranges::find_if(m_rules, [clientBinaryPath = LOOKUP.value(), permission](const auto& e) { + if (e->m_type != permission) + return false; // wrong perm + + if (!e->m_binaryPath.empty() && e->m_binaryPath == clientBinaryPath) + return true; // matches binary path + + if (!e->m_binaryRegex) + return false; // wl_client* rule + + // regex match + if (RE2::FullMatch(clientBinaryPath, *e->m_binaryRegex)) + return true; + + return false; + }); + + if (it == m_rules.end()) + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: no rule for binary"); + else { + if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission allowed by config rule"); + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_DENY) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission denied by config rule"); + return PERMISSION_RULE_ALLOW_MODE_DENY; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_PENDING) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission pending by config rule"); + return PERMISSION_RULE_ALLOW_MODE_PENDING; + } else + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission ask by config rule"); + } + } + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission allowed before by user"); + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_DENY) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission denied before by user"); + return PERMISSION_RULE_ALLOW_MODE_DENY; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_PENDING) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission pending before by user"); + return PERMISSION_RULE_ALLOW_MODE_PENDING; + } + + // if we are here, we need to ask. + askForPermission(client, LOOKUP.value_or(""), permission); + + return PERMISSION_RULE_ALLOW_MODE_PENDING; +} + +void CDynamicPermissionManager::askForPermission(wl_client* client, const std::string& binaryPath, eDynamicPermissionType type) { + auto rule = m_rules.emplace_back(SP(new CDynamicPermissionRule(client, type, PERMISSION_RULE_ALLOW_MODE_PENDING))); + + std::string description = ""; + if (binaryPath.empty()) + description = std::format("An unknown application (wayland client ID 0x{:x}) is {}.", (uintptr_t)client, permissionToHumanString(type)); + else { + std::string binaryName = binaryPath.contains("/") ? binaryPath.substr(binaryPath.find_last_of('/') + 1) : binaryPath; + description = std::format("An application {} ({}) is {}.", binaryName, binaryPath, permissionToHumanString(type)); + } + + description += "

Do you want to allow this?"; + + std::vector options; + + if (!binaryPath.empty()) { + description += "

Hint: you can set persistent rules for these in the Hyprland config file."; + options = {"Deny", "Allow and remember app", "Allow once"}; + } else + options = {"Deny", "Allow"}; + + rule->m_dialogBox = CAsyncDialogBox::create("Permission request", description, options); + + if (!rule->m_dialogBox) { + Debug::log(ERR, "CDynamicPermissionManager::askForPermission: hyprland-qtutils likely missing, cannot ask! Disabling permission control..."); + rule->m_allowMode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + return; + } + + rule->m_dialogBox->open([r = WP(rule), binaryPath](std::string result) { + if (!r) + return; + + Debug::log(TRACE, "CDynamicPermissionRule: user returned {}", result); + + if (result.starts_with("Allow once")) + r->m_allowMode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + else if (result.starts_with("Deny")) { + r->m_allowMode = PERMISSION_RULE_ALLOW_MODE_DENY; + r->m_binaryPath = binaryPath; + } else if (result.starts_with("Allow and remember")) { + r->m_allowMode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + r->m_binaryPath = binaryPath; + } else if (result.starts_with("Allow")) + r->m_allowMode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + }); +} + +void CDynamicPermissionManager::removeRulesForClient(wl_client* client) { + std::erase_if(m_rules, [client](const auto& e) { return e->m_client == client; }); +} diff --git a/src/managers/permissions/DynamicPermissionManager.hpp b/src/managers/permissions/DynamicPermissionManager.hpp new file mode 100644 index 00000000..681cbc1c --- /dev/null +++ b/src/managers/permissions/DynamicPermissionManager.hpp @@ -0,0 +1,85 @@ +#pragma once + +#include "../../macros.hpp" +#include "../../helpers/memory/Memory.hpp" +#include "../../helpers/AsyncDialogBox.hpp" +#include +#include +#include + +// NOLINTNEXTLINE +namespace re2 { + class RE2; +}; + +enum eDynamicPermissionType : uint8_t { + PERMISSION_TYPE_UNKNOWN = 0, + PERMISSION_TYPE_SCREENCOPY, +}; + +enum eDynamicPermissionRuleSource : uint8_t { + PERMISSION_RULE_SOURCE_UNKNOWN = 0, + PERMISSION_RULE_SOURCE_CONFIG, + PERMISSION_RULE_SOURCE_RUNTIME_USER, +}; + +enum eDynamicPermissionAllowMode : uint8_t { + PERMISSION_RULE_ALLOW_MODE_UNKNOWN = 0, + PERMISSION_RULE_ALLOW_MODE_DENY, + PERMISSION_RULE_ALLOW_MODE_ASK, + PERMISSION_RULE_ALLOW_MODE_ALLOW, + PERMISSION_RULE_ALLOW_MODE_PENDING, // popup is open +}; + +class CDynamicPermissionRule; + +struct SDynamicPermissionRuleDestroyWrapper { + wl_listener listener; + CDynamicPermissionRule* parent = nullptr; +}; + +class CDynamicPermissionRule { + public: + ~CDynamicPermissionRule(); + + wl_client* client() const; + + private: + // config rule + CDynamicPermissionRule(const std::string& binaryPathRegex, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode = PERMISSION_RULE_ALLOW_MODE_ASK); + // user rule + CDynamicPermissionRule(wl_client* const client, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode = PERMISSION_RULE_ALLOW_MODE_ASK); + + const eDynamicPermissionType m_type = PERMISSION_TYPE_UNKNOWN; + const eDynamicPermissionRuleSource m_source = PERMISSION_RULE_SOURCE_UNKNOWN; + wl_client* const m_client = nullptr; + std::string m_binaryPath = ""; + UP m_binaryRegex; + + eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; + SP m_dialogBox; // for pending + + SDynamicPermissionRuleDestroyWrapper m_destroyWrapper; + + friend class CDynamicPermissionManager; +}; + +class CDynamicPermissionManager { + public: + void clearConfigPermissions(); + void addConfigPermissionRule(const std::string& binaryPath, eDynamicPermissionType type, eDynamicPermissionAllowMode mode); + + // if the rule is "ask", or missing, will pop up a dialog and return false until the user agrees. + // (will continue returning false if the user does not agree, of course.) + eDynamicPermissionAllowMode clientPermissionMode(wl_client* client, eDynamicPermissionType permission); + + void removeRulesForClient(wl_client* client); + + private: + void askForPermission(wl_client* client, const std::string& binaryName, eDynamicPermissionType type); + + // + std::vector> m_rules; +}; + +inline UP g_pDynamicPermissionManager; \ No newline at end of file diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index 92f043fd..e1c9f39c 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -301,7 +301,7 @@ APICALL std::vector HyprlandAPI::findFunctionsByName(HANDLE hand #endif }; u_int miblen = sizeof(mib) / sizeof(mib[0]); - char exe[PATH_MAX] = ""; + char exe[PATH_MAX] = "/nonexistent"; size_t sz = sizeof(exe); sysctl(mib, miblen, &exe, &sz, NULL, 0); const auto FPATH = std::filesystem::canonical(exe); diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index c124e6d2..afa61f36 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -3,6 +3,7 @@ #include "../managers/eventLoop/EventLoopManager.hpp" #include "../managers/PointerManager.hpp" #include "../managers/EventManager.hpp" +#include "../managers/permissions/DynamicPermissionManager.hpp" #include "../render/Renderer.hpp" #include "../render/OpenGL.hpp" #include "../helpers/Monitor.hpp" @@ -196,9 +197,10 @@ void CScreencopyFrame::share() { } void CScreencopyFrame::copyDmabuf(std::function callback) { - auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); - CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; + CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer, nullptr, true)) { LOGM(ERR, "Can't copy: failed to begin rendering to dma frame"); @@ -206,14 +208,23 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { return; } - CBox monbox = CBox{0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y} - .translate({-box.x, -box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. - .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); - g_pHyprOpenGL->setMonitorTransformEnabled(true); - g_pHyprOpenGL->setRenderModifEnabled(false); - g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); - g_pHyprOpenGL->setRenderModifEnabled(true); - g_pHyprOpenGL->setMonitorTransformEnabled(false); + if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + CBox monbox = CBox{0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y} + .translate({-box.x, -box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. + .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + g_pHyprOpenGL->setMonitorTransformEnabled(true); + g_pHyprOpenGL->setRenderModifEnabled(false); + g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); + g_pHyprOpenGL->setRenderModifEnabled(true); + g_pHyprOpenGL->setMonitorTransformEnabled(false); + } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) + g_pHyprOpenGL->clear(Colors::BLACK); + else { + g_pHyprOpenGL->clear(Colors::BLACK); + CBox texbox = + CBox{pMonitor->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + } g_pHyprOpenGL->m_RenderData.blockScreenShader = true; g_pHyprRenderer->endRender(); @@ -233,9 +244,10 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } bool CScreencopyFrame::copyShm() { - auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); - auto shm = buffer->shm(); + auto shm = buffer->shm(); auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; @@ -250,12 +262,21 @@ bool CScreencopyFrame::copyShm() { return false; } - CBox monbox = CBox{0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y}.translate({-box.x, -box.y}); - g_pHyprOpenGL->setMonitorTransformEnabled(true); - g_pHyprOpenGL->setRenderModifEnabled(false); - g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); - g_pHyprOpenGL->setRenderModifEnabled(true); - g_pHyprOpenGL->setMonitorTransformEnabled(false); + if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + CBox monbox = CBox{0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y}.translate({-box.x, -box.y}); + g_pHyprOpenGL->setMonitorTransformEnabled(true); + g_pHyprOpenGL->setRenderModifEnabled(false); + g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); + g_pHyprOpenGL->setRenderModifEnabled(true); + g_pHyprOpenGL->setMonitorTransformEnabled(false); + } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) + g_pHyprOpenGL->clear(Colors::BLACK); + else { + g_pHyprOpenGL->clear(Colors::BLACK); + CBox texbox = + CBox{pMonitor->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + } #ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, fb.getFBID()); @@ -430,6 +451,14 @@ void CScreencopyProtocol::onOutputCommit(PHLMONITOR pMonitor) { if (!f) continue; + // check permissions + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->resource->client(), PERMISSION_TYPE_SCREENCOPY); + + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) + continue; // pending an answer, don't do anything yet. + + // otherwise share. If it's denied, it will be black. + if (!f->pMonitor || !f->buffer) { framesToRemove.emplace_back(f); continue; diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 66e74164..8f18afbc 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -8,6 +8,7 @@ #include "../helpers/Format.hpp" #include "../managers/EventManager.hpp" #include "../managers/input/InputManager.hpp" +#include "../managers/permissions/DynamicPermissionManager.hpp" #include "../render/Renderer.hpp" #include @@ -231,7 +232,8 @@ void CToplevelExportFrame::share() { } bool CToplevelExportFrame::copyShm(timespec* now) { - auto shm = buffer->shm(); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto shm = buffer->shm(); auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm // render the client @@ -256,12 +258,18 @@ bool CToplevelExportFrame::copyShm(timespec* now) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); // render client at 0,0 - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); - g_pHyprRenderer->m_bBlockSurfaceFeedback = false; + if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = false; - if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + if (overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { + CBox texbox = + CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + } const auto PFORMAT = NFormatUtils::getPixelFormatFromDRM(shm.format); if (!PFORMAT) { @@ -322,6 +330,7 @@ bool CToplevelExportFrame::copyShm(timespec* now) { } bool CToplevelExportFrame::copyDmabuf(timespec* now) { + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); const auto PMONITOR = pWindow->m_pMonitor.lock(); CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; @@ -337,13 +346,18 @@ bool CToplevelExportFrame::copyDmabuf(timespec* now) { return false; g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); + if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = false; - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); - g_pHyprRenderer->m_bBlockSurfaceFeedback = false; - - if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + if (overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { + CBox texbox = + CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + } g_pHyprOpenGL->m_RenderData.blockScreenShader = true; g_pHyprRenderer->endRender(); @@ -417,6 +431,12 @@ void CToplevelExportProtocol::onOutputCommit(PHLMONITOR pMonitor) { if (!f) continue; + // check permissions + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->resource->client(), PERMISSION_TYPE_SCREENCOPY); + + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) + continue; // pending an answer, don't do anything yet. + if (!validMapped(f->pWindow)) { framesToRemove.emplace_back(f); continue; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 2a3723bd..eaea31be 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2850,6 +2850,8 @@ void CHyprOpenGLImpl::initAssets() { "unknown"), CHyprColor{0.9F, 0.9F, 0.9F, 0.7F}, 20, true); + m_pScreencopyDeniedTexture = renderText("Permission denied to share screen", Colors::WHITE, 20); + ensureBackgroundTexturePresence(); } diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index c3091f15..ab091f24 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -283,6 +283,8 @@ class CHyprOpenGLImpl { bool EXT_create_context_robustness = false; } m_sExts; + SP m_pScreencopyDeniedTexture; + private: enum eEGLContextVersion : uint8_t { EGL_CONTEXT_GLES_2_0 = 0, From ea852965ffd4bf2bd2a74c0e821ba6190021eb31 Mon Sep 17 00:00:00 2001 From: nyx Date: Tue, 8 Apr 2025 13:43:15 -0400 Subject: [PATCH 0058/1077] xdg-shell: fix some null refs (#9992) --- src/desktop/Window.cpp | 4 ++-- src/managers/XWaylandManager.cpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 100300d4..4b9a07fc 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1237,7 +1237,7 @@ void CWindow::setSuspended(bool suspend) { if (suspend == m_bSuspended) return; - if (m_bIsX11 || !m_pXDGSurface->toplevel) + if (m_bIsX11 || !m_pXDGSurface || !m_pXDGSurface->toplevel) return; m_pXDGSurface->toplevel->setSuspeneded(suspend); @@ -1687,7 +1687,7 @@ Vector2D CWindow::requestedMinSize() { Vector2D CWindow::requestedMaxSize() { constexpr int NO_MAX_SIZE_LIMIT = 99999; - if (((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && !m_pXDGSurface->toplevel) || m_sWindowData.noMaxSize.valueOrDefault())) + if (((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && (!m_pXDGSurface || !m_pXDGSurface->toplevel)) || m_sWindowData.noMaxSize.valueOrDefault())) return Vector2D(NO_MAX_SIZE_LIMIT, NO_MAX_SIZE_LIMIT); Vector2D maxSize = m_bIsX11 ? Vector2D(m_pXWaylandSurface->sizeHints->max_width, m_pXWaylandSurface->sizeHints->max_height) : m_pXDGSurface->toplevel->layoutMaxSize(); diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 63b14962..9d2fda1d 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -123,8 +123,10 @@ bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { (SIZEHINTS && (SIZEHINTS->min_width == SIZEHINTS->max_width) && (SIZEHINTS->min_height == SIZEHINTS->max_height))) return true; } else { - const auto PSTATE = pending ? &pWindow->m_pXDGSurface->toplevel->pending : &pWindow->m_pXDGSurface->toplevel->current; + if (!pWindow->m_pXDGSurface || !pWindow->m_pXDGSurface->toplevel) + return false; + const auto PSTATE = pending ? &pWindow->m_pXDGSurface->toplevel->pending : &pWindow->m_pXDGSurface->toplevel->current; if (pWindow->m_pXDGSurface->toplevel->parent || (PSTATE->minSize.x != 0 && PSTATE->minSize.y != 0 && (PSTATE->minSize.x == PSTATE->maxSize.x || PSTATE->minSize.y == PSTATE->maxSize.y))) return true; From 4f991610d03609e4cfe06b4a1be694ce439b779b Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 9 Apr 2025 01:48:21 +0100 Subject: [PATCH 0059/1077] watchdog: remove watchdog it has been unused for a while now --- src/Compositor.cpp | 7 ---- src/config/ConfigDescriptions.hpp | 6 ---- src/config/ConfigManager.cpp | 1 - src/helpers/Watchdog.cpp | 58 ------------------------------- src/helpers/Watchdog.hpp | 34 ------------------ 5 files changed, 106 deletions(-) delete mode 100644 src/helpers/Watchdog.cpp delete mode 100644 src/helpers/Watchdog.hpp diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 947b6549..8e520237 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -59,7 +59,6 @@ #include "managers/ProtocolManager.hpp" #include "managers/LayoutManager.hpp" #include "plugins/PluginSystem.hpp" -#include "helpers/Watchdog.hpp" #include "hyprerror/HyprError.hpp" #include "debug/HyprNotificationOverlay.hpp" #include "debug/HyprDebugOverlay.hpp" @@ -588,7 +587,6 @@ void CCompositor::cleanup() { g_pConfigManager.reset(); g_pKeybindManager.reset(); g_pHookSystem.reset(); - g_pWatchdog.reset(); g_pXWaylandManager.reset(); g_pPointerManager.reset(); g_pSeatManager.reset(); @@ -642,11 +640,6 @@ void CCompositor::initManagers(eManagersInitStage stage) { g_pTokenManager = makeUnique(); g_pConfigManager->init(); - g_pWatchdog = makeUnique(); // requires config - // wait for watchdog to initialize to not hit data races in reading config values. - while (!g_pWatchdog->m_bWatchdogInitialized) { - std::this_thread::yield(); - } Debug::log(LOG, "Creating the PointerManager!"); g_pPointerManager = makeUnique(); diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index e7266940..49e5b7ae 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1598,12 +1598,6 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, - SConfigOptionDescription{ - .value = "debug:watchdog_timeout", - .description = "sets the timeout in seconds for watchdog to abort processing of a signal of the main thread. Set to 0 to disable.", - .type = CONFIG_OPTION_INT, - .data = SConfigOptionDescription::SRangeData{5, 0, 20}, - }, SConfigOptionDescription{ .value = "debug:disable_scale_checks", .description = "disables verification of the scale factors. Will result in pixel alignment and rounding errors.", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 6399372c..12e3cb5f 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -515,7 +515,6 @@ CConfigManager::CConfigManager() { registerConfigVar("debug:suppress_errors", Hyprlang::INT{0}); registerConfigVar("debug:error_limit", Hyprlang::INT{5}); registerConfigVar("debug:error_position", Hyprlang::INT{0}); - registerConfigVar("debug:watchdog_timeout", Hyprlang::INT{5}); registerConfigVar("debug:disable_scale_checks", Hyprlang::INT{0}); registerConfigVar("debug:colored_stdout_logs", Hyprlang::INT{1}); registerConfigVar("debug:full_cm_proto", Hyprlang::INT{0}); diff --git a/src/helpers/Watchdog.cpp b/src/helpers/Watchdog.cpp deleted file mode 100644 index 0956eed5..00000000 --- a/src/helpers/Watchdog.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "Watchdog.hpp" -#include -#include "config/ConfigManager.hpp" -#include "../config/ConfigValue.hpp" - -CWatchdog::~CWatchdog() { - m_bExitThread = true; - m_bNotified = true; - m_cvWatchdogCondition.notify_all(); - - if (m_pWatchdog && m_pWatchdog->joinable()) - m_pWatchdog->join(); -} - -CWatchdog::CWatchdog() : m_iMainThreadPID(pthread_self()) { - - m_pWatchdog = makeUnique([this] { - static auto PTIMEOUT = CConfigValue("debug:watchdog_timeout"); - - m_bWatchdogInitialized = true; - while (!m_bExitThread) { - std::unique_lock lk(m_mWatchdogMutex); - - if (!m_bWillWatch) - m_cvWatchdogCondition.wait(lk, [this] { return m_bNotified || m_bExitThread; }); - else if (!m_cvWatchdogCondition.wait_for(lk, std::chrono::milliseconds((int)(*PTIMEOUT * 1000.0)), [this] { return m_bNotified || m_bExitThread; })) - pthread_kill(m_iMainThreadPID, SIGUSR1); - - if (m_bExitThread) - break; - - m_bWatching = false; - m_bNotified = false; - } - }); -} - -void CWatchdog::startWatching() { - static auto PTIMEOUT = CConfigValue("debug:watchdog_timeout"); - - if (*PTIMEOUT == 0) - return; - - m_tTriggered = std::chrono::high_resolution_clock::now(); - m_bWillWatch = true; - m_bWatching = true; - - m_bNotified = true; - m_cvWatchdogCondition.notify_all(); -} - -void CWatchdog::endWatching() { - m_bWatching = false; - m_bWillWatch = false; - - m_bNotified = true; - m_cvWatchdogCondition.notify_all(); -} \ No newline at end of file diff --git a/src/helpers/Watchdog.hpp b/src/helpers/Watchdog.hpp deleted file mode 100644 index 51b71d13..00000000 --- a/src/helpers/Watchdog.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "memory/Memory.hpp" -#include -#include -#include - -class CWatchdog { - public: - // must be called from the main thread - CWatchdog(); - ~CWatchdog(); - - void startWatching(); - void endWatching(); - - std::atomic m_bWatchdogInitialized{false}; - - private: - std::chrono::high_resolution_clock::time_point m_tTriggered; - - pthread_t m_iMainThreadPID = 0; - - std::atomic m_bWatching = false; - std::atomic m_bWillWatch = false; - - UP m_pWatchdog; - std::mutex m_mWatchdogMutex; - std::atomic m_bNotified = false; - std::atomic m_bExitThread = false; - std::condition_variable m_cvWatchdogCondition; -}; - -inline UP g_pWatchdog; \ No newline at end of file From 0a7e2cb152a11db35aa134fad0919bc939f16bae Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Wed, 9 Apr 2025 10:50:06 -0500 Subject: [PATCH 0060/1077] pass: remove renderer finalDamage since it's unused (#9996) --- src/render/OpenGL.cpp | 10 +++------- src/render/OpenGL.hpp | 5 ++--- src/render/Renderer.cpp | 8 +++----- src/render/pass/Pass.cpp | 8 ++------ 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index eaea31be..1963a548 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -701,7 +701,6 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP initShaders(); m_RenderData.damage.set(damage); - m_RenderData.finalDamage.set(damage); m_bFakeFrame = true; @@ -715,7 +714,7 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP m_RenderData.simplePass = true; } -void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb, std::optional finalDamage) { +void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb) { m_RenderData.pMonitor = pMonitor; #ifndef GLES2 @@ -766,7 +765,6 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb m_RenderData.pCurrentMonData->monitorMirrorFB.release(); m_RenderData.damage.set(damage_); - m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); m_bFakeFrame = fb; @@ -791,8 +789,7 @@ void CHyprOpenGLImpl::end() { // end the render, copy the data to the main framebuffer if (m_bOffloadedFramebuffer) { - m_RenderData.damage = m_RenderData.finalDamage; - m_bEndFrame = true; + m_bEndFrame = true; CBox monbox = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; @@ -863,9 +860,8 @@ void CHyprOpenGLImpl::end() { RASSERT(false, "glGetError at Opengl::end() returned GL_CONTEXT_LOST. Cannot continue until proper GPU reset handling is implemented."); } -void CHyprOpenGLImpl::setDamage(const CRegion& damage_, std::optional finalDamage) { +void CHyprOpenGLImpl::setDamage(const CRegion& damage_) { m_RenderData.damage.set(damage_); - m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); } // TODO notify user if bundled shader is newer than ~/.config override diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index ab091f24..539d2444 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -125,7 +125,6 @@ struct SCurrentRenderData { CFramebuffer* outFB = nullptr; // out to render to (if offloaded, etc) CRegion damage; - CRegion finalDamage; // damage used for funal off -> main SRenderModifData renderModif; float mouseZoomFactor = 1.f; @@ -172,7 +171,7 @@ class CHyprOpenGLImpl { CHyprOpenGLImpl(); ~CHyprOpenGLImpl(); - void begin(PHLMONITOR, const CRegion& damage, CFramebuffer* fb = nullptr, std::optional finalDamage = {}); + void begin(PHLMONITOR, const CRegion& damage, CFramebuffer* fb = nullptr); void beginSimple(PHLMONITOR, const CRegion& damage, SP rb = nullptr, CFramebuffer* fb = nullptr); void end(); @@ -227,7 +226,7 @@ class CHyprOpenGLImpl { SP loadAsset(const std::string& file); SP renderText(const std::string& text, CHyprColor col, int pt, bool italic = false, const std::string& fontFamily = "", int maxWidth = 0); - void setDamage(const CRegion& damage, std::optional finalDamage = {}); + void setDamage(const CRegion& damage); void ensureBackgroundTexturePresence(); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index dc5c1284..74252833 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1292,7 +1292,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { pMonitor->forceFullFrames = 10; } - CRegion damage, finalDamage; + CRegion damage; if (!beginRender(pMonitor, damage, RENDER_MODE_NORMAL)) { Debug::log(ERR, "renderer: couldn't beginRender()!"); return; @@ -1302,10 +1302,8 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (*PDAMAGETRACKINGMODE == DAMAGE_TRACKING_NONE || *PDAMAGETRACKINGMODE == DAMAGE_TRACKING_MONITOR || pMonitor->forceFullFrames > 0 || damageBlinkCleanup > 0) damage = {0, 0, (int)pMonitor->vecTransformedSize.x * 10, (int)pMonitor->vecTransformedSize.y * 10}; - finalDamage = damage; - // update damage in renderdata as we modified it - g_pHyprOpenGL->setDamage(damage, finalDamage); + g_pHyprOpenGL->setDamage(damage); if (pMonitor->forceFullFrames > 0) { pMonitor->forceFullFrames -= 1; @@ -1317,7 +1315,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { bool renderCursor = true; - if (!finalDamage.empty()) { + if (!damage.empty()) { if (pMonitor->solitaryClient.expired()) { if (pMonitor->isMirror()) { g_pHyprOpenGL->blend(false); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 60c1bc30..02c86a46 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -119,8 +119,7 @@ CRegion CRenderPass::render(const CRegion& damage_) { } if (damage.empty()) { - g_pHyprOpenGL->m_RenderData.damage = damage; - g_pHyprOpenGL->m_RenderData.finalDamage = damage; + g_pHyprOpenGL->m_RenderData.damage = damage; return damage; } @@ -150,16 +149,13 @@ CRegion CRenderPass::render(const CRegion& damage_) { blurRegion.intersect(damage).expand(oneBlurRadius()); - g_pHyprOpenGL->m_RenderData.finalDamage = blurRegion.copy().add(damage); - // FIXME: why does this break on * 1.F ? // used to work when we expand all the damage... I think? Well, before pass. // moving a window over blur shows the edges being wonk. blurRegion.expand(oneBlurRadius() * 1.5F); damage = blurRegion.copy().add(damage); - } else - g_pHyprOpenGL->m_RenderData.finalDamage = damage; + } if (std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->disableSimplification(); })) { for (auto& el : m_vPassElements) { From 0dc531c4a7d6849f2db61084497b3007e92f470b Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Wed, 9 Apr 2025 11:08:42 -0500 Subject: [PATCH 0061/1077] core: fix crash in data device on shutdown (#9997) --- src/protocols/core/DataDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 83226e3a..d1a98fb5 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -420,7 +420,7 @@ void CWLDataDeviceProtocol::destroyResource(CWLDataOfferResource* resource) { SP CWLDataDeviceProtocol::dataDeviceForClient(wl_client* c) { #ifndef NO_XWAYLAND - if (g_pXWayland->pServer && c == g_pXWayland->pServer->xwaylandClient) + if (g_pXWayland && g_pXWayland->pServer && c == g_pXWayland->pServer->xwaylandClient) return g_pXWayland->pWM->getDataDevice(); #endif From d775686380c348efe3a2044a5ca8626505249e38 Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Thu, 10 Apr 2025 14:54:24 +0200 Subject: [PATCH 0062/1077] input: add warp_on_toggle_special (#9945) --- src/config/ConfigDescriptions.hpp | 7 +++++++ src/config/ConfigManager.cpp | 1 + src/managers/KeybindManager.cpp | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 49e5b7ae..7037f537 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1474,6 +1474,13 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_CHOICE, .data = SConfigOptionDescription::SChoiceData{0, "Disabled,Enabled,Force"}, }, + SConfigOptionDescription{ + .value = "cursor:warp_on_toggle_special", + .description = "Move the cursor to the last focused window when toggling a special workspace. Options: 0 (Disabled), 1 (Enabled), " + "2 (Force - ignores cursor:no_warps option)", + .type = CONFIG_OPTION_CHOICE, + .data = SConfigOptionDescription::SChoiceData{0, "Disabled,Enabled,Force"}, + }, SConfigOptionDescription{ .value = "cursor:default_monitor", .description = "the name of a default monitor for the cursor to be set to on startup (see hyprctl monitors for names)", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 12e3cb5f..56ff3f30 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -682,6 +682,7 @@ CConfigManager::CConfigManager() { registerConfigVar("cursor:no_warps", Hyprlang::INT{0}); registerConfigVar("cursor:persistent_warps", Hyprlang::INT{0}); registerConfigVar("cursor:warp_on_change_workspace", Hyprlang::INT{0}); + registerConfigVar("cursor:warp_on_toggle_special", Hyprlang::INT{0}); registerConfigVar("cursor:default_monitor", {STRVAL_EMPTY}); registerConfigVar("cursor:zoom_factor", {1.f}); registerConfigVar("cursor:zoom_rigid", Hyprlang::INT{0}); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 9a22a13a..948ef11e 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -2097,10 +2097,16 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { } } + updateRelativeCursorCoords(); + + PHLWORKSPACEREF focusedWorkspace; + if (requestedWorkspaceIsAlreadyOpen && specialOpenOnMonitor == workspaceID) { // already open on this monitor Debug::log(LOG, "Toggling special workspace {} to closed", workspaceID); PMONITOR->setSpecialWorkspace(nullptr); + + focusedWorkspace = PMONITOR->activeWorkspace; } else { Debug::log(LOG, "Toggling special workspace {} to open", workspaceID); auto PSPECIALWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceID); @@ -2109,6 +2115,18 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { PSPECIALWORKSPACE = g_pCompositor->createNewWorkspace(workspaceID, PMONITOR->ID, workspaceName); PMONITOR->setSpecialWorkspace(PSPECIALWORKSPACE); + + focusedWorkspace = PSPECIALWORKSPACE; + } + + const static auto PWARPONTOGGLESPECIAL = CConfigValue("cursor:warp_on_toggle_special"); + + if (*PWARPONTOGGLESPECIAL > 0) { + auto PLAST = focusedWorkspace->getLastFocusedWindow(); + auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + + if (PLAST && (!HLSurface || HLSurface->getWindow())) + PLAST->warpCursor(*PWARPONTOGGLESPECIAL == 2); } return {}; From b83c9f5c6f8404904d86a607a37c5ebd2703dcae Mon Sep 17 00:00:00 2001 From: Aaron Blasko Date: Fri, 11 Apr 2025 00:31:07 +0200 Subject: [PATCH 0063/1077] cmake: do not install version.h.in (#10035) --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 65586f5a..1d330c78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -447,6 +447,7 @@ install( DIRECTORY ${HEADERS_SRC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hyprland FILES_MATCHING - PATTERN "*.h*" + PATTERN "*.h" + PATTERN "*.hpp" PATTERN "*.inc" ) From 382f0f23f144e11bdccac6c5d3c1ed415b4b1855 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Fri, 11 Apr 2025 00:34:50 +0200 Subject: [PATCH 0064/1077] pass: revert "remove renderer finalDamage since it's unused (#9996)" (#10039) This reverts commit 0a7e2cb152a11db35aa134fad0919bc939f16bae. --- src/render/OpenGL.cpp | 10 +++++++--- src/render/OpenGL.hpp | 5 +++-- src/render/Renderer.cpp | 8 +++++--- src/render/pass/Pass.cpp | 8 ++++++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 1963a548..eaea31be 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -701,6 +701,7 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP initShaders(); m_RenderData.damage.set(damage); + m_RenderData.finalDamage.set(damage); m_bFakeFrame = true; @@ -714,7 +715,7 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP m_RenderData.simplePass = true; } -void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb) { +void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb, std::optional finalDamage) { m_RenderData.pMonitor = pMonitor; #ifndef GLES2 @@ -765,6 +766,7 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb m_RenderData.pCurrentMonData->monitorMirrorFB.release(); m_RenderData.damage.set(damage_); + m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); m_bFakeFrame = fb; @@ -789,7 +791,8 @@ void CHyprOpenGLImpl::end() { // end the render, copy the data to the main framebuffer if (m_bOffloadedFramebuffer) { - m_bEndFrame = true; + m_RenderData.damage = m_RenderData.finalDamage; + m_bEndFrame = true; CBox monbox = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; @@ -860,8 +863,9 @@ void CHyprOpenGLImpl::end() { RASSERT(false, "glGetError at Opengl::end() returned GL_CONTEXT_LOST. Cannot continue until proper GPU reset handling is implemented."); } -void CHyprOpenGLImpl::setDamage(const CRegion& damage_) { +void CHyprOpenGLImpl::setDamage(const CRegion& damage_, std::optional finalDamage) { m_RenderData.damage.set(damage_); + m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); } // TODO notify user if bundled shader is newer than ~/.config override diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 539d2444..ab091f24 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -125,6 +125,7 @@ struct SCurrentRenderData { CFramebuffer* outFB = nullptr; // out to render to (if offloaded, etc) CRegion damage; + CRegion finalDamage; // damage used for funal off -> main SRenderModifData renderModif; float mouseZoomFactor = 1.f; @@ -171,7 +172,7 @@ class CHyprOpenGLImpl { CHyprOpenGLImpl(); ~CHyprOpenGLImpl(); - void begin(PHLMONITOR, const CRegion& damage, CFramebuffer* fb = nullptr); + void begin(PHLMONITOR, const CRegion& damage, CFramebuffer* fb = nullptr, std::optional finalDamage = {}); void beginSimple(PHLMONITOR, const CRegion& damage, SP rb = nullptr, CFramebuffer* fb = nullptr); void end(); @@ -226,7 +227,7 @@ class CHyprOpenGLImpl { SP loadAsset(const std::string& file); SP renderText(const std::string& text, CHyprColor col, int pt, bool italic = false, const std::string& fontFamily = "", int maxWidth = 0); - void setDamage(const CRegion& damage); + void setDamage(const CRegion& damage, std::optional finalDamage = {}); void ensureBackgroundTexturePresence(); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 74252833..dc5c1284 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1292,7 +1292,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { pMonitor->forceFullFrames = 10; } - CRegion damage; + CRegion damage, finalDamage; if (!beginRender(pMonitor, damage, RENDER_MODE_NORMAL)) { Debug::log(ERR, "renderer: couldn't beginRender()!"); return; @@ -1302,8 +1302,10 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (*PDAMAGETRACKINGMODE == DAMAGE_TRACKING_NONE || *PDAMAGETRACKINGMODE == DAMAGE_TRACKING_MONITOR || pMonitor->forceFullFrames > 0 || damageBlinkCleanup > 0) damage = {0, 0, (int)pMonitor->vecTransformedSize.x * 10, (int)pMonitor->vecTransformedSize.y * 10}; + finalDamage = damage; + // update damage in renderdata as we modified it - g_pHyprOpenGL->setDamage(damage); + g_pHyprOpenGL->setDamage(damage, finalDamage); if (pMonitor->forceFullFrames > 0) { pMonitor->forceFullFrames -= 1; @@ -1315,7 +1317,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { bool renderCursor = true; - if (!damage.empty()) { + if (!finalDamage.empty()) { if (pMonitor->solitaryClient.expired()) { if (pMonitor->isMirror()) { g_pHyprOpenGL->blend(false); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 02c86a46..60c1bc30 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -119,7 +119,8 @@ CRegion CRenderPass::render(const CRegion& damage_) { } if (damage.empty()) { - g_pHyprOpenGL->m_RenderData.damage = damage; + g_pHyprOpenGL->m_RenderData.damage = damage; + g_pHyprOpenGL->m_RenderData.finalDamage = damage; return damage; } @@ -149,13 +150,16 @@ CRegion CRenderPass::render(const CRegion& damage_) { blurRegion.intersect(damage).expand(oneBlurRadius()); + g_pHyprOpenGL->m_RenderData.finalDamage = blurRegion.copy().add(damage); + // FIXME: why does this break on * 1.F ? // used to work when we expand all the damage... I think? Well, before pass. // moving a window over blur shows the edges being wonk. blurRegion.expand(oneBlurRadius() * 1.5F); damage = blurRegion.copy().add(damage); - } + } else + g_pHyprOpenGL->m_RenderData.finalDamage = damage; if (std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->disableSimplification(); })) { for (auto& el : m_vPassElements) { From 0399e64274ae5c05a7a40ad78e4d4852d9957e99 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Sat, 12 Apr 2025 09:38:46 -0500 Subject: [PATCH 0065/1077] screencopy: Handle explicit sync failure (#10050) --- src/protocols/Screencopy.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index afa61f36..d5a5f816 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -231,16 +231,17 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(pMonitor->output); if (pMonitor->inTimeline && explicitOptions.explicitEnabled) { - pMonitor->inTimeline->addWaiter( - [callback]() { - LOGM(TRACE, "Copied frame via dma with explicit sync"); - callback(true); - }, - pMonitor->inTimelinePoint, 0); - } else { - LOGM(TRACE, "Copied frame via dma"); - callback(true); + if (pMonitor->inTimeline->addWaiter( + [callback, sync = pMonitor->eglSync]() { + LOGM(TRACE, "Copied frame via dma with explicit sync"); + callback(true); + }, + pMonitor->inTimelinePoint, 0)) + return; + // on explicit sync failure, fallthrough to immediate callback } + LOGM(TRACE, "Copied frame via dma"); + callback(true); } bool CScreencopyFrame::copyShm() { From 65389700878640fa0e90419b9cf34f48e4186fca Mon Sep 17 00:00:00 2001 From: alaricljs Date: Sat, 12 Apr 2025 10:43:13 -0400 Subject: [PATCH 0066/1077] binds: add drag_threshold for click/drag isolation (#9839) --------- Co-authored-by: Leeman --- src/config/ConfigDescriptions.hpp | 6 ++ src/config/ConfigManager.cpp | 15 ++++- src/layout/IHyprLayout.cpp | 92 +++++++++++++++++------------ src/layout/IHyprLayout.hpp | 7 +++ src/managers/KeybindManager.cpp | 16 ++++- src/managers/KeybindManager.hpp | 3 + src/managers/input/InputManager.hpp | 5 +- 7 files changed, 103 insertions(+), 41 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 7037f537..78b9f559 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1326,6 +1326,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, + SConfigOptionDescription{ + .value = "binds:drag_threshold", + .description = "Movement threshold in pixels for window dragging and c/g bind flags. 0 to disable and grab on mousedown.", + .type = CONFIG_OPTION_INT, + .data = SConfigOptionDescription::SRangeData{0, 0, INT_MAX}, + }, /* * xwayland: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 56ff3f30..70f6701e 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -651,6 +651,7 @@ CConfigManager::CConfigManager() { registerConfigVar("binds:disable_keybind_grabbing", Hyprlang::INT{0}); registerConfigVar("binds:window_direction_monitor_fallback", Hyprlang::INT{1}); registerConfigVar("binds:allow_pin_fullscreen", Hyprlang::INT{0}); + registerConfigVar("binds:drag_threshold", Hyprlang::INT{0}); registerConfigVar("gestures:workspace_swipe", Hyprlang::INT{0}); registerConfigVar("gestures:workspace_swipe_fingers", Hyprlang::INT{3}); @@ -2255,6 +2256,8 @@ std::optional CConfigManager::handleBind(const std::string& command bool longPress = false; bool hasDescription = false; bool dontInhibit = false; + bool click = false; + bool drag = false; const auto BINDARGS = command.substr(4); for (auto const& arg : BINDARGS) { @@ -2280,6 +2283,12 @@ std::optional CConfigManager::handleBind(const std::string& command hasDescription = true; } else if (arg == 'p') { dontInhibit = true; + } else if (arg == 'c') { + click = true; + release = true; + } else if (arg == 'g') { + drag = true; + release = true; } else { return "bind: invalid flag"; } @@ -2291,6 +2300,9 @@ std::optional CConfigManager::handleBind(const std::string& command if (mouse && (repeat || release || locked)) return "flag m is exclusive"; + if (click && drag) + return "flags c and g are mutually exclusive"; + const int numbArgs = hasDescription ? 5 : 4; const auto ARGS = CVarList(value, numbArgs); @@ -2350,7 +2362,8 @@ std::optional CConfigManager::handleBind(const std::string& command g_pKeybindManager->addKeybind(SKeybind{parsedKey.key, KEYSYMS, parsedKey.keycode, parsedKey.catchAll, MOD, MODS, HANDLER, COMMAND, locked, m_szCurrentSubmap, DESCRIPTION, release, repeat, longPress, - mouse, nonConsuming, transparent, ignoreMods, multiKey, hasDescription, dontInhibit}); + mouse, nonConsuming, transparent, ignoreMods, multiKey, hasDescription, dontInhibit, + click, drag}); } return {}; diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index a0f15f5c..0c1c3788 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -228,7 +228,8 @@ bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) { } void IHyprLayout::onBeginDragWindow() { - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); m_iMouseMoveEventCount = 1; m_vBeginDragSizeXY = Vector2D(); @@ -240,42 +241,11 @@ void IHyprLayout::onBeginDragWindow() { return; } - const bool WAS_FULLSCREEN = DRAGGINGWINDOW->isFullscreen(); - if (WAS_FULLSCREEN) { - Debug::log(LOG, "Dragging a fullscreen window"); - g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); - } - - const auto PWORKSPACE = DRAGGINGWINDOW->m_pWorkspace; - - if (PWORKSPACE->m_bHasFullscreenWindow && (!DRAGGINGWINDOW->m_bCreatedOverFullscreen || !DRAGGINGWINDOW->m_bIsFloating)) { - Debug::log(LOG, "Rejecting drag on a fullscreen workspace. (window under fullscreen)"); - g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); + // Try to pick up dragged window now if drag_threshold is disabled + // or at least update dragging related variables for the cursors + g_pInputManager->m_bDragThresholdReached = *PDRAGTHRESHOLD <= 0; + if (updateDragWindow()) return; - } - - DRAGGINGWINDOW->m_bDraggingTiled = false; - - m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; - - if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_bIsFloating) { - const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); - *DRAGGINGWINDOW->m_vRealPosition = MOUSECOORDS - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; - } else if (!DRAGGINGWINDOW->m_bIsFloating) { - if (g_pInputManager->dragMode == MBIND_MOVE) { - DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor(); - changeWindowFloatingMode(DRAGGINGWINDOW); - DRAGGINGWINDOW->m_bIsFloating = true; - DRAGGINGWINDOW->m_bDraggingTiled = true; - - *DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; - } - } - - m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal(); - m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition->goal(); - m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize->goal(); - m_vLastDragXY = m_vBeginDragXY; // get the grab corner static auto RESIZECORNER = CConfigValue("general:resize_corner"); @@ -552,7 +522,8 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { if (g_pInputManager->currentlyDraggedWindow.expired()) return; - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); // Window invalid or drag begin size 0,0 meaning we rejected it. if ((!validMapped(DRAGGINGWINDOW) || m_vBeginDragSizeXY == Vector2D())) { @@ -560,6 +531,15 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { return; } + // Yoink dragged window here instead if using drag_threshold and it has been reached + if (*PDRAGTHRESHOLD > 0 && !g_pInputManager->m_bDragThresholdReached) { + if ((m_vBeginDragXY.distanceSq(mousePos) <= std::pow(*PDRAGTHRESHOLD, 2) && m_vBeginDragXY == m_vLastDragXY)) + return; + g_pInputManager->m_bDragThresholdReached = true; + if (updateDragWindow()) + return; + } + static auto TIMER = std::chrono::high_resolution_clock::now(), MSTIMER = TIMER; const auto SPECIAL = DRAGGINGWINDOW->onSpecialWorkspace(); @@ -962,3 +942,41 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { return sizePredicted; } + +bool IHyprLayout::updateDragWindow() { + const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + + if (g_pInputManager->m_bDragThresholdReached) { + if (DRAGGINGWINDOW->isFullscreen()) { + Debug::log(LOG, "Dragging a fullscreen window"); + g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); + } + + const auto PWORKSPACE = DRAGGINGWINDOW->m_pWorkspace; + + if (PWORKSPACE->m_bHasFullscreenWindow && (!DRAGGINGWINDOW->m_bCreatedOverFullscreen || !DRAGGINGWINDOW->m_bIsFloating)) { + Debug::log(LOG, "Rejecting drag on a fullscreen workspace. (window under fullscreen)"); + g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); + return true; + } + } + + DRAGGINGWINDOW->m_bDraggingTiled = false; + m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; + if (!DRAGGINGWINDOW->m_bIsFloating && g_pInputManager->dragMode == MBIND_MOVE) { + DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor(); + *DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; + if (g_pInputManager->m_bDragThresholdReached) { + changeWindowFloatingMode(DRAGGINGWINDOW); + DRAGGINGWINDOW->m_bIsFloating = true; + DRAGGINGWINDOW->m_bDraggingTiled = true; + } + } + + m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal(); + m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition->goal(); + m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize->goal(); + m_vLastDragXY = m_vBeginDragXY; + + return false; +} diff --git a/src/layout/IHyprLayout.hpp b/src/layout/IHyprLayout.hpp index e31bb63e..f85fc52a 100644 --- a/src/layout/IHyprLayout.hpp +++ b/src/layout/IHyprLayout.hpp @@ -204,6 +204,13 @@ class IHyprLayout { virtual Vector2D predictSizeForNewWindow(PHLWINDOW pWindow); virtual Vector2D predictSizeForNewWindowFloating(PHLWINDOW pWindow); + /* + Called to try to pick up window for dragging. + Updates drag related variables and floats window if threshold reached. + Return true to reject + */ + virtual bool updateDragWindow(); + private: int m_iMouseMoveEventCount; Vector2D m_vBeginDragXY; diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 948ef11e..2644cf53 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -460,6 +460,7 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { .modmaskAtPressTime = MODS, .sent = true, .submapAtPress = m_szCurrentSelectedSubmap, + .mousePosAtPress = g_pInputManager->getMouseCoordsInternal(), }; m_vActiveKeybinds.clear(); @@ -551,6 +552,7 @@ bool CKeybindManager::onMouseEvent(const IPointer::SButtonEvent& e) { const auto KEY = SPressedKeyWithMods{ .keyName = KEY_NAME, .modmaskAtPressTime = MODS, + .mousePosAtPress = g_pInputManager->getMouseCoordsInternal(), }; m_vActiveKeybinds.clear(); @@ -638,7 +640,9 @@ std::string CKeybindManager::getCurrentSubmap() { SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SPressedKeyWithMods& key, bool pressed) { static auto PDISABLEINHIBIT = CConfigValue("binds:disable_keybind_grabbing"); - bool found = false; + static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); + + bool found = false; SDispatchResult res; if (pressed) { @@ -736,6 +740,14 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP found = true; // suppress the event continue; } + + // Require mouse to stay inside drag_threshold for clicks, outside for drags + // Check if either a mouse bind has triggered or currently over the threshold (maybe there is no mouse bind on the same key) + const auto THRESHOLDREACHED = key.mousePosAtPress.distanceSq(g_pInputManager->getMouseCoordsInternal()) > std::pow(*PDRAGTHRESHOLD, 2); + if (k->click && (g_pInputManager->m_bDragThresholdReached || THRESHOLDREACHED)) + continue; + else if (k->drag && !g_pInputManager->m_bDragThresholdReached && !THRESHOLDREACHED) + continue; } if (k->longPress) { @@ -788,6 +800,8 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP found = true; } + g_pInputManager->m_bDragThresholdReached = false; + // if keybind wasn't found (or dispatcher said to) then pass event res.passEvent |= !found; diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 8b13bac2..0040d761 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -39,6 +39,8 @@ struct SKeybind { bool multiKey = false; bool hasDescription = false; bool dontInhibit = false; + bool click = false; + bool drag = false; // DO NOT INITIALIZE bool shadowed = false; @@ -62,6 +64,7 @@ struct SPressedKeyWithMods { uint32_t modmaskAtPressTime = 0; bool sent = false; std::string submapAtPress = ""; + Vector2D mousePosAtPress = {}; }; struct SParsedKey { diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index fa06454f..406e1845 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -147,8 +147,9 @@ class CInputManager { // for dragging floating windows PHLWINDOWREF currentlyDraggedWindow; - eMouseBindMode dragMode = MBIND_INVALID; - bool m_bWasDraggingWindow = false; + eMouseBindMode dragMode = MBIND_INVALID; + bool m_bWasDraggingWindow = false; + bool m_bDragThresholdReached = false; // for refocus to be forced PHLWINDOWREF m_pForcedFocus; From a17cea8b8c739da23617da20aaa04d8b58dead79 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 12 Apr 2025 17:47:22 +0100 Subject: [PATCH 0067/1077] asyncDialogBox: fix missing pid fixes #10056 --- src/helpers/AsyncDialogBox.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 3010d10e..73bae8f6 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -99,14 +99,14 @@ void CAsyncDialogBox::open(std::function onResolution) { m_selfReference = m_selfWeakReference.lock(); - m_dialogPid = proc.pid(); - if (!proc.runAsync()) { Debug::log(ERR, "CAsyncDialogBox::open: failed to run async"); wl_event_source_remove(m_readEventSource); return; } + m_dialogPid = proc.pid(); + // close the write fd, only the dialog owns it now close(outPipe[1]); } From 2da4f427ea97a11d1d28dfd1324984a8584fc699 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Sat, 12 Apr 2025 11:58:29 -0500 Subject: [PATCH 0068/1077] compositor/surface: fix surface opaque and input regions not being updated (#10055) --- src/protocols/core/Compositor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 57f0ff3f..3cc04cda 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -195,25 +195,25 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso }); resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { + pending.updated.input = true; + if (!region) { pending.input = CBox{{}, {INT32_MAX, INT32_MAX}}; return; } - pending.updated.input = true; - auto RG = CWLRegionResource::fromResource(region); pending.input = RG->region; }); resource->setSetOpaqueRegion([this](CWlSurface* r, wl_resource* region) { + pending.updated.opaque = true; + if (!region) { pending.opaque = CBox{{}, {}}; return; } - pending.updated.opaque = true; - auto RG = CWLRegionResource::fromResource(region); pending.opaque = RG->region; }); From 4d85e7996d862b5e9aa4b29e2327058576a2cb41 Mon Sep 17 00:00:00 2001 From: rszyma Date: Sun, 13 Apr 2025 00:58:38 +0200 Subject: [PATCH 0069/1077] dwindle: ignore fullscreen window for positioning when use_active_for_splits=false (#9838) * fix(dwindle): ignore fullscreen window for positioning when use_active_for_splits=false * rename NON_FULLSCREEN -> SKIP_FULLSCREEN_PRIORITY --- src/Compositor.cpp | 2 +- src/desktop/Window.hpp | 15 ++++++++------- src/layout/DwindleLayout.cpp | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8e520237..49b3a2cb 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -952,7 +952,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper const WORKSPACEID WSPID = special ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); const auto PWORKSPACE = getWorkspaceByID(WSPID); - if (PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_bHasFullscreenWindow && !(properties & SKIP_FULLSCREEN_PRIORITY)) return PWORKSPACE->getFullscreenWindow(); auto found = floating(false); diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 3ed4ce75..b314eca5 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -44,13 +44,14 @@ enum eGroupRules : uint8_t { }; enum eGetWindowProperties : uint8_t { - WINDOW_ONLY = 0, - RESERVED_EXTENTS = 1 << 0, - INPUT_EXTENTS = 1 << 1, - FULL_EXTENTS = 1 << 2, - FLOATING_ONLY = 1 << 3, - ALLOW_FLOATING = 1 << 4, - USE_PROP_TILED = 1 << 5, + WINDOW_ONLY = 0, + RESERVED_EXTENTS = 1 << 0, + INPUT_EXTENTS = 1 << 1, + FULL_EXTENTS = 1 << 2, + FLOATING_ONLY = 1 << 3, + ALLOW_FLOATING = 1 << 4, + USE_PROP_TILED = 1 << 5, + SKIP_FULLSCREEN_PRIORITY = 1 << 6, }; enum eSuppressEvents : uint8_t { diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index ecd7abea..0058c890 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -246,7 +246,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir if (PMONITOR->ID == MONFROMCURSOR->ID && (PNODE->workspaceID == PMONITOR->activeWorkspaceID() || (g_pCompositor->isWorkspaceSpecial(PNODE->workspaceID) && PMONITOR->activeSpecialWorkspace)) && !*PUSEACTIVE) { - OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS)); + OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS | SKIP_FULLSCREEN_PRIORITY)); if (!OPENINGON && g_pCompositor->isPointOnReservedArea(MOUSECOORDS, PMONITOR)) OPENINGON = getClosestNodeOnWorkspace(PNODE->workspaceID, MOUSECOORDS); From 303a10d27c7d9147b6c2256c0da4d4941051f66b Mon Sep 17 00:00:00 2001 From: nyx Date: Sat, 12 Apr 2025 19:03:03 -0400 Subject: [PATCH 0070/1077] IHyprLayout: respect minimum window size (#10017) * IHyprLayout: respect minimum window size this prevents window warping, before we were not respecting the minimum size which caused the window to move suddenly, even though it would be sized to its minimum size. --- src/layout/IHyprLayout.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 0c1c3788..90bdb9e6 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -603,7 +603,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { } else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) { if (DRAGGINGWINDOW->m_bIsFloating) { - Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(20, 20))); + Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); Vector2D MAXSIZE; if (DRAGGINGWINDOW->m_sWindowData.maxSize.hasValue()) MAXSIZE = DRAGGINGWINDOW->requestedMaxSize().clamp({}, DRAGGINGWINDOW->m_sWindowData.maxSize.value()); @@ -964,7 +964,8 @@ bool IHyprLayout::updateDragWindow() { DRAGGINGWINDOW->m_bDraggingTiled = false; m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; if (!DRAGGINGWINDOW->m_bIsFloating && g_pInputManager->dragMode == MBIND_MOVE) { - DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor(); + Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); + DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(MINSIZE, Vector2D{}).floor(); *DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; if (g_pInputManager->m_bDragThresholdReached) { changeWindowFloatingMode(DRAGGINGWINDOW); From 06469b33919bf1806024e73a1540be50d7819ace Mon Sep 17 00:00:00 2001 From: nyx Date: Sun, 13 Apr 2025 11:32:53 -0400 Subject: [PATCH 0071/1077] IHyprLayout: center floating window at cursor when picked up from fullscreen (#10063) --- src/layout/IHyprLayout.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 90bdb9e6..c7607377 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -945,9 +945,10 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { bool IHyprLayout::updateDragWindow() { const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const bool WAS_FULLSCREEN = DRAGGINGWINDOW->isFullscreen(); if (g_pInputManager->m_bDragThresholdReached) { - if (DRAGGINGWINDOW->isFullscreen()) { + if (WAS_FULLSCREEN) { Debug::log(LOG, "Dragging a fullscreen window"); g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); } @@ -963,7 +964,11 @@ bool IHyprLayout::updateDragWindow() { DRAGGINGWINDOW->m_bDraggingTiled = false; m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; - if (!DRAGGINGWINDOW->m_bIsFloating && g_pInputManager->dragMode == MBIND_MOVE) { + + if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_bIsFloating) { + const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); + *DRAGGINGWINDOW->m_vRealPosition = MOUSECOORDS - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; + } else if (!DRAGGINGWINDOW->m_bIsFloating && g_pInputManager->dragMode == MBIND_MOVE) { Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(MINSIZE, Vector2D{}).floor(); *DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; From f4e19d3f1e27b4cf1236e93d767f9f6e916730ea Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 13 Apr 2025 17:56:20 +0200 Subject: [PATCH 0072/1077] layerSurface: warp position and size before taking a snapshot (#10054) --- src/desktop/LayerSurface.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 8747d079..c92169bc 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -214,6 +214,10 @@ void CLayerSurface::onUnmap() { return; } + // end any pending animations so that snapshot has right dimensions + realPosition->warp(); + realSize->warp(); + // make a snapshot and start fade g_pHyprRenderer->makeLayerSnapshot(self.lock()); From 99ab3e19d928c3c33ca7d7c5f5b0cbc7eb50dce5 Mon Sep 17 00:00:00 2001 From: psyvern <58957996+psyvern@users.noreply.github.com> Date: Sun, 13 Apr 2025 22:40:15 +0200 Subject: [PATCH 0073/1077] framebuffer: Fix framebuffer size check (#10068) --- src/render/Framebuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index 6905eb36..46e7d195 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -7,7 +7,7 @@ CFramebuffer::CFramebuffer() { bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { bool firstAlloc = false; - RASSERT((w > 1 && h > 1), "cannot alloc a FB with negative / zero size! (attempted {}x{})", w, h); + RASSERT((w > 0 && h > 0), "cannot alloc a FB with negative / zero size! (attempted {}x{})", w, h); uint32_t glFormat = NFormatUtils::drmFormatToGL(drmFormat); uint32_t glType = NFormatUtils::glFormatToType(glFormat); From 533bc5115e49a6d0d093b45f7db65854bc9a0494 Mon Sep 17 00:00:00 2001 From: Nathan Ollerenshaw Date: Mon, 14 Apr 2025 02:07:53 -0700 Subject: [PATCH 0074/1077] monitors: fix disconnected monitors are reconnected to an empty workspace (#9874) --------- Co-authored-by: nyx --- src/Compositor.cpp | 2 +- src/Compositor.hpp | 79 +++++++++++++++++++++-------------------- src/helpers/Monitor.cpp | 19 ++++++++++ 3 files changed, 60 insertions(+), 40 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 49b3a2cb..fed80120 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -923,7 +923,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (w->m_bIsX11 && w->isX11OverrideRedirect() && !w->m_pXWaylandSurface->wantsFocus()) { // Override Redirect return g_pCompositor->m_pLastWindow.lock(); // we kinda trick everything here. - // TODO: this is wrong, we should focus the parent, but idk how to get it considering it's nullptr in most cases. + // TODO: this is wrong, we should focus the parent, but idk how to get it considering it's nullptr in most cases. } return w; diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 2393662b..33780cc9 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -25,53 +25,54 @@ class CCompositor { CCompositor(bool onlyConfig = false); ~CCompositor(); - wl_display* m_sWLDisplay = nullptr; - wl_event_loop* m_sWLEventLoop = nullptr; - int m_iDRMFD = -1; - bool m_bInitialized = false; - SP m_pAqBackend; + wl_display* m_sWLDisplay = nullptr; + wl_event_loop* m_sWLEventLoop = nullptr; + int m_iDRMFD = -1; + bool m_bInitialized = false; + SP m_pAqBackend; - std::string m_szHyprTempDataRoot = ""; + std::string m_szHyprTempDataRoot = ""; - std::string m_szWLDisplaySocket = ""; - std::string m_szInstanceSignature = ""; - std::string m_szInstancePath = ""; - std::string m_szCurrentSplash = "error"; + std::string m_szWLDisplaySocket = ""; + std::string m_szInstanceSignature = ""; + std::string m_szInstancePath = ""; + std::string m_szCurrentSplash = "error"; - std::vector m_vMonitors; - std::vector m_vRealMonitors; // for all monitors, even those turned off - std::vector m_vWindows; - std::vector m_vLayers; - std::vector m_vWorkspaces; - std::vector m_vWindowsFadingOut; - std::vector m_vSurfacesFadingOut; + std::vector m_vMonitors; + std::vector m_vRealMonitors; // for all monitors, even those turned off + std::vector m_vWindows; + std::vector m_vLayers; + std::vector m_vWorkspaces; + std::vector m_vWindowsFadingOut; + std::vector m_vSurfacesFadingOut; - std::unordered_map m_mMonitorIDMap; + std::unordered_map m_mMonitorIDMap; + std::unordered_map m_mSeenMonitorWorkspaceMap; // map of seen monitor names to workspace IDs - void initServer(std::string socketName, int socketFd); - void startCompositor(); - void stopCompositor(); - void cleanup(); - void bumpNofile(); - void restoreNofile(); + void initServer(std::string socketName, int socketFd); + void startCompositor(); + void stopCompositor(); + void cleanup(); + void bumpNofile(); + void restoreNofile(); - WP m_pLastFocus; - PHLWINDOWREF m_pLastWindow; - PHLMONITORREF m_pLastMonitor; + WP m_pLastFocus; + PHLWINDOWREF m_pLastWindow; + PHLMONITORREF m_pLastMonitor; - std::vector m_vWindowFocusHistory; // first element is the most recently focused. + std::vector m_vWindowFocusHistory; // first element is the most recently focused. - bool m_bReadyToProcess = false; - bool m_bSessionActive = true; - bool m_bDPMSStateON = true; - bool m_bUnsafeState = false; // unsafe state is when there is no monitors. - bool m_bNextIsUnsafe = false; - PHLMONITORREF m_pUnsafeOutput; // fallback output for the unsafe state - bool m_bIsShuttingDown = false; - bool m_bFinalRequests = false; - bool m_bDesktopEnvSet = false; - bool m_bWantsXwayland = true; - bool m_bOnlyConfigVerification = false; + bool m_bReadyToProcess = false; + bool m_bSessionActive = true; + bool m_bDPMSStateON = true; + bool m_bUnsafeState = false; // unsafe state is when there is no monitors. + bool m_bNextIsUnsafe = false; + PHLMONITORREF m_pUnsafeOutput; // fallback output for the unsafe state + bool m_bIsShuttingDown = false; + bool m_bFinalRequests = false; + bool m_bDesktopEnvSet = false; + bool m_bWantsXwayland = true; + bool m_bOnlyConfigVerification = false; // ------------------------------------------------- // diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 97f74609..e30849a7 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -235,6 +235,19 @@ void CMonitor::onConnect(bool noRule) { } } + Debug::log(LOG, "checking if we have seen this monitor before: {}", szName); + // if we saw this monitor before, set it to the workspace it was on + if (g_pCompositor->m_mSeenMonitorWorkspaceMap.contains(szName)) { + auto workspaceID = g_pCompositor->m_mSeenMonitorWorkspaceMap[szName]; + Debug::log(LOG, "Monitor {} was on workspace {}, setting it to that", szName, workspaceID); + auto ws = g_pCompositor->getWorkspaceByID(workspaceID); + if (ws) { + g_pCompositor->moveWorkspaceToMonitor(ws, self.lock()); + changeWorkspace(ws, true, false, false); + } + } else + Debug::log(LOG, "Monitor {} was not on any workspace", szName); + if (!found) g_pCompositor->setActiveMonitor(self.lock()); @@ -273,6 +286,12 @@ void CMonitor::onDisconnect(bool destroy) { events.disconnect.emit(); + // record what workspace this monitor was on + if (activeWorkspace) { + Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", szName, activeWorkspace->m_iID); + g_pCompositor->m_mSeenMonitorWorkspaceMap[szName] = activeWorkspace->m_iID; + } + // Cleanup everything. Move windows back, snap cursor, shit. PHLMONITOR BACKUPMON = nullptr; for (auto const& m : g_pCompositor->m_vMonitors) { From 8b7b169043de2a9d95f8505edb8b6576fac586fd Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Mon, 14 Apr 2025 18:58:37 +0300 Subject: [PATCH 0075/1077] flake.lock: update --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index b7f2f4a2..51623b7d 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1743265529, - "narHash": "sha256-QbjP15/2N+VJl0b5jxrrTc+VOt39aU4XrDvtP0Lz5ik=", + "lastModified": 1744289235, + "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "1d2dbd72c2bbaceab031c592d4810f744741d203", + "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", "type": "github" }, "original": { @@ -105,11 +105,11 @@ ] }, "locked": { - "lastModified": 1739049071, - "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", + "lastModified": 1743953322, + "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", + "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", "type": "github" }, "original": { @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1741191527, - "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", + "lastModified": 1744468525, + "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", + "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743827369, - "narHash": "sha256-rpqepOZ8Eo1zg+KJeWoq1HAOgoMCDloqv5r2EAa9TSA=", + "lastModified": 1744463964, + "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "42a1c966be226125b48c384171c44c651c236c22", + "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", "type": "github" }, "original": { @@ -365,11 +365,11 @@ ] }, "locked": { - "lastModified": 1741934139, - "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", + "lastModified": 1744644585, + "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", + "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", "type": "github" }, "original": { From ffd6cf65e40a7140e82dc6e076c90b5119d41a54 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Tue, 15 Apr 2025 23:00:40 +0000 Subject: [PATCH 0076/1077] windowrules: allow incrementing window props (#9566) --- src/config/ConfigValue.cpp | 15 +++ src/config/ConfigValue.hpp | 16 ++-- src/desktop/Window.cpp | 3 +- src/desktop/Window.hpp | 97 ++------------------ src/desktop/WindowOverridableVar.hpp | 132 +++++++++++++++++++++++++++ src/events/Windows.cpp | 1 + src/helpers/Monitor.cpp | 1 + src/hyprerror/HyprError.cpp | 1 + src/layout/DwindleLayout.cpp | 1 + src/layout/IHyprLayout.cpp | 1 + src/layout/MasterLayout.cpp | 1 + src/managers/CursorManager.cpp | 1 + src/managers/KeybindManager.cpp | 15 ++- src/managers/PointerManager.cpp | 1 + src/managers/XWaylandManager.cpp | 1 + src/managers/input/InputManager.cpp | 1 + src/managers/input/Touch.cpp | 1 + src/protocols/CTMControl.cpp | 1 + src/protocols/XDGOutput.cpp | 1 + src/render/OpenGL.cpp | 1 + src/render/Renderer.cpp | 1 + 21 files changed, 191 insertions(+), 102 deletions(-) create mode 100644 src/config/ConfigValue.cpp create mode 100644 src/desktop/WindowOverridableVar.hpp diff --git a/src/config/ConfigValue.cpp b/src/config/ConfigValue.cpp new file mode 100644 index 00000000..9f6cc319 --- /dev/null +++ b/src/config/ConfigValue.cpp @@ -0,0 +1,15 @@ +#include "ConfigValue.hpp" +#include "ConfigManager.hpp" +#include "../macros.hpp" + +void local__configValuePopulate(void* const** p, const std::string& val) { + const auto PVHYPRLANG = g_pConfigManager->getHyprlangConfigValuePtr(val); + + *p = PVHYPRLANG->getDataStaticPtr(); +} + +std::type_index local__configValueTypeIdx(const std::string& val) { + const auto PVHYPRLANG = g_pConfigManager->getHyprlangConfigValuePtr(val); + const auto ANY = PVHYPRLANG->getValue(); + return std::type_index(ANY.type()); +} \ No newline at end of file diff --git a/src/config/ConfigValue.hpp b/src/config/ConfigValue.hpp index 089ae8bf..a159bf8c 100644 --- a/src/config/ConfigValue.hpp +++ b/src/config/ConfigValue.hpp @@ -4,21 +4,19 @@ #include #include #include "../macros.hpp" -#include "ConfigManager.hpp" + +// giga hack to avoid including configManager here +// NOLINTNEXTLINE +void local__configValuePopulate(void* const** p, const std::string& val); +std::type_index local__configValueTypeIdx(const std::string& val); template class CConfigValue { public: CConfigValue(const std::string& val) { - const auto PVHYPRLANG = g_pConfigManager->getHyprlangConfigValuePtr(val); - - // NOLINTNEXTLINE - p_ = PVHYPRLANG->getDataStaticPtr(); - #ifdef HYPRLAND_DEBUG // verify type - const auto ANY = PVHYPRLANG->getValue(); - const auto TYPE = std::type_index(ANY.type()); + const auto TYPE = local__configValueTypeIdx(val); // exceptions const bool STRINGEX = (typeid(T) == typeid(std::string) && TYPE == typeid(Hyprlang::STRING)); @@ -26,6 +24,8 @@ class CConfigValue { RASSERT(typeid(T) == TYPE || STRINGEX || CUSTOMEX, "Mismatched type in CConfigValue, got {} but has {}", typeid(T).name(), TYPE.name()); #endif + + local__configValuePopulate(&p_, val); } T* ptr() const { diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 4b9a07fc..323aa03a 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -11,6 +11,7 @@ #include "../render/decorations/CHyprGroupBarDecoration.hpp" #include "../render/decorations/CHyprBorderDecoration.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../managers/TokenManager.hpp" #include "../managers/AnimationManager.hpp" #include "../managers/ANRManager.hpp" @@ -780,7 +781,7 @@ void CWindow::applyDynamicRule(const SP& r) { const CVarList VARS(r->szRule, 0, ' '); if (auto search = NWindowProperties::intWindowProperties.find(VARS[1]); search != NWindowProperties::intWindowProperties.end()) { try { - *(search->second(m_pSelf.lock())) = CWindowOverridableVar(std::stoi(VARS[2]), priority); + *(search->second(m_pSelf.lock())) = CWindowOverridableVar(Hyprlang::INT(std::stoi(VARS[2])), priority); } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->szRule, e.what()); } } else if (auto search = NWindowProperties::floatWindowProperties.find(VARS[1]); search != NWindowProperties::floatWindowProperties.end()) { try { diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index b314eca5..f592aed6 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -19,6 +19,7 @@ #include "WLSurface.hpp" #include "Workspace.hpp" #include "WindowRule.hpp" +#include "WindowOverridableVar.hpp" #include "../protocols/types/ContentType.hpp" class CXDGSurfaceResource; @@ -77,88 +78,6 @@ struct SAlphaValue { }; }; -enum eOverridePriority : uint8_t { - PRIORITY_LAYOUT = 0, - PRIORITY_WORKSPACE_RULE, - PRIORITY_WINDOW_RULE, - PRIORITY_SET_PROP, -}; - -template -class CWindowOverridableVar { - public: - CWindowOverridableVar(T const& value, eOverridePriority priority) { - values[priority] = value; - } - CWindowOverridableVar(T const& value) : defaultValue{value} {} - - CWindowOverridableVar() = default; - ~CWindowOverridableVar() = default; - - CWindowOverridableVar& operator=(CWindowOverridableVar const& other) { - // Self-assignment check - if (this == &other) - return *this; - - for (auto const& value : other.values) { - values[value.first] = value.second; - } - - return *this; - } - - void unset(eOverridePriority priority) { - values.erase(priority); - } - - bool hasValue() { - return !values.empty(); - } - - T value() { - if (!values.empty()) - return std::prev(values.end())->second; - else - throw std::bad_optional_access(); - } - - T valueOr(T const& other) { - if (hasValue()) - return value(); - else - return other; - } - - T valueOrDefault() { - return valueOr(defaultValue); - } - - eOverridePriority getPriority() { - if (!values.empty()) - return std::prev(values.end())->first; - else - throw std::bad_optional_access(); - } - - void matchOptional(std::optional const& optValue, eOverridePriority priority) { - if (optValue.has_value()) - values[priority] = optValue.value(); - else - unset(priority); - } - - operator std::optional() { - if (hasValue()) - return value(); - else - return std::nullopt; - } - - private: - std::map values; - T defaultValue; // used for toggling, so required for bool -}; - struct SWindowData { CWindowOverridableVar alpha = SAlphaValue{1.f, false}; CWindowOverridableVar alphaInactive = SAlphaValue{1.f, false}; @@ -186,12 +105,12 @@ struct SWindowData { CWindowOverridableVar xray = false; CWindowOverridableVar renderUnfocused = false; - CWindowOverridableVar rounding; - CWindowOverridableVar roundingPower; - CWindowOverridableVar borderSize; + CWindowOverridableVar borderSize = {std::string("general:border_size"), Hyprlang::INT(0), std::nullopt}; + CWindowOverridableVar rounding = {std::string("decoration:rounding"), Hyprlang::INT(0), std::nullopt}; - CWindowOverridableVar scrollMouse; - CWindowOverridableVar scrollTouchpad; + CWindowOverridableVar roundingPower = {std::string("decoration:rounding_power")}; + CWindowOverridableVar scrollMouse = {std::string("input:scroll_factor")}; + CWindowOverridableVar scrollTouchpad = {std::string("input:touchpad:scroll_factor")}; CWindowOverridableVar animationStyle; CWindowOverridableVar maxSize; @@ -567,12 +486,12 @@ namespace NWindowProperties { {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.xray; }}, }; - const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { + const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { {"rounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.rounding; }}, {"bordersize", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.borderSize; }}, }; - const std::unordered_map*(PHLWINDOW)>> floatWindowProperties = { + const std::unordered_map*(PHLWINDOW)>> floatWindowProperties = { {"roundingpower", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.roundingPower; }}, {"scrollmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollMouse; }}, {"scrolltouchpad", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollTouchpad; }}, diff --git a/src/desktop/WindowOverridableVar.hpp b/src/desktop/WindowOverridableVar.hpp new file mode 100644 index 00000000..ea113d3e --- /dev/null +++ b/src/desktop/WindowOverridableVar.hpp @@ -0,0 +1,132 @@ +#pragma once + +#include +#include +#include +#include "../config/ConfigValue.hpp" + +enum eOverridePriority : uint8_t { + PRIORITY_LAYOUT = 0, + PRIORITY_WORKSPACE_RULE, + PRIORITY_WINDOW_RULE, + PRIORITY_SET_PROP, +}; + +template +T clampOptional(T const& value, std::optional const& min, std::optional const& max) { + return std::clamp(value, min.value_or(std::numeric_limits::min()), max.value_or(std::numeric_limits::max())); +} + +template || std::is_same_v || std::is_same_v> +class CWindowOverridableVar { + public: + CWindowOverridableVar(T const& value, eOverridePriority priority) { + m_values[priority] = value; + } + + CWindowOverridableVar(T const& value) : m_defaultValue{value} {} + CWindowOverridableVar(T const& value, std::optional const& min, std::optional const& max = std::nullopt) : m_defaultValue{value}, m_minValue{min}, m_maxValue{max} {} + CWindowOverridableVar(std::string const& value) + requires(Extended && !std::is_same_v) + : m_configValue(SP>(new CConfigValue(value))) {} + CWindowOverridableVar(std::string const& value, std::optional const& min, std::optional const& max = std::nullopt) + requires(Extended && !std::is_same_v) + : m_minValue(min), m_maxValue(max), m_configValue(SP>(new CConfigValue(value))) {} + + CWindowOverridableVar() = default; + ~CWindowOverridableVar() = default; + + CWindowOverridableVar& operator=(CWindowOverridableVar const& other) { + // Self-assignment check + if (this == &other) + return *this; + + for (auto const& value : other.m_values) { + if constexpr (Extended && !std::is_same_v) + m_values[value.first] = clampOptional(value.second, m_minValue, m_maxValue); + else + m_values[value.first] = value.second; + } + + return *this; + } + + void unset(eOverridePriority priority) { + m_values.erase(priority); + } + + bool hasValue() { + return !m_values.empty(); + } + + T value() { + if (!m_values.empty()) + return std::prev(m_values.end())->second; + else + throw std::bad_optional_access(); + } + + T valueOr(T const& other) { + if (hasValue()) + return value(); + else + return other; + } + + T valueOrDefault() + requires(Extended && !std::is_same_v) + { + if (hasValue()) + return value(); + else if (m_defaultValue.has_value()) + return m_defaultValue.value(); + else + return **std::any_cast>>(m_configValue); + } + + T valueOrDefault() + requires(!Extended || std::is_same_v) + { + if (hasValue()) + return value(); + else if (!m_defaultValue.has_value()) + throw std::bad_optional_access(); + else + return m_defaultValue.value(); + } + + eOverridePriority getPriority() { + if (!m_values.empty()) + return std::prev(m_values.end())->first; + else + throw std::bad_optional_access(); + } + + void increment(T const& other, eOverridePriority priority) { + if constexpr (std::is_same_v) + m_values[priority] = valueOr(false) ^ other; + else + m_values[priority] = clampOptional(valueOrDefault() + other, m_minValue, m_maxValue); + } + + void matchOptional(std::optional const& optValue, eOverridePriority priority) { + if (optValue.has_value()) + m_values[priority] = optValue.value(); + else + unset(priority); + } + + operator std::optional() { + if (hasValue()) + return value(); + else + return std::nullopt; + } + + private: + std::map m_values; + std::optional m_defaultValue; // used for toggling, so required for bool + std::optional m_minValue; + std::optional m_maxValue; + std::any m_configValue; // only there for select variables +}; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index adc0c762..452e977d 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -7,6 +7,7 @@ #include "../managers/SeatManager.hpp" #include "../render/Renderer.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../protocols/LayerShell.hpp" #include "../protocols/XDGShell.hpp" #include "../protocols/core/Compositor.hpp" diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index e30849a7..495cecbc 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -6,6 +6,7 @@ #include "sync/SyncReleaser.hpp" #include "../Compositor.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../protocols/GammaControl.hpp" #include "../devices/ITouch.hpp" #include "../protocols/LayerShell.hpp" diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 9f889fdf..75b04286 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -2,6 +2,7 @@ #include "HyprError.hpp" #include "../Compositor.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../render/pass/TexPassElement.hpp" #include "../managers/AnimationManager.hpp" #include "../render/Renderer.hpp" diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 0058c890..90cc2f6c 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -1,6 +1,7 @@ #include "DwindleLayout.hpp" #include "../Compositor.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../render/decorations/CHyprGroupBarDecoration.hpp" #include "../render/Renderer.hpp" #include "../managers/input/InputManager.hpp" diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index c7607377..e87267da 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -3,6 +3,7 @@ #include "../Compositor.hpp" #include "../render/decorations/CHyprGroupBarDecoration.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../desktop/Window.hpp" #include "../protocols/XDGShell.hpp" #include "../protocols/core/Compositor.hpp" diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 59a5b14f..a02e6aba 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -4,6 +4,7 @@ #include "config/ConfigDataValues.hpp" #include #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../render/Renderer.hpp" #include "../managers/input/InputManager.hpp" #include "../managers/LayoutManager.hpp" diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index ee0cff35..1535734b 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -4,6 +4,7 @@ #include "PointerManager.hpp" #include "../xwayland/XWayland.hpp" #include "../managers/HookSystemManager.hpp" +#include "../helpers/Monitor.hpp" static int cursorAnimTimer(SP self, void* data) { const auto cursorMgr = reinterpret_cast(data); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 2644cf53..4ef7d229 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -18,6 +18,7 @@ #include "../managers/EventManager.hpp" #include "../render/Renderer.hpp" #include "../hyprerror/HyprError.hpp" +#include "../config/ConfigManager.hpp" #include #include @@ -3221,7 +3222,7 @@ SDispatchResult CKeybindManager::setProp(std::string args) { } else if (auto search = NWindowProperties::boolWindowProperties.find(PROP); search != NWindowProperties::boolWindowProperties.end()) { auto pWindowDataElement = search->second(PWINDOW); if (VAL == "toggle") - *pWindowDataElement = CWindowOverridableVar(!pWindowDataElement->valueOrDefault(), PRIORITY_SET_PROP); + pWindowDataElement->increment(true, PRIORITY_SET_PROP); else if (VAL == "unset") pWindowDataElement->unset(PRIORITY_SET_PROP); else @@ -3229,12 +3230,18 @@ SDispatchResult CKeybindManager::setProp(std::string args) { } else if (auto search = NWindowProperties::intWindowProperties.find(PROP); search != NWindowProperties::intWindowProperties.end()) { if (VAL == "unset") search->second(PWINDOW)->unset(PRIORITY_SET_PROP); - else if (const auto V = configStringToInt(VAL); V) - *(search->second(PWINDOW)) = CWindowOverridableVar((int)*V, PRIORITY_SET_PROP); + else if (VAL.starts_with("relative")) { + const Hyprlang::INT V = std::stoi(VAL.substr(VAL.find(' '))); + search->second(PWINDOW)->increment(V, PRIORITY_SET_PROP); + } else if (const auto V = configStringToInt(VAL); V) + *(search->second(PWINDOW)) = CWindowOverridableVar((Hyprlang::INT)*V, PRIORITY_SET_PROP); } else if (auto search = NWindowProperties::floatWindowProperties.find(PROP); search != NWindowProperties::floatWindowProperties.end()) { if (VAL == "unset") search->second(PWINDOW)->unset(PRIORITY_SET_PROP); - else { + else if (VAL.starts_with("relative")) { + const auto V = std::stof(VAL.substr(VAL.find(' '))); + search->second(PWINDOW)->increment(V, PRIORITY_SET_PROP); + } else { const auto V = std::stof(VAL); *(search->second(PWINDOW)) = CWindowOverridableVar(V, PRIORITY_SET_PROP); } diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 89be4e99..e116aa96 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -1,6 +1,7 @@ #include "PointerManager.hpp" #include "../Compositor.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../protocols/PointerGestures.hpp" #include "../protocols/RelativePointer.hpp" #include "../protocols/FractionalScale.hpp" diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 9d2fda1d..e8481a26 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -2,6 +2,7 @@ #include "../Compositor.hpp" #include "../events/Events.hpp" #include "../config/ConfigValue.hpp" +#include "../helpers/Monitor.hpp" #include "../protocols/XDGShell.hpp" #include "../protocols/core/Compositor.hpp" #include "../xwayland/XWayland.hpp" diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 2153b916..4c5de729 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -4,6 +4,7 @@ #include #include #include "../../config/ConfigValue.hpp" +#include "../../config/ConfigManager.hpp" #include "../../desktop/Window.hpp" #include "../../desktop/LayerSurface.hpp" #include "../../protocols/CursorShape.hpp" diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index a166a256..6b6cc376 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -4,6 +4,7 @@ #include "../../Compositor.hpp" #include "../../desktop/LayerSurface.hpp" #include "../../config/ConfigValue.hpp" +#include "../../helpers/Monitor.hpp" #include "../../devices/ITouch.hpp" #include "../SeatManager.hpp" #include "managers/AnimationManager.hpp" diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index 750c6f8b..c3b6862d 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -3,6 +3,7 @@ #include "../render/Renderer.hpp" #include "core/Output.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "managers/AnimationManager.hpp" #include "../helpers/Monitor.hpp" diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index 544deed0..e95b9c7d 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -1,5 +1,6 @@ #include "XDGOutput.hpp" #include "../config/ConfigValue.hpp" +#include "../helpers/Monitor.hpp" #include "../xwayland/XWayland.hpp" #include "../managers/HookSystemManager.hpp" #include "core/Output.hpp" diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index eaea31be..27d3671f 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -7,6 +7,7 @@ #include "../Compositor.hpp" #include "../helpers/MiscFunctions.hpp" #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../desktop/LayerSurface.hpp" #include "../protocols/LayerShell.hpp" #include "../protocols/core/Compositor.hpp" diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index dc5c1284..1ce717bc 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -6,6 +6,7 @@ #include #include #include "../config/ConfigValue.hpp" +#include "../config/ConfigManager.hpp" #include "../managers/CursorManager.hpp" #include "../managers/PointerManager.hpp" #include "../managers/input/InputManager.hpp" From 0e521788bcc414c9cf81648d3167757d83deb60f Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Tue, 15 Apr 2025 18:02:31 -0500 Subject: [PATCH 0077/1077] core: wait for dmabuf readiness (#9806) * add doOnReadable to event loop manager * move syncTimeline addWaiter to doOnReadable * wait on dmabuf buffers to be readable * don't over synchronize in scanout, also give present feedback on same buffer commit --- src/helpers/Monitor.cpp | 28 ++------ src/helpers/sync/SyncTimeline.cpp | 72 +-------------------- src/helpers/sync/SyncTimeline.hpp | 11 ---- src/managers/eventLoop/EventLoopManager.cpp | 42 ++++++++++++ src/managers/eventLoop/EventLoopManager.hpp | 17 ++++- src/protocols/core/Compositor.cpp | 25 ++++--- src/protocols/types/DMABuffer.cpp | 66 +++++++++++++++++++ src/protocols/types/DMABuffer.hpp | 2 + 8 files changed, 147 insertions(+), 116 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 495cecbc..0a16643e 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1377,6 +1377,10 @@ bool CMonitor::attemptDirectScanout() { auto PBUFFER = PSURFACE->current.buffer.buffer; if (PBUFFER == output->state->state().buffer) { + timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + PSURFACE->presentFeedback(&now, self.lock()); + if (scanoutNeedsCursorUpdate) { if (!state.test()) { Debug::log(TRACE, "attemptDirectScanout: failed basic test"); @@ -1423,32 +1427,10 @@ bool CMonitor::attemptDirectScanout() { output->state->addDamage(PSURFACE->current.accumulateBufferDamage()); output->state->resetExplicitFences(); - auto cleanup = CScopeGuard([this]() { output->state->resetExplicitFences(); }); - - auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(output); - - bool DOEXPLICIT = PSURFACE->syncobj && PSURFACE->current.buffer && PSURFACE->current.acquire && explicitOptions.explicitKMSEnabled; - if (DOEXPLICIT) { - // wait for surface's explicit fence if present - inFence = PSURFACE->current.acquire.exportAsFD(); - if (inFence.isValid()) { - Debug::log(TRACE, "attemptDirectScanout: setting IN_FENCE for aq to {}", inFence.get()); - output->state->setExplicitInFence(inFence.get()); - } else { - Debug::log(TRACE, "attemptDirectScanout: failed to acquire an sync file fd for aq IN_FENCE"); - DOEXPLICIT = false; - } - } + // no need to do explicit sync here as surface current can only ever be ready to read bool ok = output->commit(); - if (!ok && DOEXPLICIT) { - Debug::log(TRACE, "attemptDirectScanout: EXPLICIT SYNC FAILED: commit() returned false. Resetting fences and retrying, might result in glitches."); - output->state->resetExplicitFences(); - - ok = output->commit(); - } - if (!ok) { Debug::log(TRACE, "attemptDirectScanout: failed to scanout surface"); lastScanout.reset(); diff --git a/src/helpers/sync/SyncTimeline.cpp b/src/helpers/sync/SyncTimeline.cpp index 9f5f5a8a..edb2b190 100644 --- a/src/helpers/sync/SyncTimeline.cpp +++ b/src/helpers/sync/SyncTimeline.cpp @@ -34,13 +34,6 @@ SP CSyncTimeline::create(int drmFD_, CFileDescriptor&& drmSyncobj } CSyncTimeline::~CSyncTimeline() { - for (auto& w : waiters) { - if (w->source) { - wl_event_source_remove(w->source); - w->source = nullptr; - } - } - if (handle == 0) return; @@ -64,34 +57,8 @@ std::optional CSyncTimeline::check(uint64_t point, uint32_t flags) { return ret == 0; } -static int handleWaiterFD(int fd, uint32_t mask, void* data) { - auto waiter = (CSyncTimeline::SWaiter*)data; - - if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) { - Debug::log(ERR, "handleWaiterFD: eventfd error"); - return 0; - } - - if (mask & WL_EVENT_READABLE) { - uint64_t value = 0; - if (read(fd, &value, sizeof(value)) <= 0) - Debug::log(ERR, "handleWaiterFD: failed to read from eventfd"); - } - - wl_event_source_remove(waiter->source); - waiter->source = nullptr; - - if (waiter->fn) - waiter->fn(); - - if (waiter->timeline) - waiter->timeline->removeWaiter(waiter); - - return 0; -} - bool CSyncTimeline::addWaiter(const std::function& waiter, uint64_t point, uint32_t flags) { - CFileDescriptor eventFd = CFileDescriptor{eventfd(0, EFD_CLOEXEC)}; + auto eventFd = CFileDescriptor(eventfd(0, EFD_CLOEXEC)); if (!eventFd.isValid()) { Debug::log(ERR, "CSyncTimeline::addWaiter: failed to acquire an eventfd"); @@ -103,46 +70,11 @@ bool CSyncTimeline::addWaiter(const std::function& waiter, uint64_t poin return false; } - if (eventFd.isReadable()) { - waiter(); - return true; - } - - auto w = makeShared(); - w->fn = waiter; - w->timeline = self; - w->eventFd = std::move(eventFd); - - w->source = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, w->eventFd.get(), WL_EVENT_READABLE, ::handleWaiterFD, w.get()); - if (!w->source) { - Debug::log(ERR, "CSyncTimeline::addWaiter: wl_event_loop_add_fd failed"); - return false; - } - - waiters.emplace_back(w); + g_pEventLoopManager->doOnReadable(std::move(eventFd), waiter); return true; } -void CSyncTimeline::removeWaiter(SWaiter* w) { - if (w->source) { - wl_event_source_remove(w->source); - w->source = nullptr; - } - std::erase_if(waiters, [w](const auto& e) { return e.get() == w; }); -} - -void CSyncTimeline::removeAllWaiters() { - for (auto& w : waiters) { - if (w->source) { - wl_event_source_remove(w->source); - w->source = nullptr; - } - } - - waiters.clear(); -} - CFileDescriptor CSyncTimeline::exportAsSyncFileFD(uint64_t src) { int sync = -1; diff --git a/src/helpers/sync/SyncTimeline.hpp b/src/helpers/sync/SyncTimeline.hpp index a2422149..51012c85 100644 --- a/src/helpers/sync/SyncTimeline.hpp +++ b/src/helpers/sync/SyncTimeline.hpp @@ -20,21 +20,12 @@ class CSyncTimeline { static SP create(int drmFD_, Hyprutils::OS::CFileDescriptor&& drmSyncobjFD); ~CSyncTimeline(); - struct SWaiter { - std::function fn; - wl_event_source* source = nullptr; - WP timeline; - Hyprutils::OS::CFileDescriptor eventFd; - }; - // check if the timeline point has been signaled // flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE // std::nullopt on fail std::optional check(uint64_t point, uint32_t flags); bool addWaiter(const std::function& waiter, uint64_t point, uint32_t flags); - void removeWaiter(SWaiter*); - void removeAllWaiters(); Hyprutils::OS::CFileDescriptor exportAsSyncFileFD(uint64_t src); bool importFromSyncFileFD(uint64_t dst, Hyprutils::OS::CFileDescriptor& fd); bool transfer(SP from, uint64_t fromPoint, uint64_t toPoint); @@ -47,6 +38,4 @@ class CSyncTimeline { private: CSyncTimeline() = default; - - std::vector> waiters; }; diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index 83bdf4a0..d1245bbf 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -26,6 +26,11 @@ CEventLoopManager::~CEventLoopManager() { wl_event_source_remove(eventSourceData.eventSource); } + for (auto const& w : m_vReadableWaiters) { + if (w->source != nullptr) + wl_event_source_remove(w->source); + } + if (m_sWayland.eventSource) wl_event_source_remove(m_sWayland.eventSource); if (m_sIdle.eventSource) @@ -50,6 +55,33 @@ static int configWatcherWrite(int fd, uint32_t mask, void* data) { return 0; } +static int handleWaiterFD(int fd, uint32_t mask, void* data) { + if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) { + Debug::log(ERR, "handleWaiterFD: readable waiter error"); + return 0; + } + + if (mask & WL_EVENT_READABLE) + g_pEventLoopManager->onFdReadable((CEventLoopManager::SReadableWaiter*)data); + + return 0; +} + +void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) { + auto it = std::ranges::find_if(m_vReadableWaiters, [waiter](const UP& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; }); + + if (waiter->source) { + wl_event_source_remove(waiter->source); + waiter->source = nullptr; + } + + if (waiter->fn) + waiter->fn(); + + if (it != m_vReadableWaiters.end()) + m_vReadableWaiters.erase(it); +} + void CEventLoopManager::enterLoop() { m_sWayland.eventSource = wl_event_loop_add_fd(m_sWayland.loop, m_sTimers.timerfd.get(), WL_EVENT_READABLE, timerWrite, nullptr); @@ -143,6 +175,16 @@ void CEventLoopManager::doLater(const std::function& fn) { &m_sIdle); } +void CEventLoopManager::doOnReadable(CFileDescriptor fd, const std::function& fn) { + if (!fd.isValid() || fd.isReadable()) { + fn(); + return; + } + + auto& waiter = m_vReadableWaiters.emplace_back(makeUnique(nullptr, std::move(fd), fn)); + waiter->source = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, waiter->fd.get(), WL_EVENT_READABLE, ::handleWaiterFD, waiter.get()); +} + void CEventLoopManager::syncPollFDs() { auto aqPollFDs = g_pCompositor->m_pAqBackend->getPollFDs(); diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index f240dae9..8a0e0439 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -38,6 +38,17 @@ class CEventLoopManager { std::vector> fns; }; + struct SReadableWaiter { + wl_event_source* source; + Hyprutils::OS::CFileDescriptor fd; + std::function fn; + }; + + // schedule function to when fd is readable (WL_EVENT_READABLE / POLLIN), + // takes ownership of fd + void doOnReadable(Hyprutils::OS::CFileDescriptor fd, const std::function& fn); + void onFdReadable(SReadableWaiter* waiter); + private: // Manages the event sources after AQ pollFDs change. void syncPollFDs(); @@ -58,8 +69,9 @@ class CEventLoopManager { Hyprutils::OS::CFileDescriptor timerfd; } m_sTimers; - SIdleData m_sIdle; - std::map aqEventSources; + SIdleData m_sIdle; + std::map aqEventSources; + std::vector> m_vReadableWaiters; struct { CHyprSignalListener pollFDsChanged; @@ -67,7 +79,6 @@ class CEventLoopManager { wl_event_source* m_configWatcherInotifySource = nullptr; - friend class CSyncTimeline; friend class CAsyncDialogBox; }; diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 3cc04cda..827ec311 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -10,8 +10,10 @@ #include "../../helpers/sync/SyncReleaser.hpp" #include "../PresentationTime.hpp" #include "../DRMSyncobj.hpp" +#include "../types/DMABuffer.hpp" #include "../../render/Renderer.hpp" #include "config/ConfigValue.hpp" +#include "../../managers/eventLoop/EventLoopManager.hpp" #include "protocols/types/SurfaceRole.hpp" #include "render/Texture.hpp" #include @@ -123,16 +125,15 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso return; } - if ((!pending.updated.buffer) || // no new buffer attached - (!pending.buffer && !pending.texture) || // null buffer attached - (!pending.updated.acquire && pending.buffer->isSynchronous()) // synchronous buffers (ex. shm) can be read immediately + if ((!pending.updated.buffer) || // no new buffer attached + (!pending.buffer && !pending.texture) // null buffer attached ) { commitState(pending); pending.reset(); return; } - // save state while we wait for buffer to become ready + // save state while we wait for buffer to become ready to read const auto& state = pendingStates.emplace(makeUnique(pending)); pending.reset(); @@ -152,13 +153,19 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso if (state->updated.acquire) { // wait on acquire point for this surface, from explicit sync protocol state->acquire.addWaiter(whenReadable); - } else if (state->buffer->dmabuf().success) { - // https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html#implicit-fence-poll-support - // TODO: wait for the dma-buf fd's to become readable + } else if (state->buffer->isSynchronous()) { + // synchronous (shm) buffers can be read immediately whenReadable(); + } else if (state->buffer->type() == Aquamarine::BUFFER_TYPE_DMABUF && state->buffer->dmabuf().success) { + // async buffer and is dmabuf, then we can wait on implicit fences + auto syncFd = dynamic_cast(state->buffer.buffer.get())->exportSyncFile(); + + if (syncFd.isValid()) + g_pEventLoopManager->doOnReadable(std::move(syncFd), whenReadable); + else + whenReadable(); } else { - // huh??? only buffers with acquire or dmabuf should get through here... - Debug::log(ERR, "BUG THIS: wl_surface.commit: non-acquire non-dmabuf buffers needs wait..."); + Debug::log(ERR, "BUG THIS: wl_surface.commit: no acquire, non-dmabuf, async buffer, needs wait... this shouldn't happen"); whenReadable(); } }); diff --git a/src/protocols/types/DMABuffer.cpp b/src/protocols/types/DMABuffer.cpp index 2e39bf79..d08925ff 100644 --- a/src/protocols/types/DMABuffer.cpp +++ b/src/protocols/types/DMABuffer.cpp @@ -4,6 +4,14 @@ #include "../../render/Renderer.hpp" #include "../../helpers/Format.hpp" +#if defined(__linux__) +#include +#include +#include +#endif + +using namespace Hyprutils::OS; + CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs const& attrs_) : attrs(attrs_) { g_pHyprRenderer->makeEGLCurrent(); @@ -84,3 +92,61 @@ void CDMABuffer::closeFDs() { } attrs.planes = 0; } + +static int doIoctl(int fd, unsigned long request, void* arg) { + int ret; + + do { + ret = ioctl(fd, request, arg); + } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); + return ret; +} + +// https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html#c.dma_buf_export_sync_file +// returns a sync file that will be signalled when dmabuf is ready to be read +CFileDescriptor CDMABuffer::exportSyncFile() { + if (!good()) + return {}; + +#if !defined(__linux__) + return {}; +#else + std::vector syncFds(attrs.fds.size()); + for (const auto& fd : attrs.fds) { + if (fd == -1) + continue; + + dma_buf_export_sync_file request{ + .flags = DMA_BUF_SYNC_READ, + .fd = -1, + }; + + if (doIoctl(fd, DMA_BUF_IOCTL_EXPORT_SYNC_FILE, &request) == 0) + syncFds.emplace_back(request.fd); + } + + if (syncFds.empty()) + return {}; + + CFileDescriptor syncFd; + for (auto& fd : syncFds) { + if (!syncFd.isValid()) { + syncFd = std::move(fd); + continue; + } + + struct sync_merge_data data{ + .name = "merged release fence", + .fd2 = fd.get(), + .fence = -1, + }; + + if (doIoctl(syncFd.get(), SYNC_IOC_MERGE, &data) == 0) + syncFd = CFileDescriptor(data.fence); + else + syncFd = {}; + } + + return syncFd; +#endif +} diff --git a/src/protocols/types/DMABuffer.hpp b/src/protocols/types/DMABuffer.hpp index 40c935c5..5ebf7581 100644 --- a/src/protocols/types/DMABuffer.hpp +++ b/src/protocols/types/DMABuffer.hpp @@ -1,6 +1,7 @@ #pragma once #include "Buffer.hpp" +#include class CDMABuffer : public IHLBuffer { public: @@ -16,6 +17,7 @@ class CDMABuffer : public IHLBuffer { virtual void endDataPtr(); bool good(); void closeFDs(); + Hyprutils::OS::CFileDescriptor exportSyncFile(); bool success = false; From 877fb5b93ada9b25b4d2f5ca5f69370fa345f1ac Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 16 Apr 2025 01:37:48 +0100 Subject: [PATCH 0078/1077] time: move to stl's clocks and move timer --- src/debug/HyprNotificationOverlay.hpp | 2 +- src/desktop/Window.cpp | 6 +- src/events/Windows.cpp | 4 +- src/helpers/Monitor.cpp | 21 ++-- src/helpers/Monitor.hpp | 2 +- src/helpers/Timer.cpp | 22 ---- src/helpers/Timer.hpp | 16 --- src/helpers/time/Time.cpp | 139 ++++++++++++++++++++++ src/helpers/time/Time.hpp | 25 ++++ src/helpers/time/Timer.cpp | 23 ++++ src/helpers/time/Timer.hpp | 16 +++ src/managers/AnimationManager.cpp | 2 +- src/managers/KeybindManager.hpp | 2 +- src/managers/PointerManager.cpp | 7 +- src/managers/PointerManager.hpp | 3 +- src/managers/SessionLockManager.hpp | 2 +- src/managers/TokenManager.cpp | 14 +-- src/managers/TokenManager.hpp | 11 +- src/managers/XCursorManager.cpp | 11 +- src/managers/XCursorManager.hpp | 6 +- src/managers/eventLoop/EventLoopTimer.cpp | 34 +++--- src/managers/eventLoop/EventLoopTimer.hpp | 13 +- src/managers/input/InputManager.cpp | 14 +-- src/managers/input/InputManager.hpp | 2 +- src/protocols/GlobalShortcuts.cpp | 12 +- src/protocols/PresentationTime.cpp | 20 ++-- src/protocols/PresentationTime.hpp | 5 +- src/protocols/Screencopy.cpp | 14 ++- src/protocols/Screencopy.hpp | 5 +- src/protocols/Tablet.cpp | 5 +- src/protocols/ToplevelExport.cpp | 22 ++-- src/protocols/ToplevelExport.hpp | 9 +- src/protocols/VirtualKeyboard.cpp | 6 +- src/protocols/core/Compositor.cpp | 12 +- src/protocols/core/Compositor.hpp | 7 +- src/protocols/core/DataDevice.cpp | 7 +- src/protocols/core/DataDevice.hpp | 3 +- src/protocols/core/Seat.cpp | 5 +- src/render/OpenGL.hpp | 2 +- src/render/Renderer.cpp | 57 ++++----- src/render/Renderer.hpp | 43 +++---- src/render/pass/SurfacePassElement.hpp | 3 +- src/xwayland/XSurface.cpp | 6 +- 43 files changed, 392 insertions(+), 248 deletions(-) delete mode 100644 src/helpers/Timer.cpp delete mode 100644 src/helpers/Timer.hpp create mode 100644 src/helpers/time/Time.cpp create mode 100644 src/helpers/time/Time.hpp create mode 100644 src/helpers/time/Timer.cpp create mode 100644 src/helpers/time/Timer.hpp diff --git a/src/debug/HyprNotificationOverlay.hpp b/src/debug/HyprNotificationOverlay.hpp index b04cb73b..cc4ebcc6 100644 --- a/src/debug/HyprNotificationOverlay.hpp +++ b/src/debug/HyprNotificationOverlay.hpp @@ -1,7 +1,7 @@ #pragma once #include "../defines.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" #include "../render/Texture.hpp" #include "../SharedDefs.hpp" diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 323aa03a..059453f4 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -417,10 +417,10 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { if (TOKEN) { if (*PINITIALWSTRACKING == 2) { // persistent - SInitialWorkspaceToken token = std::any_cast(TOKEN->data); + SInitialWorkspaceToken token = std::any_cast(TOKEN->m_data); if (token.primaryOwner == m_pSelf) { token.workspace = pWorkspace->getConfigName(); - TOKEN->data = token; + TOKEN->m_data = token; } } } @@ -507,7 +507,7 @@ void CWindow::onUnmap() { if (TOKEN) { if (*PINITIALWSTRACKING == 2) { // persistent token, but the first window got removed so the token is gone - SInitialWorkspaceToken token = std::any_cast(TOKEN->data); + SInitialWorkspaceToken token = std::any_cast(TOKEN->m_data); if (token.primaryOwner == m_pSelf) g_pTokenManager->removeToken(TOKEN); } diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 452e977d..2d8bdc35 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -85,7 +85,7 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto TOKEN = g_pTokenManager->getToken(SZTOKEN); if (TOKEN) { // find workspace and use it - SInitialWorkspaceToken WS = std::any_cast(TOKEN->data); + SInitialWorkspaceToken WS = std::any_cast(TOKEN->m_data); Debug::log(LOG, "HL_INITIAL_WORKSPACE_TOKEN {} -> {}", SZTOKEN, WS.workspace); @@ -99,7 +99,7 @@ void Events::listener_mapWindow(void* owner, void* data) { else if (*PINITIALWSTRACKING == 2) { // persistent if (WS.primaryOwner.expired()) { WS.primaryOwner = PWINDOW; - TOKEN->data = WS; + TOKEN->m_data = WS; } PWINDOW->m_szInitialWorkspaceToken = SZTOKEN; diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 0a16643e..5e2fedd5 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -24,6 +24,7 @@ #include "../managers/LayoutManager.hpp" #include "../managers/input/InputManager.hpp" #include "sync/SyncTimeline.hpp" +#include "time/Time.hpp" #include "../desktop/LayerSurface.hpp" #include #include "debug/Log.hpp" @@ -32,6 +33,7 @@ #include #include #include + using namespace Hyprutils::String; using namespace Hyprutils::Utils; using namespace Hyprutils::OS; @@ -72,8 +74,15 @@ void CMonitor::onConnect(bool noRule) { output->events.needsFrame.registerListener([this](std::any d) { g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEEDS_FRAME); }); listeners.presented = output->events.present.registerListener([this](std::any d) { - auto E = std::any_cast(d); - PROTO::presentation->onPresented(self.lock(), E.when, E.refresh, E.seq, E.flags); + auto E = std::any_cast(d); + + timespec* ts = E.when; + if (!ts) { + timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + PROTO::presentation->onPresented(self.lock(), Time::fromTimespec(&now), E.refresh, E.seq, E.flags); + } else + PROTO::presentation->onPresented(self.lock(), Time::fromTimespec(E.when), E.refresh, E.seq, E.flags); }); listeners.destroy = output->events.destroy.registerListener([this](std::any d) { @@ -1377,9 +1386,7 @@ bool CMonitor::attemptDirectScanout() { auto PBUFFER = PSURFACE->current.buffer.buffer; if (PBUFFER == output->state->state().buffer) { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - PSURFACE->presentFeedback(&now, self.lock()); + PSURFACE->presentFeedback(Time::steadyNow(), self.lock()); if (scanoutNeedsCursorUpdate) { if (!state.test()) { @@ -1420,9 +1427,7 @@ bool CMonitor::attemptDirectScanout() { return false; } - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - PSURFACE->presentFeedback(&now, self.lock()); + PSURFACE->presentFeedback(Time::steadyNow(), self.lock()); output->state->addDamage(PSURFACE->current.accumulateBufferDamage()); output->state->resetExplicitFences(); diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index a7d97c8d..2ce6b626 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -9,7 +9,7 @@ #include #include -#include "Timer.hpp" +#include "time/Timer.hpp" #include "math/Math.hpp" #include #include "../protocols/types/ColorManagement.hpp" diff --git a/src/helpers/Timer.cpp b/src/helpers/Timer.cpp deleted file mode 100644 index e00c5918..00000000 --- a/src/helpers/Timer.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "Timer.hpp" -#include - -void CTimer::reset() { - m_tpLastReset = std::chrono::steady_clock::now(); -} - -std::chrono::steady_clock::duration CTimer::getDuration() { - return std::chrono::steady_clock::now() - m_tpLastReset; -} - -float CTimer::getMillis() { - return std::chrono::duration_cast(getDuration()).count() / 1000.f; -} - -float CTimer::getSeconds() { - return std::chrono::duration_cast(getDuration()).count() / 1000.f; -} - -const std::chrono::steady_clock::time_point& CTimer::chrono() const { - return m_tpLastReset; -} \ No newline at end of file diff --git a/src/helpers/Timer.hpp b/src/helpers/Timer.hpp deleted file mode 100644 index a58225d0..00000000 --- a/src/helpers/Timer.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include - -class CTimer { - public: - void reset(); - float getSeconds(); - float getMillis(); - const std::chrono::steady_clock::time_point& chrono() const; - - private: - std::chrono::steady_clock::time_point m_tpLastReset; - - std::chrono::steady_clock::duration getDuration(); -}; \ No newline at end of file diff --git a/src/helpers/time/Time.cpp b/src/helpers/time/Time.cpp new file mode 100644 index 00000000..791f5ea1 --- /dev/null +++ b/src/helpers/time/Time.cpp @@ -0,0 +1,139 @@ +#include "Time.hpp" + +#define chr std::chrono +#define TIMESPEC_NSEC_PER_SEC 1000000000L + +using s_ns = std::pair; + +// HAS to be a > b +static s_ns timediff(const s_ns& a, const s_ns& b) { + s_ns d; + + d.first = a.first - b.first; + if (a.second >= b.second) + d.second = a.second - b.second; + else { + d.second = b.second - a.second; + d.first -= 1; + } + + return d; +} + +static s_ns timeadd(const s_ns& a, const s_ns& b) { + s_ns d; + + d.first = a.first + b.first; + if (a.second + b.second >= TIMESPEC_NSEC_PER_SEC) { + d.second = a.second + b.second - TIMESPEC_NSEC_PER_SEC; + d.first += 1; + } else + d.second = a.second + b.second; + + return d; +} + +Time::steady_tp Time::steadyNow() { + return chr::steady_clock::now(); +} + +Time::system_tp Time::systemNow() { + return chr::system_clock::now(); +} + +uint64_t Time::millis(const steady_tp& tp) { + return chr::duration_cast(tp.time_since_epoch()).count(); +} + +s_ns Time::secNsec(const steady_tp& tp) { + const uint64_t sec = chr::duration_cast(tp.time_since_epoch()).count(); + const chr::steady_clock::duration nsecdur = tp - chr::steady_clock::time_point(chr::seconds(sec)); + return std::make_pair<>(sec, chr::duration_cast(nsecdur).count()); +} + +uint64_t Time::millis(const system_tp& tp) { + return chr::duration_cast(tp.time_since_epoch()).count(); +} + +s_ns Time::secNsec(const system_tp& tp) { + const uint64_t sec = chr::duration_cast(tp.time_since_epoch()).count(); + const chr::steady_clock::duration nsecdur = tp - chr::system_clock::time_point(chr::seconds(sec)); + return std::make_pair<>(sec, chr::duration_cast(nsecdur).count()); +} + +// TODO: this is a mess, but C++ doesn't define what steady_clock is. +// At least on Linux, system_clock == CLOCK_REALTIME +// and steady_clock == CLOCK_MONOTONIC, +// or at least it seems so with gcc and gcc's stl. +// but, since we can't *ever* be sure, we have to guess. +// In general, this may shift the time around by a couple hundred ns. Doesn't matter, realistically. + +Time::steady_tp Time::fromTimespec(const timespec* ts) { + struct timespec mono, real; + clock_gettime(CLOCK_MONOTONIC, &mono); + clock_gettime(CLOCK_REALTIME, &real); + Time::steady_tp now = Time::steadyNow(); + Time::system_tp nowSys = Time::systemNow(); + s_ns stdSteady, stdReal; + stdSteady = Time::secNsec(now); + stdReal = Time::secNsec(nowSys); + + // timespec difference, REAL - MONO + s_ns diff; + diff.first = real.tv_sec - mono.tv_sec; + if (real.tv_nsec >= mono.tv_nsec) + diff.second = real.tv_nsec - mono.tv_nsec; + else { + diff.second = mono.tv_nsec - real.tv_nsec; + diff.first -= 1; + } + + // STD difference, REAL - MONO + s_ns diff2 = timediff(stdReal, stdSteady); + + s_ns diffFinal; + s_ns monotime = {ts->tv_sec, ts->tv_nsec}; + + if (diff.first >= diff2.first || (diff.first == diff2.first && diff.second >= diff2.second)) + diffFinal = timediff(diff, diff2); + else + diffFinal = timediff(diff2, diff); + + auto sum = timeadd(monotime, diffFinal); + return chr::steady_clock::time_point(std::chrono::seconds(sum.first)) + chr::nanoseconds(sum.second); +} + +struct timespec Time::toTimespec(const steady_tp& tp) { + struct timespec mono, real; + clock_gettime(CLOCK_MONOTONIC, &mono); + clock_gettime(CLOCK_REALTIME, &real); + Time::steady_tp now = Time::steadyNow(); + Time::system_tp nowSys = Time::systemNow(); + s_ns stdSteady, stdReal; + stdSteady = Time::secNsec(now); + stdReal = Time::secNsec(nowSys); + + // timespec difference, REAL - MONO + s_ns diff; + diff.first = real.tv_sec - mono.tv_sec; + if (real.tv_nsec >= mono.tv_nsec) + diff.second = real.tv_nsec - mono.tv_nsec; + else { + diff.second = mono.tv_nsec - real.tv_nsec; + diff.first -= 1; + } + + // STD difference, REAL - MONO + s_ns diff2 = timediff(stdReal, stdSteady); + + s_ns diffFinal; + s_ns tpTime = secNsec(tp); + + if (diff.first >= diff2.first || (diff.first == diff2.first && diff.second >= diff2.second)) + diffFinal = timediff(diff, diff2); + else + diffFinal = timediff(diff2, diff); + + auto sum = timeadd(tpTime, diffFinal); + return timespec{.tv_sec = sum.first, .tv_nsec = sum.second}; +} diff --git a/src/helpers/time/Time.hpp b/src/helpers/time/Time.hpp new file mode 100644 index 00000000..eb3b5771 --- /dev/null +++ b/src/helpers/time/Time.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include +#include + +//NOLINTNEXTLINE +namespace Time { + using steady_tp = std::chrono::steady_clock::time_point; + using system_tp = std::chrono::system_clock::time_point; + using steady_dur = std::chrono::steady_clock::duration; + using system_dur = std::chrono::system_clock::duration; + + steady_tp steadyNow(); + system_tp systemNow(); + + steady_tp fromTimespec(const timespec*); + struct timespec toTimespec(const steady_tp& tp); + + uint64_t millis(const steady_tp& tp); + uint64_t millis(const system_tp& tp); + std::pair secNsec(const steady_tp& tp); + std::pair secNsec(const system_tp& tp); +}; \ No newline at end of file diff --git a/src/helpers/time/Timer.cpp b/src/helpers/time/Timer.cpp new file mode 100644 index 00000000..95f75441 --- /dev/null +++ b/src/helpers/time/Timer.cpp @@ -0,0 +1,23 @@ +#include "Timer.hpp" + +#define chr std::chrono + +void CTimer::reset() { + m_lastReset = Time::steadyNow(); +} + +Time::steady_dur CTimer::getDuration() { + return Time::steadyNow() - m_lastReset; +} + +float CTimer::getMillis() { + return chr::duration_cast(getDuration()).count() / 1000.F; +} + +float CTimer::getSeconds() { + return chr::duration_cast(getDuration()).count() / 1000.F; +} + +const Time::steady_tp& CTimer::chrono() const { + return m_lastReset; +} \ No newline at end of file diff --git a/src/helpers/time/Timer.hpp b/src/helpers/time/Timer.hpp new file mode 100644 index 00000000..c21f78db --- /dev/null +++ b/src/helpers/time/Timer.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Time.hpp" + +class CTimer { + public: + void reset(); + float getSeconds(); + float getMillis(); + const Time::steady_tp& chrono() const; + + private: + Time::steady_tp m_lastReset; + + Time::steady_dur getDuration(); +}; \ No newline at end of file diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 18dae2a4..d3b4ab22 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -264,7 +264,7 @@ void CHyprAnimationManager::scheduleTick() { float refreshDelayMs = std::floor(1000.f / PMOSTHZ->refreshRate); - const float SINCEPRES = std::chrono::duration_cast(std::chrono::steady_clock::now() - PMOSTHZ->lastPresentationTimer.chrono()).count() / 1000.f; + const float SINCEPRES = std::chrono::duration_cast(Time::steadyNow() - PMOSTHZ->lastPresentationTimer.chrono()).count() / 1000.F; const auto TOPRES = std::clamp(refreshDelayMs - SINCEPRES, 1.1f, 1000.f); // we can't send 0, that will disarm it diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 0040d761..ede16402 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -8,7 +8,7 @@ #include #include "../devices/IPointer.hpp" #include "eventLoop/EventLoopTimer.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" class CInputManager; class CConfigManager; diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index e116aa96..c16650be 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -15,6 +15,7 @@ #include "../render/Renderer.hpp" #include "../render/OpenGL.hpp" #include "SeatManager.hpp" +#include "../helpers/time/Time.hpp" #include #include #include @@ -160,9 +161,7 @@ void CPointerManager::setCursorSurface(SP surf, const Vector2D& hots if (surf->resource()->current.texture) { currentCursorImage.size = surf->resource()->current.bufferSize; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - surf->resource()->frame(&now); + surf->resource()->frame(Time::steadyNow()); } } @@ -592,7 +591,7 @@ SP CPointerManager::renderHWCursorBuffer(SP overridePos) { +void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos) { if (!hasCursor()) return; diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index 4bdd309c..10726bc6 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -6,6 +6,7 @@ #include "../helpers/math/Math.hpp" #include "../desktop/WLSurface.hpp" #include "../helpers/sync/SyncTimeline.hpp" +#include "../helpers/time/Time.hpp" #include class CMonitor; @@ -48,7 +49,7 @@ class CPointerManager { void unlockSoftwareAll(); bool softwareLockedFor(PHLMONITOR pMonitor); - void renderSoftwareCursorsFor(PHLMONITOR pMonitor, timespec* now, CRegion& damage /* logical */, std::optional overridePos = {} /* monitor-local */); + void renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage /* logical */, std::optional overridePos = {} /* monitor-local */); // this is needed e.g. during screensharing where // the software cursors aren't locked during the cursor move, but they diff --git a/src/managers/SessionLockManager.hpp b/src/managers/SessionLockManager.hpp index 51d4cefb..b80da2fd 100644 --- a/src/managers/SessionLockManager.hpp +++ b/src/managers/SessionLockManager.hpp @@ -1,7 +1,7 @@ #pragma once #include "../defines.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" #include "../helpers/signal/Signal.hpp" #include #include diff --git a/src/managers/TokenManager.cpp b/src/managers/TokenManager.cpp index 5efa2eb8..446b87ce 100644 --- a/src/managers/TokenManager.cpp +++ b/src/managers/TokenManager.cpp @@ -2,12 +2,12 @@ #include #include -CUUIDToken::CUUIDToken(const std::string& uuid_, std::any data_, std::chrono::steady_clock::duration expires) : data(data_), uuid(uuid_) { - expiresAt = std::chrono::steady_clock::now() + expires; +CUUIDToken::CUUIDToken(const std::string& uuid_, std::any data_, Time::steady_dur expires) : m_data(data_), m_uuid(uuid_) { + m_expiresAt = Time::steadyNow() + expires; } std::string CUUIDToken::getUUID() { - return uuid; + return m_uuid; } std::string CTokenManager::getRandomUUID() { @@ -23,7 +23,7 @@ std::string CTokenManager::getRandomUUID() { return uuid; } -std::string CTokenManager::registerNewToken(std::any data, std::chrono::steady_clock::duration expires) { +std::string CTokenManager::registerNewToken(std::any data, Time::steady_dur expires) { std::string uuid = getRandomUUID(); m_mTokens[uuid] = makeShared(uuid, data, expires); @@ -33,8 +33,8 @@ std::string CTokenManager::registerNewToken(std::any data, std::chrono::steady_c SP CTokenManager::getToken(const std::string& uuid) { // cleanup expired tokens - const auto NOW = std::chrono::steady_clock::now(); - std::erase_if(m_mTokens, [&NOW](const auto& el) { return el.second->expiresAt < NOW; }); + const auto NOW = Time::steadyNow(); + std::erase_if(m_mTokens, [&NOW](const auto& el) { return el.second->m_expiresAt < NOW; }); if (!m_mTokens.contains(uuid)) return {}; @@ -45,5 +45,5 @@ SP CTokenManager::getToken(const std::string& uuid) { void CTokenManager::removeToken(SP token) { if (!token) return; - m_mTokens.erase(token->uuid); + m_mTokens.erase(token->m_uuid); } diff --git a/src/managers/TokenManager.hpp b/src/managers/TokenManager.hpp index aaf068bc..cccb9bd9 100644 --- a/src/managers/TokenManager.hpp +++ b/src/managers/TokenManager.hpp @@ -1,24 +1,23 @@ #pragma once -#include #include #include #include #include "../helpers/memory/Memory.hpp" +#include "../helpers/time/Time.hpp" class CUUIDToken { public: - CUUIDToken(const std::string& uuid_, std::any data_, std::chrono::steady_clock::duration expires); + CUUIDToken(const std::string& uuid_, std::any data_, Time::steady_dur expires); std::string getUUID(); - std::any data; + std::any m_data; private: - std::string uuid; - - std::chrono::steady_clock::time_point expiresAt; + std::string m_uuid; + Time::steady_tp m_expiresAt; friend class CTokenManager; }; diff --git a/src/managers/XCursorManager.cpp b/src/managers/XCursorManager.cpp index 0f0c9e80..198bc2a5 100644 --- a/src/managers/XCursorManager.cpp +++ b/src/managers/XCursorManager.cpp @@ -1,3 +1,9 @@ +#define Time XTime__ +extern "C" { +#include +} +#undef Time + #include #include #include @@ -176,8 +182,9 @@ SP CXCursorManager::getShape(std::string const& shape, int size, floa return defaultCursor; } -SP CXCursorManager::createCursor(std::string const& shape, XcursorImages* xImages) { - auto xcursor = makeShared(); +SP CXCursorManager::createCursor(std::string const& shape, void* ximages) { + auto xcursor = makeShared(); + XcursorImages* xImages = (XcursorImages*)ximages; for (int i = 0; i < xImages->nimage; i++) { auto xImage = xImages->images[i]; diff --git a/src/managers/XCursorManager.hpp b/src/managers/XCursorManager.hpp index 3052206f..8e804a0c 100644 --- a/src/managers/XCursorManager.hpp +++ b/src/managers/XCursorManager.hpp @@ -7,10 +7,6 @@ #include #include "helpers/memory/Memory.hpp" -extern "C" { -#include -} - // gangsta bootleg XCursor impl. adidas balkanized struct SXCursorImage { Hyprutils::Math::Vector2D size; @@ -34,7 +30,7 @@ class CXCursorManager { void syncGsettings(); private: - SP createCursor(std::string const& shape, XcursorImages* xImages); + SP createCursor(std::string const& shape, void* /* XcursorImages* */ xImages); std::set themePaths(std::string const& theme); std::string getLegacyShapeName(std::string const& shape); std::vector> loadStandardCursors(std::string const& name, int size); diff --git a/src/managers/eventLoop/EventLoopTimer.cpp b/src/managers/eventLoop/EventLoopTimer.cpp index b8943b7c..d4633b0d 100644 --- a/src/managers/eventLoop/EventLoopTimer.cpp +++ b/src/managers/eventLoop/EventLoopTimer.cpp @@ -1,55 +1,55 @@ #include "EventLoopTimer.hpp" #include #include "EventLoopManager.hpp" +#include "../../helpers/time/Time.hpp" -CEventLoopTimer::CEventLoopTimer(std::optional timeout, std::function self, void* data)> cb_, void* data_) : - cb(cb_), data(data_) { +CEventLoopTimer::CEventLoopTimer(std::optional timeout, std::function self, void* data)> cb_, void* data_) : m_cb(cb_), m_data(data_) { if (!timeout.has_value()) - expires.reset(); + m_expires.reset(); else - expires = std::chrono::steady_clock::now() + *timeout; + m_expires = Time::steadyNow() + *timeout; } -void CEventLoopTimer::updateTimeout(std::optional timeout) { +void CEventLoopTimer::updateTimeout(std::optional timeout) { if (!timeout.has_value()) { - expires.reset(); + m_expires.reset(); g_pEventLoopManager->nudgeTimers(); return; } - expires = std::chrono::steady_clock::now() + *timeout; + m_expires = Time::steadyNow() + *timeout; g_pEventLoopManager->nudgeTimers(); } bool CEventLoopTimer::passed() { - if (!expires.has_value()) + if (!m_expires.has_value()) return false; - return std::chrono::steady_clock::now() > *expires; + return Time::steadyNow() > *m_expires; } void CEventLoopTimer::cancel() { - wasCancelled = true; - expires.reset(); + m_wasCancelled = true; + m_expires.reset(); } bool CEventLoopTimer::cancelled() { - return wasCancelled; + return m_wasCancelled; } void CEventLoopTimer::call(SP self) { - expires.reset(); - cb(self, data); + m_expires.reset(); + m_cb(self, m_data); } float CEventLoopTimer::leftUs() { - if (!expires.has_value()) + if (!m_expires.has_value()) return std::numeric_limits::max(); - return std::chrono::duration_cast(*expires - std::chrono::steady_clock::now()).count(); + return std::chrono::duration_cast(*m_expires - Time::steadyNow()).count(); } bool CEventLoopTimer::armed() { - return expires.has_value(); + return m_expires.has_value(); } diff --git a/src/managers/eventLoop/EventLoopTimer.hpp b/src/managers/eventLoop/EventLoopTimer.hpp index e5a8c5e3..d093cd6e 100644 --- a/src/managers/eventLoop/EventLoopTimer.hpp +++ b/src/managers/eventLoop/EventLoopTimer.hpp @@ -5,14 +5,15 @@ #include #include "../../helpers/memory/Memory.hpp" +#include "../../helpers/time/Time.hpp" class CEventLoopTimer { public: - CEventLoopTimer(std::optional timeout, std::function self, void* data)> cb_, void* data_); + CEventLoopTimer(std::optional timeout, std::function self, void* data)> cb_, void* data_); // if not specified, disarms. // if specified, arms. - void updateTimeout(std::optional timeout); + void updateTimeout(std::optional timeout); void cancel(); bool passed(); @@ -25,8 +26,8 @@ class CEventLoopTimer { void call(SP self); private: - std::function self, void* data)> cb; - void* data = nullptr; - std::optional expires; - bool wasCancelled = false; + std::function self, void* data)> m_cb; + void* m_data = nullptr; + std::optional m_expires; + bool m_wasCancelled = false; }; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 4c5de729..0665e0d2 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -36,6 +36,8 @@ #include "../../managers/EventManager.hpp" #include "../../managers/LayoutManager.hpp" +#include "../../helpers/time/Time.hpp" + #include CInputManager::CInputManager() { @@ -142,10 +144,8 @@ void CInputManager::onMouseWarp(IPointer::SMotionAbsoluteEvent e) { } void CInputManager::simulateMouseMovement() { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); m_vLastCursorPosFloored = m_vLastCursorPosFloored - Vector2D(1, 1); // hack: force the mouseMoveUnified to report without making this a refocus. - mouseMoveUnified(now.tv_sec * 1000 + now.tv_nsec / 10000000); + mouseMoveUnified(Time::millis(Time::steadyNow())); } void CInputManager::sendMotionEventsToFocused() { @@ -156,9 +156,6 @@ void CInputManager::sendMotionEventsToFocused() { const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_pLastFocus.lock()); const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_pLastFocus.lock()); - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition->goal() : (PLS ? Vector2D{PLS->geometry.x, PLS->geometry.y} : Vector2D{})); m_bEmptyFocusCursorSet = false; @@ -1746,11 +1743,8 @@ void CInputManager::releaseAllMouseButtons() { if (PROTO::data->dndActive()) return; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - for (auto const& mb : buttonsCopy) { - g_pSeatManager->sendPointerButton(now.tv_sec * 1000 + now.tv_nsec / 1000000, mb, WL_POINTER_BUTTON_STATE_RELEASED); + g_pSeatManager->sendPointerButton(Time::millis(Time::steadyNow()), mb, WL_POINTER_BUTTON_STATE_RELEASED); } m_lCurrentlyHeldButtons.clear(); diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index 406e1845..62483c41 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -4,7 +4,7 @@ #include #include #include "../../helpers/WLClasses.hpp" -#include "../../helpers/Timer.hpp" +#include "../../helpers/time/Timer.hpp" #include "InputMethodRelay.hpp" #include "../../helpers/signal/Signal.hpp" #include "../../devices/IPointer.hpp" diff --git a/src/protocols/GlobalShortcuts.cpp b/src/protocols/GlobalShortcuts.cpp index 9f8f422c..04e4e091 100644 --- a/src/protocols/GlobalShortcuts.cpp +++ b/src/protocols/GlobalShortcuts.cpp @@ -1,4 +1,5 @@ #include "GlobalShortcuts.hpp" +#include "../helpers/time/Time.hpp" CShortcutClient::CShortcutClient(SP resource_) : resource(resource_) { if UNLIKELY (!good()) @@ -68,14 +69,13 @@ void CGlobalShortcutsProtocol::sendGlobalShortcutEvent(std::string appid, std::s for (auto const& c : m_vClients) { for (auto const& sh : c->shortcuts) { if (sh->appid == appid && sh->id == trigger) { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - uint32_t tvSecHi = (sizeof(now.tv_sec) > 4) ? now.tv_sec >> 32 : 0; - uint32_t tvSecLo = now.tv_sec & 0xFFFFFFFF; + const auto [sec, nsec] = Time::secNsec(Time::steadyNow()); + uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; + uint32_t tvSecLo = sec & 0xFFFFFFFF; if (pressed) - sh->resource->sendPressed(tvSecHi, tvSecLo, now.tv_nsec); + sh->resource->sendPressed(tvSecHi, tvSecLo, nsec); else - sh->resource->sendReleased(tvSecHi, tvSecLo, now.tv_nsec); + sh->resource->sendReleased(tvSecHi, tvSecLo, nsec); } } } diff --git a/src/protocols/PresentationTime.cpp b/src/protocols/PresentationTime.cpp index 05fda8ea..b8f06cd3 100644 --- a/src/protocols/PresentationTime.cpp +++ b/src/protocols/PresentationTime.cpp @@ -40,7 +40,7 @@ bool CPresentationFeedback::good() { return resource->resource(); } -void CPresentationFeedback::sendQueued(SP data, timespec* when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { +void CPresentationFeedback::sendQueued(SP data, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { auto client = resource->client(); if LIKELY (PROTO::outputs.contains(data->pMonitor->szName)) { @@ -58,12 +58,14 @@ void CPresentationFeedback::sendQueued(SP data, timespe if (reportedFlags & Aquamarine::IOutput::AQ_OUTPUT_PRESENT_HW_COMPLETION) flags |= WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION; - time_t tv_sec = 0; + const auto TIMESPEC = Time::toTimespec(when); + + time_t tv_sec = 0; if (sizeof(time_t) > 4) - tv_sec = when->tv_sec >> 32; + tv_sec = TIMESPEC.tv_sec >> 32; if (data->wasPresented) - resource->sendPresented((uint32_t)tv_sec, (uint32_t)(when->tv_sec & 0xFFFFFFFF), (uint32_t)(when->tv_nsec), untilRefreshNs, (uint32_t)(seq >> 32), + resource->sendPresented((uint32_t)tv_sec, (uint32_t)(TIMESPEC.tv_sec & 0xFFFFFFFF), (uint32_t)(TIMESPEC.tv_nsec), untilRefreshNs, (uint32_t)(seq >> 32), (uint32_t)(seq & 0xFFFFFFFF), (wpPresentationFeedbackKind)flags); else resource->sendDiscarded(); @@ -107,15 +109,7 @@ void CPresentationProtocol::onGetFeedback(CWpPresentation* pMgr, wl_resource* su } } -void CPresentationProtocol::onPresented(PHLMONITOR pMonitor, timespec* when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { - timespec now; - timespec* presentedAt = when; - if (!presentedAt) { - // just put the current time, we don't have anything better - clock_gettime(CLOCK_MONOTONIC, &now); - when = &now; - } - +void CPresentationProtocol::onPresented(PHLMONITOR pMonitor, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { for (auto const& feedback : m_vFeedbacks) { if (!feedback->surface) continue; diff --git a/src/protocols/PresentationTime.hpp b/src/protocols/PresentationTime.hpp index 03b59b89..aa93068b 100644 --- a/src/protocols/PresentationTime.hpp +++ b/src/protocols/PresentationTime.hpp @@ -4,6 +4,7 @@ #include #include "WaylandProtocol.hpp" #include "presentation-time.hpp" +#include "../helpers/time/Time.hpp" class CMonitor; class CWLSurfaceResource; @@ -36,7 +37,7 @@ class CPresentationFeedback { bool good(); - void sendQueued(SP data, timespec* when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags); + void sendQueued(SP data, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags); private: SP resource; @@ -52,7 +53,7 @@ class CPresentationProtocol : public IWaylandProtocol { virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); - void onPresented(PHLMONITOR pMonitor, timespec* when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags); + void onPresented(PHLMONITOR pMonitor, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags); void queueData(SP data); private: diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index d5a5f816..11aa5957 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -11,6 +11,7 @@ #include "types/WLBuffer.hpp" #include "types/Buffer.hpp" #include "../helpers/Format.hpp" +#include "../helpers/time/Time.hpp" #include #include @@ -166,10 +167,9 @@ void CScreencopyFrame::share() { if (!buffer || !pMonitor) return; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + const auto NOW = Time::steadyNow(); - auto callback = [this, now, weak = self](bool success) { + auto callback = [this, NOW, weak = self](bool success) { if (weak.expired()) return; @@ -185,9 +185,11 @@ void CScreencopyFrame::share() { resource->sendDamage(0, 0, buffer->size.x, buffer->size.y); } - uint32_t tvSecHi = (sizeof(now.tv_sec) > 4) ? now.tv_sec >> 32 : 0; - uint32_t tvSecLo = now.tv_sec & 0xFFFFFFFF; - resource->sendReady(tvSecHi, tvSecLo, now.tv_nsec); + const auto [sec, nsec] = Time::secNsec(NOW); + + uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; + uint32_t tvSecLo = sec & 0xFFFFFFFF; + resource->sendReady(tvSecHi, tvSecLo, nsec); }; if (bufferDMA) diff --git a/src/protocols/Screencopy.hpp b/src/protocols/Screencopy.hpp index 99dbcc2b..2d3ccab0 100644 --- a/src/protocols/Screencopy.hpp +++ b/src/protocols/Screencopy.hpp @@ -8,7 +8,8 @@ #include #include #include "../managers/HookSystemManager.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" +#include "../helpers/time/Time.hpp" #include "../managers/eventLoop/EventLoopTimer.hpp" #include @@ -102,7 +103,7 @@ class CScreencopyProtocol : public IWaylandProtocol { void shareFrame(CScreencopyFrame* frame); void sendFrameDamage(CScreencopyFrame* frame); bool copyFrameDmabuf(CScreencopyFrame* frame); - bool copyFrameShm(CScreencopyFrame* frame, timespec* now); + bool copyFrameShm(CScreencopyFrame* frame, const Time::steady_tp& now); friend class CScreencopyFrame; friend class CScreencopyClient; diff --git a/src/protocols/Tablet.cpp b/src/protocols/Tablet.cpp index de2ed71b..449fb576 100644 --- a/src/protocols/Tablet.cpp +++ b/src/protocols/Tablet.cpp @@ -3,6 +3,7 @@ #include "../Compositor.hpp" #include "../managers/SeatManager.hpp" #include "../managers/input/InputManager.hpp" +#include "../helpers/time/Time.hpp" #include "core/Seat.hpp" #include "core/Compositor.hpp" #include @@ -222,9 +223,7 @@ void CTabletToolV2Resource::sendFrame(bool removeSource) { if (!current) return; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - resource->sendFrame(now.tv_sec * 1000 + now.tv_nsec / 1000000); + resource->sendFrame(Time::millis(Time::steadyNow())); } CTabletSeat::CTabletSeat(SP resource_) : resource(resource_) { diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 8f18afbc..fc0dc9d5 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -205,16 +205,13 @@ void CToplevelExportFrame::share() { if (!buffer || !validMapped(pWindow)) return; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - if (bufferDMA) { - if (!copyDmabuf(&now)) { + if (!copyDmabuf(Time::steadyNow())) { resource->sendFailed(); return; } } else { - if (!copyShm(&now)) { + if (!copyShm(Time::steadyNow())) { resource->sendFailed(); return; } @@ -222,16 +219,17 @@ void CToplevelExportFrame::share() { resource->sendFlags((hyprlandToplevelExportFrameV1Flags)0); - if (!m_ignoreDamage) { + if (!m_ignoreDamage) resource->sendDamage(0, 0, box.width, box.height); - } - uint32_t tvSecHi = (sizeof(now.tv_sec) > 4) ? now.tv_sec >> 32 : 0; - uint32_t tvSecLo = now.tv_sec & 0xFFFFFFFF; - resource->sendReady(tvSecHi, tvSecLo, now.tv_nsec); + const auto [sec, nsec] = Time::secNsec(Time::steadyNow()); + + uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; + uint32_t tvSecLo = sec & 0xFFFFFFFF; + resource->sendReady(tvSecHi, tvSecLo, nsec); } -bool CToplevelExportFrame::copyShm(timespec* now) { +bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); auto shm = buffer->shm(); auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm @@ -329,7 +327,7 @@ bool CToplevelExportFrame::copyShm(timespec* now) { return true; } -bool CToplevelExportFrame::copyDmabuf(timespec* now) { +bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); const auto PMONITOR = pWindow->m_pMonitor.lock(); diff --git a/src/protocols/ToplevelExport.hpp b/src/protocols/ToplevelExport.hpp index 21aafde5..907f6236 100644 --- a/src/protocols/ToplevelExport.hpp +++ b/src/protocols/ToplevelExport.hpp @@ -4,6 +4,7 @@ #include "hyprland-toplevel-export-v1.hpp" #include "WaylandProtocol.hpp" #include "Screencopy.hpp" +#include "../helpers/time/Time.hpp" #include @@ -62,8 +63,8 @@ class CToplevelExportFrame { CBox box = {}; void copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resource* buffer, int32_t ignoreDamage); - bool copyDmabuf(timespec* now); - bool copyShm(timespec* now); + bool copyDmabuf(const Time::steady_tp& now); + bool copyShm(const Time::steady_tp& now); void share(); bool shouldOverlayCursor() const; @@ -87,8 +88,8 @@ class CToplevelExportProtocol : IWaylandProtocol { std::vector> m_vFramesAwaitingWrite; void shareFrame(CToplevelExportFrame* frame); - bool copyFrameDmabuf(CToplevelExportFrame* frame, timespec* now); - bool copyFrameShm(CToplevelExportFrame* frame, timespec* now); + bool copyFrameDmabuf(CToplevelExportFrame* frame, const Time::steady_tp& now); + bool copyFrameShm(CToplevelExportFrame* frame, const Time::steady_tp& now); void sendDamage(CToplevelExportFrame* frame); friend class CToplevelExportClient; diff --git a/src/protocols/VirtualKeyboard.cpp b/src/protocols/VirtualKeyboard.cpp index 00aca041..e57d66c8 100644 --- a/src/protocols/VirtualKeyboard.cpp +++ b/src/protocols/VirtualKeyboard.cpp @@ -1,6 +1,7 @@ #include "VirtualKeyboard.hpp" #include #include "../devices/IKeyboard.hpp" +#include "../helpers/time/Time.hpp" using namespace Hyprutils::OS; CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP resource_) : resource(resource_) { @@ -103,12 +104,9 @@ wl_client* CVirtualKeyboardV1Resource::client() { } void CVirtualKeyboardV1Resource::releasePressed() { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - for (auto const& p : pressed) { events.key.emit(IKeyboard::SKeyEvent{ - .timeMs = now.tv_sec * 1000 + now.tv_nsec / 1000000, + .timeMs = Time::millis(Time::steadyNow()), .keycode = p, .state = WL_KEYBOARD_KEY_STATE_RELEASED, }); diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 827ec311..23b14dd3 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -33,8 +33,8 @@ bool CWLCallbackResource::good() { return resource->resource(); } -void CWLCallbackResource::send(timespec* now) { - resource->sendDone(now->tv_sec * 1000 + now->tv_nsec / 1000000); +void CWLCallbackResource::send(const Time::steady_tp& now) { + resource->sendDone(Time::millis(now)); } CWLRegionResource::CWLRegionResource(SP resource_) : resource(resource_) { @@ -323,7 +323,7 @@ void CWLSurfaceResource::sendPreferredScale(int32_t scale) { resource->sendPreferredBufferScale(scale); } -void CWLSurfaceResource::frame(timespec* now) { +void CWLSurfaceResource::frame(const Time::steady_tp& now) { if (callbacks.empty()) return; @@ -436,9 +436,7 @@ void CWLSurfaceResource::map() { mapped = true; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - frame(&now); + frame(Time::steadyNow()); current.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; @@ -565,7 +563,7 @@ void CWLSurfaceResource::updateCursorShm(CRegion damage) { } } -void CWLSurfaceResource::presentFeedback(timespec* when, PHLMONITOR pMonitor, bool discarded) { +void CWLSurfaceResource::presentFeedback(const Time::steady_tp& when, PHLMONITOR pMonitor, bool discarded) { frame(when); auto FEEDBACK = makeShared(self.lock()); FEEDBACK->attachMonitor(pMonitor); diff --git a/src/protocols/core/Compositor.hpp b/src/protocols/core/Compositor.hpp index ccfcf0cc..7415b4f5 100644 --- a/src/protocols/core/Compositor.hpp +++ b/src/protocols/core/Compositor.hpp @@ -16,6 +16,7 @@ #include "wayland.hpp" #include "../../helpers/signal/Signal.hpp" #include "../../helpers/math/Math.hpp" +#include "../../helpers/time/Time.hpp" #include "../types/Buffer.hpp" #include "../types/SurfaceRole.hpp" #include "../types/SurfaceState.hpp" @@ -36,7 +37,7 @@ class CWLCallbackResource { CWLCallbackResource(SP resource_); bool good(); - void send(timespec* now); + void send(const Time::steady_tp& now); private: SP resource; @@ -69,7 +70,7 @@ class CWLSurfaceResource { void leave(PHLMONITOR monitor); void sendPreferredTransform(wl_output_transform t); void sendPreferredScale(int32_t scale); - void frame(timespec* now); + void frame(const Time::steady_tp& now); uint32_t id(); void map(); void unmap(); @@ -104,7 +105,7 @@ class CWLSurfaceResource { void breadthfirst(std::function, const Vector2D&, void*)> fn, void* data); SP findFirstPreorder(std::function)> fn); - void presentFeedback(timespec* when, PHLMONITOR pMonitor, bool discarded = false); + void presentFeedback(const Time::steady_tp& when, PHLMONITOR pMonitor, bool discarded = false); void commitState(SSurfaceState& state); // returns a pair: found surface (null if not found) and surface local coords. diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index d1a98fb5..2915be75 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -604,10 +604,7 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource if (!box.has_value()) return; - timespec timeNow; - clock_gettime(CLOCK_MONOTONIC, &timeNow); - - dnd.focusedDevice->sendMotion(timeNow.tv_sec * 1000 + timeNow.tv_nsec / 1000000, V - box->pos()); + dnd.focusedDevice->sendMotion(Time::millis(Time::steadyNow()), V - box->pos()); LOGM(LOG, "Drag motion {}", V - box->pos()); } }); @@ -802,7 +799,7 @@ void CWLDataDeviceProtocol::abortDrag() { g_pSeatManager->resendEnterEvents(); } -void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, timespec* when) { +void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, const Time::steady_tp& when) { if (!dnd.dndSurface || !dnd.dndSurface->current.texture) return; diff --git a/src/protocols/core/DataDevice.hpp b/src/protocols/core/DataDevice.hpp index fa5de091..0c53111b 100644 --- a/src/protocols/core/DataDevice.hpp +++ b/src/protocols/core/DataDevice.hpp @@ -15,6 +15,7 @@ #include "wayland.hpp" #include "../../helpers/signal/Signal.hpp" #include "../../helpers/math/Math.hpp" +#include "../../helpers/time/Time.hpp" #include "../types/DataDevice.hpp" #include @@ -138,7 +139,7 @@ class CWLDataDeviceProtocol : public IWaylandProtocol { virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); // renders and damages the dnd icon, if present - void renderDND(PHLMONITOR pMonitor, timespec* when); + void renderDND(PHLMONITOR pMonitor, const Time::steady_tp& when); // for inputmgr to force refocus // TODO: move handling to seatmgr bool dndActive(); diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index f6eee6e1..5faabedc 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -4,6 +4,7 @@ #include "../../devices/IKeyboard.hpp" #include "../../devices/IHID.hpp" #include "../../managers/SeatManager.hpp" +#include "../../helpers/time/Time.hpp" #include "../../config/ConfigValue.hpp" #include @@ -174,10 +175,8 @@ void CWLPointerResource::sendLeave() { // release all buttons unless we have a dnd going on in which case // the events shall be lost. if (!PROTO::data->dndActive()) { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); for (auto const& b : pressedButtons) { - sendButton(now.tv_sec * 1000 + now.tv_nsec / 1000000, b, WL_POINTER_BUTTON_STATE_RELEASED); + sendButton(Time::millis(Time::steadyNow()), b, WL_POINTER_BUTTON_STATE_RELEASED); } } diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index ab091f24..17ef4f5f 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -3,7 +3,7 @@ #include "../defines.hpp" #include "../helpers/Monitor.hpp" #include "../helpers/Color.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" #include "../helpers/math/Math.hpp" #include "../helpers/Format.hpp" #include "../helpers/sync/SyncTimeline.hpp" diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 1ce717bc..8a2d4555 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -135,9 +135,6 @@ CHyprRenderer::CHyprRenderer() { if (m_vRenderUnfocused.empty()) return; - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - bool dirty = false; for (auto& w : m_vRenderUnfocused) { if (!w) { @@ -148,7 +145,7 @@ CHyprRenderer::CHyprRenderer() { if (!w->m_pWLSurface || !w->m_pWLSurface->resource() || shouldRenderWindow(w.lock())) continue; - w->m_pWLSurface->resource()->frame(&now); + w->m_pWLSurface->resource()->frame(Time::steadyNow()); auto FEEDBACK = makeShared(w->m_pWLSurface->resource()); FEEDBACK->attachMonitor(g_pCompositor->m_pLastMonitor.lock()); FEEDBACK->discarded(); @@ -265,7 +262,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) { return false; } -void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* time) { +void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& time) { PHLWINDOW pWorkspaceWindow = nullptr; EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS); @@ -356,7 +353,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR } } -void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* time) { +void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& time) { PHLWINDOW lastWindow; EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS); @@ -454,7 +451,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo } } -void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespec* time, bool decorate, eRenderPassMode mode, bool ignorePosition, bool standalone) { +void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const Time::steady_tp& time, bool decorate, eRenderPassMode mode, bool ignorePosition, bool standalone) { if (pWindow->isHidden() && !standalone) return; @@ -692,7 +689,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespe g_pHyprOpenGL->m_RenderData.currentWindow.reset(); } -void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, timespec* time, bool popups) { +void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups) { if (!pLayer) return; @@ -770,7 +767,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, timespec* tim } } -void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, timespec* time) { +void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, const Time::steady_tp& time) { const auto POS = pPopup->globalBox().pos(); CSurfacePassElement::SRenderData renderdata = {pMonitor, time, POS}; @@ -804,7 +801,7 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, tim &renderdata); } -void CHyprRenderer::renderSessionLockSurface(WP pSurface, PHLMONITOR pMonitor, timespec* time) { +void CHyprRenderer::renderSessionLockSurface(WP pSurface, PHLMONITOR pMonitor, const Time::steady_tp& time) { CSurfacePassElement::SRenderData renderdata = {pMonitor, time, pMonitor->vecPosition, pMonitor->vecPosition}; renderdata.blur = false; @@ -825,7 +822,7 @@ void CHyprRenderer::renderSessionLockSurface(WP pSurface, P &renderdata); } -void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* time, const Vector2D& translate, const float& scale) { +void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& time, const Vector2D& translate, const float& scale) { static auto PDIMSPECIAL = CConfigValue("decoration:dim_special"); static auto PBLURSPECIAL = CConfigValue("decoration:blur:special"); static auto PBLUR = CConfigValue("decoration:blur:enabled"); @@ -988,7 +985,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA //g_pHyprOpenGL->restoreMatrix(); } -void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, timespec* now, const CBox& geometry) { +void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp& now, const CBox& geometry) { TRACY_GPU_ZONE("RenderLockscreen"); if (g_pSessionLockManager->isSessionLocked()) { @@ -1246,8 +1243,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { EMIT_HOOK_EVENT("preRender", pMonitor); - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + const auto NOW = Time::steadyNow(); // check the damage bool hasChanged = pMonitor->output->needsFrame || pMonitor->damage.hasChanged(); @@ -1328,9 +1324,9 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { renderCursor = false; } else { CBox renderBox = {0, 0, (int)pMonitor->vecPixelSize.x, (int)pMonitor->vecPixelSize.y}; - renderWorkspace(pMonitor, pMonitor->activeWorkspace, &now, renderBox); + renderWorkspace(pMonitor, pMonitor->activeWorkspace, NOW, renderBox); - renderLockscreen(pMonitor, &now, renderBox); + renderLockscreen(pMonitor, NOW, renderBox); if (pMonitor == g_pCompositor->m_pLastMonitor) { g_pHyprNotificationOverlay->draw(pMonitor); @@ -1357,18 +1353,18 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { } } } else - renderWindow(pMonitor->solitaryClient.lock(), pMonitor, &now, false, RENDER_PASS_MAIN /* solitary = no popups */); + renderWindow(pMonitor->solitaryClient.lock(), pMonitor, NOW, false, RENDER_PASS_MAIN /* solitary = no popups */); } else if (!pMonitor->isMirror()) { - sendFrameEventsToWorkspace(pMonitor, pMonitor->activeWorkspace, &now); + sendFrameEventsToWorkspace(pMonitor, pMonitor->activeWorkspace, NOW); if (pMonitor->activeSpecialWorkspace) - sendFrameEventsToWorkspace(pMonitor, pMonitor->activeSpecialWorkspace, &now); + sendFrameEventsToWorkspace(pMonitor, pMonitor->activeSpecialWorkspace, NOW); } renderCursor = renderCursor && shouldRenderCursor(); if (renderCursor) { TRACY_GPU_ZONE("RenderCursor"); - g_pPointerManager->renderSoftwareCursorsFor(pMonitor->self.lock(), &now, g_pHyprOpenGL->m_RenderData.damage); + g_pPointerManager->renderSoftwareCursorsFor(pMonitor->self.lock(), NOW, g_pHyprOpenGL->m_RenderData.damage); } EMIT_HOOK_EVENT("render", RENDER_LAST_MOMENT); @@ -1578,7 +1574,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { return ok; } -void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now, const CBox& geometry) { +void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const CBox& geometry) { Vector2D translate = {geometry.x, geometry.y}; float scale = (float)geometry.width / pMonitor->vecPixelSize.x; @@ -1593,7 +1589,7 @@ void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace renderAllClientsForWorkspace(pMonitor, pWorkspace, now, translate, scale); } -void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now) { +void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now) { for (auto const& w : g_pCompositor->m_vWindows) { if (w->isHidden() || !w->m_bIsMapped || w->m_bFadingOut || !w->m_pWLSurface->resource()) continue; @@ -1962,7 +1958,7 @@ void CHyprRenderer::damageMirrorsWith(PHLMONITOR pMonitor, const CRegion& pRegio } } -void CHyprRenderer::renderDragIcon(PHLMONITOR pMonitor, timespec* time) { +void CHyprRenderer::renderDragIcon(PHLMONITOR pMonitor, const Time::steady_tp& time) { PROTO::data->renderDND(pMonitor, time); } @@ -2426,9 +2422,6 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - // this is a hack but it works :P // we need to disable blur or else we will get a black background, as the shader // will try to copy the bg to apply blur. @@ -2445,7 +2438,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - renderWindow(pWindow, PMONITOR, &now, false, RENDER_PASS_ALL, true); + renderWindow(pWindow, PMONITOR, Time::steadyNow(), false, RENDER_PASS_ALL, true); **PBLUR = BLURVAL; @@ -2481,9 +2474,6 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - // this is a hack but it works :P // we need to disable blur or else we will get a black background, as the shader // will try to copy the bg to apply blur. @@ -2495,7 +2485,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - renderWindow(pWindow, PMONITOR, &now, !pWindow->m_bX11DoesntWantBorders, RENDER_PASS_ALL); + renderWindow(pWindow, PMONITOR, Time::steadyNow(), !pWindow->m_bX11DoesntWantBorders, RENDER_PASS_ALL); **PBLUR = BLURVAL; @@ -2528,14 +2518,11 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - const auto BLURLSSTATUS = pLayer->forceBlur; pLayer->forceBlur = false; // draw the layer - renderLayer(pLayer, PMONITOR, &now); + renderLayer(pLayer, PMONITOR, Time::steadyNow()); pLayer->forceBlur = BLURLSSTATUS; diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 731ed926..1d0df2a5 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -6,8 +6,9 @@ #include "../desktop/LayerSurface.hpp" #include "OpenGL.hpp" #include "Renderbuffer.hpp" -#include "../helpers/Timer.hpp" +#include "../helpers/time/Timer.hpp" #include "../helpers/math/Math.hpp" +#include "../helpers/time/Time.hpp" struct SMonitorRule; class CWorkspace; @@ -66,7 +67,7 @@ class CHyprRenderer { void calculateUVForSurface(PHLWINDOW, SP, PHLMONITOR pMonitor, bool main = false, const Vector2D& projSize = {}, const Vector2D& projSizeUnscaled = {}, bool fixMisalignedFSV1 = false); std::tuple getRenderTimes(PHLMONITOR pMonitor); // avg max min - void renderLockscreen(PHLMONITOR pMonitor, timespec* now, const CBox& geometry); + void renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp& now, const CBox& geometry); void recheckSolitaryForMonitor(PHLMONITOR pMonitor); void setCursorSurface(SP surf, int hotspotX, int hotspotY, bool force = false); void setCursorFromName(const std::string& name, bool force = false); @@ -115,27 +116,27 @@ class CHyprRenderer { CRenderPass m_sRenderPass = {}; private: - void arrangeLayerArray(PHLMONITOR, const std::vector&, bool, CBox*); - void renderWorkspaceWindowsFullscreen(PHLMONITOR, PHLWORKSPACE, timespec*); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) - void renderWorkspaceWindows(PHLMONITOR, PHLWORKSPACE, timespec*); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) - void renderWindow(PHLWINDOW, PHLMONITOR, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool standalone = false); - void renderLayer(PHLLS, PHLMONITOR, timespec*, bool popups = false); - void renderSessionLockSurface(WP, PHLMONITOR, timespec*); - void renderDragIcon(PHLMONITOR, timespec*); - void renderIMEPopup(CInputPopup*, PHLMONITOR, timespec*); - void renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now, const CBox& geometry); - void sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now); // sends frame displayed events but doesn't actually render anything - void renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); - void renderSessionLockMissing(PHLMONITOR pMonitor); + void arrangeLayerArray(PHLMONITOR, const std::vector&, bool, CBox*); + void renderWorkspaceWindowsFullscreen(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) + void renderWorkspaceWindows(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) + void renderWindow(PHLWINDOW, PHLMONITOR, const Time::steady_tp&, bool, eRenderPassMode, bool ignorePosition = false, bool standalone = false); + void renderLayer(PHLLS, PHLMONITOR, const Time::steady_tp&, bool popups = false); + void renderSessionLockSurface(WP, PHLMONITOR, const Time::steady_tp&); + void renderDragIcon(PHLMONITOR, const Time::steady_tp&); + void renderIMEPopup(CInputPopup*, PHLMONITOR, const Time::steady_tp&); + void renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const CBox& geometry); + void sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now); // sends frame displayed events but doesn't actually render anything + void renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); + void renderSessionLockMissing(PHLMONITOR pMonitor); - bool commitPendingAndDoExplicitSync(PHLMONITOR pMonitor); + bool commitPendingAndDoExplicitSync(PHLMONITOR pMonitor); - bool m_bCursorHidden = false; - bool m_bCursorHasSurface = false; - SP m_pCurrentRenderbuffer = nullptr; - SP m_pCurrentBuffer = nullptr; - eRenderMode m_eRenderMode = RENDER_MODE_NORMAL; - bool m_bNvidia = false; + bool m_bCursorHidden = false; + bool m_bCursorHasSurface = false; + SP m_pCurrentRenderbuffer = nullptr; + SP m_pCurrentBuffer = nullptr; + eRenderMode m_eRenderMode = RENDER_MODE_NORMAL; + bool m_bNvidia = false; struct { bool hiddenOnTouch = false; diff --git a/src/render/pass/SurfacePassElement.hpp b/src/render/pass/SurfacePassElement.hpp index 1b6ddb0b..4d51f804 100644 --- a/src/render/pass/SurfacePassElement.hpp +++ b/src/render/pass/SurfacePassElement.hpp @@ -1,6 +1,7 @@ #pragma once #include "PassElement.hpp" #include +#include "../../helpers/time/Time.hpp" class CWLSurfaceResource; class CTexture; @@ -10,7 +11,7 @@ class CSurfacePassElement : public IPassElement { public: struct SRenderData { PHLMONITORREF pMonitor; - timespec* when = nullptr; + Time::steady_tp when = Time::steadyNow(); Vector2D pos, localPos; void* data = nullptr; diff --git a/src/xwayland/XSurface.cpp b/src/xwayland/XSurface.cpp index 30e38ac2..1ef1c673 100644 --- a/src/xwayland/XSurface.cpp +++ b/src/xwayland/XSurface.cpp @@ -3,6 +3,7 @@ #include "../protocols/XWaylandShell.hpp" #include "../protocols/core/Compositor.hpp" #include "../managers/ANRManager.hpp" +#include "../helpers/time/Time.hpp" #ifndef NO_XWAYLAND @@ -253,12 +254,9 @@ void CXWaylandSurface::ping() { return; } - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - xcb_client_message_data_t msg = {}; msg.data32[0] = HYPRATOMS["_NET_WM_PING"]; - msg.data32[1] = now.tv_sec * 1000 + now.tv_nsec / 1000000; + msg.data32[1] = Time::millis(Time::steadyNow()); msg.data32[2] = xID; lastPingSeq = msg.data32[1]; From 1ae7e2164c25ad4c22698b0ac12969f1e2a1b8ca Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 16 Apr 2025 13:49:41 +0100 Subject: [PATCH 0079/1077] xcursormgr: include ref #10093 --- src/managers/XCursorManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/managers/XCursorManager.cpp b/src/managers/XCursorManager.cpp index 198bc2a5..7d629785 100644 --- a/src/managers/XCursorManager.cpp +++ b/src/managers/XCursorManager.cpp @@ -16,6 +16,7 @@ extern "C" { #include "debug/Log.hpp" #include "XCursorManager.hpp" #include +#include // clang-format off static std::vector HYPR_XCURSOR_PIXELS = { From 3fa6320a391ed60779702e058f67649beb787962 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Wed, 16 Apr 2025 10:49:01 -0500 Subject: [PATCH 0080/1077] desktop: Damage subsurface when position changes (#10094) --- src/desktop/Subsurface.cpp | 34 ++++++++++++---------------- src/desktop/Subsurface.hpp | 4 +++- src/protocols/core/Subcompositor.cpp | 4 +++- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index 9846764c..4e77f36f 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -115,21 +115,10 @@ void CSubsurface::onCommit() { // I do not think this is correct, but it solves a lot of issues with some apps (e.g. firefox) checkSiblingDamage(); - if (m_vLastSize != m_pWLSurface->resource()->current.size) { - // TODO: fix this - // CBox box{COORDS, m_vLastSize}; - // g_pHyprRenderer->damageBox(box); - // m_vLastSize = m_pWLSurface->resource()->current.size; - // box = {COORDS, m_vLastSize}; - // g_pHyprRenderer->damageBox(box); - - CBox box; - if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_pWLSurface) - box = m_pPopupParent->m_pWLSurface->getSurfaceBoxGlobal().value_or(CBox{}); - else if (m_pWindowParent) - box = m_pWindowParent->getWindowMainSurfaceBox(); - - g_pHyprRenderer->damageBox(box); + if (m_vLastSize != m_pWLSurface->resource()->current.size || m_vLastPosition != m_pSubsurface->position) { + damageLastArea(); + m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastPosition = m_pSubsurface->position; } } @@ -162,7 +151,8 @@ void CSubsurface::onNewSubsurface(SP pSubsurface) { } void CSubsurface::onMap() { - m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastSize = m_pWLSurface->resource()->current.size; + m_vLastPosition = m_pSubsurface->position; const auto COORDS = coordsGlobal(); CBox box{COORDS, m_vLastSize}; @@ -174,10 +164,7 @@ void CSubsurface::onMap() { } void CSubsurface::onUnmap() { - const auto COORDS = coordsGlobal(); - CBox box{COORDS, m_vLastSize}; - box.expand(4); - g_pHyprRenderer->damageBox(box); + damageLastArea(); if (m_pWLSurface->resource() == g_pCompositor->m_pLastFocus) g_pInputManager->releaseAllMouseButtons(); @@ -187,6 +174,13 @@ void CSubsurface::onUnmap() { // TODO: should this remove children? Currently it won't, only on .destroy } +void CSubsurface::damageLastArea() { + const auto COORDS = coordsGlobal() + m_vLastPosition - m_pSubsurface->position; + CBox box{COORDS, m_vLastSize}; + box.expand(4); + g_pHyprRenderer->damageBox(box); +} + Vector2D CSubsurface::coordsRelativeToParent() { if (!m_pSubsurface) return {}; diff --git a/src/desktop/Subsurface.hpp b/src/desktop/Subsurface.hpp index 2983c7c1..7b596337 100644 --- a/src/desktop/Subsurface.hpp +++ b/src/desktop/Subsurface.hpp @@ -49,7 +49,8 @@ class CSubsurface { WP m_pSubsurface; SP m_pWLSurface; - Vector2D m_vLastSize = {}; + Vector2D m_vLastSize = {}; + Vector2D m_vLastPosition = {}; // if nullptr, means it's a dummy node WP m_pParent; @@ -64,4 +65,5 @@ class CSubsurface { void initSignals(); void initExistingSubsurfaces(SP pSurface); void checkSiblingDamage(); + void damageLastArea(); }; diff --git a/src/protocols/core/Subcompositor.cpp b/src/protocols/core/Subcompositor.cpp index 4edb07ff..82f4aedb 100644 --- a/src/protocols/core/Subcompositor.cpp +++ b/src/protocols/core/Subcompositor.cpp @@ -99,8 +99,10 @@ CWLSubsurfaceResource::~CWLSubsurfaceResource() { } void CWLSubsurfaceResource::destroy() { - if (surface && surface->mapped) + if (surface && surface->mapped) { + surface->events.unmap.emit(); surface->unmap(); + } events.destroy.emit(); PROTO::subcompositor->destroyResource(this); } From 225e13c3cc83308175f0a9aa18cfa31324155034 Mon Sep 17 00:00:00 2001 From: nyx Date: Wed, 16 Apr 2025 20:19:10 -0400 Subject: [PATCH 0081/1077] InputManager: add config option to disable keybinds per device (#10064) --- src/config/ConfigManager.cpp | 1 + src/devices/IKeyboard.hpp | 5 +++-- src/managers/KeybindManager.cpp | 5 ++++- src/managers/input/InputManager.cpp | 7 ++++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 70f6701e..b9c93295 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -759,6 +759,7 @@ CConfigManager::CConfigManager() { m_pConfig->addSpecialConfigValue("device", "active_area_size", Hyprlang::VEC2{0, 0}); // only for tablets m_pConfig->addSpecialConfigValue("device", "flip_x", Hyprlang::INT{0}); // only for touchpads m_pConfig->addSpecialConfigValue("device", "flip_y", Hyprlang::INT{0}); // only for touchpads + m_pConfig->addSpecialConfigValue("device", "keybinds", Hyprlang::INT{1}); // enable/disable keybinds // keywords m_pConfig->registerHandler(&::handleExec, "exec", {false}); diff --git a/src/devices/IKeyboard.hpp b/src/devices/IKeyboard.hpp index aabf4cc2..7ac71172 100644 --- a/src/devices/IKeyboard.hpp +++ b/src/devices/IKeyboard.hpp @@ -74,8 +74,9 @@ class IKeyboard : public IHID { void updateXkbStateWithKey(uint32_t xkbKey, bool pressed); void updateKeymapFD(); - bool active = false; - bool enabled = true; + bool active = false; + bool enabled = true; + bool allowBinds = true; // if the keymap is overridden by the implementation, // don't try to set keyboard rules anymore, to avoid overwriting the requested one. diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 4ef7d229..a1ad846a 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -432,7 +432,10 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { return true; } - auto e = std::any_cast(event); + auto e = std::any_cast(event); + + if (!pKeyboard->allowBinds) + return true; const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 0665e0d2..af84eb20 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1022,10 +1022,12 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { const auto VARIANT = g_pConfigManager->getDeviceString(devname, "kb_variant", "input:kb_variant"); const auto OPTIONS = g_pConfigManager->getDeviceString(devname, "kb_options", "input:kb_options"); - const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true; + const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true; + const auto ALLOWBINDS = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "keybinds") : true; pKeyboard->enabled = ENABLED; pKeyboard->resolveBindsBySym = RESOLVEBINDSBYSYM; + pKeyboard->allowBinds = ALLOWBINDS; try { if (NUMLOCKON == pKeyboard->numlockOn && REPEATDELAY == pKeyboard->repeatDelay && REPEATRATE == pKeyboard->repeatRate && RULES != "" && @@ -1538,6 +1540,9 @@ uint32_t CInputManager::accumulateModsFromAllKBs() { if (!kb->enabled) continue; + if (!kb->allowBinds) + continue; + finalMask |= kb->getModifiers(); } From ddae3036ca6a1729ffe7854a59184116d2622809 Mon Sep 17 00:00:00 2001 From: raf Date: Thu, 17 Apr 2025 20:33:05 +0000 Subject: [PATCH 0082/1077] ci: close unwanted issues automatically (#10106) * ci: close unwanted issues automatically You want it, it's yours my friend. * ci/close-issues: simplify * ci/close-issues: try to handle large number of issues * ci/close-issues: fix 'vaxerski' --- .github/workflows/close-issues.yml | 101 +++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 .github/workflows/close-issues.yml diff --git a/.github/workflows/close-issues.yml b/.github/workflows/close-issues.yml new file mode 100644 index 00000000..55f4e126 --- /dev/null +++ b/.github/workflows/close-issues.yml @@ -0,0 +1,101 @@ +name: Close Unauthorized Issues + +on: + workflow_dispatch: + issues: + types: [opened] + +jobs: + close-unauthorized-issues: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + # XXX: This *could* be done in Bash by abusing GitHub's own tool to interact with its API + # but that's too much of a hack, and we'll be adding a layer of abstraction. github-script + # is a workflow that eases interaction with GitHub API in the workflow run context. + - name: "Close 'unauthorized' issues" + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const ALLOWED_USERS = ['vaxerski', 'fufexan', 'NotAShelf']; + const CLOSING_COMMENT = 'Users are no longer allowed to open issues themselves, please open a discussion instead.\n\nPlease see the [wiki](https://wiki.hyprland.org/Contributing-and-Debugging/Issue-Guidelines/) on why this is the case.\n\nWe are volunteers, and we need your cooperation to make the best software we can. Thank you for understanding! ❤️\n\n[Open a discussion here](https://github.com/hyprwm/Hyprland/discussions)'; + + async function closeUnauthorizedIssue(issueNumber, userName) { + if (ALLOWED_USERS.includes(userName)) { + console.log(`Issue #${issueNumber} - Created by authorized user ${userName}`); + return; + } + + console.log(`Issue #${issueNumber} - Unauthorized, closing`); + + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + state: 'closed', + state_reason: 'not_planned' + }); + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + body: CLOSING_COMMENT + }); + } + + if (context.eventName === 'issues' && context.payload.action === 'opened') { + // Direct access to the issue that triggered the workflow + const issue = context.payload.issue; + + // Skip if this is a PR + if (issue.pull_request) { + console.log(`Issue #${issue.number} - Skipping, this is a pull request`); + return; + } + + // Process the single issue that triggered the workflow + await closeUnauthorizedIssue(issue.number, issue.user.login); + } else { + // For manual runs, we need to handle pagination + async function* fetchAllOpenIssues() { + let page = 1; + let hasNextPage = true; + + while (hasNextPage) { + const response = await github.rest.issues.listForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + per_page: 100, + page: page + }); + + if (response.data.length === 0) { + hasNextPage = false; + } else { + for (const issue of response.data) { + yield issue; + } + page++; + } + } + } + + // Process issues one by one + for await (const issue of fetchAllOpenIssues()) { + try { + // Skip pull requests + if (issue.pull_request) { + console.log(`Issue #${issue.number} - Skipping, this is a pull request`); + continue; + } + + await closeUnauthorizedIssue(issue.number, issue.user.login); + } catch (error) { + console.error(`Error processing issue #${issue.number}: ${error.message}`); + } + } + } From 7631d4c73f08217f3b8b78731e46a437319219da Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 18 Apr 2025 10:37:51 -0500 Subject: [PATCH 0083/1077] render, helpers: Call OpenGL destroyMonitorResources on disconnect (#10111) * render, helpers: Call OpenGL destroyMonitorResources on disconnect * helpers: Add opengl null check --- src/helpers/Monitor.cpp | 6 +++++- src/render/OpenGL.cpp | 5 +++-- src/render/OpenGL.hpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 5e2fedd5..197f19d3 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -51,6 +51,8 @@ CMonitor::CMonitor(SP output_) : state(this), output(output CMonitor::~CMonitor() { events.destroy.emit(); + if (g_pHyprOpenGL) + g_pHyprOpenGL->destroyMonitorResources(self); } void CMonitor::onConnect(bool noRule) { @@ -295,6 +297,8 @@ void CMonitor::onDisconnect(bool destroy) { Debug::log(LOG, "onDisconnect called for {}", output->name); events.disconnect.emit(); + if (g_pHyprOpenGL) + g_pHyprOpenGL->destroyMonitorResources(self); // record what workspace this monitor was on if (activeWorkspace) { @@ -832,7 +836,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { updateMatrix(); if (WAS10B != enabled10bit || OLDRES != vecPixelSize) - g_pHyprOpenGL->destroyMonitorResources(self.lock()); + g_pHyprOpenGL->destroyMonitorResources(self); g_pCompositor->arrangeMonitors(); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 27d3671f..754f3ff9 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2997,7 +2997,7 @@ void CHyprOpenGLImpl::clearWithTex() { } } -void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITOR pMonitor) { +void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITORREF pMonitor) { g_pHyprRenderer->makeEGLCurrent(); if (!g_pHyprOpenGL) @@ -3021,7 +3021,8 @@ void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITOR pMonitor) { g_pHyprOpenGL->m_mMonitorBGFBs.erase(TEXIT); } - Debug::log(LOG, "Monitor {} -> destroyed all render data", pMonitor->szName); + if (pMonitor) + Debug::log(LOG, "Monitor {} -> destroyed all render data", pMonitor->szName); } void CHyprOpenGLImpl::saveMatrix() { diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 17ef4f5f..276d5268 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -207,7 +207,7 @@ class CHyprOpenGLImpl { void scissor(const pixman_box32*, bool transform = true); void scissor(const int x, const int y, const int w, const int h, bool transform = true); - void destroyMonitorResources(PHLMONITOR); + void destroyMonitorResources(PHLMONITORREF); void markBlurDirtyForMonitor(PHLMONITOR); From 02f7da2bf23b75f097388b776143af5963b8e13b Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 18 Apr 2025 15:39:22 +0000 Subject: [PATCH 0084/1077] [gha] Nix: update inputs --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 51623b7d..8391a06e 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { From 51afc2c2910d6f7c1f2dee9c90f54729d3c3d940 Mon Sep 17 00:00:00 2001 From: fazzi <18248986+fxzzi@users.noreply.github.com> Date: Fri, 18 Apr 2025 20:44:54 +0100 Subject: [PATCH 0085/1077] ctm: enable fade animation on nvidia driver versions 575 and above (#10095) * ctm: enable fade animation on nvidia driver versions 575 and above * format if statement without braces; handle potential throw when checking for nvidia version file --- src/helpers/MiscFunctions.cpp | 35 +++++++++++++++++++++++++++++++++ src/helpers/MiscFunctions.hpp | 1 + src/protocols/CTMControl.cpp | 9 +++++++-- src/render/Renderer.cpp | 37 ++--------------------------------- 4 files changed, 45 insertions(+), 37 deletions(-) diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 9e398fd9..88af38c7 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -817,3 +817,38 @@ float stringToPercentage(const std::string& VALUE, const float REL) { else return std::stof(VALUE); } + +// Checks if Nvidia driver major version is at least given version. +// Useful for explicit_sync_kms and ctm_animation as they only work +// past certain driver versions. +bool isNvidiaDriverVersionAtLeast(int threshold) { + static int driverMajor = 0; + static bool once = true; + + if (once) { + once = false; + + std::error_code ec; + if (std::filesystem::exists("/sys/module/nvidia_drm/version", ec) && !ec) { + std::ifstream ifs("/sys/module/nvidia_drm/version"); + if (ifs.good()) { + try { + std::string driverInfo((std::istreambuf_iterator(ifs)), (std::istreambuf_iterator())); + + size_t firstDot = driverInfo.find('.'); + if (firstDot != std::string::npos) + driverMajor = std::stoi(driverInfo.substr(0, firstDot)); + + Debug::log(LOG, "Parsed NVIDIA major version: {}", driverMajor); + + } catch (std::exception& e) { + driverMajor = 0; // Default to 0 if parsing fails + } + + ifs.close(); + } + } + } + + return driverMajor >= threshold; +} diff --git a/src/helpers/MiscFunctions.hpp b/src/helpers/MiscFunctions.hpp index bd288638..f361313b 100644 --- a/src/helpers/MiscFunctions.hpp +++ b/src/helpers/MiscFunctions.hpp @@ -39,6 +39,7 @@ bool envEnabled(const std::string& env); Hyprutils::OS::CFileDescriptor allocateSHMFile(size_t len); bool allocateSHMFilePair(size_t size, Hyprutils::OS::CFileDescriptor& rw_fd_ptr, Hyprutils::OS::CFileDescriptor& ro_fd_ptr); float stringToPercentage(const std::string& VALUE, const float REL); +bool isNvidiaDriverVersionAtLeast(int threshold); template [[deprecated("use std::format instead")]] std::string getFormat(std::format_string fmt, Args&&... args) { diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index c3b6862d..7dbe635b 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -6,6 +6,7 @@ #include "../config/ConfigManager.hpp" #include "managers/AnimationManager.hpp" #include "../helpers/Monitor.hpp" +#include "../helpers/MiscFunctions.hpp" CHyprlandCTMControlResource::CHyprlandCTMControlResource(SP resource_) : resource(resource_) { if UNLIKELY (!good()) @@ -109,8 +110,12 @@ void CHyprlandCTMControlProtocol::destroyResource(CHyprlandCTMControlResource* r bool CHyprlandCTMControlProtocol::isCTMAnimationEnabled() { static auto PENABLEANIM = CConfigValue("render:ctm_animation"); - if (*PENABLEANIM == 2) - return !g_pHyprRenderer->isNvidia(); + if (*PENABLEANIM == 2 /* auto */) { + if (!g_pHyprRenderer->isNvidia()) + return true; + // CTM animations are bugged on versions below. + return isNvidiaDriverVersionAtLeast(575); + } return *PENABLEANIM; } diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 8a2d4555..4eee27ff 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -35,6 +35,7 @@ #include "debug/Log.hpp" #include "../protocols/ColorManagement.hpp" #include "../protocols/types/ContentType.hpp" +#include "../helpers/MiscFunctions.hpp" #include using namespace Hyprutils::Utils; @@ -2349,43 +2350,9 @@ SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings(SP=560 - // in the case of an error, driverMajor will stay 0 and explicit KMS will be disabled - static int driverMajor = 0; - - static bool once = true; - if (once) { - once = false; - - Debug::log(LOG, "Renderer: checking for explicit KMS support for nvidia"); - - if (std::filesystem::exists("/sys/module/nvidia_drm/version")) { - Debug::log(LOG, "Renderer: Nvidia version file exists"); - - std::ifstream ifs("/sys/module/nvidia_drm/version"); - if (ifs.good()) { - try { - std::string driverInfo((std::istreambuf_iterator(ifs)), (std::istreambuf_iterator())); - - Debug::log(LOG, "Renderer: Read nvidia version {}", driverInfo); - - CVarList ver(driverInfo, 0, '.', true); - driverMajor = std::stoi(ver[0]); - - Debug::log(LOG, "Renderer: Parsed nvidia major version: {}", driverMajor); - - } catch (std::exception& e) { settings.explicitKMSEnabled = false; } - - ifs.close(); - } - } - } - - settings.explicitKMSEnabled = driverMajor >= 560; + settings.explicitKMSEnabled = isNvidiaDriverVersionAtLeast(560); } } - return settings; } From f48ee7a3d17810c9a0bf229fc3131e15b09ef179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Kr=C3=BCgel?= Date: Fri, 18 Apr 2025 20:16:30 -0300 Subject: [PATCH 0086/1077] protocols: ensure PointerConstraints activation occurs only after attched to InputManager (#10096) --- src/protocols/PointerConstraints.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index 30ab0a55..0a93d332 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -93,9 +93,6 @@ void CPointerConstraint::sharedConstructions() { } cursorPosOnActivate = g_pInputManager->getMouseCoordsInternal(); - - if (g_pCompositor->m_pLastFocus == pHLSurface->resource()) - activate(); } bool CPointerConstraint::good() { @@ -244,6 +241,9 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra OWNER->appendConstraint(constraint); g_pInputManager->m_vConstraints.emplace_back(constraint); + + if (g_pCompositor->m_pLastFocus == OWNER->resource()) + constraint->activate(); } void CPointerConstraintsProtocol::onLockPointer(CZwpPointerConstraintsV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* pointer, wl_resource* region, From 867bc860895ef4de7030c6a615aa10e5bfa1e133 Mon Sep 17 00:00:00 2001 From: syuzuki <77492100+syuzuki@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:22:21 +0900 Subject: [PATCH 0087/1077] compositor: fix getMonitorInDirection skipping active monitor (#10114) --- src/Compositor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index fed80120..a34078f9 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1780,7 +1780,7 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c PHLMONITOR longestIntersectMonitor = nullptr; for (auto const& m : m_vMonitors) { - if (m == m_pLastMonitor) + if (m == pSourceMonitor) continue; const auto POSB = m->vecPosition; From 9b4060f09be06250e859b27d6dd3ded5349f5546 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 20 Apr 2025 16:54:22 +0100 Subject: [PATCH 0088/1077] hyprpm: extend dep list --- hyprpm/src/core/PluginManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 3343cbe0..ebf0e03d 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -129,7 +129,7 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& const auto HLVER = getHyprlandVersion(); if (!hasDeps()) { - std::println(stderr, "\n{}", failureString("Could not clone the plugin repository. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config")); + std::println(stderr, "\n{}", failureString("Could not clone the plugin repository. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config, git, g++, gcc")); return false; } @@ -435,7 +435,7 @@ bool CPluginManager::updateHeaders(bool force) { const auto HLVER = getHyprlandVersion(false); if (!hasDeps()) { - std::println("\n{}", failureString("Could not update. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config")); + std::println("\n{}", failureString("Could not update. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config, git, g++, gcc")); return false; } @@ -947,7 +947,7 @@ std::string CPluginManager::headerErrorShort(const eHeadersErrors err) { } bool CPluginManager::hasDeps() { - std::vector deps = {"meson", "cpio", "cmake", "pkg-config"}; + std::vector deps = {"meson", "cpio", "cmake", "pkg-config", "g++", "gcc", "git"}; for (auto const& d : deps) { if (!execAndGet("command -v " + d).contains("/")) return false; From 4d14bcb02f54b1ab35ccf909e461c8e7646a38e2 Mon Sep 17 00:00:00 2001 From: davc0n Date: Sun, 20 Apr 2025 20:39:33 +0200 Subject: [PATCH 0089/1077] config: Refactor class member vars (#10124) * Refactor config classes vars * Fix clang format errors --- src/Compositor.cpp | 4 +- src/config/ConfigDataValues.hpp | 64 +-- src/config/ConfigManager.cpp | 454 +++++++++--------- src/config/ConfigManager.hpp | 48 +- src/debug/HyprCtl.cpp | 30 +- src/desktop/Window.cpp | 16 +- src/devices/IKeyboard.cpp | 2 +- src/helpers/Monitor.cpp | 4 +- src/layout/DwindleLayout.cpp | 4 +- src/layout/MasterLayout.cpp | 4 +- src/main.cpp | 2 +- src/managers/KeybindManager.cpp | 10 +- src/managers/input/Touch.cpp | 4 +- src/protocols/OutputManagement.cpp | 4 +- src/render/OpenGL.cpp | 20 +- src/render/Renderer.cpp | 2 +- .../decorations/CHyprBorderDecoration.cpp | 6 +- .../decorations/CHyprGroupBarDecoration.cpp | 8 +- 18 files changed, 343 insertions(+), 343 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index a34078f9..8edd1905 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -479,7 +479,7 @@ void CCompositor::initAllSignals() { m->applyMonitorRule(&m->activeMonitorRule, true); } - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; g_pCursorManager->syncGsettings(); } else { Debug::log(LOG, "Session got deactivated!"); @@ -3039,7 +3039,7 @@ void CCompositor::onNewMonitor(SP output) { g_pCompositor->m_bReadyToProcess = true; - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; g_pCompositor->scheduleFrameForMonitor(PNEWMONITOR, IOutput::AQ_SCHEDULE_NEW_MONITOR); checkDefaultCursorWarp(PNEWMONITOR); diff --git a/src/config/ConfigDataValues.hpp b/src/config/ConfigDataValues.hpp index 901fb317..270f6880 100644 --- a/src/config/ConfigDataValues.hpp +++ b/src/config/ConfigDataValues.hpp @@ -22,7 +22,7 @@ class CGradientValueData : public ICustomConfigValueData { public: CGradientValueData() = default; CGradientValueData(CHyprColor col) { - m_vColors.push_back(col); + m_colors.push_back(col); updateColorsOk(); }; virtual ~CGradientValueData() = default; @@ -32,39 +32,39 @@ class CGradientValueData : public ICustomConfigValueData { } void reset(CHyprColor col) { - m_vColors.clear(); - m_vColors.emplace_back(col); - m_fAngle = 0; + m_colors.clear(); + m_colors.emplace_back(col); + m_angle = 0; updateColorsOk(); } void updateColorsOk() { - m_vColorsOkLabA.clear(); - for (auto& c : m_vColors) { + m_colorsOkLabA.clear(); + for (auto& c : m_colors) { const auto OKLAB = c.asOkLab(); - m_vColorsOkLabA.emplace_back(OKLAB.l); - m_vColorsOkLabA.emplace_back(OKLAB.a); - m_vColorsOkLabA.emplace_back(OKLAB.b); - m_vColorsOkLabA.emplace_back(c.a); + m_colorsOkLabA.emplace_back(OKLAB.l); + m_colorsOkLabA.emplace_back(OKLAB.a); + m_colorsOkLabA.emplace_back(OKLAB.b); + m_colorsOkLabA.emplace_back(c.a); } } /* Vector containing the colors */ - std::vector m_vColors; + std::vector m_colors; /* Vector containing pure colors for shoving into opengl */ - std::vector m_vColorsOkLabA; + std::vector m_colorsOkLabA; /* Float corresponding to the angle (rad) */ - float m_fAngle = 0; + float m_angle = 0; // bool operator==(const CGradientValueData& other) const { - if (other.m_vColors.size() != m_vColors.size() || m_fAngle != other.m_fAngle) + if (other.m_colors.size() != m_colors.size() || m_angle != other.m_angle) return false; - for (size_t i = 0; i < m_vColors.size(); ++i) - if (m_vColors[i] != other.m_vColors[i]) + for (size_t i = 0; i < m_colors.size(); ++i) + if (m_colors[i] != other.m_colors[i]) return false; return true; @@ -72,28 +72,28 @@ class CGradientValueData : public ICustomConfigValueData { virtual std::string toString() { std::string result; - for (auto& c : m_vColors) { + for (auto& c : m_colors) { result += std::format("{:x} ", c.getAsHex()); } - result += std::format("{}deg", (int)(m_fAngle * 180.0 / M_PI)); + result += std::format("{}deg", (int)(m_angle * 180.0 / M_PI)); return result; } }; class CCssGapData : public ICustomConfigValueData { public: - CCssGapData() : top(0), right(0), bottom(0), left(0) {}; - CCssGapData(int64_t global) : top(global), right(global), bottom(global), left(global) {}; - CCssGapData(int64_t vertical, int64_t horizontal) : top(vertical), right(horizontal), bottom(vertical), left(horizontal) {}; - CCssGapData(int64_t top, int64_t horizontal, int64_t bottom) : top(top), right(horizontal), bottom(bottom), left(horizontal) {}; - CCssGapData(int64_t top, int64_t right, int64_t bottom, int64_t left) : top(top), right(right), bottom(bottom), left(left) {}; + CCssGapData() : m_top(0), m_right(0), m_bottom(0), m_left(0) {}; + CCssGapData(int64_t global) : m_top(global), m_right(global), m_bottom(global), m_left(global) {}; + CCssGapData(int64_t vertical, int64_t horizontal) : m_top(vertical), m_right(horizontal), m_bottom(vertical), m_left(horizontal) {}; + CCssGapData(int64_t top, int64_t horizontal, int64_t bottom) : m_top(top), m_right(horizontal), m_bottom(bottom), m_left(horizontal) {}; + CCssGapData(int64_t top, int64_t right, int64_t bottom, int64_t left) : m_top(top), m_right(right), m_bottom(bottom), m_left(left) {}; /* Css like directions */ - int64_t top; - int64_t right; - int64_t bottom; - int64_t left; + int64_t m_top; + int64_t m_right; + int64_t m_bottom; + int64_t m_left; void parseGapData(CVarList varlist) { switch (varlist.size()) { @@ -122,10 +122,10 @@ class CCssGapData : public ICustomConfigValueData { } void reset(int64_t global) { - top = global; - right = global; - bottom = global; - left = global; + m_top = global; + m_right = global; + m_bottom = global; + m_left = global; } virtual eConfigValueDataTypes getDataType() { @@ -133,6 +133,6 @@ class CCssGapData : public ICustomConfigValueData { } virtual std::string toString() { - return std::format("{} {} {} {}", top, right, bottom, left); + return std::format("{} {} {} {}", m_top, m_right, m_bottom, m_left); } }; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index b9c93295..540dcede 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -66,7 +66,7 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** const auto DATA = reinterpret_cast(*data); CVarList varlist(V, 0, ' '); - DATA->m_vColors.clear(); + DATA->m_colors.clear(); std::string parseError = ""; @@ -74,7 +74,7 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** if (var.find("deg") != std::string::npos) { // last arg try { - DATA->m_fAngle = std::stoi(var.substr(0, var.find("deg"))) * (PI / 180.0); // radians + DATA->m_angle = std::stoi(var.substr(0, var.find("deg"))) * (PI / 180.0); // radians } catch (...) { Debug::log(WARN, "Error parsing gradient {}", V); parseError = "Error parsing gradient " + V; @@ -83,7 +83,7 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** break; } - if (DATA->m_vColors.size() >= 10) { + if (DATA->m_colors.size() >= 10) { Debug::log(WARN, "Error parsing gradient {}: max colors is 10.", V); parseError = "Error parsing gradient " + V + ": max colors is 10."; break; @@ -93,19 +93,19 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** const auto COL = configStringToInt(var); if (!COL) throw std::runtime_error(std::format("failed to parse {} as a color", var)); - DATA->m_vColors.emplace_back(COL.value()); + DATA->m_colors.emplace_back(COL.value()); } catch (std::exception& e) { Debug::log(WARN, "Error parsing gradient {}", V); parseError = "Error parsing gradient " + V + ": " + e.what(); } } - if (DATA->m_vColors.size() == 0) { + if (DATA->m_colors.size() == 0) { Debug::log(WARN, "Error parsing gradient {}", V); if (parseError.empty()) parseError = "Error parsing gradient " + V + ": No colors?"; - DATA->m_vColors.emplace_back(0); // transparent + DATA->m_colors.emplace_back(0); // transparent } DATA->updateColorsOk(); @@ -389,34 +389,34 @@ static Hyprlang::CParseResult handlePermission(const char* c, const char* v) { void CConfigManager::registerConfigVar(const char* name, const Hyprlang::INT& val) { m_configValueNumber++; - m_pConfig->addConfigValue(name, val); + m_config->addConfigValue(name, val); } void CConfigManager::registerConfigVar(const char* name, const Hyprlang::FLOAT& val) { m_configValueNumber++; - m_pConfig->addConfigValue(name, val); + m_config->addConfigValue(name, val); } void CConfigManager::registerConfigVar(const char* name, const Hyprlang::VEC2& val) { m_configValueNumber++; - m_pConfig->addConfigValue(name, val); + m_config->addConfigValue(name, val); } void CConfigManager::registerConfigVar(const char* name, const Hyprlang::STRING& val) { m_configValueNumber++; - m_pConfig->addConfigValue(name, val); + m_config->addConfigValue(name, val); } void CConfigManager::registerConfigVar(const char* name, Hyprlang::CUSTOMTYPE&& val) { m_configValueNumber++; - m_pConfig->addConfigValue(name, std::move(val)); + m_config->addConfigValue(name, std::move(val)); } CConfigManager::CConfigManager() { const auto ERR = verifyConfigExists(); m_configPaths.emplace_back(getMainConfigPath()); - m_pConfig = makeUnique(m_configPaths.begin()->c_str(), Hyprlang::SConfigOptions{.throwAllErrors = true, .allowMissingConfig = true}); + m_config = makeUnique(m_configPaths.begin()->c_str(), Hyprlang::SConfigOptions{.throwAllErrors = true, .allowMissingConfig = true}); registerConfigVar("general:border_size", Hyprlang::INT{1}); registerConfigVar("general:no_border_on_floating", Hyprlang::INT{0}); @@ -722,71 +722,71 @@ CConfigManager::CConfigManager() { registerConfigVar("experimental:xx_color_management_v4", Hyprlang::INT{0}); // devices - m_pConfig->addSpecialCategory("device", {"name"}); - m_pConfig->addSpecialConfigValue("device", "sensitivity", {0.F}); - m_pConfig->addSpecialConfigValue("device", "accel_profile", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "kb_file", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "kb_layout", {"us"}); - m_pConfig->addSpecialConfigValue("device", "kb_variant", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "kb_options", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "kb_rules", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "kb_model", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "repeat_rate", Hyprlang::INT{25}); - m_pConfig->addSpecialConfigValue("device", "repeat_delay", Hyprlang::INT{600}); - m_pConfig->addSpecialConfigValue("device", "natural_scroll", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "tap_button_map", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "numlock_by_default", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "resolve_binds_by_sym", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "disable_while_typing", Hyprlang::INT{1}); - m_pConfig->addSpecialConfigValue("device", "clickfinger_behavior", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "middle_button_emulation", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "tap-to-click", Hyprlang::INT{1}); - m_pConfig->addSpecialConfigValue("device", "tap-and-drag", Hyprlang::INT{1}); - m_pConfig->addSpecialConfigValue("device", "drag_lock", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "left_handed", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "scroll_method", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "scroll_button", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "scroll_button_lock", Hyprlang::INT{0}); - m_pConfig->addSpecialConfigValue("device", "scroll_points", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "transform", Hyprlang::INT{-1}); - m_pConfig->addSpecialConfigValue("device", "output", {STRVAL_EMPTY}); - m_pConfig->addSpecialConfigValue("device", "enabled", Hyprlang::INT{1}); // only for mice, touchpads, and touchdevices - m_pConfig->addSpecialConfigValue("device", "region_position", Hyprlang::VEC2{0, 0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "absolute_region_position", Hyprlang::INT{0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "region_size", Hyprlang::VEC2{0, 0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "relative_input", Hyprlang::INT{0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "active_area_position", Hyprlang::VEC2{0, 0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "active_area_size", Hyprlang::VEC2{0, 0}); // only for tablets - m_pConfig->addSpecialConfigValue("device", "flip_x", Hyprlang::INT{0}); // only for touchpads - m_pConfig->addSpecialConfigValue("device", "flip_y", Hyprlang::INT{0}); // only for touchpads - m_pConfig->addSpecialConfigValue("device", "keybinds", Hyprlang::INT{1}); // enable/disable keybinds + m_config->addSpecialCategory("device", {"name"}); + m_config->addSpecialConfigValue("device", "sensitivity", {0.F}); + m_config->addSpecialConfigValue("device", "accel_profile", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "kb_file", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "kb_layout", {"us"}); + m_config->addSpecialConfigValue("device", "kb_variant", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "kb_options", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "kb_rules", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "kb_model", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "repeat_rate", Hyprlang::INT{25}); + m_config->addSpecialConfigValue("device", "repeat_delay", Hyprlang::INT{600}); + m_config->addSpecialConfigValue("device", "natural_scroll", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "tap_button_map", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "numlock_by_default", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "resolve_binds_by_sym", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "disable_while_typing", Hyprlang::INT{1}); + m_config->addSpecialConfigValue("device", "clickfinger_behavior", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "middle_button_emulation", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "tap-to-click", Hyprlang::INT{1}); + m_config->addSpecialConfigValue("device", "tap-and-drag", Hyprlang::INT{1}); + m_config->addSpecialConfigValue("device", "drag_lock", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "left_handed", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "scroll_method", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "scroll_button", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "scroll_button_lock", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("device", "scroll_points", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "transform", Hyprlang::INT{-1}); + m_config->addSpecialConfigValue("device", "output", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("device", "enabled", Hyprlang::INT{1}); // only for mice, touchpads, and touchdevices + m_config->addSpecialConfigValue("device", "region_position", Hyprlang::VEC2{0, 0}); // only for tablets + m_config->addSpecialConfigValue("device", "absolute_region_position", Hyprlang::INT{0}); // only for tablets + m_config->addSpecialConfigValue("device", "region_size", Hyprlang::VEC2{0, 0}); // only for tablets + m_config->addSpecialConfigValue("device", "relative_input", Hyprlang::INT{0}); // only for tablets + m_config->addSpecialConfigValue("device", "active_area_position", Hyprlang::VEC2{0, 0}); // only for tablets + m_config->addSpecialConfigValue("device", "active_area_size", Hyprlang::VEC2{0, 0}); // only for tablets + m_config->addSpecialConfigValue("device", "flip_x", Hyprlang::INT{0}); // only for touchpads + m_config->addSpecialConfigValue("device", "flip_y", Hyprlang::INT{0}); // only for touchpads + m_config->addSpecialConfigValue("device", "keybinds", Hyprlang::INT{1}); // enable/disable keybinds // keywords - m_pConfig->registerHandler(&::handleExec, "exec", {false}); - m_pConfig->registerHandler(&::handleRawExec, "execr", {false}); - m_pConfig->registerHandler(&::handleExecOnce, "exec-once", {false}); - m_pConfig->registerHandler(&::handleExecRawOnce, "execr-once", {false}); - m_pConfig->registerHandler(&::handleExecShutdown, "exec-shutdown", {false}); - m_pConfig->registerHandler(&::handleMonitor, "monitor", {false}); - m_pConfig->registerHandler(&::handleBind, "bind", {true}); - m_pConfig->registerHandler(&::handleUnbind, "unbind", {false}); - m_pConfig->registerHandler(&::handleWorkspaceRules, "workspace", {false}); - m_pConfig->registerHandler(&::handleWindowRule, "windowrule", {false}); - m_pConfig->registerHandler(&::handleLayerRule, "layerrule", {false}); - m_pConfig->registerHandler(&::handleWindowRuleV2, "windowrulev2", {false}); - m_pConfig->registerHandler(&::handleBezier, "bezier", {false}); - m_pConfig->registerHandler(&::handleAnimation, "animation", {false}); - m_pConfig->registerHandler(&::handleSource, "source", {false}); - m_pConfig->registerHandler(&::handleSubmap, "submap", {false}); - m_pConfig->registerHandler(&::handleBlurLS, "blurls", {false}); - m_pConfig->registerHandler(&::handlePlugin, "plugin", {false}); - m_pConfig->registerHandler(&::handlePermission, "permission", {false}); - m_pConfig->registerHandler(&::handleEnv, "env", {true}); + m_config->registerHandler(&::handleExec, "exec", {false}); + m_config->registerHandler(&::handleRawExec, "execr", {false}); + m_config->registerHandler(&::handleExecOnce, "exec-once", {false}); + m_config->registerHandler(&::handleExecRawOnce, "execr-once", {false}); + m_config->registerHandler(&::handleExecShutdown, "exec-shutdown", {false}); + m_config->registerHandler(&::handleMonitor, "monitor", {false}); + m_config->registerHandler(&::handleBind, "bind", {true}); + m_config->registerHandler(&::handleUnbind, "unbind", {false}); + m_config->registerHandler(&::handleWorkspaceRules, "workspace", {false}); + m_config->registerHandler(&::handleWindowRule, "windowrule", {false}); + m_config->registerHandler(&::handleLayerRule, "layerrule", {false}); + m_config->registerHandler(&::handleWindowRuleV2, "windowrulev2", {false}); + m_config->registerHandler(&::handleBezier, "bezier", {false}); + m_config->registerHandler(&::handleAnimation, "animation", {false}); + m_config->registerHandler(&::handleSource, "source", {false}); + m_config->registerHandler(&::handleSubmap, "submap", {false}); + m_config->registerHandler(&::handleBlurLS, "blurls", {false}); + m_config->registerHandler(&::handlePlugin, "plugin", {false}); + m_config->registerHandler(&::handlePermission, "permission", {false}); + m_config->registerHandler(&::handleEnv, "env", {true}); // pluginza - m_pConfig->addSpecialCategory("plugin", {nullptr, true}); + m_config->addSpecialCategory("plugin", {nullptr, true}); - m_pConfig->commence(); + m_config->commence(); resetHLConfig(); @@ -800,8 +800,8 @@ CConfigManager::CConfigManager() { "https://wiki.hyprland.org/Configuring/Variables/#debug"); } - Debug::disableLogs = reinterpret_cast(m_pConfig->getConfigValuePtr("debug:disable_logs")->getDataStaticPtr()); - Debug::disableTime = reinterpret_cast(m_pConfig->getConfigValuePtr("debug:disable_time")->getDataStaticPtr()); + Debug::disableLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_logs")->getDataStaticPtr()); + Debug::disableTime = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_time")->getDataStaticPtr()); if (g_pEventLoopManager && ERR.has_value()) g_pEventLoopManager->doLater([ERR] { g_pHyprError->queueCreate(ERR.value(), CHyprColor{1.0, 0.1, 0.1, 1.0}); }); @@ -879,89 +879,89 @@ std::string CConfigManager::getConfigString() { } std::string CConfigManager::getErrors() { - return m_szConfigErrors; + return m_configErrors; } void CConfigManager::reload() { EMIT_HOOK_EVENT("preConfigReload", nullptr); setDefaultAnimationVars(); resetHLConfig(); - configCurrentPath = getMainConfigPath(); - const auto ERR = m_pConfig->parse(); - m_bLastConfigVerificationWasSuccessful = !ERR.error; + m_configCurrentPath = getMainConfigPath(); + const auto ERR = m_config->parse(); + m_lastConfigVerificationWasSuccessful = !ERR.error; postConfigReload(ERR); } std::string CConfigManager::verify() { setDefaultAnimationVars(); resetHLConfig(); - configCurrentPath = getMainConfigPath(); - const auto ERR = m_pConfig->parse(); - m_bLastConfigVerificationWasSuccessful = !ERR.error; + m_configCurrentPath = getMainConfigPath(); + const auto ERR = m_config->parse(); + m_lastConfigVerificationWasSuccessful = !ERR.error; if (ERR.error) return ERR.getError(); return "config ok"; } void CConfigManager::setDefaultAnimationVars() { - m_AnimationTree.createNode("__internal_fadeCTM"); - m_AnimationTree.createNode("global"); + m_animationTree.createNode("__internal_fadeCTM"); + m_animationTree.createNode("global"); // global - m_AnimationTree.createNode("windows", "global"); - m_AnimationTree.createNode("layers", "global"); - m_AnimationTree.createNode("fade", "global"); - m_AnimationTree.createNode("border", "global"); - m_AnimationTree.createNode("borderangle", "global"); - m_AnimationTree.createNode("workspaces", "global"); + m_animationTree.createNode("windows", "global"); + m_animationTree.createNode("layers", "global"); + m_animationTree.createNode("fade", "global"); + m_animationTree.createNode("border", "global"); + m_animationTree.createNode("borderangle", "global"); + m_animationTree.createNode("workspaces", "global"); // layer - m_AnimationTree.createNode("layersIn", "layers"); - m_AnimationTree.createNode("layersOut", "layers"); + m_animationTree.createNode("layersIn", "layers"); + m_animationTree.createNode("layersOut", "layers"); // windows - m_AnimationTree.createNode("windowsIn", "windows"); - m_AnimationTree.createNode("windowsOut", "windows"); - m_AnimationTree.createNode("windowsMove", "windows"); + m_animationTree.createNode("windowsIn", "windows"); + m_animationTree.createNode("windowsOut", "windows"); + m_animationTree.createNode("windowsMove", "windows"); // fade - m_AnimationTree.createNode("fadeIn", "fade"); - m_AnimationTree.createNode("fadeOut", "fade"); - m_AnimationTree.createNode("fadeSwitch", "fade"); - m_AnimationTree.createNode("fadeShadow", "fade"); - m_AnimationTree.createNode("fadeDim", "fade"); - m_AnimationTree.createNode("fadeLayers", "fade"); - m_AnimationTree.createNode("fadeLayersIn", "fadeLayers"); - m_AnimationTree.createNode("fadeLayersOut", "fadeLayers"); + m_animationTree.createNode("fadeIn", "fade"); + m_animationTree.createNode("fadeOut", "fade"); + m_animationTree.createNode("fadeSwitch", "fade"); + m_animationTree.createNode("fadeShadow", "fade"); + m_animationTree.createNode("fadeDim", "fade"); + m_animationTree.createNode("fadeLayers", "fade"); + m_animationTree.createNode("fadeLayersIn", "fadeLayers"); + m_animationTree.createNode("fadeLayersOut", "fadeLayers"); // workspaces - m_AnimationTree.createNode("workspacesIn", "workspaces"); - m_AnimationTree.createNode("workspacesOut", "workspaces"); - m_AnimationTree.createNode("specialWorkspace", "workspaces"); - m_AnimationTree.createNode("specialWorkspaceIn", "specialWorkspace"); - m_AnimationTree.createNode("specialWorkspaceOut", "specialWorkspace"); + m_animationTree.createNode("workspacesIn", "workspaces"); + m_animationTree.createNode("workspacesOut", "workspaces"); + m_animationTree.createNode("specialWorkspace", "workspaces"); + m_animationTree.createNode("specialWorkspaceIn", "specialWorkspace"); + m_animationTree.createNode("specialWorkspaceOut", "specialWorkspace"); // init the root nodes - m_AnimationTree.setConfigForNode("global", 1, 8.f, "default"); - m_AnimationTree.setConfigForNode("__internal_fadeCTM", 1, 5.f, "linear"); - m_AnimationTree.setConfigForNode("borderangle", 0, 1, "default"); + m_animationTree.setConfigForNode("global", 1, 8.f, "default"); + m_animationTree.setConfigForNode("__internal_fadeCTM", 1, 5.f, "linear"); + m_animationTree.setConfigForNode("borderangle", 0, 1, "default"); } std::optional CConfigManager::resetHLConfig() { - m_vMonitorRules.clear(); - m_vWindowRules.clear(); + m_monitorRules.clear(); + m_windowRules.clear(); g_pKeybindManager->clearKeybinds(); g_pAnimationManager->removeAllBeziers(); g_pAnimationManager->addBezierWithName("linear", Vector2D(0.0, 0.0), Vector2D(1.0, 1.0)); m_mAdditionalReservedAreas.clear(); - m_dBlurLSNamespaces.clear(); - m_vWorkspaceRules.clear(); + m_blurLSNamespaces.clear(); + m_workspaceRules.clear(); setDefaultAnimationVars(); // reset anims - m_vDeclaredPlugins.clear(); - m_vLayerRules.clear(); - m_vFailedPluginConfigValues.clear(); - finalExecRequests.clear(); + m_declaredPlugins.clear(); + m_layerRules.clear(); + m_failedPluginConfigValues.clear(); + m_finalExecRequests.clear(); g_pDynamicPermissionManager->clearConfigPermissions(); @@ -995,7 +995,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); // Update the keyboard layout to the cfg'd one if this is not the first launch - if (!isFirstLaunch) { + if (!m_isFirstLaunch) { g_pInputManager->setKeyboardLayout(); g_pInputManager->setPointerConfigs(); g_pInputManager->setTouchDeviceConfigs(); @@ -1009,13 +1009,13 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { // parseError will be displayed next frame if (result.error) - m_szConfigErrors = result.getError(); + m_configErrors = result.getError(); else - m_szConfigErrors = ""; + m_configErrors = ""; - if (result.error && !std::any_cast(m_pConfig->getConfigValue("debug:suppress_errors"))) + if (result.error && !std::any_cast(m_config->getConfigValue("debug:suppress_errors"))) g_pHyprError->queueCreate(result.getError(), CHyprColor(1.0, 50.0 / 255.0, 50.0 / 255.0, 1.0)); - else if (std::any_cast(m_pConfig->getConfigValue("autogenerated")) == 1) + else if (std::any_cast(m_config->getConfigValue("autogenerated")) == 1) g_pHyprError->queueCreate( "Warning: You're using an autogenerated config! Edit the config file to get rid of this message. (config file: " + getMainConfigPath() + " )\nSUPER+Q -> kitty (if it doesn't launch, make sure it's installed or choose a different terminal in the config)\nSUPER+M -> exit Hyprland", @@ -1029,7 +1029,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { // not on first launch because monitors might not exist yet // and they'll be taken care of in the newMonitor event // ignore if nomonitorreload is set - if (!isFirstLaunch && !m_bNoMonitorReload) { + if (!m_isFirstLaunch && !m_noMonitorReload) { // check performMonitorReload(); ensureMonitorStatus(); @@ -1037,10 +1037,10 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { } #ifndef NO_XWAYLAND - const auto PENABLEXWAYLAND = std::any_cast(m_pConfig->getConfigValue("xwayland:enabled")); + const auto PENABLEXWAYLAND = std::any_cast(m_config->getConfigValue("xwayland:enabled")); g_pCompositor->m_bWantsXwayland = PENABLEXWAYLAND; // enable/disable xwayland usage - if (!isFirstLaunch && + if (!m_isFirstLaunch && g_pXWayland /* XWayland has to be initialized by CCompositor::initManagers for this to make sense, and it doesn't have to be (e.g. very early plugin load) */) { bool prevEnabledXwayland = g_pXWayland->enabled(); if (g_pCompositor->m_bWantsXwayland != prevEnabledXwayland) @@ -1049,7 +1049,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pCompositor->m_bWantsXwayland = PENABLEXWAYLAND; #endif - if (!isFirstLaunch && !g_pCompositor->m_bUnsafeState) + if (!m_isFirstLaunch && !g_pCompositor->m_bUnsafeState) refreshGroupBarGradients(); // Updates dynamic window and workspace rules @@ -1064,23 +1064,23 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pCompositor->updateAllWindowsAnimatedDecorationValues(); // update layout - g_pLayoutManager->switchToLayout(std::any_cast(m_pConfig->getConfigValue("general:layout"))); + g_pLayoutManager->switchToLayout(std::any_cast(m_config->getConfigValue("general:layout"))); // manual crash - if (std::any_cast(m_pConfig->getConfigValue("debug:manual_crash")) && !m_bManualCrashInitiated) { - m_bManualCrashInitiated = true; + if (std::any_cast(m_config->getConfigValue("debug:manual_crash")) && !m_manualCrashInitiated) { + m_manualCrashInitiated = true; g_pHyprNotificationOverlay->addNotification("Manual crash has been set up. Set debug:manual_crash back to 0 in order to crash the compositor.", CHyprColor(0), 5000, ICON_INFO); - } else if (m_bManualCrashInitiated && !std::any_cast(m_pConfig->getConfigValue("debug:manual_crash"))) { + } else if (m_manualCrashInitiated && !std::any_cast(m_config->getConfigValue("debug:manual_crash"))) { // cowabunga it is g_pHyprRenderer->initiateManualCrash(); } - Debug::disableStdout = !std::any_cast(m_pConfig->getConfigValue("debug:enable_stdout_logs")); - if (Debug::disableStdout && isFirstLaunch) + Debug::disableStdout = !std::any_cast(m_config->getConfigValue("debug:enable_stdout_logs")); + if (Debug::disableStdout && m_isFirstLaunch) Debug::log(LOG, "Disabling stdout logs! Check the log for further logs."); - Debug::coloredLogs = reinterpret_cast(m_pConfig->getConfigValuePtr("debug:colored_stdout_logs")->getDataStaticPtr()); + Debug::coloredLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:colored_stdout_logs")->getDataStaticPtr()); for (auto const& m : g_pCompositor->m_vMonitors) { // mark blur dirty @@ -1097,13 +1097,13 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { } // Reset no monitor reload - m_bNoMonitorReload = false; + m_noMonitorReload = false; // update plugins handlePluginLoads(); // update persistent workspaces - if (!isFirstLaunch) + if (!m_isFirstLaunch) ensurePersistentWorkspacesPresent(); EMIT_HOOK_EVENT("configReloaded", nullptr); @@ -1121,14 +1121,14 @@ void CConfigManager::init() { const std::string CONFIGPATH = getMainConfigPath(); reload(); - isFirstLaunch = false; + m_isFirstLaunch = false; } std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std::string& VALUE) { static const auto PENABLEEXPLICIT = CConfigValue("render:explicit_sync"); static int prevEnabledExplicit = *PENABLEEXPLICIT; - const auto RET = m_pConfig->parseDynamic(COMMAND.c_str(), VALUE.c_str()); + const auto RET = m_config->parseDynamic(COMMAND.c_str(), VALUE.c_str()); // invalidate layouts if they changed if (COMMAND == "monitor" || COMMAND.contains("gaps_") || COMMAND.starts_with("dwindle:") || COMMAND.starts_with("master:")) { @@ -1147,13 +1147,13 @@ std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std:: g_pCompositor->updateAllWindowsAnimatedDecorationValues(); // manual crash - if (std::any_cast(m_pConfig->getConfigValue("debug:manual_crash")) && !m_bManualCrashInitiated) { - m_bManualCrashInitiated = true; + if (std::any_cast(m_config->getConfigValue("debug:manual_crash")) && !m_manualCrashInitiated) { + m_manualCrashInitiated = true; if (g_pHyprNotificationOverlay) { g_pHyprNotificationOverlay->addNotification("Manual crash has been set up. Set debug:manual_crash back to 0 in order to crash the compositor.", CHyprColor(0), 5000, ICON_INFO); } - } else if (m_bManualCrashInitiated && !std::any_cast(m_pConfig->getConfigValue("debug:manual_crash"))) { + } else if (m_manualCrashInitiated && !std::any_cast(m_config->getConfigValue("debug:manual_crash"))) { // cowabunga it is g_pHyprRenderer->initiateManualCrash(); } @@ -1163,10 +1163,10 @@ std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std:: Hyprlang::CConfigValue* CConfigManager::getConfigValueSafeDevice(const std::string& dev, const std::string& val, const std::string& fallback) { - const auto VAL = m_pConfig->getSpecialConfigValuePtr("device", val.c_str(), dev.c_str()); + const auto VAL = m_config->getSpecialConfigValuePtr("device", val.c_str(), dev.c_str()); if ((!VAL || !VAL->m_bSetByUser) && !fallback.empty()) { - return m_pConfig->getConfigValuePtr(fallback.c_str()); + return m_config->getConfigValuePtr(fallback.c_str()); } return VAL; @@ -1236,7 +1236,7 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) { return rule; }; - for (auto const& r : m_vMonitorRules | std::views::reverse) { + for (auto const& r : m_monitorRules | std::views::reverse) { if (PMONITOR->matchesStaticSelector(r.name)) { return applyWlrOutputConfig(r); } @@ -1244,7 +1244,7 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) { Debug::log(WARN, "No rule found for {}, trying to use the first.", PMONITOR->szName); - for (auto const& r : m_vMonitorRules) { + for (auto const& r : m_monitorRules) { if (r.name.empty()) { return applyWlrOutputConfig(r); } @@ -1261,7 +1261,7 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) { SWorkspaceRule CConfigManager::getWorkspaceRuleFor(PHLWORKSPACE pWorkspace) { SWorkspaceRule mergedRule{}; - for (auto const& rule : m_vWorkspaceRules) { + for (auto const& rule : m_workspaceRules) { if (!pWorkspace->matchesStaticSelector(rule.workspaceString)) continue; @@ -1331,7 +1331,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, // local tags for dynamic tag rule match auto tags = pWindow->m_tags; - for (auto const& rule : m_vWindowRules) { + for (auto const& rule : m_windowRules) { // check if we have a matching rule if (!rule->v2) { try { @@ -1484,7 +1484,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, bool anyExecFound = false; - for (auto const& er : execRequestedRules) { + for (auto const& er : m_execRequestedRules) { if (std::ranges::any_of(PIDs, [&](const auto& pid) { return pid == er.iPid; })) { returns.emplace_back(makeShared(er.szRule, "", false, true)); anyExecFound = true; @@ -1492,7 +1492,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, } if (anyExecFound && !shadowExec) // remove exec rules to unclog searches in the future, why have the garbage here. - std::erase_if(execRequestedRules, [&](const SExecRequestedRule& other) { return std::ranges::any_of(PIDs, [&](const auto& pid) { return pid == other.iPid; }); }); + std::erase_if(m_execRequestedRules, [&](const SExecRequestedRule& other) { return std::ranges::any_of(PIDs, [&](const auto& pid) { return pid == other.iPid; }); }); return returns; } @@ -1503,7 +1503,7 @@ std::vector> CConfigManager::getMatchingRules(PHLLS pLS) { if (!pLS->layerSurface || pLS->fadingOut) return returns; - for (auto const& lr : m_vLayerRules) { + for (auto const& lr : m_layerRules) { if (lr->targetNamespace.starts_with("address:0x")) { if (std::format("address:0x{:x}", (uintptr_t)pLS.get()) != lr->targetNamespace) continue; @@ -1521,7 +1521,7 @@ std::vector> CConfigManager::getMatchingRules(PHLLS pLS) { } void CConfigManager::dispatchExecOnce() { - if (firstExecDispatched || isFirstLaunch) + if (m_firstExecDispatched || m_isFirstLaunch) return; // update dbus env @@ -1533,15 +1533,15 @@ void CConfigManager::dispatchExecOnce() { #endif "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS"); - firstExecDispatched = true; - isLaunchingExecOnce = true; + m_firstExecDispatched = true; + m_isLaunchingExecOnce = true; - for (auto const& c : firstExecRequests) { + for (auto const& c : m_firstExecRequests) { c.withRules ? handleExec("", c.exec) : handleRawExec("", c.exec); } - firstExecRequests.clear(); // free some kb of memory :P - isLaunchingExecOnce = false; + m_firstExecRequests.clear(); // free some kb of memory :P + m_isLaunchingExecOnce = false; // set input, fixes some certain issues g_pInputManager->setKeyboardLayout(); @@ -1554,18 +1554,18 @@ void CConfigManager::dispatchExecOnce() { } void CConfigManager::dispatchExecShutdown() { - if (finalExecRequests.empty()) { + if (m_finalExecRequests.empty()) { g_pCompositor->m_bFinalRequests = false; return; } g_pCompositor->m_bFinalRequests = true; - for (auto const& c : finalExecRequests) { + for (auto const& c : m_finalExecRequests) { handleExecShutdown("", c); } - finalExecRequests.clear(); + m_finalExecRequests.clear(); // Actually exit now handleExecShutdown("", "hyprctl dispatch exit"); @@ -1595,13 +1595,13 @@ void CConfigManager::performMonitorReload() { if (overAgain) performMonitorReload(); - m_bWantsMonitorReload = false; + m_wantsMonitorReload = false; EMIT_HOOK_EVENT("monitorLayoutChanged", nullptr); } void* const* CConfigManager::getConfigValuePtr(const std::string& val) { - const auto VAL = m_pConfig->getConfigValuePtr(val.c_str()); + const auto VAL = m_config->getConfigValuePtr(val.c_str()); if (!VAL) return nullptr; return VAL->getDataStaticPtr(); @@ -1609,20 +1609,20 @@ void* const* CConfigManager::getConfigValuePtr(const std::string& val) { Hyprlang::CConfigValue* CConfigManager::getHyprlangConfigValuePtr(const std::string& name, const std::string& specialCat) { if (!specialCat.empty()) - return m_pConfig->getSpecialConfigValuePtr(specialCat.c_str(), name.c_str(), nullptr); + return m_config->getSpecialConfigValuePtr(specialCat.c_str(), name.c_str(), nullptr); - return m_pConfig->getConfigValuePtr(name.c_str()); + return m_config->getConfigValuePtr(name.c_str()); } bool CConfigManager::deviceConfigExists(const std::string& dev) { auto copy = dev; std::replace(copy.begin(), copy.end(), ' ', '-'); - return m_pConfig->specialCategoryExistsForKey("device", copy.c_str()); + return m_config->specialCategoryExistsForKey("device", copy.c_str()); } bool CConfigManager::shouldBlurLS(const std::string& ns) { - for (auto const& bls : m_dBlurLSNamespaces) { + for (auto const& bls : m_blurLSNamespaces) { if (bls == ns) { return true; } @@ -1720,7 +1720,7 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { } SP CConfigManager::getAnimationPropertyConfig(const std::string& name) { - return m_AnimationTree.getConfig(name); + return m_animationTree.getConfig(name); } void CConfigManager::addParseError(const std::string& err) { @@ -1736,7 +1736,7 @@ PHLMONITOR CConfigManager::getBoundMonitorForWS(const std::string& wsname) { } std::string CConfigManager::getBoundMonitorStringForWS(const std::string& wsname) { - for (auto const& wr : m_vWorkspaceRules) { + for (auto const& wr : m_workspaceRules) { const auto WSNAME = wr.workspaceName.starts_with("name:") ? wr.workspaceName.substr(5) : wr.workspaceName; if (WSNAME == wsname) @@ -1747,11 +1747,11 @@ std::string CConfigManager::getBoundMonitorStringForWS(const std::string& wsname } const std::vector& CConfigManager::getAllWorkspaceRules() { - return m_vWorkspaceRules; + return m_workspaceRules; } void CConfigManager::addExecRule(const SExecRequestedRule& rule) { - execRequestedRules.push_back(rule); + m_execRequestedRules.push_back(rule); } void CConfigManager::handlePluginLoads() { @@ -1759,7 +1759,7 @@ void CConfigManager::handlePluginLoads() { return; bool pluginsChanged = false; - auto failedPlugins = g_pPluginSystem->updateConfigPlugins(m_vDeclaredPlugins, pluginsChanged); + auto failedPlugins = g_pPluginSystem->updateConfigPlugins(m_declaredPlugins, pluginsChanged); if (!failedPlugins.empty()) { std::stringstream error; @@ -1779,7 +1779,7 @@ void CConfigManager::handlePluginLoads() { } const std::unordered_map>& CConfigManager::getAnimationConfig() { - return m_AnimationTree.getFullConfig(); + return m_animationTree.getFullConfig(); } void CConfigManager::addPluginConfigVar(HANDLE handle, const std::string& name, const Hyprlang::CConfigValue& value) { @@ -1788,35 +1788,35 @@ void CConfigManager::addPluginConfigVar(HANDLE handle, const std::string& name, std::string field = name.substr(7); - m_pConfig->addSpecialConfigValue("plugin", field.c_str(), value); - pluginVariables.push_back({handle, field}); + m_config->addSpecialConfigValue("plugin", field.c_str(), value); + m_pluginVariables.push_back({handle, field}); } void CConfigManager::addPluginKeyword(HANDLE handle, const std::string& name, Hyprlang::PCONFIGHANDLERFUNC fn, Hyprlang::SHandlerOptions opts) { - pluginKeywords.emplace_back(SPluginKeyword{handle, name, fn}); - m_pConfig->registerHandler(fn, name.c_str(), opts); + m_pluginKeywords.emplace_back(SPluginKeyword{handle, name, fn}); + m_config->registerHandler(fn, name.c_str(), opts); } void CConfigManager::removePluginConfig(HANDLE handle) { - for (auto const& k : pluginKeywords) { + for (auto const& k : m_pluginKeywords) { if (k.handle != handle) continue; - m_pConfig->unregisterHandler(k.name.c_str()); + m_config->unregisterHandler(k.name.c_str()); } - std::erase_if(pluginKeywords, [&](const auto& other) { return other.handle == handle; }); - for (auto const& [h, n] : pluginVariables) { + std::erase_if(m_pluginKeywords, [&](const auto& other) { return other.handle == handle; }); + for (auto const& [h, n] : m_pluginVariables) { if (h != handle) continue; - m_pConfig->removeSpecialConfigValue("plugin", n.c_str()); + m_config->removeSpecialConfigValue("plugin", n.c_str()); } - std::erase_if(pluginVariables, [handle](const auto& other) { return other.handle == handle; }); + std::erase_if(m_pluginVariables, [handle](const auto& other) { return other.handle == handle; }); } std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) { - for (auto other = m_vWorkspaceRules.begin(); other != m_vWorkspaceRules.end(); ++other) { + for (auto other = m_workspaceRules.begin(); other != m_workspaceRules.end(); ++other) { if (other->isDefault) { if (other->monitor == name) return other->workspaceString; @@ -1831,8 +1831,8 @@ std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) { } std::optional CConfigManager::handleRawExec(const std::string& command, const std::string& args) { - if (isFirstLaunch) { - firstExecRequests.push_back({args, false}); + if (m_isFirstLaunch) { + m_firstExecRequests.push_back({args, false}); return {}; } @@ -1841,8 +1841,8 @@ std::optional CConfigManager::handleRawExec(const std::string& comm } std::optional CConfigManager::handleExec(const std::string& command, const std::string& args) { - if (isFirstLaunch) { - firstExecRequests.push_back({args, true}); + if (m_isFirstLaunch) { + m_firstExecRequests.push_back({args, true}); return {}; } @@ -1851,15 +1851,15 @@ std::optional CConfigManager::handleExec(const std::string& command } std::optional CConfigManager::handleExecOnce(const std::string& command, const std::string& args) { - if (isFirstLaunch) - firstExecRequests.push_back({args, true}); + if (m_isFirstLaunch) + m_firstExecRequests.push_back({args, true}); return {}; } std::optional CConfigManager::handleExecRawOnce(const std::string& command, const std::string& args) { - if (isFirstLaunch) - firstExecRequests.push_back({args, false}); + if (m_isFirstLaunch) + m_firstExecRequests.push_back({args, false}); return {}; } @@ -1870,7 +1870,7 @@ std::optional CConfigManager::handleExecShutdown(const std::string& return {}; } - finalExecRequests.push_back(args); + m_finalExecRequests.push_back(args); return {}; } @@ -1951,7 +1951,7 @@ std::optional CConfigManager::handleMonitor(const std::string& comm const auto TRANSFORM = (wl_output_transform)TSF; // overwrite if exists - for (auto& r : m_vMonitorRules) { + for (auto& r : m_monitorRules) { if (r.name == newrule.name) { r.transform = TRANSFORM; return {}; @@ -1976,9 +1976,9 @@ std::optional CConfigManager::handleMonitor(const std::string& comm return "parse error: curitem bogus"; } - std::erase_if(m_vMonitorRules, [&](const auto& other) { return other.name == newrule.name; }); + std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == newrule.name; }); - m_vMonitorRules.push_back(newrule); + m_monitorRules.push_back(newrule); return {}; } @@ -2016,7 +2016,7 @@ std::optional CConfigManager::handleMonitor(const std::string& comm if (ARGS[2].starts_with("auto")) { newrule.offset = Vector2D(-INT32_MAX, -INT32_MAX); // If this is the first monitor rule needs to be on the right. - if (ARGS[2] == "auto-right" || ARGS[2] == "auto" || m_vMonitorRules.empty()) + if (ARGS[2] == "auto-right" || ARGS[2] == "auto" || m_monitorRules.empty()) newrule.autoDir = eAutoDirs::DIR_AUTO_RIGHT; else if (ARGS[2] == "auto-left") newrule.autoDir = eAutoDirs::DIR_AUTO_LEFT; @@ -2125,7 +2125,7 @@ std::optional CConfigManager::handleMonitor(const std::string& comm wsRule.workspaceId = id; wsRule.workspaceName = name; - m_vWorkspaceRules.emplace_back(wsRule); + m_workspaceRules.emplace_back(wsRule); argno++; } else { Debug::log(ERR, "Config error: invalid monitor syntax at \"{}\"", ARGS[argno]); @@ -2135,9 +2135,9 @@ std::optional CConfigManager::handleMonitor(const std::string& comm argno++; } - std::erase_if(m_vMonitorRules, [&](const auto& other) { return other.name == newrule.name; }); + std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == newrule.name; }); - m_vMonitorRules.push_back(newrule); + m_monitorRules.push_back(newrule); if (error.empty()) return {}; @@ -2181,7 +2181,7 @@ std::optional CConfigManager::handleAnimation(const std::string& co // anim name const auto ANIMNAME = ARGS[0]; - if (!m_AnimationTree.nodeExists(ANIMNAME)) + if (!m_animationTree.nodeExists(ANIMNAME)) return "no such animation"; // This helper casts strings like "1", "true", "off", "yes"... to int. @@ -2192,7 +2192,7 @@ std::optional CConfigManager::handleAnimation(const std::string& co return "invalid animation on/off state"; if (!enabledInt) { - m_AnimationTree.setConfigForNode(ANIMNAME, enabledInt, 1, "default"); + m_animationTree.setConfigForNode(ANIMNAME, enabledInt, 1, "default"); return {}; } @@ -2212,10 +2212,10 @@ std::optional CConfigManager::handleAnimation(const std::string& co } std::string bezierName = ARGS[3]; - m_AnimationTree.setConfigForNode(ANIMNAME, enabledInt, speed, ARGS[3], ARGS[4]); + m_animationTree.setConfigForNode(ANIMNAME, enabledInt, speed, ARGS[3], ARGS[4]); if (!g_pAnimationManager->bezierExists(bezierName)) { - const auto PANIMNODE = m_AnimationTree.getConfig(ANIMNAME); + const auto PANIMNODE = m_animationTree.getConfig(ANIMNAME); PANIMNODE->internalBezier = "default"; return "no such bezier"; } @@ -2356,13 +2356,13 @@ std::optional CConfigManager::handleBind(const std::string& command if ((KEY != "") || multiKey) { SParsedKey parsedKey = parseKey(KEY); - if (parsedKey.catchAll && m_szCurrentSubmap.empty()) { + if (parsedKey.catchAll && m_currentSubmap.empty()) { Debug::log(ERR, "Catchall not allowed outside of submap!"); return "Invalid catchall, catchall keybinds are only allowed in submaps."; } g_pKeybindManager->addKeybind(SKeybind{parsedKey.key, KEYSYMS, parsedKey.keycode, parsedKey.catchAll, MOD, MODS, HANDLER, - COMMAND, locked, m_szCurrentSubmap, DESCRIPTION, release, repeat, longPress, + COMMAND, locked, m_currentSubmap, DESCRIPTION, release, repeat, longPress, mouse, nonConsuming, transparent, ignoreMods, multiKey, hasDescription, dontInhibit, click, drag}); } @@ -2521,7 +2521,7 @@ std::optional CConfigManager::handleWindowRule(const std::string& c rule->szContentType = extract(CONTENTTYPEPOS + 8); if (RULE == "unset") { - std::erase_if(m_vWindowRules, [&](const auto& other) { + std::erase_if(m_windowRules, [&](const auto& other) { if (!other->v2) return other->szClass == rule->szClass && !rule->szClass.empty(); else { @@ -2574,9 +2574,9 @@ std::optional CConfigManager::handleWindowRule(const std::string& c } if (RULE.starts_with("size") || RULE.starts_with("maxsize") || RULE.starts_with("minsize")) - m_vWindowRules.insert(m_vWindowRules.begin(), rule); + m_windowRules.insert(m_windowRules.begin(), rule); else - m_vWindowRules.push_back(rule); + m_windowRules.push_back(rule); return {}; } @@ -2590,7 +2590,7 @@ std::optional CConfigManager::handleLayerRule(const std::string& co return "empty rule?"; if (RULE == "unset") { - std::erase_if(m_vLayerRules, [&](const auto& other) { return other->targetNamespace == VALUE; }); + std::erase_if(m_layerRules, [&](const auto& other) { return other->targetNamespace == VALUE; }); return {}; } @@ -2603,7 +2603,7 @@ std::optional CConfigManager::handleLayerRule(const std::string& co rule->targetNamespaceRegex = {VALUE}; - m_vLayerRules.emplace_back(rule); + m_layerRules.emplace_back(rule); for (auto const& m : g_pCompositor->m_vMonitors) for (auto const& lsl : m->m_aLayerSurfaceLayers) @@ -2636,12 +2636,12 @@ void CConfigManager::updateBlurredLS(const std::string& name, const bool forceBl std::optional CConfigManager::handleBlurLS(const std::string& command, const std::string& value) { if (value.starts_with("remove,")) { const auto TOREMOVE = trim(value.substr(7)); - if (std::erase_if(m_dBlurLSNamespaces, [&](const auto& other) { return other == TOREMOVE; })) + if (std::erase_if(m_blurLSNamespaces, [&](const auto& other) { return other == TOREMOVE; })) updateBlurredLS(TOREMOVE, false); return {}; } - m_dBlurLSNamespaces.emplace_back(value); + m_blurLSNamespaces.emplace_back(value); updateBlurredLS(value, true); return {}; @@ -2756,10 +2756,10 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin wsRule.workspaceId = id; wsRule.workspaceName = name; - const auto IT = std::find_if(m_vWorkspaceRules.begin(), m_vWorkspaceRules.end(), [&](const auto& other) { return other.workspaceString == wsRule.workspaceString; }); + const auto IT = std::find_if(m_workspaceRules.begin(), m_workspaceRules.end(), [&](const auto& other) { return other.workspaceString == wsRule.workspaceString; }); - if (IT == m_vWorkspaceRules.end()) - m_vWorkspaceRules.emplace_back(wsRule); + if (IT == m_workspaceRules.end()) + m_workspaceRules.emplace_back(wsRule); else *IT = mergeWorkspaceRules(*IT, wsRule); @@ -2768,9 +2768,9 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin std::optional CConfigManager::handleSubmap(const std::string& command, const std::string& submap) { if (submap == "reset") - m_szCurrentSubmap = ""; + m_currentSubmap = ""; else - m_szCurrentSubmap = submap; + m_currentSubmap = submap; return {}; } @@ -2789,7 +2789,7 @@ std::optional CConfigManager::handleSource(const std::string& comma } }}; - if (auto r = glob(absolutePath(rawpath, configCurrentPath).c_str(), GLOB_TILDE, nullptr, glob_buf.get()); r != 0) { + if (auto r = glob(absolutePath(rawpath, m_configCurrentPath).c_str(), GLOB_TILDE, nullptr, glob_buf.get()); r != 0) { std::string err = std::format("source= globbing error: {}", r == GLOB_NOMATCH ? "found no match" : GLOB_ABORTED ? "read error" : "out of memory"); Debug::log(ERR, "{}", err); return err; @@ -2798,7 +2798,7 @@ std::optional CConfigManager::handleSource(const std::string& comma std::string errorsFromParsing; for (size_t i = 0; i < glob_buf->gl_pathc; i++) { - auto value = absolutePath(glob_buf->gl_pathv[i], configCurrentPath); + auto value = absolutePath(glob_buf->gl_pathv[i], m_configCurrentPath); if (!std::filesystem::is_regular_file(value)) { if (std::filesystem::exists(value)) { @@ -2811,12 +2811,12 @@ std::optional CConfigManager::handleSource(const std::string& comma } m_configPaths.emplace_back(value); - auto configCurrentPathBackup = configCurrentPath; - configCurrentPath = value; + auto configCurrentPathBackup = m_configCurrentPath; + m_configCurrentPath = value; - const auto THISRESULT = m_pConfig->parseFile(value.c_str()); + const auto THISRESULT = m_config->parseFile(value.c_str()); - configCurrentPath = configCurrentPathBackup; + m_configCurrentPath = configCurrentPathBackup; if (THISRESULT.error && errorsFromParsing.empty()) errorsFromParsing += THISRESULT.getError(); @@ -2828,7 +2828,7 @@ std::optional CConfigManager::handleSource(const std::string& comma } std::optional CConfigManager::handleEnv(const std::string& command, const std::string& value) { - if (!isFirstLaunch) + if (!m_isFirstLaunch) return {}; const auto ARGS = CVarList(value, 2); @@ -2854,10 +2854,10 @@ std::optional CConfigManager::handleEnv(const std::string& command, } std::optional CConfigManager::handlePlugin(const std::string& command, const std::string& path) { - if (std::find(m_vDeclaredPlugins.begin(), m_vDeclaredPlugins.end(), path) != m_vDeclaredPlugins.end()) + if (std::find(m_declaredPlugins.begin(), m_declaredPlugins.end(), path) != m_declaredPlugins.end()) return "plugin '" + path + "' declared twice"; - m_vDeclaredPlugins.push_back(path); + m_declaredPlugins.push_back(path); return {}; } @@ -2909,7 +2909,7 @@ std::string SConfigOptionDescription::jsonify() const { auto parseData = [this]() -> std::string { return std::visit( [this](auto&& val) { - const auto PTR = g_pConfigManager->m_pConfig->getConfigValuePtr(value.c_str()); + const auto PTR = g_pConfigManager->m_config->getConfigValuePtr(value.c_str()); if (!PTR) { Debug::log(ERR, "invalid SConfigOptionDescription: no config option {} exists", value); return std::string{""}; @@ -3009,7 +3009,7 @@ std::string SConfigOptionDescription::jsonify() const { } void CConfigManager::ensurePersistentWorkspacesPresent() { - g_pCompositor->ensurePersistentWorkspacesPresent(m_vWorkspaceRules); + g_pCompositor->ensurePersistentWorkspacesPresent(m_workspaceRules); } void CConfigManager::storeFloatingSize(PHLWINDOW window, const Vector2D& size) { diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index 50ab798c..574d861d 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -246,47 +246,47 @@ class CConfigManager { std::optional handlePlugin(const std::string&, const std::string&); std::optional handlePermission(const std::string&, const std::string&); - std::string configCurrentPath; + std::string m_configCurrentPath; - bool m_bWantsMonitorReload = false; - bool m_bNoMonitorReload = false; - bool isLaunchingExecOnce = false; // For exec-once to skip initial ws tracking - bool m_bLastConfigVerificationWasSuccessful = true; + bool m_wantsMonitorReload = false; + bool m_noMonitorReload = false; + bool m_isLaunchingExecOnce = false; // For exec-once to skip initial ws tracking + bool m_lastConfigVerificationWasSuccessful = true; void storeFloatingSize(PHLWINDOW window, const Vector2D& size); std::optional getStoredFloatingSize(PHLWINDOW window); private: - UP m_pConfig; + UP m_config; std::vector m_configPaths; - Hyprutils::Animation::CAnimationConfigTree m_AnimationTree; + Hyprutils::Animation::CAnimationConfigTree m_animationTree; - std::string m_szCurrentSubmap = ""; // For storing the current keybind submap + std::string m_currentSubmap = ""; // For storing the current keybind submap - std::vector execRequestedRules; // rules requested with exec, e.g. [workspace 2] kitty + std::vector m_execRequestedRules; // rules requested with exec, e.g. [workspace 2] kitty - std::vector m_vDeclaredPlugins; - std::vector pluginKeywords; - std::vector pluginVariables; + std::vector m_declaredPlugins; + std::vector m_pluginKeywords; + std::vector m_pluginVariables; - bool isFirstLaunch = true; // For exec-once + bool m_isFirstLaunch = true; // For exec-once - std::vector m_vMonitorRules; - std::vector m_vWorkspaceRules; - std::vector> m_vWindowRules; - std::vector> m_vLayerRules; - std::vector m_dBlurLSNamespaces; + std::vector m_monitorRules; + std::vector m_workspaceRules; + std::vector> m_windowRules; + std::vector> m_layerRules; + std::vector m_blurLSNamespaces; - bool firstExecDispatched = false; - bool m_bManualCrashInitiated = false; + bool m_firstExecDispatched = false; + bool m_manualCrashInitiated = false; - std::vector firstExecRequests; // bool is for if with rules - std::vector finalExecRequests; + std::vector m_firstExecRequests; // bool is for if with rules + std::vector m_finalExecRequests; - std::vector> m_vFailedPluginConfigValues; // for plugin values of unloaded plugins - std::string m_szConfigErrors = ""; + std::vector> m_failedPluginConfigValues; // for plugin values of unloaded plugins + std::string m_configErrors = ""; uint32_t m_configValueNumber = 0; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 23385be8..bcd94830 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -341,10 +341,10 @@ static std::string getWorkspaceRuleData(const SWorkspaceRule& r, eHyprCtlOutputF const std::string default_ = (bool)(r.isDefault) ? std::format(",\n \"default\": {}", boolToString(r.isDefault)) : ""; const std::string persistent = (bool)(r.isPersistent) ? std::format(",\n \"persistent\": {}", boolToString(r.isPersistent)) : ""; const std::string gapsIn = (bool)(r.gapsIn) ? - std::format(",\n \"gapsIn\": [{}, {}, {}, {}]", r.gapsIn.value().top, r.gapsIn.value().right, r.gapsIn.value().bottom, r.gapsIn.value().left) : + std::format(",\n \"gapsIn\": [{}, {}, {}, {}]", r.gapsIn.value().m_top, r.gapsIn.value().m_right, r.gapsIn.value().m_bottom, r.gapsIn.value().m_left) : ""; const std::string gapsOut = (bool)(r.gapsOut) ? - std::format(",\n \"gapsOut\": [{}, {}, {}, {}]", r.gapsOut.value().top, r.gapsOut.value().right, r.gapsOut.value().bottom, r.gapsOut.value().left) : + std::format(",\n \"gapsOut\": [{}, {}, {}, {}]", r.gapsOut.value().m_top, r.gapsOut.value().m_right, r.gapsOut.value().m_bottom, r.gapsOut.value().m_left) : ""; const std::string borderSize = (bool)(r.borderSize) ? std::format(",\n \"borderSize\": {}", r.borderSize.value()) : ""; const std::string border = (bool)(r.noBorder) ? std::format(",\n \"border\": {}", boolToString(!r.noBorder.value())) : ""; @@ -361,15 +361,15 @@ static std::string getWorkspaceRuleData(const SWorkspaceRule& r, eHyprCtlOutputF return result; } else { - const std::string monitor = std::format("\tmonitor: {}\n", r.monitor.empty() ? "" : escapeJSONStrings(r.monitor)); - const std::string default_ = std::format("\tdefault: {}\n", (bool)(r.isDefault) ? boolToString(r.isDefault) : ""); - const std::string persistent = std::format("\tpersistent: {}\n", (bool)(r.isPersistent) ? boolToString(r.isPersistent) : ""); - const std::string gapsIn = (bool)(r.gapsIn) ? std::format("\tgapsIn: {} {} {} {}\n", std::to_string(r.gapsIn.value().top), std::to_string(r.gapsIn.value().right), - std::to_string(r.gapsIn.value().bottom), std::to_string(r.gapsIn.value().left)) : - std::format("\tgapsIn: \n"); - const std::string gapsOut = (bool)(r.gapsOut) ? std::format("\tgapsOut: {} {} {} {}\n", std::to_string(r.gapsOut.value().top), std::to_string(r.gapsOut.value().right), - std::to_string(r.gapsOut.value().bottom), std::to_string(r.gapsOut.value().left)) : - std::format("\tgapsOut: \n"); + const std::string monitor = std::format("\tmonitor: {}\n", r.monitor.empty() ? "" : escapeJSONStrings(r.monitor)); + const std::string default_ = std::format("\tdefault: {}\n", (bool)(r.isDefault) ? boolToString(r.isDefault) : ""); + const std::string persistent = std::format("\tpersistent: {}\n", (bool)(r.isPersistent) ? boolToString(r.isPersistent) : ""); + const std::string gapsIn = (bool)(r.gapsIn) ? std::format("\tgapsIn: {} {} {} {}\n", std::to_string(r.gapsIn.value().m_top), std::to_string(r.gapsIn.value().m_right), + std::to_string(r.gapsIn.value().m_bottom), std::to_string(r.gapsIn.value().m_left)) : + std::format("\tgapsIn: \n"); + const std::string gapsOut = (bool)(r.gapsOut) ? std::format("\tgapsOut: {} {} {} {}\n", std::to_string(r.gapsOut.value().m_top), std::to_string(r.gapsOut.value().m_right), + std::to_string(r.gapsOut.value().m_bottom), std::to_string(r.gapsOut.value().m_left)) : + std::format("\tgapsOut: \n"); const std::string borderSize = std::format("\tborderSize: {}\n", (bool)(r.borderSize) ? std::to_string(r.borderSize.value()) : ""); const std::string border = std::format("\tborder: {}\n", (bool)(r.noBorder) ? boolToString(!r.noBorder.value()) : ""); const std::string rounding = std::format("\trounding: {}\n", (bool)(r.noRounding) ? boolToString(!r.noRounding.value()) : ""); @@ -1086,7 +1086,7 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) // if we are executing a dynamic source we have to reload everything, so every if will have a check for source. if (COMMAND == "monitor" || COMMAND == "source") - g_pConfigManager->m_bWantsMonitorReload = true; // for monitor keywords + g_pConfigManager->m_wantsMonitorReload = true; // for monitor keywords if (COMMAND.contains("input") || COMMAND.contains("device") || COMMAND == "source") { g_pInputManager->setKeyboardLayout(); // update kb layout @@ -1134,7 +1134,7 @@ static std::string reloadRequest(eHyprCtlOutputFormat format, std::string reques const auto REQMODE = request.substr(request.find_last_of(' ') + 1); if (REQMODE == "config-only") - g_pConfigManager->m_bNoMonitorReload = true; + g_pConfigManager->m_noMonitorReload = true; g_pConfigManager->reload(); @@ -1773,7 +1773,7 @@ std::string CHyprCtl::getReply(std::string request) { return "unknown request"; if (reloadAll) { - g_pConfigManager->m_bWantsMonitorReload = true; // for monitor keywords + g_pConfigManager->m_wantsMonitorReload = true; // for monitor keywords g_pInputManager->setKeyboardLayout(); // update kb layout g_pInputManager->setPointerConfigs(); // update mouse cfgs @@ -1911,7 +1911,7 @@ static int hyprCtlFDTick(int fd, uint32_t mask, void* data) { } else close(ACCEPTEDCONNECTION); - if (g_pConfigManager->m_bWantsMonitorReload) + if (g_pConfigManager->m_wantsMonitorReload) g_pConfigManager->ensureMonitorStatus(); return 0; diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 059453f4..ffe49498 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -697,24 +697,24 @@ void CWindow::applyDynamicRule(const SP& r) { for (auto const& token : colorsAndAngles) { // The first angle, or an explicit "0deg", splits the two gradients if (active && token.contains("deg")) { - activeBorderGradient.m_fAngle = std::stoi(token.substr(0, token.size() - 3)) * (PI / 180.0); - active = false; + activeBorderGradient.m_angle = std::stoi(token.substr(0, token.size() - 3)) * (PI / 180.0); + active = false; } else if (token.contains("deg")) - inactiveBorderGradient.m_fAngle = std::stoi(token.substr(0, token.size() - 3)) * (PI / 180.0); + inactiveBorderGradient.m_angle = std::stoi(token.substr(0, token.size() - 3)) * (PI / 180.0); else if (active) - activeBorderGradient.m_vColors.push_back(configStringToInt(token).value_or(0)); + activeBorderGradient.m_colors.push_back(configStringToInt(token).value_or(0)); else - inactiveBorderGradient.m_vColors.push_back(configStringToInt(token).value_or(0)); + inactiveBorderGradient.m_colors.push_back(configStringToInt(token).value_or(0)); } activeBorderGradient.updateColorsOk(); // Includes sanity checks for the number of colors in each gradient - if (activeBorderGradient.m_vColors.size() > 10 || inactiveBorderGradient.m_vColors.size() > 10) + if (activeBorderGradient.m_colors.size() > 10 || inactiveBorderGradient.m_colors.size() > 10) Debug::log(WARN, "Bordercolor rule \"{}\" has more than 10 colors in one gradient, ignoring", r->szRule); - else if (activeBorderGradient.m_vColors.empty()) + else if (activeBorderGradient.m_colors.empty()) Debug::log(WARN, "Bordercolor rule \"{}\" has no colors, ignoring", r->szRule); - else if (inactiveBorderGradient.m_vColors.empty()) + else if (inactiveBorderGradient.m_colors.empty()) m_sWindowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); else { m_sWindowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); diff --git a/src/devices/IKeyboard.cpp b/src/devices/IKeyboard.cpp index 89891ebd..b8f9c7dd 100644 --- a/src/devices/IKeyboard.cpp +++ b/src/devices/IKeyboard.cpp @@ -81,7 +81,7 @@ void IKeyboard::setKeymap(const SStringRuleNames& rules) { rules.options); if (!xkbFilePath.empty()) { - auto path = absolutePath(xkbFilePath, g_pConfigManager->configCurrentPath); + auto path = absolutePath(xkbFilePath, g_pConfigManager->m_configCurrentPath); if (FILE* const KEYMAPFILE = fopen(path.c_str(), "r"); !KEYMAPFILE) Debug::log(ERR, "Cannot open input:kb_file= file for reading"); diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 197f19d3..6000dbf3 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -329,7 +329,7 @@ void CMonitor::onDisconnect(bool destroy) { m->setMirror(""); } - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; } listeners.frame.reset(); @@ -853,7 +853,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { g_pHyprRenderer->arrangeLayersForMonitor(ID); // reload to fix mirrors - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; Debug::log(LOG, "Monitor {} data dump: res {:X}@{:.2f}Hz, scale {:.2f}, transform {}, pos {:X}, 10b {}", szName, vecPixelSize, refreshRate, scale, (int)transform, vecPosition, (int)enabled10bit); diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 90cc2f6c..57d3df4a 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -155,9 +155,9 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for auto calcPos = PWINDOW->m_vPosition; auto calcSize = PWINDOW->m_vSize; - const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.left : gapsIn.left), (double)(DISPLAYTOP ? gapsOut.top : gapsIn.top)); + const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.m_left : gapsIn.m_left), (double)(DISPLAYTOP ? gapsOut.m_top : gapsIn.m_top)); - const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ? gapsOut.right : gapsIn.right), (double)(DISPLAYBOTTOM ? gapsOut.bottom : gapsIn.bottom)); + const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ? gapsOut.m_right : gapsIn.m_right), (double)(DISPLAYBOTTOM ? gapsOut.m_bottom : gapsIn.m_bottom)); calcPos = calcPos + OFFSETTOPLEFT; calcSize = calcSize - OFFSETTOPLEFT - OFFSETBOTTOMRIGHT; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index a02e6aba..bac2c42e 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -674,9 +674,9 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { auto calcPos = PWINDOW->m_vPosition; auto calcSize = PWINDOW->m_vSize; - const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.left : gapsIn.left), (double)(DISPLAYTOP ? gapsOut.top : gapsIn.top)); + const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.m_left : gapsIn.m_left), (double)(DISPLAYTOP ? gapsOut.m_top : gapsIn.m_top)); - const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ? gapsOut.right : gapsIn.right), (double)(DISPLAYBOTTOM ? gapsOut.bottom : gapsIn.bottom)); + const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ? gapsOut.m_right : gapsIn.m_right), (double)(DISPLAYBOTTOM ? gapsOut.m_bottom : gapsIn.m_bottom)); calcPos = calcPos + OFFSETTOPLEFT; calcSize = calcSize - OFFSETTOPLEFT - OFFSETBOTTOMRIGHT; diff --git a/src/main.cpp b/src/main.cpp index 397d7463..0cb5585e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -170,7 +170,7 @@ int main(int argc, char** argv) { g_pCompositor->initServer(socketName, socketFd); if (verifyConfig) - return !g_pConfigManager->m_bLastConfigVerificationWasSuccessful; + return !g_pConfigManager->m_lastConfigVerificationWasSuccessful; if (!envEnabled("HYPRLAND_NO_RT")) NInit::gainRealTime(); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index a1ad846a..06ea358d 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -45,7 +45,7 @@ using namespace Hyprutils::OS; static std::vector> getHyprlandLaunchEnv(PHLWORKSPACE pInitialWorkspace) { static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); - if (!*PINITIALWSTRACKING || g_pConfigManager->isLaunchingExecOnce) + if (!*PINITIALWSTRACKING || g_pConfigManager->m_isLaunchingExecOnce) return {}; const auto PMONITOR = g_pCompositor->m_pLastMonitor; @@ -281,7 +281,7 @@ void CKeybindManager::updateXKBTranslationState() { xkb_rule_names rules = {.rules = RULES.c_str(), .model = MODEL.c_str(), .layout = LAYOUT.c_str(), .variant = VARIANT.c_str(), .options = OPTIONS.c_str()}; const auto PCONTEXT = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - FILE* const KEYMAPFILE = FILEPATH == "" ? nullptr : fopen(absolutePath(FILEPATH, g_pConfigManager->configCurrentPath).c_str(), "r"); + FILE* const KEYMAPFILE = FILEPATH == "" ? nullptr : fopen(absolutePath(FILEPATH, g_pConfigManager->m_configCurrentPath).c_str(), "r"); auto PKEYMAP = KEYMAPFILE ? xkb_keymap_new_from_file(PCONTEXT, KEYMAPFILE, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS) : xkb_keymap_new_from_names(PCONTEXT, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); @@ -3203,16 +3203,16 @@ SDispatchResult CKeybindManager::setProp(std::string args) { for (int i = 3; i < static_cast(vars.size()); ++i) { const auto TOKEN = vars[i]; if (TOKEN.ends_with("deg")) - colorData.m_fAngle = std::stoi(TOKEN.substr(0, TOKEN.size() - 3)) * (PI / 180.0); + colorData.m_angle = std::stoi(TOKEN.substr(0, TOKEN.size() - 3)) * (PI / 180.0); else configStringToInt(TOKEN).and_then([&colorData](const auto& e) { - colorData.m_vColors.push_back(e); + colorData.m_colors.push_back(e); return std::invoke_result_t(1); }); } } else if (VAL != "-1") configStringToInt(VAL).and_then([&colorData](const auto& e) { - colorData.m_vColors.push_back(e); + colorData.m_colors.push_back(e); return std::invoke_result_t(1); }); diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 6b6cc376..c745eb9d 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -46,8 +46,8 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { const auto PWORKSPACE = PMONITOR->activeWorkspace; const auto STYLE = PWORKSPACE->m_vRenderOffset->getStyle(); const bool VERTANIMS = STYLE == "slidevert" || STYLE.starts_with("slidefadevert"); - const double TARGETLEFT = ((VERTANIMS ? gapsOut.top : gapsOut.left) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x); - const double TARGETRIGHT = 1 - (((VERTANIMS ? gapsOut.bottom : gapsOut.right) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x)); + const double TARGETLEFT = ((VERTANIMS ? gapsOut.m_top : gapsOut.m_left) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x); + const double TARGETRIGHT = 1 - (((VERTANIMS ? gapsOut.m_bottom : gapsOut.m_right) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x)); const double POSITION = (VERTANIMS ? e.pos.y : e.pos.x); if (POSITION < TARGETLEFT || POSITION > TARGETRIGHT) { beginWorkspaceSwipe(); diff --git a/src/protocols/OutputManagement.cpp b/src/protocols/OutputManagement.cpp index ecca0c48..49922b39 100644 --- a/src/protocols/OutputManagement.cpp +++ b/src/protocols/OutputManagement.cpp @@ -316,7 +316,7 @@ COutputConfiguration::COutputConfiguration(SP resour newState.enabled = false; - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; owner->monitorStates[PMONITOR->szName] = newState; }); @@ -417,7 +417,7 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { // reset properties for next set. head->state.committedProperties = 0; - g_pConfigManager->m_bWantsMonitorReload = true; + g_pConfigManager->m_wantsMonitorReload = true; owner->monitorStates[PMONITOR->szName] = newState; } diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 754f3ff9..4746f5b1 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2344,9 +2344,9 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform4fv(m_shaders->m_shBORDER1.gradient, grad.m_vColorsOkLabA.size() / 4, (float*)grad.m_vColorsOkLabA.data()); - glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad.m_vColorsOkLabA.size() / 4); - glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); + glUniform4fv(m_shaders->m_shBORDER1.gradient, grad.m_colorsOkLabA.size() / 4, (float*)grad.m_colorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad.m_colorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); glUniform1f(m_shaders->m_shBORDER1.alpha, a); glUniform1i(m_shaders->m_shBORDER1.gradient2Length, 0); @@ -2437,13 +2437,13 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif - glUniform4fv(m_shaders->m_shBORDER1.gradient, grad1.m_vColorsOkLabA.size() / 4, (float*)grad1.m_vColorsOkLabA.data()); - glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad1.m_vColorsOkLabA.size() / 4); - glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad1.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); - if (grad2.m_vColorsOkLabA.size() > 0) - glUniform4fv(m_shaders->m_shBORDER1.gradient2, grad2.m_vColorsOkLabA.size() / 4, (float*)grad2.m_vColorsOkLabA.data()); - glUniform1i(m_shaders->m_shBORDER1.gradient2Length, grad2.m_vColorsOkLabA.size() / 4); - glUniform1f(m_shaders->m_shBORDER1.angle2, (int)(grad2.m_fAngle / (PI / 180.0)) % 360 * (PI / 180.0)); + glUniform4fv(m_shaders->m_shBORDER1.gradient, grad1.m_colorsOkLabA.size() / 4, (float*)grad1.m_colorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad1.m_colorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad1.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); + if (grad2.m_colorsOkLabA.size() > 0) + glUniform4fv(m_shaders->m_shBORDER1.gradient2, grad2.m_colorsOkLabA.size() / 4, (float*)grad2.m_colorsOkLabA.data()); + glUniform1i(m_shaders->m_shBORDER1.gradient2Length, grad2.m_colorsOkLabA.size() / 4); + glUniform1f(m_shaders->m_shBORDER1.angle2, (int)(grad2.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); glUniform1f(m_shaders->m_shBORDER1.alpha, a); glUniform1f(m_shaders->m_shBORDER1.gradientLerp, lerp); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 4eee27ff..35f9ca3a 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1186,7 +1186,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { g_pConfigManager->dispatchExecOnce(); // We exec-once when at least one monitor starts refreshing, meaning stuff has init'd - if (g_pConfigManager->m_bWantsMonitorReload) + if (g_pConfigManager->m_wantsMonitorReload) g_pConfigManager->performMonitorReload(); } diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 7ff1ee10..54f6690e 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -61,13 +61,13 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { const bool ANIMATED = m_pWindow->m_fBorderFadeAnimationProgress->isBeingAnimated(); if (m_pWindow->m_fBorderAngleAnimationProgress->enabled()) { - grad.m_fAngle += m_pWindow->m_fBorderAngleAnimationProgress->value() * M_PI * 2; - grad.m_fAngle = normalizeAngleRad(grad.m_fAngle); + grad.m_angle += m_pWindow->m_fBorderAngleAnimationProgress->value() * M_PI * 2; + grad.m_angle = normalizeAngleRad(grad.m_angle); // When borderangle is animated, it is counterintuitive to fade between inactive/active gradient angles. // Instead we sync the angles to avoid fading between them and additionally rotating the border angle. if (ANIMATED) - m_pWindow->m_cRealBorderColorPrevious.m_fAngle = grad.m_fAngle; + m_pWindow->m_cRealBorderColorPrevious.m_angle = grad.m_angle; } int borderSize = m_pWindow->getRealBorderSize(); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 1f2211e0..8dff879b 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -151,7 +151,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE; - CHyprColor color = m_dwGroupMembers[WINDOWINDEX].lock() == g_pCompositor->m_pLastWindow.lock() ? PCOLACTIVE->m_vColors[0] : PCOLINACTIVE->m_vColors[0]; + CHyprColor color = m_dwGroupMembers[WINDOWINDEX].lock() == g_pCompositor->m_pLastWindow.lock() ? PCOLACTIVE->m_colors[0] : PCOLINACTIVE->m_colors[0]; color.a *= a; if (!rect.empty()) { @@ -306,9 +306,9 @@ static void renderGradientTo(SP tex, CGradientValueData* grad) { cairo_pattern_t* pattern; pattern = cairo_pattern_create_linear(0, 0, 0, bufferSize.y); - for (unsigned long i = 0; i < grad->m_vColors.size(); i++) { - cairo_pattern_add_color_stop_rgba(pattern, 1 - (double)(i + 1) / (grad->m_vColors.size() + 1), grad->m_vColors[i].r, grad->m_vColors[i].g, grad->m_vColors[i].b, - grad->m_vColors[i].a); + for (unsigned long i = 0; i < grad->m_colors.size(); i++) { + cairo_pattern_add_color_stop_rgba(pattern, 1 - (double)(i + 1) / (grad->m_colors.size() + 1), grad->m_colors[i].r, grad->m_colors[i].g, grad->m_colors[i].b, + grad->m_colors[i].a); } cairo_rectangle(CAIRO, 0, 0, bufferSize.x, bufferSize.y); From a3d32f3b70af7207363a42e846693e481188539a Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 20 Apr 2025 23:23:11 +0100 Subject: [PATCH 0090/1077] hyprpm: fix format --- hyprpm/src/core/PluginManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index ebf0e03d..22954996 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -129,7 +129,8 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& const auto HLVER = getHyprlandVersion(); if (!hasDeps()) { - std::println(stderr, "\n{}", failureString("Could not clone the plugin repository. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config, git, g++, gcc")); + std::println(stderr, "\n{}", + failureString("Could not clone the plugin repository. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio, pkg-config, git, g++, gcc")); return false; } From a3b96961a2d89b0a2e213f9dcf755e4cab98ac1d Mon Sep 17 00:00:00 2001 From: Andrei V Date: Mon, 21 Apr 2025 01:32:31 +0300 Subject: [PATCH 0091/1077] tablet: naive window refocusing (#10110) Signed-off-by: Andrei V --- src/managers/input/Tablets.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index e1a2f2aa..a543e228 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -134,6 +134,7 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { } } + simulateMouseMovement(); refocusTablet(PTAB, PTOOL, true); m_tmrLastCursorMovement.reset(); } @@ -173,6 +174,9 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { else g_pPointerManager->warpAbsolute(transformToActiveRegion(POS, PTAB->activeArea), PTAB); + if (e.in) + refocus(); + refocusTablet(PTAB, PTOOL, true); if (e.in) @@ -186,6 +190,9 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { void CInputManager::onTabletButton(CTablet::SButtonEvent e) { const auto PTOOL = ensureTabletToolPresent(e.tool); + if (e.down) + refocus(); + PROTO::tablet->buttonTool(PTOOL, e.button, e.down); if (e.down) From 400dd1607292165bccbafc4af7bce4855ac8a71c Mon Sep 17 00:00:00 2001 From: davc0n Date: Mon, 21 Apr 2025 20:42:02 +0200 Subject: [PATCH 0092/1077] debug: refactor class member vars (#10130) --- src/Compositor.cpp | 6 +- src/config/ConfigManager.cpp | 10 +-- src/debug/CrashReporter.cpp | 2 +- src/debug/HyprCtl.cpp | 42 +++++----- src/debug/HyprCtl.hpp | 6 +- src/debug/HyprDebugOverlay.cpp | 116 +++++++++++++------------- src/debug/HyprDebugOverlay.hpp | 22 ++--- src/debug/HyprNotificationOverlay.cpp | 106 +++++++++++------------ src/debug/HyprNotificationOverlay.hpp | 14 ++-- src/debug/Log.cpp | 28 +++---- src/debug/Log.hpp | 28 +++---- src/debug/RollingLogFollow.hpp | 46 +++++----- src/helpers/Monitor.cpp | 2 +- src/render/Renderer.cpp | 6 +- src/xwayland/XWM.cpp | 2 +- 15 files changed, 218 insertions(+), 218 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8edd1905..f61d5615 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -308,7 +308,7 @@ void CCompositor::initServer(std::string socketName, int socketFd) { initManagers(STAGE_PRIORITY); if (envEnabled("HYPRLAND_TRACE")) - Debug::trace = true; + Debug::m_trace = true; // set the buffer size to 1MB to avoid disconnects due to an app hanging for a short while wl_display_set_default_max_buffer_size(m_sWLDisplay, 1_MB); @@ -535,8 +535,8 @@ void CCompositor::cleanup() { removeLockFile(); - m_bIsShuttingDown = true; - Debug::shuttingDown = true; + m_bIsShuttingDown = true; + Debug::m_shuttingDown = true; #ifdef USES_SYSTEMD if (NSystemd::sdBooted() > 0 && !envEnabled("HYPRLAND_NO_SD_NOTIFY")) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 540dcede..476aa148 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -800,8 +800,8 @@ CConfigManager::CConfigManager() { "https://wiki.hyprland.org/Configuring/Variables/#debug"); } - Debug::disableLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_logs")->getDataStaticPtr()); - Debug::disableTime = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_time")->getDataStaticPtr()); + Debug::m_disableLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_logs")->getDataStaticPtr()); + Debug::m_disableTime = reinterpret_cast(m_config->getConfigValuePtr("debug:disable_time")->getDataStaticPtr()); if (g_pEventLoopManager && ERR.has_value()) g_pEventLoopManager->doLater([ERR] { g_pHyprError->queueCreate(ERR.value(), CHyprColor{1.0, 0.1, 0.1, 1.0}); }); @@ -1076,11 +1076,11 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pHyprRenderer->initiateManualCrash(); } - Debug::disableStdout = !std::any_cast(m_config->getConfigValue("debug:enable_stdout_logs")); - if (Debug::disableStdout && m_isFirstLaunch) + Debug::m_disableStdout = !std::any_cast(m_config->getConfigValue("debug:enable_stdout_logs")); + if (Debug::m_disableStdout && m_isFirstLaunch) Debug::log(LOG, "Disabling stdout logs! Check the log for further logs."); - Debug::coloredLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:colored_stdout_logs")->getDataStaticPtr()); + Debug::m_coloredLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:colored_stdout_logs")->getDataStaticPtr()); for (auto const& m : g_pCompositor->m_vMonitors) { // mark blur dirty diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index 0143b29c..b0693245 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -242,5 +242,5 @@ void NCrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "\n\nLog tail:\n"; - finalCrashReport += std::string_view(Debug::rollingLog).substr(Debug::rollingLog.find('\n') + 1); + finalCrashReport += std::string_view(Debug::m_rollingLog).substr(Debug::m_rollingLog.find('\n') + 1); } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index bcd94830..508b0e5c 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -288,7 +288,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque result += "["; for (auto const& w : g_pCompositor->m_vWindows) { - if (!w->m_bIsMapped && !g_pHyprCtl->m_sCurrentRequestParams.all) + if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; result += CHyprCtl::getWindowData(w, format); @@ -299,7 +299,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque result += "]"; } else { for (auto const& w : g_pCompositor->m_vWindows) { - if (!w->m_bIsMapped && !g_pHyprCtl->m_sCurrentRequestParams.all) + if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; result += CHyprCtl::getWindowData(w, format); @@ -801,10 +801,10 @@ static std::string rollinglogRequest(eHyprCtlOutputFormat format, std::string re if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "[\n\"log\":\""; - result += escapeJSONStrings(Debug::rollingLog); + result += escapeJSONStrings(Debug::m_rollingLog); result += "\"]"; } else { - result = Debug::rollingLog; + result = Debug::m_rollingLog; } return result; @@ -1030,7 +1030,7 @@ std::string systemInfoRequest(eHyprCtlOutputFormat format, std::string request) } else result += "\tunknown: not runtime\n"; - if (g_pHyprCtl && g_pHyprCtl->m_sCurrentRequestParams.sysInfoConfig) { + if (g_pHyprCtl && g_pHyprCtl->m_currentRequestParams.sysInfoConfig) { result += "\n======Config-Start======\n"; result += g_pConfigManager->getConfigString(); result += "\n======Config-End========\n"; @@ -1702,17 +1702,17 @@ CHyprCtl::~CHyprCtl() { } SP CHyprCtl::registerCommand(SHyprCtlCommand cmd) { - return m_vCommands.emplace_back(makeShared(cmd)); + return m_commands.emplace_back(makeShared(cmd)); } void CHyprCtl::unregisterCommand(const SP& cmd) { - std::erase(m_vCommands, cmd); + std::erase(m_commands, cmd); } std::string CHyprCtl::getReply(std::string request) { - auto format = eHyprCtlOutputFormat::FORMAT_NORMAL; - bool reloadAll = false; - m_sCurrentRequestParams = {}; + auto format = eHyprCtlOutputFormat::FORMAT_NORMAL; + bool reloadAll = false; + m_currentRequestParams = {}; // process flags for non-batch requests if (!request.starts_with("[[BATCH]]") && request.contains("/")) { @@ -1736,9 +1736,9 @@ std::string CHyprCtl::getReply(std::string request) { else if (c == 'r') reloadAll = true; else if (c == 'a') - m_sCurrentRequestParams.all = true; + m_currentRequestParams.all = true; else if (c == 'c') - m_sCurrentRequestParams.sysInfoConfig = true; + m_currentRequestParams.sysInfoConfig = true; } if (sepIndex < request.size()) @@ -1748,7 +1748,7 @@ std::string CHyprCtl::getReply(std::string request) { std::string result = ""; // parse exact cmds first, then non-exact. - for (auto const& cmd : m_vCommands) { + for (auto const& cmd : m_commands) { if (!cmd->exact) continue; @@ -1759,7 +1759,7 @@ std::string CHyprCtl::getReply(std::string request) { } if (result.empty()) - for (auto const& cmd : m_vCommands) { + for (auto const& cmd : m_commands) { if (cmd->exact) continue; @@ -1855,13 +1855,13 @@ static int hyprCtlFDTick(int fd, uint32_t mask, void* data) { if (mask & WL_EVENT_ERROR || mask & WL_EVENT_HANGUP) return 0; - if (!g_pHyprCtl->m_iSocketFD.isValid()) + if (!g_pHyprCtl->m_socketFD.isValid()) return 0; sockaddr_in clientAddress; socklen_t clientSize = sizeof(clientAddress); - const auto ACCEPTEDCONNECTION = accept4(g_pHyprCtl->m_iSocketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC); + const auto ACCEPTEDCONNECTION = accept4(g_pHyprCtl->m_socketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC); std::array readBuffer; @@ -1918,9 +1918,9 @@ static int hyprCtlFDTick(int fd, uint32_t mask, void* data) { } void CHyprCtl::startHyprCtlSocket() { - m_iSocketFD = CFileDescriptor{socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)}; + m_socketFD = CFileDescriptor{socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)}; - if (!m_iSocketFD.isValid()) { + if (!m_socketFD.isValid()) { Debug::log(ERR, "Couldn't start the Hyprland Socket. (1) IPC will not work."); return; } @@ -1931,15 +1931,15 @@ void CHyprCtl::startHyprCtlSocket() { strcpy(SERVERADDRESS.sun_path, m_socketPath.c_str()); - if (bind(m_iSocketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) { + if (bind(m_socketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) { Debug::log(ERR, "Couldn't start the Hyprland Socket. (2) IPC will not work."); return; } // 10 max queued. - listen(m_iSocketFD.get(), 10); + listen(m_socketFD.get(), 10); Debug::log(LOG, "Hypr socket started at {}", m_socketPath); - m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_iSocketFD.get(), WL_EVENT_READABLE, hyprCtlFDTick, nullptr); + m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_socketFD.get(), WL_EVENT_READABLE, hyprCtlFDTick, nullptr); } diff --git a/src/debug/HyprCtl.hpp b/src/debug/HyprCtl.hpp index a95a5f93..a62dd665 100644 --- a/src/debug/HyprCtl.hpp +++ b/src/debug/HyprCtl.hpp @@ -20,12 +20,12 @@ class CHyprCtl { void unregisterCommand(const SP& cmd); std::string getReply(std::string); - Hyprutils::OS::CFileDescriptor m_iSocketFD; + Hyprutils::OS::CFileDescriptor m_socketFD; struct { bool all = false; bool sysInfoConfig = false; - } m_sCurrentRequestParams; + } m_currentRequestParams; static std::string getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format); static std::string getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat format); @@ -34,7 +34,7 @@ class CHyprCtl { private: void startHyprCtlSocket(); - std::vector> m_vCommands; + std::vector> m_commands; wl_event_source* m_eventSource = nullptr; std::string m_socketPath; }; diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index 9ea7f1bc..e95aee95 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -7,7 +7,7 @@ #include "../managers/AnimationManager.hpp" CHyprDebugOverlay::CHyprDebugOverlay() { - m_pTexture = makeShared(); + m_texture = makeShared(); } void CHyprMonitorDebugOverlay::renderData(PHLMONITOR pMonitor, float durationUs) { @@ -16,13 +16,13 @@ void CHyprMonitorDebugOverlay::renderData(PHLMONITOR pMonitor, float durationUs) if (!*PDEBUGOVERLAY) return; - m_dLastRenderTimes.emplace_back(durationUs / 1000.f); + m_lastRenderTimes.emplace_back(durationUs / 1000.f); - if (m_dLastRenderTimes.size() > (long unsigned int)pMonitor->refreshRate) - m_dLastRenderTimes.pop_front(); + if (m_lastRenderTimes.size() > (long unsigned int)pMonitor->refreshRate) + m_lastRenderTimes.pop_front(); - if (!m_pMonitor) - m_pMonitor = pMonitor; + if (!m_monitor) + m_monitor = pMonitor; } void CHyprMonitorDebugOverlay::renderDataNoOverlay(PHLMONITOR pMonitor, float durationUs) { @@ -31,13 +31,13 @@ void CHyprMonitorDebugOverlay::renderDataNoOverlay(PHLMONITOR pMonitor, float du if (!*PDEBUGOVERLAY) return; - m_dLastRenderTimesNoOverlay.emplace_back(durationUs / 1000.f); + m_lastRenderTimesNoOverlay.emplace_back(durationUs / 1000.f); - if (m_dLastRenderTimesNoOverlay.size() > (long unsigned int)pMonitor->refreshRate) - m_dLastRenderTimesNoOverlay.pop_front(); + if (m_lastRenderTimesNoOverlay.size() > (long unsigned int)pMonitor->refreshRate) + m_lastRenderTimesNoOverlay.pop_front(); - if (!m_pMonitor) - m_pMonitor = pMonitor; + if (!m_monitor) + m_monitor = pMonitor; } void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { @@ -46,36 +46,36 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { if (!*PDEBUGOVERLAY) return; - m_dLastFrametimes.emplace_back(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - m_tpLastFrame).count() / 1000.f); + m_lastFrametimes.emplace_back(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - m_lastFrame).count() / 1000.f); - if (m_dLastFrametimes.size() > (long unsigned int)pMonitor->refreshRate) - m_dLastFrametimes.pop_front(); + if (m_lastFrametimes.size() > (long unsigned int)pMonitor->refreshRate) + m_lastFrametimes.pop_front(); - m_tpLastFrame = std::chrono::high_resolution_clock::now(); + m_lastFrame = std::chrono::high_resolution_clock::now(); - if (!m_pMonitor) - m_pMonitor = pMonitor; + if (!m_monitor) + m_monitor = pMonitor; // anim data too const auto PMONITORFORTICKS = g_pHyprRenderer->m_pMostHzMonitor ? g_pHyprRenderer->m_pMostHzMonitor.lock() : g_pCompositor->m_pLastMonitor.lock(); if (PMONITORFORTICKS) { - if (m_dLastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->refreshRate) - m_dLastAnimationTicks.pop_front(); + if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->refreshRate) + m_lastAnimationTicks.pop_front(); - m_dLastAnimationTicks.push_back(g_pAnimationManager->m_fLastTickTime); + m_lastAnimationTicks.push_back(g_pAnimationManager->m_fLastTickTime); } } int CHyprMonitorDebugOverlay::draw(int offset) { - if (!m_pMonitor) + if (!m_monitor) return 0; // get avg fps float avgFrametime = 0; float maxFrametime = 0; float minFrametime = 9999; - for (auto const& ft : m_dLastFrametimes) { + for (auto const& ft : m_lastFrametimes) { if (ft > maxFrametime) maxFrametime = ft; if (ft < minFrametime) @@ -83,12 +83,12 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgFrametime += ft; } float varFrametime = maxFrametime - minFrametime; - avgFrametime /= m_dLastFrametimes.size() == 0 ? 1 : m_dLastFrametimes.size(); + avgFrametime /= m_lastFrametimes.size() == 0 ? 1 : m_lastFrametimes.size(); float avgRenderTime = 0; float maxRenderTime = 0; float minRenderTime = 9999; - for (auto const& rt : m_dLastRenderTimes) { + for (auto const& rt : m_lastRenderTimes) { if (rt > maxRenderTime) maxRenderTime = rt; if (rt < minRenderTime) @@ -96,12 +96,12 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgRenderTime += rt; } float varRenderTime = maxRenderTime - minRenderTime; - avgRenderTime /= m_dLastRenderTimes.size() == 0 ? 1 : m_dLastRenderTimes.size(); + avgRenderTime /= m_lastRenderTimes.size() == 0 ? 1 : m_lastRenderTimes.size(); float avgRenderTimeNoOverlay = 0; float maxRenderTimeNoOverlay = 0; float minRenderTimeNoOverlay = 9999; - for (auto const& rt : m_dLastRenderTimesNoOverlay) { + for (auto const& rt : m_lastRenderTimesNoOverlay) { if (rt > maxRenderTimeNoOverlay) maxRenderTimeNoOverlay = rt; if (rt < minRenderTimeNoOverlay) @@ -109,12 +109,12 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgRenderTimeNoOverlay += rt; } float varRenderTimeNoOverlay = maxRenderTimeNoOverlay - minRenderTimeNoOverlay; - avgRenderTimeNoOverlay /= m_dLastRenderTimes.size() == 0 ? 1 : m_dLastRenderTimes.size(); + avgRenderTimeNoOverlay /= m_lastRenderTimes.size() == 0 ? 1 : m_lastRenderTimes.size(); float avgAnimMgrTick = 0; float maxAnimMgrTick = 0; float minAnimMgrTick = 9999; - for (auto const& at : m_dLastAnimationTicks) { + for (auto const& at : m_lastAnimationTicks) { if (at > maxAnimMgrTick) maxAnimMgrTick = at; if (at < minAnimMgrTick) @@ -122,13 +122,13 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgAnimMgrTick += at; } float varAnimMgrTick = maxAnimMgrTick - minAnimMgrTick; - avgAnimMgrTick /= m_dLastAnimationTicks.size() == 0 ? 1 : m_dLastAnimationTicks.size(); + avgAnimMgrTick /= m_lastAnimationTicks.size() == 0 ? 1 : m_lastAnimationTicks.size(); const float FPS = 1.f / (avgFrametime / 1000.f); // frametimes are in ms - const float idealFPS = m_dLastFrametimes.size(); + const float idealFPS = m_lastFrametimes.size(); static auto fontFamily = CConfigValue("misc:font_family"); - PangoLayout* layoutText = pango_cairo_create_layout(g_pDebugOverlay->m_pCairo); + PangoLayout* layoutText = pango_cairo_create_layout(g_pDebugOverlay->m_cairo); PangoFontDescription* pangoFD = pango_font_description_new(); pango_font_description_set_family(pangoFD, (*fontFamily).c_str()); @@ -137,7 +137,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { float maxTextW = 0; int fontSize = 0; - auto cr = g_pDebugOverlay->m_pCairo; + auto cr = g_pDebugOverlay->m_cairo; auto showText = [cr, layoutText, pangoFD, &maxTextW, &fontSize](const char* text, int size) { if (fontSize != size) { @@ -163,22 +163,22 @@ int CHyprMonitorDebugOverlay::draw(int offset) { const int MARGIN_TOP = 8; const int MARGIN_LEFT = 4; cairo_move_to(cr, MARGIN_LEFT, MARGIN_TOP + offset); - cairo_set_source_rgba(g_pDebugOverlay->m_pCairo, 1.f, 1.f, 1.f, 1.f); + cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 1.f, 1.f, 1.f, 1.f); std::string text; - showText(m_pMonitor->szName.c_str(), 10); + showText(m_monitor->szName.c_str(), 10); if (FPS > idealFPS * 0.95f) - cairo_set_source_rgba(g_pDebugOverlay->m_pCairo, 0.2f, 1.f, 0.2f, 1.f); + cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 0.2f, 1.f, 0.2f, 1.f); else if (FPS > idealFPS * 0.8f) - cairo_set_source_rgba(g_pDebugOverlay->m_pCairo, 1.f, 1.f, 0.2f, 1.f); + cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 1.f, 1.f, 0.2f, 1.f); else - cairo_set_source_rgba(g_pDebugOverlay->m_pCairo, 1.f, 0.2f, 0.2f, 1.f); + cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 1.f, 0.2f, 0.2f, 1.f); text = std::format("{} FPS", (int)FPS); showText(text.c_str(), 16); - cairo_set_source_rgba(g_pDebugOverlay->m_pCairo, 1.f, 1.f, 1.f, 1.f); + cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 1.f, 1.f, 1.f, 1.f); text = std::format("Avg Frametime: {:.2f}ms (var {:.2f}ms)", avgFrametime, varFrametime); showText(text.c_str(), 10); @@ -198,10 +198,10 @@ int CHyprMonitorDebugOverlay::draw(int offset) { double posX = 0, posY = 0; cairo_get_current_point(cr, &posX, &posY); - g_pHyprRenderer->damageBox(m_wbLastDrawnBox); - m_wbLastDrawnBox = {(int)g_pCompositor->m_vMonitors.front()->vecPosition.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_vMonitors.front()->vecPosition.y + offset + MARGIN_TOP - 1, - (int)maxTextW + 2, posY - offset - MARGIN_TOP + 2}; - g_pHyprRenderer->damageBox(m_wbLastDrawnBox); + g_pHyprRenderer->damageBox(m_lastDrawnBox); + m_lastDrawnBox = {(int)g_pCompositor->m_vMonitors.front()->vecPosition.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_vMonitors.front()->vecPosition.y + offset + MARGIN_TOP - 1, + (int)maxTextW + 2, posY - offset - MARGIN_TOP + 2}; + g_pHyprRenderer->damageBox(m_lastDrawnBox); return posY - offset; } @@ -212,7 +212,7 @@ void CHyprDebugOverlay::renderData(PHLMONITOR pMonitor, float durationUs) { if (!*PDEBUGOVERLAY) return; - m_mMonitorOverlays[pMonitor].renderData(pMonitor, durationUs); + m_monitorOverlays[pMonitor].renderData(pMonitor, durationUs); } void CHyprDebugOverlay::renderDataNoOverlay(PHLMONITOR pMonitor, float durationUs) { @@ -221,7 +221,7 @@ void CHyprDebugOverlay::renderDataNoOverlay(PHLMONITOR pMonitor, float durationU if (!*PDEBUGOVERLAY) return; - m_mMonitorOverlays[pMonitor].renderDataNoOverlay(pMonitor, durationUs); + m_monitorOverlays[pMonitor].renderDataNoOverlay(pMonitor, durationUs); } void CHyprDebugOverlay::frameData(PHLMONITOR pMonitor) { @@ -230,37 +230,37 @@ void CHyprDebugOverlay::frameData(PHLMONITOR pMonitor) { if (!*PDEBUGOVERLAY) return; - m_mMonitorOverlays[pMonitor].frameData(pMonitor); + m_monitorOverlays[pMonitor].frameData(pMonitor); } void CHyprDebugOverlay::draw() { const auto PMONITOR = g_pCompositor->m_vMonitors.front(); - if (!m_pCairoSurface || !m_pCairo) { - m_pCairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); - m_pCairo = cairo_create(m_pCairoSurface); + if (!m_cairoSurface || !m_cairo) { + m_cairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); + m_cairo = cairo_create(m_cairoSurface); } // clear the pixmap - cairo_save(m_pCairo); - cairo_set_operator(m_pCairo, CAIRO_OPERATOR_CLEAR); - cairo_paint(m_pCairo); - cairo_restore(m_pCairo); + cairo_save(m_cairo); + cairo_set_operator(m_cairo, CAIRO_OPERATOR_CLEAR); + cairo_paint(m_cairo); + cairo_restore(m_cairo); // draw the things int offsetY = 0; for (auto const& m : g_pCompositor->m_vMonitors) { - offsetY += m_mMonitorOverlays[m].draw(offsetY); + offsetY += m_monitorOverlays[m].draw(offsetY); offsetY += 5; // for padding between mons } - cairo_surface_flush(m_pCairoSurface); + cairo_surface_flush(m_cairoSurface); // copy the data to an OpenGL texture we have - const auto DATA = cairo_image_surface_get_data(m_pCairoSurface); - m_pTexture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_pTexture->m_iTexID); + const auto DATA = cairo_image_surface_get_data(m_cairoSurface); + m_texture->allocate(); + glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -272,7 +272,7 @@ void CHyprDebugOverlay::draw() { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); CTexPassElement::SRenderData data; - data.tex = m_pTexture; + data.tex = m_texture; data.box = {0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y}; g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); } diff --git a/src/debug/HyprDebugOverlay.hpp b/src/debug/HyprDebugOverlay.hpp index f4ef122f..72987d94 100644 --- a/src/debug/HyprDebugOverlay.hpp +++ b/src/debug/HyprDebugOverlay.hpp @@ -17,13 +17,13 @@ class CHyprMonitorDebugOverlay { void frameData(PHLMONITOR pMonitor); private: - std::deque m_dLastFrametimes; - std::deque m_dLastRenderTimes; - std::deque m_dLastRenderTimesNoOverlay; - std::deque m_dLastAnimationTicks; - std::chrono::high_resolution_clock::time_point m_tpLastFrame; - PHLMONITORREF m_pMonitor; - CBox m_wbLastDrawnBox; + std::deque m_lastFrametimes; + std::deque m_lastRenderTimes; + std::deque m_lastRenderTimesNoOverlay; + std::deque m_lastAnimationTicks; + std::chrono::high_resolution_clock::time_point m_lastFrame; + PHLMONITORREF m_monitor; + CBox m_lastDrawnBox; friend class CHyprRenderer; }; @@ -37,12 +37,12 @@ class CHyprDebugOverlay { void frameData(PHLMONITOR); private: - std::map m_mMonitorOverlays; + std::map m_monitorOverlays; - cairo_surface_t* m_pCairoSurface = nullptr; - cairo_t* m_pCairo = nullptr; + cairo_surface_t* m_cairoSurface = nullptr; + cairo_t* m_cairo = nullptr; - SP m_pTexture; + SP m_texture; friend class CHyprMonitorDebugOverlay; friend class CHyprRenderer; diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index 4081af84..50cb4f35 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -23,24 +23,24 @@ static inline auto iconBackendFromLayout(PangoLayout* layout) { CHyprNotificationOverlay::CHyprNotificationOverlay() { static auto P = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) { - if (m_vNotifications.size() == 0) + if (m_notifications.size() == 0) return; - g_pHyprRenderer->damageBox(m_bLastDamage); + g_pHyprRenderer->damageBox(m_lastDamage); }); - m_pTexture = makeShared(); + m_texture = makeShared(); } CHyprNotificationOverlay::~CHyprNotificationOverlay() { - if (m_pCairo) - cairo_destroy(m_pCairo); - if (m_pCairoSurface) - cairo_surface_destroy(m_pCairoSurface); + if (m_cairo) + cairo_destroy(m_cairo); + if (m_cairoSurface) + cairo_surface_destroy(m_cairoSurface); } void CHyprNotificationOverlay::addNotification(const std::string& text, const CHyprColor& color, const float timeMs, const eIcons icon, const float fontSize) { - const auto PNOTIF = m_vNotifications.emplace_back(makeUnique()).get(); + const auto PNOTIF = m_notifications.emplace_back(makeUnique()).get(); PNOTIF->text = icon != eIcons::ICON_NONE ? " " + text /* tiny bit of padding otherwise icon touches text */ : text; PNOTIF->color = color == CHyprColor(0) ? ICONS_COLORS[icon] : color; @@ -56,12 +56,12 @@ void CHyprNotificationOverlay::addNotification(const std::string& text, const CH void CHyprNotificationOverlay::dismissNotifications(const int amount) { if (amount == -1) - m_vNotifications.clear(); + m_notifications.clear(); else { - const int AMT = std::min(amount, static_cast(m_vNotifications.size())); + const int AMT = std::min(amount, static_cast(m_notifications.size())); for (int i = 0; i < AMT; ++i) { - m_vNotifications.erase(m_vNotifications.begin()); + m_notifications.erase(m_notifications.begin()); } } } @@ -82,7 +82,7 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { static auto fontFamily = CConfigValue("misc:font_family"); - PangoLayout* layout = pango_cairo_create_layout(m_pCairo); + PangoLayout* layout = pango_cairo_create_layout(m_cairo); PangoFontDescription* pangoFD = pango_font_description_new(); pango_font_description_set_family(pangoFD, (*fontFamily).c_str()); @@ -92,7 +92,7 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { const auto iconBackendID = iconBackendFromLayout(layout); const auto PBEZIER = g_pAnimationManager->getBezier("default"); - for (auto const& notif : m_vNotifications) { + for (auto const& notif : m_notifications) { const auto ICONPADFORNOTIF = notif->icon == ICON_NONE ? 0 : ICON_PAD; const auto FONTSIZE = std::clamp((int)(notif->fontSize * ((pMonitor->vecPixelSize.x * SCALE) / 1920.f)), 8, 40); @@ -139,17 +139,17 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { const auto NOTIFSIZE = Vector2D{textW + 20.0 + iconW + 2 * ICONPADFORNOTIF, textH + 10.0}; // draw rects - cairo_set_source_rgba(m_pCairo, notif->color.r, notif->color.g, notif->color.b, notif->color.a); - cairo_rectangle(m_pCairo, MONSIZE.x - (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, offsetY, (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, NOTIFSIZE.y); - cairo_fill(m_pCairo); + cairo_set_source_rgba(m_cairo, notif->color.r, notif->color.g, notif->color.b, notif->color.a); + cairo_rectangle(m_cairo, MONSIZE.x - (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, offsetY, (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, NOTIFSIZE.y); + cairo_fill(m_cairo); - cairo_set_source_rgb(m_pCairo, 0.f, 0.f, 0.f); - cairo_rectangle(m_pCairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC, offsetY, NOTIFSIZE.x * SECONDRECTPERC, NOTIFSIZE.y); - cairo_fill(m_pCairo); + cairo_set_source_rgb(m_cairo, 0.f, 0.f, 0.f); + cairo_rectangle(m_cairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC, offsetY, NOTIFSIZE.x * SECONDRECTPERC, NOTIFSIZE.y); + cairo_fill(m_cairo); - cairo_set_source_rgba(m_pCairo, notif->color.r, notif->color.g, notif->color.b, notif->color.a); - cairo_rectangle(m_pCairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + 3, offsetY + NOTIFSIZE.y - 4, THIRDRECTPERC * (NOTIFSIZE.x - 6), 2); - cairo_fill(m_pCairo); + cairo_set_source_rgba(m_cairo, notif->color.r, notif->color.g, notif->color.b, notif->color.a); + cairo_rectangle(m_cairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + 3, offsetY + NOTIFSIZE.y - 4, THIRDRECTPERC * (NOTIFSIZE.x - 6), 2); + cairo_fill(m_cairo); // draw gradient if (notif->icon != ICON_NONE) { @@ -158,23 +158,23 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { MONSIZE.x - (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC + GRADIENT_SIZE, offsetY); cairo_pattern_add_color_stop_rgba(pattern, 0, ICONCOLOR.r, ICONCOLOR.g, ICONCOLOR.b, ICONCOLOR.a / 3.0); cairo_pattern_add_color_stop_rgba(pattern, 1, ICONCOLOR.r, ICONCOLOR.g, ICONCOLOR.b, 0); - cairo_rectangle(m_pCairo, MONSIZE.x - (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, offsetY, GRADIENT_SIZE, NOTIFSIZE.y); - cairo_set_source(m_pCairo, pattern); - cairo_fill(m_pCairo); + cairo_rectangle(m_cairo, MONSIZE.x - (NOTIFSIZE.x + NOTIF_LEFTBAR_SIZE) * FIRSTRECTPERC, offsetY, GRADIENT_SIZE, NOTIFSIZE.y); + cairo_set_source(m_cairo, pattern); + cairo_fill(m_cairo); cairo_pattern_destroy(pattern); // draw icon - cairo_set_source_rgb(m_pCairo, 1.f, 1.f, 1.f); - cairo_move_to(m_pCairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + NOTIF_LEFTBAR_SIZE + ICONPADFORNOTIF - 1, offsetY - 2 + std::round((NOTIFSIZE.y - iconH) / 2.0)); + cairo_set_source_rgb(m_cairo, 1.f, 1.f, 1.f); + cairo_move_to(m_cairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + NOTIF_LEFTBAR_SIZE + ICONPADFORNOTIF - 1, offsetY - 2 + std::round((NOTIFSIZE.y - iconH) / 2.0)); pango_layout_set_text(layout, ICON.c_str(), -1); - pango_cairo_show_layout(m_pCairo, layout); + pango_cairo_show_layout(m_cairo, layout); } // draw text - cairo_set_source_rgb(m_pCairo, 1.f, 1.f, 1.f); - cairo_move_to(m_pCairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + NOTIF_LEFTBAR_SIZE + iconW + 2 * ICONPADFORNOTIF, offsetY - 2 + std::round((NOTIFSIZE.y - textH) / 2.0)); + cairo_set_source_rgb(m_cairo, 1.f, 1.f, 1.f); + cairo_move_to(m_cairo, MONSIZE.x - NOTIFSIZE.x * SECONDRECTPERC + NOTIF_LEFTBAR_SIZE + iconW + 2 * ICONPADFORNOTIF, offsetY - 2 + std::round((NOTIFSIZE.y - textH) / 2.0)); pango_layout_set_text(layout, notif->text.c_str(), -1); - pango_cairo_show_layout(m_pCairo, layout); + pango_cairo_show_layout(m_cairo, layout); // adjust offset and move on offsetY += NOTIFSIZE.y + 10; @@ -187,7 +187,7 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { g_object_unref(layout); // cleanup notifs - std::erase_if(m_vNotifications, [](const auto& notif) { return notif->started.getMillis() > notif->timeMs; }); + std::erase_if(m_notifications, [](const auto& notif) { return notif->started.getMillis() > notif->timeMs; }); return CBox{(int)(pMonitor->vecPosition.x + pMonitor->vecSize.x - maxWidth - 20), (int)pMonitor->vecPosition.y, (int)maxWidth + 20, (int)offsetY + 10}; } @@ -196,46 +196,46 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { const auto MONSIZE = pMonitor->vecTransformedSize; - if (m_pLastMonitor != pMonitor || m_vecLastSize != MONSIZE || !m_pCairo || !m_pCairoSurface) { + if (m_lastMonitor != pMonitor || m_lastSize != MONSIZE || !m_cairo || !m_cairoSurface) { - if (m_pCairo && m_pCairoSurface) { - cairo_destroy(m_pCairo); - cairo_surface_destroy(m_pCairoSurface); + if (m_cairo && m_cairoSurface) { + cairo_destroy(m_cairo); + cairo_surface_destroy(m_cairoSurface); } - m_pCairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, MONSIZE.x, MONSIZE.y); - m_pCairo = cairo_create(m_pCairoSurface); - m_pLastMonitor = pMonitor; - m_vecLastSize = MONSIZE; + m_cairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, MONSIZE.x, MONSIZE.y); + m_cairo = cairo_create(m_cairoSurface); + m_lastMonitor = pMonitor; + m_lastSize = MONSIZE; } // Draw the notifications - if (m_vNotifications.size() == 0) + if (m_notifications.size() == 0) return; // Render to the monitor // clear the pixmap - cairo_save(m_pCairo); - cairo_set_operator(m_pCairo, CAIRO_OPERATOR_CLEAR); - cairo_paint(m_pCairo); - cairo_restore(m_pCairo); + cairo_save(m_cairo); + cairo_set_operator(m_cairo, CAIRO_OPERATOR_CLEAR); + cairo_paint(m_cairo); + cairo_restore(m_cairo); - cairo_surface_flush(m_pCairoSurface); + cairo_surface_flush(m_cairoSurface); CBox damage = drawNotifications(pMonitor); g_pHyprRenderer->damageBox(damage); - g_pHyprRenderer->damageBox(m_bLastDamage); + g_pHyprRenderer->damageBox(m_lastDamage); g_pCompositor->scheduleFrameForMonitor(pMonitor); - m_bLastDamage = damage; + m_lastDamage = damage; // copy the data to an OpenGL texture we have - const auto DATA = cairo_image_surface_get_data(m_pCairoSurface); - m_pTexture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_pTexture->m_iTexID); + const auto DATA = cairo_image_surface_get_data(m_cairoSurface); + m_texture->allocate(); + glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -247,7 +247,7 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, MONSIZE.x, MONSIZE.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); CTexPassElement::SRenderData data; - data.tex = m_pTexture; + data.tex = m_texture; data.box = {0, 0, MONSIZE.x, MONSIZE.y}; data.a = 1.F; @@ -255,5 +255,5 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { } bool CHyprNotificationOverlay::hasAny() { - return !m_vNotifications.empty(); + return !m_notifications.empty(); } diff --git a/src/debug/HyprNotificationOverlay.hpp b/src/debug/HyprNotificationOverlay.hpp index cc4ebcc6..868eb05b 100644 --- a/src/debug/HyprNotificationOverlay.hpp +++ b/src/debug/HyprNotificationOverlay.hpp @@ -47,17 +47,17 @@ class CHyprNotificationOverlay { private: CBox drawNotifications(PHLMONITOR pMonitor); - CBox m_bLastDamage; + CBox m_lastDamage; - std::vector> m_vNotifications; + std::vector> m_notifications; - cairo_surface_t* m_pCairoSurface = nullptr; - cairo_t* m_pCairo = nullptr; + cairo_surface_t* m_cairoSurface = nullptr; + cairo_t* m_cairo = nullptr; - PHLMONITORREF m_pLastMonitor; - Vector2D m_vecLastSize = Vector2D(-1, -1); + PHLMONITORREF m_lastMonitor; + Vector2D m_lastSize = Vector2D(-1, -1); - SP m_pTexture; + SP m_texture; }; inline UP g_pHyprNotificationOverlay; diff --git a/src/debug/Log.cpp b/src/debug/Log.cpp index 9cf86345..b5865f0a 100644 --- a/src/debug/Log.cpp +++ b/src/debug/Log.cpp @@ -7,21 +7,21 @@ #include void Debug::init(const std::string& IS) { - logFile = IS + (ISDEBUG ? "/hyprlandd.log" : "/hyprland.log"); - logOfs.open(logFile, std::ios::out | std::ios::app); - auto handle = logOfs.native_handle(); + m_logFile = IS + (ISDEBUG ? "/hyprlandd.log" : "/hyprland.log"); + m_logOfs.open(m_logFile, std::ios::out | std::ios::app); + auto handle = m_logOfs.native_handle(); fcntl(handle, F_SETFD, FD_CLOEXEC); } void Debug::close() { - logOfs.close(); + m_logOfs.close(); } void Debug::log(eLogLevel level, std::string str) { - if (level == TRACE && !trace) + if (level == TRACE && !m_trace) return; - if (shuttingDown) + if (m_shuttingDown) return; std::string coloredStr = str; @@ -55,20 +55,20 @@ void Debug::log(eLogLevel level, std::string str) { } //NOLINTEND - rollingLog += str + "\n"; - if (rollingLog.size() > ROLLING_LOG_SIZE) - rollingLog = rollingLog.substr(rollingLog.size() - ROLLING_LOG_SIZE); + m_rollingLog += str + "\n"; + if (m_rollingLog.size() > ROLLING_LOG_SIZE) + m_rollingLog = m_rollingLog.substr(m_rollingLog.size() - ROLLING_LOG_SIZE); if (SRollingLogFollow::get().isRunning()) SRollingLogFollow::get().addLog(str); - if (!disableLogs || !**disableLogs) { + if (!m_disableLogs || !**m_disableLogs) { // log to a file - logOfs << str << "\n"; - logOfs.flush(); + m_logOfs << str << "\n"; + m_logOfs.flush(); } // log it to the stdout too. - if (!disableStdout) - std::println("{}", ((coloredLogs && !**coloredLogs) ? str : coloredStr)); + if (!m_disableStdout) + std::println("{}", ((m_coloredLogs && !**m_coloredLogs) ? str : coloredStr)); } diff --git a/src/debug/Log.hpp b/src/debug/Log.hpp index 3791aeac..6a380783 100644 --- a/src/debug/Log.hpp +++ b/src/debug/Log.hpp @@ -21,17 +21,17 @@ enum eLogLevel : int8_t { // NOLINTNEXTLINE(readability-identifier-naming) namespace Debug { - inline std::string logFile; - inline std::ofstream logOfs; - inline int64_t* const* disableLogs = nullptr; - inline int64_t* const* disableTime = nullptr; - inline bool disableStdout = false; - inline bool trace = false; - inline bool shuttingDown = false; - inline int64_t* const* coloredLogs = nullptr; + inline std::string m_logFile; + inline std::ofstream m_logOfs; + inline int64_t* const* m_disableLogs = nullptr; + inline int64_t* const* m_disableTime = nullptr; + inline bool m_disableStdout = false; + inline bool m_trace = false; + inline bool m_shuttingDown = false; + inline int64_t* const* m_coloredLogs = nullptr; - inline std::string rollingLog = ""; // rolling log contains the ROLLING_LOG_SIZE tail of the log - inline std::mutex logMutex; + inline std::string m_rollingLog = ""; // rolling log contains the ROLLING_LOG_SIZE tail of the log + inline std::mutex m_logMutex; void init(const std::string& IS); void close(); @@ -42,18 +42,18 @@ namespace Debug { template //NOLINTNEXTLINE void log(eLogLevel level, std::format_string fmt, Args&&... args) { - std::lock_guard guard(logMutex); + std::lock_guard guard(m_logMutex); - if (level == TRACE && !trace) + if (level == TRACE && !m_trace) return; - if (shuttingDown) + if (m_shuttingDown) return; std::string logMsg = ""; // print date and time to the ofs - if (disableTime && !**disableTime) { + if (m_disableTime && !**m_disableTime) { #ifndef _LIBCPP_VERSION static auto current_zone = std::chrono::current_zone(); const auto zt = std::chrono::zoned_time{current_zone, std::chrono::system_clock::now()}; diff --git a/src/debug/RollingLogFollow.hpp b/src/debug/RollingLogFollow.hpp index 0042cd8d..07b4387d 100644 --- a/src/debug/RollingLogFollow.hpp +++ b/src/debug/RollingLogFollow.hpp @@ -5,55 +5,55 @@ // NOLINTNEXTLINE(readability-identifier-naming) namespace Debug { struct SRollingLogFollow { - std::unordered_map socketToRollingLogFollowQueue; - std::shared_mutex m; - bool running = false; + std::unordered_map m_socketToRollingLogFollowQueue; + std::shared_mutex m_mutex; + bool m_running = false; static constexpr size_t ROLLING_LOG_FOLLOW_TOO_BIG = 8192; // Returns true if the queue is empty for the given socket bool isEmpty(int socket) { - std::shared_lock r(m); - return socketToRollingLogFollowQueue[socket].empty(); + std::shared_lock r(m_mutex); + return m_socketToRollingLogFollowQueue[socket].empty(); } std::string debugInfo() { - std::shared_lock r(m); - return std::format("RollingLogFollow, got {} connections", socketToRollingLogFollowQueue.size()); + std::shared_lock r(m_mutex); + return std::format("RollingLogFollow, got {} connections", m_socketToRollingLogFollowQueue.size()); } std::string getLog(int socket) { - std::unique_lock w(m); + std::unique_lock w(m_mutex); - const std::string ret = socketToRollingLogFollowQueue[socket]; - socketToRollingLogFollowQueue[socket] = ""; + const std::string ret = m_socketToRollingLogFollowQueue[socket]; + m_socketToRollingLogFollowQueue[socket] = ""; return ret; }; void addLog(const std::string& log) { - std::unique_lock w(m); - running = true; + std::unique_lock w(m_mutex); + m_running = true; std::vector to_erase; - for (const auto& p : socketToRollingLogFollowQueue) - socketToRollingLogFollowQueue[p.first] += log + "\n"; + for (const auto& p : m_socketToRollingLogFollowQueue) + m_socketToRollingLogFollowQueue[p.first] += log + "\n"; } bool isRunning() { - std::shared_lock r(m); - return running; + std::shared_lock r(m_mutex); + return m_running; } void stopFor(int socket) { - std::unique_lock w(m); - socketToRollingLogFollowQueue.erase(socket); - if (socketToRollingLogFollowQueue.empty()) - running = false; + std::unique_lock w(m_mutex); + m_socketToRollingLogFollowQueue.erase(socket); + if (m_socketToRollingLogFollowQueue.empty()) + m_running = false; } void startFor(int socket) { - std::unique_lock w(m); - socketToRollingLogFollowQueue[socket] = std::format("[LOG] Following log to socket: {} started\n", socket); - running = true; + std::unique_lock w(m_mutex); + m_socketToRollingLogFollowQueue[socket] = std::format("[LOG] Following log to socket: {} started\n", socket); + m_running = true; } static SRollingLogFollow& get() { diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 6000dbf3..81223428 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -567,7 +567,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { drmFormat = DRM_FORMAT_XRGB8888; output->state->resetExplicitFences(); - if (Debug::trace) { + if (Debug::m_trace) { Debug::log(TRACE, "Monitor {} requested modes:", szName); if (requestedModes.empty()) Debug::log(TRACE, "| None"); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 35f9ca3a..46905ab8 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2063,19 +2063,19 @@ bool CHyprRenderer::shouldRenderCursor() { } std::tuple CHyprRenderer::getRenderTimes(PHLMONITOR pMonitor) { - const auto POVERLAY = &g_pDebugOverlay->m_mMonitorOverlays[pMonitor]; + const auto POVERLAY = &g_pDebugOverlay->m_monitorOverlays[pMonitor]; float avgRenderTime = 0; float maxRenderTime = 0; float minRenderTime = 9999; - for (auto const& rt : POVERLAY->m_dLastRenderTimes) { + for (auto const& rt : POVERLAY->m_lastRenderTimes) { if (rt > maxRenderTime) maxRenderTime = rt; if (rt < minRenderTime) minRenderTime = rt; avgRenderTime += rt; } - avgRenderTime /= POVERLAY->m_dLastRenderTimes.size() == 0 ? 1 : POVERLAY->m_dLastRenderTimes.size(); + avgRenderTime /= POVERLAY->m_lastRenderTimes.size() == 0 ? 1 : POVERLAY->m_lastRenderTimes.size(); return std::make_tuple<>(avgRenderTime, maxRenderTime, minRenderTime); } diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 6439c491..54109e53 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -194,7 +194,7 @@ std::string CXWM::getAtomName(uint32_t atom) { void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_reply_t* reply) { std::string propName; - if (Debug::trace) + if (Debug::m_trace) propName = getAtomName(atom); if (atom == XCB_ATOM_WM_CLASS) { From d29723cb76479a860bf9d07d47c5a14b4d64dbc0 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 21 Apr 2025 14:47:14 -0400 Subject: [PATCH 0093/1077] keybinds: allow executing binds not bound to a key (#10102) --- src/managers/KeybindManager.cpp | 23 +++++++++++++++-------- src/managers/input/InputManager.cpp | 3 --- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 06ea358d..2eae60b9 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -150,6 +150,10 @@ CKeybindManager::CKeybindManager() { if (!m_pLastLongPressKeybind || g_pSeatManager->keyboard.expired()) return; + const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + if (!PACTIVEKEEB->allowBinds) + return; + const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(m_pLastLongPressKeybind->handler); Debug::log(LOG, "Long press timeout passed, calling dispatcher."); @@ -163,6 +167,10 @@ CKeybindManager::CKeybindManager() { if (m_vActiveKeybinds.size() == 0 || g_pSeatManager->keyboard.expired()) return; + const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + if (!PACTIVEKEEB->allowBinds) + return; + for (const auto& k : m_vActiveKeybinds) { const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(k->handler); @@ -170,7 +178,6 @@ CKeybindManager::CKeybindManager() { DISPATCHER->second(k->arg); } - const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); self->updateTimeout(std::chrono::milliseconds(1000 / PACTIVEKEEB->repeatRate)); }, nullptr); @@ -424,6 +431,9 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { return true; } + if (!pKeyboard->allowBinds) + return true; + if (!m_pXKBTranslationState) { Debug::log(ERR, "BUG THIS: m_pXKBTranslationState nullptr!"); updateXKBTranslationState(); @@ -432,10 +442,7 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { return true; } - auto e = std::any_cast(event); - - if (!pKeyboard->allowBinds) - return true; + auto e = std::any_cast(event); const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput @@ -770,6 +777,8 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP else if (SPECIALDISPATCHER && pressed) m_vPressedSpecialBinds.emplace_back(k); + found = true; + // Should never happen, as we check in the ConfigManager, but oh well if (DISPATCHER == m_mDispatchers.end()) { Debug::log(ERR, "Invalid handler in a keybind! (handler {} does not exist)", k->handler); @@ -787,10 +796,8 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP m_iPassPressed = -1; - if (k->handler == "submap") { - found = true; // don't process keybinds on submap change. + if (k->handler == "submap") break; - } } if (k->repeat) { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index af84eb20..7ca8dc00 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1540,9 +1540,6 @@ uint32_t CInputManager::accumulateModsFromAllKBs() { if (!kb->enabled) continue; - if (!kb->allowBinds) - continue; - finalMask |= kb->getModifiers(); } From 55e953b383f6b658b20ede1fea7772d2a88e7c65 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 21 Apr 2025 14:48:27 -0400 Subject: [PATCH 0094/1077] InputManager: add nofollowmouse (#9994) * InputManager: add nofollowmouse with this, focus_follows_mouse=1 acts like focus_follows_mouse=2 on the specific windows defined by the user * e * e biggest e of all time --- src/desktop/Window.hpp | 2 ++ src/managers/input/InputManager.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index f592aed6..2d99016d 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -104,6 +104,7 @@ struct SWindowData { CWindowOverridableVar tearing = false; CWindowOverridableVar xray = false; CWindowOverridableVar renderUnfocused = false; + CWindowOverridableVar noFollowMouse = false; CWindowOverridableVar borderSize = {std::string("general:border_size"), Hyprlang::INT(0), std::nullopt}; CWindowOverridableVar rounding = {std::string("decoration:rounding"), Hyprlang::INT(0), std::nullopt}; @@ -484,6 +485,7 @@ namespace NWindowProperties { {"syncfullscreen", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.syncFullscreen; }}, {"immediate", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.tearing; }}, {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.xray; }}, + {"nofollowmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noFollowMouse; }}, }; const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 7ca8dc00..6c3b3699 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -546,8 +546,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // TODO: this looks wrong. When over a popup, it constantly is switching. // Temp fix until that's figured out. Otherwise spams windowrule lookups and other shit. if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_pLastWindow.lock() != pFoundWindow) { - if (m_fMousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) - g_pCompositor->focusWindow(pFoundWindow, foundSurface); + if (m_fMousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) { + const bool hasNoFollowMouse = pFoundWindow && pFoundWindow->m_sWindowData.noFollowMouse.valueOrDefault(); + + if (refocus || !hasNoFollowMouse) + g_pCompositor->focusWindow(pFoundWindow, foundSurface); + } } else g_pCompositor->focusSurface(foundSurface, pFoundWindow); } From a4f7d7c594c70408f299ec8b794211c534709eaa Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 21 Apr 2025 22:22:06 +0100 Subject: [PATCH 0095/1077] protocols: add xdg_toplevel_tag_v1 support Adds a new windowrule to target windows by xdgTag, xdgtag: --- CMakeLists.txt | 3 +- protocols/meson.build | 3 +- src/config/ConfigManager.cpp | 15 +++++++-- src/debug/HyprCtl.cpp | 12 ++++--- src/desktop/Window.cpp | 14 +++++++++ src/desktop/Window.hpp | 2 ++ src/desktop/WindowRule.hpp | 3 +- src/managers/ProtocolManager.cpp | 7 +++-- src/protocols/XDGShell.hpp | 2 ++ src/protocols/XDGTag.cpp | 54 ++++++++++++++++++++++++++++++++ src/protocols/XDGTag.hpp | 36 +++++++++++++++++++++ 11 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 src/protocols/XDGTag.cpp create mode 100644 src/protocols/XDGTag.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d330c78..bd5e96b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,7 @@ pkg_check_modules( xkbcommon uuid wayland-server>=1.22.90 - wayland-protocols>=1.41 + wayland-protocols>=1.43 cairo pango pangocairo @@ -382,6 +382,7 @@ protocolnew("staging/single-pixel-buffer" "single-pixel-buffer-v1" false) protocolnew("staging/security-context" "security-context-v1" false) protocolnew("staging/content-type" "content-type-v1" false) protocolnew("staging/color-management" "color-management-v1" false) +protocolnew("staging/xdg-toplevel-tag" "xdg-toplevel-tag-v1" false) protocolwayland() diff --git a/protocols/meson.build b/protocols/meson.build index 7941a9ff..e4f18234 100644 --- a/protocols/meson.build +++ b/protocols/meson.build @@ -1,6 +1,6 @@ wayland_protos = dependency( 'wayland-protocols', - version: '>=1.41', + version: '>=1.43', fallback: 'wayland-protocols', default_options: ['tests=false'], ) @@ -72,6 +72,7 @@ protocols = [ wayland_protocol_dir / 'staging/security-context/security-context-v1.xml', wayland_protocol_dir / 'staging/content-type/content-type-v1.xml', wayland_protocol_dir / 'staging/color-management/color-management-v1.xml', + wayland_protocol_dir / 'staging/xdg-toplevel-tag/xdg-toplevel-tag-v1.xml', ] wl_protocols = [] diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 476aa148..a6731f07 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1415,6 +1415,11 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, } catch (std::exception& e) { Debug::log(ERR, "Rule \"content:{}\" failed with: {}", rule->szContentType, e.what()); } } + if (!rule->szXdgTag.empty()) { + if (pWindow->xdgTag().value_or("") != rule->szXdgTag) + continue; + } + if (!rule->szWorkspace.empty()) { const auto PWORKSPACE = pWindow->m_pWorkspace; @@ -2407,6 +2412,7 @@ std::optional CConfigManager::handleWindowRule(const std::string& c const auto FULLSCREENSTATEPOS = VALUE.find("fullscreenstate:"); const auto ONWORKSPACEPOS = VALUE.find("onworkspace:"); const auto CONTENTTYPEPOS = VALUE.find("content:"); + const auto XDGTAGPOS = VALUE.find("xdgTag:"); // find workspacepos that isn't onworkspacepos size_t WORKSPACEPOS = std::string::npos; @@ -2419,8 +2425,8 @@ std::optional CConfigManager::handleWindowRule(const std::string& c currentPos = VALUE.find("workspace:", currentPos + 1); } - const auto checkPos = std::unordered_set{TAGPOS, TITLEPOS, CLASSPOS, INITIALTITLEPOS, INITIALCLASSPOS, X11POS, FLOATPOS, - FULLSCREENPOS, PINNEDPOS, FULLSCREENSTATEPOS, WORKSPACEPOS, FOCUSPOS, ONWORKSPACEPOS, CONTENTTYPEPOS}; + const auto checkPos = std::unordered_set{TAGPOS, TITLEPOS, CLASSPOS, INITIALTITLEPOS, INITIALCLASSPOS, X11POS, FLOATPOS, FULLSCREENPOS, + PINNEDPOS, FULLSCREENSTATEPOS, WORKSPACEPOS, FOCUSPOS, ONWORKSPACEPOS, CONTENTTYPEPOS, XDGTAGPOS}; if (checkPos.size() == 1 && checkPos.contains(std::string::npos)) { Debug::log(ERR, "Invalid rulev2 syntax: {}", VALUE); return "Invalid rulev2 syntax: " + VALUE; @@ -2459,6 +2465,8 @@ std::optional CConfigManager::handleWindowRule(const std::string& c min = FOCUSPOS; if (CONTENTTYPEPOS > pos && CONTENTTYPEPOS < min) min = CONTENTTYPEPOS; + if (XDGTAGPOS > pos && XDGTAGPOS < min) + min = XDGTAGPOS; result = result.substr(0, min - pos); @@ -2520,6 +2528,9 @@ std::optional CConfigManager::handleWindowRule(const std::string& c if (CONTENTTYPEPOS != std::string::npos) rule->szContentType = extract(CONTENTTYPEPOS + 8); + if (XDGTAGPOS != std::string::npos) + rule->szXdgTag = extract(XDGTAGPOS + 8); + if (RULE == "unset") { std::erase_if(m_windowRules, [&](const auto& other) { if (!other->v2) diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 508b0e5c..261a36d6 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -258,7 +258,9 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { "tags": [{}], "swallowing": "0x{:x}", "focusHistoryID": {}, - "inhibitingIdle": {} + "inhibitingIdle": {}, + "xdgTag": "{}", + "xdgDescription": "{}" }},)#", (uintptr_t)w.get(), (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, @@ -266,19 +268,21 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { (int64_t)w->monitorID(), escapeJSONStrings(w->m_szClass), escapeJSONStrings(w->m_szTitle), escapeJSONStrings(w->m_szInitialClass), escapeJSONStrings(w->m_szInitialTitle), w->getPID(), ((int)w->m_bIsX11 == 1 ? "true" : "false"), (w->m_bPinned ? "true" : "false"), (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_pSwallowed.get(), - getFocusHistoryID(w), (g_pInputManager->isWindowInhibiting(w, false) ? "true" : "false")); + getFocusHistoryID(w), (g_pInputManager->isWindowInhibiting(w, false) ? "true" : "false"), escapeJSONStrings(w->xdgTag().value_or("")), + escapeJSONStrings(w->xdgDescription().value_or(""))); } else { return std::format( "Window {:x} -> {}:\n\tmapped: {}\n\thidden: {}\n\tat: {},{}\n\tsize: {},{}\n\tworkspace: {} ({})\n\tfloating: {}\n\tpseudo: {}\n\tmonitor: {}\n\tclass: {}\n\ttitle: " "{}\n\tinitialClass: {}\n\tinitialTitle: {}\n\tpid: " "{}\n\txwayland: {}\n\tpinned: " - "{}\n\tfullscreen: {}\n\tfullscreenClient: {}\n\tgrouped: {}\n\ttags: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\tinhibitingIdle: {}\n\n", + "{}\n\tfullscreen: {}\n\tfullscreenClient: {}\n\tgrouped: {}\n\ttags: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\tinhibitingIdle: {}\n\txdgTag: " + "{}\n\txdgDescription: {}\n\n", (uintptr_t)w.get(), w->m_szTitle, (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, (!w->m_pWorkspace ? "" : w->m_pWorkspace->m_szName), (int)w->m_bIsFloating, (int)w->m_bIsPseudotiled, (int64_t)w->monitorID(), w->m_szClass, w->m_szTitle, w->m_szInitialClass, w->m_szInitialTitle, w->getPID(), (int)w->m_bIsX11, (int)w->m_bPinned, (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_pSwallowed.get(), getFocusHistoryID(w), - (int)g_pInputManager->isWindowInhibiting(w, false)); + (int)g_pInputManager->isWindowInhibiting(w, false), w->xdgTag().value_or(""), w->xdgDescription().value_or("")); } } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index ffe49498..e2131133 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1808,3 +1808,17 @@ void CWindow::deactivateGroupMembers() { bool CWindow::isNotResponding() { return g_pANRManager->isNotResponding(m_pSelf.lock()); } + +std::optional CWindow::xdgTag() { + if (!m_pXDGSurface || !m_pXDGSurface->toplevel) + return std::nullopt; + + return m_pXDGSurface->toplevel->m_toplevelTag; +} + +std::optional CWindow::xdgDescription() { + if (!m_pXDGSurface || !m_pXDGSurface->toplevel) + return std::nullopt; + + return m_pXDGSurface->toplevel->m_toplevelDescription; +} diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 2d99016d..9fbb7522 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -407,6 +407,8 @@ class CWindow { void setContentType(NContentType::eContentType contentType); void deactivateGroupMembers(); bool isNotResponding(); + std::optional xdgTag(); + std::optional xdgDescription(); CBox getWindowMainSurfaceBox() const { return {m_vRealPosition->value().x, m_vRealPosition->value().y, m_vRealSize->value().x, m_vRealSize->value().y}; diff --git a/src/desktop/WindowRule.hpp b/src/desktop/WindowRule.hpp index 192d8aa7..465ddbb1 100644 --- a/src/desktop/WindowRule.hpp +++ b/src/desktop/WindowRule.hpp @@ -37,7 +37,7 @@ class CWindowRule { RULE_WORKSPACE, RULE_PROP, RULE_CONTENT, - RULE_PERSISTENTSIZE, + RULE_PERSISTENTSIZE }; eRuleType ruleType = RULE_INVALID; @@ -61,6 +61,7 @@ class CWindowRule { std::string szOnWorkspace = ""; // empty means any std::string szWorkspace = ""; // empty means any std::string szContentType = ""; // empty means any + std::string szXdgTag = ""; // empty means any // precompiled regexes CRuleRegexContainer rTitle; diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index 06987dae..c9bc2510 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -49,7 +49,6 @@ #include "../protocols/SecurityContext.hpp" #include "../protocols/CTMControl.hpp" #include "../protocols/HyprlandSurface.hpp" - #include "../protocols/core/Seat.hpp" #include "../protocols/core/DataDevice.hpp" #include "../protocols/core/Compositor.hpp" @@ -60,6 +59,7 @@ #include "../protocols/XXColorManagement.hpp" #include "../protocols/FrogColorManagement.hpp" #include "../protocols/ContentType.hpp" +#include "../protocols/XDGTag.hpp" #include "../helpers/Monitor.hpp" #include "../render/Renderer.hpp" @@ -182,6 +182,7 @@ CProtocolManager::CProtocolManager() { PROTO::ctm = makeUnique(&hyprland_ctm_control_manager_v1_interface, 2, "CTMControl"); PROTO::hyprlandSurface = makeUnique(&hyprland_surface_manager_v1_interface, 2, "HyprlandSurface"); PROTO::contentType = makeUnique(&wp_content_type_manager_v1_interface, 1, "ContentType"); + PROTO::xdgTag = makeUnique(&xdg_toplevel_tag_manager_v1_interface, 1, "XDGTag"); if (*PENABLECM) PROTO::colorManagement = makeUnique(&wp_color_manager_v1_interface, 1, "ColorManagement", *PDEBUGCM); @@ -271,6 +272,7 @@ CProtocolManager::~CProtocolManager() { PROTO::colorManagement.reset(); PROTO::xxColorManagement.reset(); PROTO::frogColorManagement.reset(); + PROTO::xdgTag.reset(); PROTO::lease.reset(); PROTO::sync.reset(); @@ -321,7 +323,8 @@ bool CProtocolManager::isGlobalPrivileged(const wl_global* global) { PROTO::xdgDialog->getGlobal(), PROTO::singlePixel->getGlobal(), PROTO::primarySelection->getGlobal(), - PROTO::hyprlandSurface->getGlobal(), + PROTO::hyprlandSurface->getGlobal(), + PROTO::xdgTag->getGlobal(), PROTO::sync ? PROTO::sync->getGlobal() : nullptr, PROTO::mesaDRM ? PROTO::mesaDRM->getGlobal() : nullptr, PROTO::linuxDma ? PROTO::linuxDma->getGlobal() : nullptr, diff --git a/src/protocols/XDGShell.hpp b/src/protocols/XDGShell.hpp index b46e0236..12f76774 100644 --- a/src/protocols/XDGShell.hpp +++ b/src/protocols/XDGShell.hpp @@ -141,6 +141,8 @@ class CXDGToplevelResource { WP parent; WP dialog; + std::optional m_toplevelTag, m_toplevelDescription; + bool anyChildModal(); std::vector> children; diff --git a/src/protocols/XDGTag.cpp b/src/protocols/XDGTag.cpp new file mode 100644 index 00000000..9176882e --- /dev/null +++ b/src/protocols/XDGTag.cpp @@ -0,0 +1,54 @@ +#include "XDGTag.hpp" +#include "XDGShell.hpp" + +CXDGToplevelTagManagerResource::CXDGToplevelTagManagerResource(UP&& resource) : m_resource(std::move(resource)) { + if UNLIKELY (!good()) + return; + + m_resource->setDestroy([this](CXdgToplevelTagManagerV1* r) { PROTO::xdgTag->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgToplevelTagManagerV1* r) { PROTO::xdgTag->destroyResource(this); }); + + resource->setSetToplevelTag([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* tag) { + auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); + + if (!TOPLEVEL) { + r->error(-1, "Invalid toplevel handle"); + return; + } + + TOPLEVEL->m_toplevelTag = tag; + }); + + resource->setSetToplevelDescription([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* description) { + auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); + + if (!TOPLEVEL) { + r->error(-1, "Invalid toplevel handle"); + return; + } + + TOPLEVEL->m_toplevelDescription = description; + }); +} + +bool CXDGToplevelTagManagerResource::good() { + return m_resource->resource(); +} + +CXDGToplevelTagProtocol::CXDGToplevelTagProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { + ; +} + +void CXDGToplevelTagProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { + const auto RESOURCE = + WP{m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; + + if UNLIKELY (!RESOURCE->good()) { + wl_client_post_no_memory(client); + return; + } +} + +void CXDGToplevelTagProtocol::destroyResource(CXDGToplevelTagManagerResource* res) { + std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); +} diff --git a/src/protocols/XDGTag.hpp b/src/protocols/XDGTag.hpp new file mode 100644 index 00000000..cff4da03 --- /dev/null +++ b/src/protocols/XDGTag.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include +#include "WaylandProtocol.hpp" +#include "xdg-toplevel-tag-v1.hpp" + +class CXDGToplevelResource; + +class CXDGToplevelTagManagerResource { + public: + CXDGToplevelTagManagerResource(UP&& resource); + + bool good(); + + private: + UP m_resource; +}; + +class CXDGToplevelTagProtocol : public IWaylandProtocol { + public: + CXDGToplevelTagProtocol(const wl_interface* iface, const int& ver, const std::string& name); + + virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); + + private: + void destroyResource(CXDGToplevelTagManagerResource* res); + + // + std::vector> m_vManagers; + + friend class CXDGToplevelTagManagerResource; +}; + +namespace PROTO { + inline UP xdgTag; +}; From 2e540e4ec4fa358eceedd8a7929d53c012021493 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Tue, 22 Apr 2025 11:00:49 +0300 Subject: [PATCH 0096/1077] flake.lock: update --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 8391a06e..3ca17433 100644 --- a/flake.lock +++ b/flake.lock @@ -105,11 +105,11 @@ ] }, "locked": { - "lastModified": 1743953322, - "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", + "lastModified": 1745015490, + "narHash": "sha256-apEJ9zoSzmslhJ2vOKFcXTMZLUFYzh1ghfB6Rbw3Low=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", + "rev": "60754910946b4e2dc1377b967b7156cb989c5873", "type": "github" }, "original": { From 3577a6be31fa26539b4088ea07aa2221f84b132e Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Tue, 22 Apr 2025 11:03:27 +0300 Subject: [PATCH 0097/1077] nix/overlays: add w-p 1.43 --- nix/overlays.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/nix/overlays.nix b/nix/overlays.nix index b632d0b4..1f50e88d 100644 --- a/nix/overlays.nix +++ b/nix/overlays.nix @@ -29,6 +29,7 @@ in { inputs.hyprutils.overlays.default inputs.hyprwayland-scanner.overlays.default self.overlays.udis86 + self.overlays.wayland-protocols # Hyprland packages themselves (final: _prev: let @@ -89,4 +90,16 @@ in { patches = []; }); }; + + # TODO: remove when https://github.com/NixOS/nixpkgs/pull/397497 lands in master + wayland-protocols = final: prev: { + wayland-protocols = prev.wayland-protocols.overrideAttrs (self: super: { + version = "1.43"; + + src = final.fetchurl { + url = "https://gitlab.freedesktop.org/wayland/${self.pname}/-/releases/${self.version}/downloads/${self.pname}-${self.version}.tar.xz"; + hash = "sha256-ujw0Jd0nxXtSkek9upe+EkeWAeALyrJNJkcZSMtkNlM="; + }; + }); + }; } From 241a4935a244f403fa7108259075b04c81ed258f Mon Sep 17 00:00:00 2001 From: davc0n Date: Tue, 22 Apr 2025 15:23:29 +0200 Subject: [PATCH 0098/1077] compositor: refactor class member vars (#10141) --- src/Compositor.cpp | 467 +++++++++--------- src/Compositor.hpp | 67 ++- src/config/ConfigManager.cpp | 44 +- src/debug/HyprCtl.cpp | 46 +- src/debug/HyprDebugOverlay.cpp | 8 +- src/debug/HyprNotificationOverlay.cpp | 2 +- src/desktop/LayerSurface.cpp | 14 +- src/desktop/Subsurface.cpp | 2 +- src/desktop/Window.cpp | 30 +- src/desktop/Workspace.cpp | 24 +- src/events/Windows.cpp | 34 +- src/helpers/MiscFunctions.cpp | 36 +- src/helpers/Monitor.cpp | 90 ++-- src/hyprerror/HyprError.cpp | 6 +- src/layout/DwindleLayout.cpp | 20 +- src/layout/IHyprLayout.cpp | 26 +- src/layout/MasterLayout.cpp | 24 +- src/managers/ANRManager.cpp | 4 +- src/managers/AnimationManager.cpp | 10 +- src/managers/CursorManager.cpp | 4 +- src/managers/EventManager.cpp | 8 +- src/managers/KeybindManager.cpp | 164 +++--- src/managers/PointerManager.cpp | 32 +- src/managers/ProtocolManager.cpp | 4 +- src/managers/SeatManager.cpp | 4 +- src/managers/SessionLockManager.cpp | 16 +- src/managers/XWaylandManager.cpp | 8 +- src/managers/eventLoop/EventLoopManager.cpp | 8 +- src/managers/input/IdleInhibitor.cpp | 2 +- src/managers/input/InputManager.cpp | 58 +-- src/managers/input/InputMethodRelay.cpp | 12 +- src/managers/input/Swipe.cpp | 12 +- src/managers/input/TextInput.cpp | 6 +- src/managers/input/Touch.cpp | 2 +- .../permissions/DynamicPermissionManager.cpp | 2 +- src/plugins/PluginAPI.cpp | 2 +- src/protocols/CTMControl.cpp | 4 +- src/protocols/DRMLease.cpp | 2 +- src/protocols/DRMSyncobj.cpp | 2 +- src/protocols/ForeignToplevel.cpp | 2 +- src/protocols/ForeignToplevelWlr.cpp | 6 +- src/protocols/InputMethodV2.cpp | 4 +- src/protocols/LayerShell.cpp | 4 +- src/protocols/LinuxDMABUF.cpp | 6 +- src/protocols/MesaDRM.cpp | 2 +- src/protocols/OutputManagement.cpp | 10 +- src/protocols/PointerConstraints.cpp | 2 +- src/protocols/Screencopy.cpp | 4 +- src/protocols/SecurityContext.cpp | 6 +- src/protocols/SessionLock.cpp | 4 +- src/protocols/ShortcutsInhibit.cpp | 6 +- src/protocols/Tablet.cpp | 2 +- src/protocols/TearingControl.cpp | 2 +- src/protocols/WaylandProtocol.cpp | 4 +- src/protocols/XDGShell.cpp | 6 +- src/protocols/core/DataDevice.cpp | 2 +- src/protocols/core/Output.cpp | 2 +- src/render/OpenGL.cpp | 17 +- src/render/Renderbuffer.cpp | 2 +- src/render/Renderer.cpp | 68 +-- src/render/Texture.cpp | 2 +- .../decorations/CHyprBorderDecoration.cpp | 2 +- .../decorations/CHyprDropShadowDecoration.cpp | 2 +- .../decorations/CHyprGroupBarDecoration.cpp | 10 +- src/render/pass/Pass.cpp | 6 +- src/xwayland/Server.cpp | 6 +- src/xwayland/XWM.cpp | 10 +- src/xwayland/XWayland.cpp | 2 +- 68 files changed, 751 insertions(+), 756 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index f61d5615..8e50019e 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -176,54 +176,54 @@ void CCompositor::setMallocThreshold() { #endif } -CCompositor::CCompositor(bool onlyConfig) : m_bOnlyConfigVerification(onlyConfig), m_iHyprlandPID(getpid()) { +CCompositor::CCompositor(bool onlyConfig) : m_onlyConfigVerification(onlyConfig), m_iHyprlandPID(getpid()) { if (onlyConfig) return; setMallocThreshold(); - m_szHyprTempDataRoot = std::string{getenv("XDG_RUNTIME_DIR")} + "/hypr"; + m_hyprTempDataRoot = std::string{getenv("XDG_RUNTIME_DIR")} + "/hypr"; - if (m_szHyprTempDataRoot.starts_with("/hypr")) { + if (m_hyprTempDataRoot.starts_with("/hypr")) { std::println("Bailing out, $XDG_RUNTIME_DIR is invalid"); throw std::runtime_error("CCompositor() failed"); } - if (!m_szHyprTempDataRoot.starts_with("/run/user")) + if (!m_hyprTempDataRoot.starts_with("/run/user")) std::println("[!!WARNING!!] XDG_RUNTIME_DIR looks non-standard. Proceeding anyways..."); std::random_device dev; std::mt19937 engine(dev()); std::uniform_int_distribution<> distribution(0, INT32_MAX); - m_szInstanceSignature = std::format("{}_{}_{}", GIT_COMMIT_HASH, std::time(nullptr), distribution(engine)); + m_instanceSignature = std::format("{}_{}_{}", GIT_COMMIT_HASH, std::time(nullptr), distribution(engine)); - setenv("HYPRLAND_INSTANCE_SIGNATURE", m_szInstanceSignature.c_str(), true); + setenv("HYPRLAND_INSTANCE_SIGNATURE", m_instanceSignature.c_str(), true); - if (!std::filesystem::exists(m_szHyprTempDataRoot)) - mkdir(m_szHyprTempDataRoot.c_str(), S_IRWXU); - else if (!std::filesystem::is_directory(m_szHyprTempDataRoot)) { - std::println("Bailing out, {} is not a directory", m_szHyprTempDataRoot); + if (!std::filesystem::exists(m_hyprTempDataRoot)) + mkdir(m_hyprTempDataRoot.c_str(), S_IRWXU); + else if (!std::filesystem::is_directory(m_hyprTempDataRoot)) { + std::println("Bailing out, {} is not a directory", m_hyprTempDataRoot); throw std::runtime_error("CCompositor() failed"); } - m_szInstancePath = m_szHyprTempDataRoot + "/" + m_szInstanceSignature; + m_instancePath = m_hyprTempDataRoot + "/" + m_instanceSignature; - if (std::filesystem::exists(m_szInstancePath)) { - std::println("Bailing out, {} exists??", m_szInstancePath); + if (std::filesystem::exists(m_instancePath)) { + std::println("Bailing out, {} exists??", m_instancePath); throw std::runtime_error("CCompositor() failed"); } - if (mkdir(m_szInstancePath.c_str(), S_IRWXU) < 0) { - std::println("Bailing out, couldn't create {}", m_szInstancePath); + if (mkdir(m_instancePath.c_str(), S_IRWXU) < 0) { + std::println("Bailing out, couldn't create {}", m_instancePath); throw std::runtime_error("CCompositor() failed"); } - Debug::init(m_szInstancePath); + Debug::init(m_instancePath); - Debug::log(LOG, "Instance Signature: {}", m_szInstanceSignature); + Debug::log(LOG, "Instance Signature: {}", m_instanceSignature); - Debug::log(LOG, "Runtime directory: {}", m_szInstancePath); + Debug::log(LOG, "Runtime directory: {}", m_instancePath); Debug::log(LOG, "Hyprland PID: {}", m_iHyprlandPID); @@ -239,13 +239,13 @@ CCompositor::CCompositor(bool onlyConfig) : m_bOnlyConfigVerification(onlyConfig setRandomSplash(); - Debug::log(LOG, "\nCurrent splash: {}\n\n", m_szCurrentSplash); + Debug::log(LOG, "\nCurrent splash: {}\n\n", m_currentSplash); bumpNofile(); } CCompositor::~CCompositor() { - if (!m_bIsShuttingDown && !m_bOnlyConfigVerification) + if (!m_isShuttingDown && !m_onlyConfigVerification) cleanup(); } @@ -264,7 +264,7 @@ void CCompositor::setRandomSplash() { std::mt19937 engine(dev()); std::uniform_int_distribution<> distribution(0, SPLASHES->size() - 1); - m_szCurrentSplash = SPLASHES->at(distribution(engine)); + m_currentSplash = SPLASHES->at(distribution(engine)); } static std::vector> pendingOutputs; @@ -280,7 +280,7 @@ static bool filterGlobals(const wl_client* client, const wl_global* global, void // void CCompositor::initServer(std::string socketName, int socketFd) { - if (m_bOnlyConfigVerification) { + if (m_onlyConfigVerification) { g_pHookSystem = makeUnique(); g_pKeybindManager = makeUnique(); g_pAnimationManager = makeUnique(); @@ -290,14 +290,14 @@ void CCompositor::initServer(std::string socketName, int socketFd) { return; } - m_sWLDisplay = wl_display_create(); + m_wlDisplay = wl_display_create(); - wl_display_set_global_filter(m_sWLDisplay, ::filterGlobals, nullptr); + wl_display_set_global_filter(m_wlDisplay, ::filterGlobals, nullptr); - m_sWLEventLoop = wl_display_get_event_loop(m_sWLDisplay); + m_wlEventLoop = wl_display_get_event_loop(m_wlDisplay); // register crit signal handler - m_critSigSource = wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr); + m_critSigSource = wl_event_loop_add_signal(m_wlEventLoop, SIGTERM, handleCritSignal, nullptr); if (!envEnabled("HYPRLAND_NO_CRASHREPORTER")) { signal(SIGSEGV, handleUnrecoverableSignal); @@ -311,7 +311,7 @@ void CCompositor::initServer(std::string socketName, int socketFd) { Debug::m_trace = true; // set the buffer size to 1MB to avoid disconnects due to an app hanging for a short while - wl_display_set_default_max_buffer_size(m_sWLDisplay, 1_MB); + wl_display_set_default_max_buffer_size(m_wlDisplay, 1_MB); Aquamarine::SBackendOptions options{}; options.logFunction = aqLog; @@ -328,9 +328,9 @@ void CCompositor::initServer(std::string socketName, int socketFd) { option.backendRequestMode = Aquamarine::eBackendRequestMode::AQ_BACKEND_REQUEST_FALLBACK; implementations.emplace_back(option); - m_pAqBackend = CBackend::create(implementations, options); + m_aqBackend = CBackend::create(implementations, options); - if (!m_pAqBackend) { + if (!m_aqBackend) { Debug::log(CRIT, "m_pAqBackend was null! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a Wayland " "session, NOT an X11 one."); @@ -341,23 +341,23 @@ void CCompositor::initServer(std::string socketName, int socketFd) { initAllSignals(); - if (!m_pAqBackend->start()) { + if (!m_aqBackend->start()) { Debug::log(CRIT, "m_pAqBackend couldn't start! This usually means aquamarine could not find a GPU or encountered some issues. Make sure you're running either on a tty or on a " "Wayland session, NOT an X11 one."); throwError("CBackend::create() failed!"); } - m_bInitialized = true; + m_initialized = true; - m_iDRMFD = m_pAqBackend->drmFD(); - Debug::log(LOG, "Running on DRMFD: {}", m_iDRMFD); + m_drmFD = m_aqBackend->drmFD(); + Debug::log(LOG, "Running on DRMFD: {}", m_drmFD); if (!socketName.empty() && socketFd != -1) { fcntl(socketFd, F_SETFD, FD_CLOEXEC); - const auto RETVAL = wl_display_add_socket_fd(m_sWLDisplay, socketFd); + const auto RETVAL = wl_display_add_socket_fd(m_wlDisplay, socketFd); if (RETVAL >= 0) { - m_szWLDisplaySocket = socketName; + m_wlDisplaySocket = socketName; Debug::log(LOG, "wl_display_add_socket_fd for {} succeeded with {}", socketName, RETVAL); } else Debug::log(WARN, "wl_display_add_socket_fd for {} returned {}: skipping", socketName, RETVAL); @@ -365,9 +365,9 @@ void CCompositor::initServer(std::string socketName, int socketFd) { // get socket, avoid using 0 for (int candidate = 1; candidate <= 32; candidate++) { const auto CANDIDATESTR = ("wayland-" + std::to_string(candidate)); - const auto RETVAL = wl_display_add_socket(m_sWLDisplay, CANDIDATESTR.c_str()); + const auto RETVAL = wl_display_add_socket(m_wlDisplay, CANDIDATESTR.c_str()); if (RETVAL >= 0) { - m_szWLDisplaySocket = CANDIDATESTR; + m_wlDisplaySocket = CANDIDATESTR; Debug::log(LOG, "wl_display_add_socket for {} succeeded with {}", CANDIDATESTR, RETVAL); break; } else @@ -375,22 +375,22 @@ void CCompositor::initServer(std::string socketName, int socketFd) { } } - if (m_szWLDisplaySocket.empty()) { + if (m_wlDisplaySocket.empty()) { Debug::log(WARN, "All candidates failed, trying wl_display_add_socket_auto"); - const auto SOCKETSTR = wl_display_add_socket_auto(m_sWLDisplay); + const auto SOCKETSTR = wl_display_add_socket_auto(m_wlDisplay); if (SOCKETSTR) - m_szWLDisplaySocket = SOCKETSTR; + m_wlDisplaySocket = SOCKETSTR; } - if (m_szWLDisplaySocket.empty()) { + if (m_wlDisplaySocket.empty()) { Debug::log(CRIT, "m_szWLDisplaySocket NULL!"); throwError("m_szWLDisplaySocket was null! (wl_display_add_socket and wl_display_add_socket_auto failed)"); } - setenv("WAYLAND_DISPLAY", m_szWLDisplaySocket.c_str(), 1); + setenv("WAYLAND_DISPLAY", m_wlDisplaySocket.c_str(), 1); if (!getenv("XDG_CURRENT_DESKTOP")) { setenv("XDG_CURRENT_DESKTOP", "Hyprland", 1); - m_bDesktopEnvSet = true; + m_desktopEnvSet = true; } initManagers(STAGE_BASICINIT); @@ -404,18 +404,18 @@ void CCompositor::initServer(std::string socketName, int socketFd) { } void CCompositor::initAllSignals() { - m_pAqBackend->events.newOutput.registerStaticListener( + m_aqBackend->events.newOutput.registerStaticListener( [this](void* p, std::any data) { auto output = std::any_cast>(data); Debug::log(LOG, "New aquamarine output with name {}", output->name); - if (m_bInitialized) + if (m_initialized) onNewMonitor(output); else pendingOutputs.emplace_back(output); }, nullptr); - m_pAqBackend->events.newPointer.registerStaticListener( + m_aqBackend->events.newPointer.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine pointer with name {}", dev->getName()); @@ -424,7 +424,7 @@ void CCompositor::initAllSignals() { }, nullptr); - m_pAqBackend->events.newKeyboard.registerStaticListener( + m_aqBackend->events.newKeyboard.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine keyboard with name {}", dev->getName()); @@ -433,7 +433,7 @@ void CCompositor::initAllSignals() { }, nullptr); - m_pAqBackend->events.newTouch.registerStaticListener( + m_aqBackend->events.newTouch.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine touch with name {}", dev->getName()); @@ -442,7 +442,7 @@ void CCompositor::initAllSignals() { }, nullptr); - m_pAqBackend->events.newSwitch.registerStaticListener( + m_aqBackend->events.newSwitch.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine switch with name {}", dev->getName()); @@ -450,7 +450,7 @@ void CCompositor::initAllSignals() { }, nullptr); - m_pAqBackend->events.newTablet.registerStaticListener( + m_aqBackend->events.newTablet.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine tablet with name {}", dev->getName()); @@ -458,7 +458,7 @@ void CCompositor::initAllSignals() { }, nullptr); - m_pAqBackend->events.newTabletPad.registerStaticListener( + m_aqBackend->events.newTabletPad.registerStaticListener( [](void* data, std::any d) { auto dev = std::any_cast>(d); Debug::log(LOG, "New aquamarine tablet pad with name {}", dev->getName()); @@ -466,15 +466,15 @@ void CCompositor::initAllSignals() { }, nullptr); - if (m_pAqBackend->hasSession()) { - m_pAqBackend->session->events.changeActive.registerStaticListener( + if (m_aqBackend->hasSession()) { + m_aqBackend->session->events.changeActive.registerStaticListener( [this](void*, std::any) { - if (m_pAqBackend->session->active) { + if (m_aqBackend->session->active) { Debug::log(LOG, "Session got activated!"); - m_bSessionActive = true; + m_sessionActive = true; - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { scheduleFrameForMonitor(m); m->applyMonitorRule(&m->activeMonitorRule, true); } @@ -484,7 +484,7 @@ void CCompositor::initAllSignals() { } else { Debug::log(LOG, "Session got deactivated!"); - m_bSessionActive = false; + m_sessionActive = false; } }, nullptr); @@ -504,10 +504,10 @@ void CCompositor::cleanEnvironment() { // in main unsetenv("HYPRLAND_CMD"); unsetenv("XDG_BACKEND"); - if (m_bDesktopEnvSet) + if (m_desktopEnvSet) unsetenv("XDG_CURRENT_DESKTOP"); - if (m_pAqBackend->hasSession() && !envEnabled("HYPRLAND_NO_SD_VARS")) { + if (m_aqBackend->hasSession() && !envEnabled("HYPRLAND_NO_SD_VARS")) { const auto CMD = #ifdef USES_SYSTEMD "systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash " @@ -522,12 +522,12 @@ void CCompositor::stopCompositor() { Debug::log(LOG, "Hyprland is stopping!"); // this stops the wayland loop, wl_display_run - wl_display_terminate(m_sWLDisplay); - m_bIsShuttingDown = true; + wl_display_terminate(m_wlDisplay); + m_isShuttingDown = true; } void CCompositor::cleanup() { - if (!m_sWLDisplay) + if (!m_wlDisplay) return; signal(SIGABRT, SIG_DFL); @@ -535,7 +535,7 @@ void CCompositor::cleanup() { removeLockFile(); - m_bIsShuttingDown = true; + m_isShuttingDown = true; Debug::m_shuttingDown = true; #ifdef USES_SYSTEMD @@ -549,13 +549,13 @@ void CCompositor::cleanup() { // still in a normal working state. g_pPluginSystem->unloadAllPlugins(); - m_pLastFocus.reset(); - m_pLastWindow.reset(); + m_lastFocus.reset(); + m_lastWindow.reset(); - m_vWorkspaces.clear(); - m_vWindows.clear(); + m_workspaces.clear(); + m_windows.clear(); - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { g_pHyprOpenGL->destroyMonitorResources(m); m->output->state->setEnabled(false); @@ -564,9 +564,9 @@ void CCompositor::cleanup() { g_pXWayland.reset(); - m_vMonitors.clear(); + m_monitors.clear(); - wl_display_destroy_clients(g_pCompositor->m_sWLDisplay); + wl_display_destroy_clients(g_pCompositor->m_wlDisplay); removeAllSignals(); g_pInputManager.reset(); @@ -597,14 +597,14 @@ void CCompositor::cleanup() { g_pANRManager.reset(); g_pConfigWatcher.reset(); - if (m_pAqBackend) - m_pAqBackend.reset(); + if (m_aqBackend) + m_aqBackend.reset(); if (m_critSigSource) wl_event_source_remove(m_critSigSource); // this frees all wayland resources, including sockets - wl_display_destroy(m_sWLDisplay); + wl_display_destroy(m_wlDisplay); Debug::close(); } @@ -613,7 +613,7 @@ void CCompositor::initManagers(eManagersInitStage stage) { switch (stage) { case STAGE_PRIORITY: { Debug::log(LOG, "Creating the EventLoopManager!"); - g_pEventLoopManager = makeUnique(m_sWLDisplay, m_sWLEventLoop); + g_pEventLoopManager = makeUnique(m_wlDisplay, m_wlEventLoop); Debug::log(LOG, "Creating the HookSystem!"); g_pHookSystem = makeUnique(); @@ -699,24 +699,24 @@ void CCompositor::initManagers(eManagersInitStage stage) { g_pANRManager = makeUnique(); Debug::log(LOG, "Starting XWayland"); - g_pXWayland = makeUnique(g_pCompositor->m_bWantsXwayland); + g_pXWayland = makeUnique(g_pCompositor->m_wantsXwayland); } break; default: UNREACHABLE(); } } void CCompositor::createLockFile() { - const auto PATH = m_szInstancePath + "/hyprland.lock"; + const auto PATH = m_instancePath + "/hyprland.lock"; std::ofstream ofs(PATH, std::ios::trunc); - ofs << m_iHyprlandPID << "\n" << m_szWLDisplaySocket << "\n"; + ofs << m_iHyprlandPID << "\n" << m_wlDisplaySocket << "\n"; ofs.close(); } void CCompositor::removeLockFile() { - const auto PATH = m_szInstancePath + "/hyprland.lock"; + const auto PATH = m_instancePath + "/hyprland.lock"; if (std::filesystem::exists(PATH)) std::filesystem::remove(PATH); @@ -725,7 +725,7 @@ void CCompositor::removeLockFile() { void CCompositor::prepareFallbackOutput() { // create a backup monitor SP headless; - for (auto const& impl : m_pAqBackend->getImplementations()) { + for (auto const& impl : m_aqBackend->getImplementations()) { if (impl->type() == Aquamarine::AQ_BACKEND_HEADLESS) { headless = impl; break; @@ -745,7 +745,7 @@ void CCompositor::startCompositor() { if ( /* Session-less Hyprland usually means a nest, don't update the env in that case */ - m_pAqBackend->hasSession() && + m_aqBackend->hasSession() && /* Activation environment management is not disabled */ !envEnabled("HYPRLAND_NO_SD_VARS")) { const auto CMD = @@ -757,7 +757,7 @@ void CCompositor::startCompositor() { CKeybindManager::spawn(CMD); } - Debug::log(LOG, "Running on WAYLAND_DISPLAY: {}", m_szWLDisplaySocket); + Debug::log(LOG, "Running on WAYLAND_DISPLAY: {}", m_wlDisplaySocket); prepareFallbackOutput(); @@ -782,7 +782,7 @@ void CCompositor::startCompositor() { } PHLMONITOR CCompositor::getMonitorFromID(const MONITORID& id) { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (m->ID == id) { return m; } @@ -792,7 +792,7 @@ PHLMONITOR CCompositor::getMonitorFromID(const MONITORID& id) { } PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (m->szName == name) { return m; } @@ -801,7 +801,7 @@ PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) { } PHLMONITOR CCompositor::getMonitorFromDesc(const std::string& desc) { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (m->szDescription.starts_with(desc)) return m; } @@ -813,13 +813,13 @@ PHLMONITOR CCompositor::getMonitorFromCursor() { } PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { - if (m_vMonitors.empty()) { + if (m_monitors.empty()) { Debug::log(WARN, "getMonitorFromVector called with empty monitor list"); return nullptr; } PHLMONITOR mon; - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (CBox{m->vecPosition, m->vecSize}.containsPoint(point)) { mon = m; break; @@ -830,7 +830,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { float bestDistance = 0.f; PHLMONITOR pBestMon; - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { float dist = vecToRectDistanceSquared(point, m->vecPosition, m->vecPosition + m->vecSize); if (dist < bestDistance || !pBestMon) { @@ -841,7 +841,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { if (!pBestMon) { // ????? Debug::log(WARN, "getMonitorFromVector no close mon???"); - return m_vMonitors.front(); + return m_monitors.front(); } return pBestMon; @@ -854,13 +854,13 @@ void CCompositor::removeWindowFromVectorSafe(PHLWINDOW pWindow) { if (!pWindow->m_bFadingOut) { EMIT_HOOK_EVENT("destroyWindow", pWindow); - std::erase_if(m_vWindows, [&](SP& el) { return el == pWindow; }); - std::erase_if(m_vWindowsFadingOut, [&](PHLWINDOWREF el) { return el.lock() == pWindow; }); + std::erase_if(m_windows, [&](SP& el) { return el == pWindow; }); + std::erase_if(m_windowsFadingOut, [&](PHLWINDOWREF el) { return el.lock() == pWindow; }); } } bool CCompositor::monitorExists(PHLMONITOR pMonitor) { - return std::ranges::any_of(m_vRealMonitors, [&](const PHLMONITOR& m) { return m == pMonitor; }); + return std::ranges::any_of(m_realMonitors, [&](const PHLMONITOR& m) { return m == pMonitor; }); } PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t properties, PHLWINDOW pIgnoreWindow) { @@ -873,7 +873,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper // pinned windows on top of floating regardless if (properties & ALLOW_FLOATING) { - for (auto const& w : m_vWindows | std::views::reverse) { + for (auto const& w : m_windows | std::views::reverse) { if (w->m_bIsFloating && w->m_bIsMapped && !w->isHidden() && !w->m_bX11ShouldntFocus && w->m_bPinned && !w->m_sWindowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { const auto BB = w->getWindowBoxUnified(properties); @@ -891,7 +891,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper auto windowForWorkspace = [&](bool special) -> PHLWINDOW { auto floating = [&](bool aboveFullscreen) -> PHLWINDOW { - for (auto const& w : m_vWindows | std::views::reverse) { + for (auto const& w : m_windows | std::views::reverse) { if (special && !w->onSpecialWorkspace()) // because special floating may creep up into regular continue; @@ -922,7 +922,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (w->m_bIsX11 && w->isX11OverrideRedirect() && !w->m_pXWaylandSurface->wantsFocus()) { // Override Redirect - return g_pCompositor->m_pLastWindow.lock(); // we kinda trick everything here. + return g_pCompositor->m_lastWindow.lock(); // we kinda trick everything here. // TODO: this is wrong, we should focus the parent, but idk how to get it considering it's nullptr in most cases. } @@ -960,7 +960,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper return found; // for windows, we need to check their extensions too, first. - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (special != w->onSpecialWorkspace()) continue; @@ -974,7 +974,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper } } - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (special != w->onSpecialWorkspace()) continue; @@ -1061,7 +1061,7 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo } PHLMONITOR CCompositor::getMonitorFromOutput(SP out) { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (m->output == out) { return m; } @@ -1071,7 +1071,7 @@ PHLMONITOR CCompositor::getMonitorFromOutput(SP out) { } PHLMONITOR CCompositor::getRealMonitorFromOutput(SP out) { - for (auto const& m : m_vRealMonitors) { + for (auto const& m : m_realMonitors) { if (m->output == out) { return m; } @@ -1102,11 +1102,11 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface if (!pWindow || !validMapped(pWindow)) { - if (m_pLastWindow.expired() && !pWindow) + if (m_lastWindow.expired() && !pWindow) return; - const auto PLASTWINDOW = m_pLastWindow.lock(); - m_pLastWindow.reset(); + const auto PLASTWINDOW = m_lastWindow.lock(); + m_lastWindow.reset(); if (PLASTWINDOW && PLASTWINDOW->m_bIsMapped) { updateWindowAnimatedDecorationValues(PLASTWINDOW); @@ -1123,7 +1123,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface g_pLayoutManager->getCurrentLayout()->onWindowFocusChange(nullptr); - m_pLastFocus.reset(); + m_lastFocus.reset(); g_pInputManager->recheckIdleInhibitorStatus(); return; @@ -1134,11 +1134,11 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; } - if (m_pLastWindow.lock() == pWindow && g_pSeatManager->state.keyboardFocus == pSurface && g_pSeatManager->state.keyboardFocus) + if (m_lastWindow.lock() == pWindow && g_pSeatManager->state.keyboardFocus == pSurface && g_pSeatManager->state.keyboardFocus) return; if (pWindow->m_bPinned) - pWindow->m_pWorkspace = m_pLastMonitor->activeWorkspace; + pWindow->m_pWorkspace = m_lastMonitor->activeWorkspace; const auto PMONITOR = pWindow->m_pMonitor.lock(); @@ -1146,18 +1146,18 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface const auto PWORKSPACE = pWindow->m_pWorkspace; // This is to fix incorrect feedback on the focus history. PWORKSPACE->m_pLastFocusedWindow = pWindow; - if (m_pLastMonitor->activeWorkspace) - PWORKSPACE->rememberPrevWorkspace(m_pLastMonitor->activeWorkspace); + if (m_lastMonitor->activeWorkspace) + PWORKSPACE->rememberPrevWorkspace(m_lastMonitor->activeWorkspace); if (PWORKSPACE->m_bIsSpecialWorkspace) - m_pLastMonitor->changeWorkspace(PWORKSPACE, false, true); // if special ws, open on current monitor + m_lastMonitor->changeWorkspace(PWORKSPACE, false, true); // if special ws, open on current monitor else if (PMONITOR) PMONITOR->changeWorkspace(PWORKSPACE, false, true); // changeworkspace already calls focusWindow return; } - const auto PLASTWINDOW = m_pLastWindow.lock(); - m_pLastWindow = pWindow; + const auto PLASTWINDOW = m_lastWindow.lock(); + m_lastWindow = pWindow; /* If special fallthrough is enabled, this behavior will be disabled, as I have no better idea of nicely tracking which window focuses are "via keybinds" and which ones aren't. */ @@ -1174,7 +1174,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface g_pXWaylandManager->activateWindow(PLASTWINDOW, false); } - m_pLastWindow = PLASTWINDOW; + m_lastWindow = PLASTWINDOW; const auto PWINDOWSURFACE = pSurface ? pSurface : pWindow->m_pWLSurface->resource(); @@ -1202,11 +1202,11 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface if (!preserveFocusHistory) { // move to front of the window history - const auto HISTORYPIVOT = std::ranges::find_if(m_vWindowFocusHistory, [&](const auto& other) { return other.lock() == pWindow; }); - if (HISTORYPIVOT == m_vWindowFocusHistory.end()) + const auto HISTORYPIVOT = std::ranges::find_if(m_windowFocusHistory, [&](const auto& other) { return other.lock() == pWindow; }); + if (HISTORYPIVOT == m_windowFocusHistory.end()) Debug::log(ERR, "BUG THIS: {} has no pivot in history", pWindow); else - std::rotate(m_vWindowFocusHistory.begin(), HISTORYPIVOT, HISTORYPIVOT + 1); + std::rotate(m_windowFocusHistory.begin(), HISTORYPIVOT, HISTORYPIVOT + 1); } if (*PFOLLOWMOUSE == 0) @@ -1229,18 +1229,18 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo return; } - const auto PLASTSURF = m_pLastFocus.lock(); + const auto PLASTSURF = m_lastFocus.lock(); // Unfocus last surface if should - if (m_pLastFocus && !pWindowOwner) - g_pXWaylandManager->activateSurface(m_pLastFocus.lock(), false); + if (m_lastFocus && !pWindowOwner) + g_pXWaylandManager->activateSurface(m_lastFocus.lock(), false); if (!pSurface) { g_pSeatManager->setKeyboardFocus(nullptr); g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindow", .data = ","}); g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindowv2", .data = ""}); EMIT_HOOK_EVENT("keyboardFocus", (SP)nullptr); - m_pLastFocus.reset(); + m_lastFocus.reset(); return; } @@ -1253,7 +1253,7 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo Debug::log(LOG, "Set keyboard focus to surface {:x}", (uintptr_t)pSurface.get()); g_pXWaylandManager->activateSurface(pSurface, true); - m_pLastFocus = pSurface; + m_lastFocus = pSurface; EMIT_HOOK_EVENT("keyboardFocus", pSurface); @@ -1316,7 +1316,7 @@ PHLWINDOW CCompositor::getWindowFromSurface(SP pSurface) { } PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) { - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if ((uint32_t)(((uint64_t)w.get()) & 0xFFFFFFFF) == handle) { return w; } @@ -1326,7 +1326,7 @@ PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) { } PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) { - for (auto const& w : m_vWorkspaces) { + for (auto const& w : m_workspaces) { if (w->m_iID == id && !w->inert()) return w; } @@ -1335,13 +1335,13 @@ PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) { } void CCompositor::sanityCheckWorkspaces() { - auto it = m_vWorkspaces.begin(); - while (it != m_vWorkspaces.end()) { + auto it = m_workspaces.begin(); + while (it != m_workspaces.end()) { const auto& WORKSPACE = *it; // If ref == 1, only the compositor holds a ref, which means it's inactive and has no mapped windows. if (!WORKSPACE->m_bPersistent && WORKSPACE.strongRef() == 1) { - it = m_vWorkspaces.erase(it); + it = m_workspaces.erase(it); continue; } @@ -1350,7 +1350,7 @@ void CCompositor::sanityCheckWorkspaces() { } PHLWINDOW CCompositor::getUrgentWindow() { - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_bIsMapped && w->m_bIsUrgent) return w; } @@ -1359,7 +1359,7 @@ PHLWINDOW CCompositor::getUrgentWindow() { } bool CCompositor::isWindowActive(PHLWINDOW pWindow) { - if (m_pLastWindow.expired() && !m_pLastFocus) + if (m_lastWindow.expired() && !m_lastFocus) return false; if (!pWindow->m_bIsMapped) @@ -1367,7 +1367,7 @@ bool CCompositor::isWindowActive(PHLWINDOW pWindow) { const auto PSURFACE = pWindow->m_pWLSurface->resource(); - return PSURFACE == m_pLastFocus || pWindow == m_pLastWindow.lock(); + return PSURFACE == m_lastFocus || pWindow == m_lastWindow.lock(); } void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { @@ -1377,21 +1377,21 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { if (top) pWindow->m_bCreatedOverFullscreen = true; - if (pWindow == (top ? m_vWindows.back() : m_vWindows.front())) + if (pWindow == (top ? m_windows.back() : m_windows.front())) return; auto moveToZ = [&](PHLWINDOW pw, bool top) -> void { if (top) { - for (auto it = m_vWindows.begin(); it != m_vWindows.end(); ++it) { + for (auto it = m_windows.begin(); it != m_windows.end(); ++it) { if (*it == pw) { - std::rotate(it, it + 1, m_vWindows.end()); + std::rotate(it, it + 1, m_windows.end()); break; } } } else { - for (auto it = m_vWindows.rbegin(); it != m_vWindows.rend(); ++it) { + for (auto it = m_windows.rbegin(); it != m_windows.rend(); ++it) { if (*it == pw) { - std::rotate(it, it + 1, m_vWindows.rend()); + std::rotate(it, it + 1, m_windows.rend()); break; } } @@ -1414,7 +1414,7 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { else toMove.insert(toMove.begin(), pw); - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_bIsMapped && !w->isHidden() && w->m_bIsX11 && w->x11TransientFor() == pw && w != pw && std::ranges::find(toMove, w) == toMove.end()) { x11Stack(w, top, x11Stack); } @@ -1429,7 +1429,7 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { } void CCompositor::cleanupFadingOut(const MONITORID& monid) { - for (auto const& ww : m_vWindowsFadingOut) { + for (auto const& ww : m_windowsFadingOut) { auto w = ww.lock(); @@ -1454,7 +1454,7 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { bool layersDirty = false; - for (auto const& lsr : m_vSurfacesFadingOut) { + for (auto const& lsr : m_surfacesFadingOut) { auto ls = lsr.lock(); @@ -1471,7 +1471,7 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { g_pHyprOpenGL->markBlurDirtyForMonitor(getMonitorFromID(monid)); if (ls->fadingOut && ls->readyToDelete && ls->isFadedOut()) { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { for (auto& lsl : m->m_aLayerSurfaceLayers) { if (!lsl.empty() && std::ranges::find_if(lsl, [&](auto& other) { return other == ls; }) != lsl.end()) { std::erase_if(lsl, [&](auto& other) { return other == ls || !other; }); @@ -1479,8 +1479,8 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { } } - std::erase_if(m_vSurfacesFadingOut, [ls](const auto& el) { return el.lock() == ls; }); - std::erase_if(m_vLayers, [ls](const auto& el) { return el == ls; }); + std::erase_if(m_surfacesFadingOut, [ls](const auto& el) { return el.lock() == ls; }); + std::erase_if(m_layers, [ls](const auto& el) { return el == ls; }); ls.reset(); @@ -1492,29 +1492,29 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { } if (layersDirty) - std::erase_if(m_vSurfacesFadingOut, [](const auto& el) { return el.expired(); }); + std::erase_if(m_surfacesFadingOut, [](const auto& el) { return el.expired(); }); } void CCompositor::addToFadingOutSafe(PHLLS pLS) { - const auto FOUND = std::ranges::find_if(m_vSurfacesFadingOut, [&](auto& other) { return other.lock() == pLS; }); + const auto FOUND = std::ranges::find_if(m_surfacesFadingOut, [&](auto& other) { return other.lock() == pLS; }); - if (FOUND != m_vSurfacesFadingOut.end()) + if (FOUND != m_surfacesFadingOut.end()) return; // if it's already added, don't add it. - m_vSurfacesFadingOut.emplace_back(pLS); + m_surfacesFadingOut.emplace_back(pLS); } void CCompositor::removeFromFadingOutSafe(PHLLS ls) { - std::erase(m_vSurfacesFadingOut, ls); + std::erase(m_surfacesFadingOut, ls); } void CCompositor::addToFadingOutSafe(PHLWINDOW pWindow) { - const auto FOUND = std::ranges::find_if(m_vWindowsFadingOut, [&](PHLWINDOWREF& other) { return other.lock() == pWindow; }); + const auto FOUND = std::ranges::find_if(m_windowsFadingOut, [&](PHLWINDOWREF& other) { return other.lock() == pWindow; }); - if (FOUND != m_vWindowsFadingOut.end()) + if (FOUND != m_windowsFadingOut.end()) return; // if it's already added, don't add it. - m_vWindowsFadingOut.emplace_back(pWindow); + m_windowsFadingOut.emplace_back(pWindow); } PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) { @@ -1547,7 +1547,7 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks PHLWINDOW leaderWindow = nullptr; if (!useVectorAngles) { - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w == ignoreWindow || !w->m_pWorkspace || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) continue; @@ -1597,14 +1597,14 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks // get idx int windowIDX = -1; - for (size_t i = 0; i < g_pCompositor->m_vWindowFocusHistory.size(); ++i) { - if (g_pCompositor->m_vWindowFocusHistory[i].lock() == w) { + for (size_t i = 0; i < g_pCompositor->m_windowFocusHistory.size(); ++i) { + if (g_pCompositor->m_windowFocusHistory[i].lock() == w) { windowIDX = i; break; } } - windowIDX = g_pCompositor->m_vWindowFocusHistory.size() - windowIDX; + windowIDX = g_pCompositor->m_windowFocusHistory.size() - windowIDX; if (windowIDX > leaderValue) { leaderValue = windowIDX; @@ -1636,7 +1636,7 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks float bestAngleAbs = 2.0 * M_PI; constexpr float THRESHOLD = 0.3 * M_PI; - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w == ignoreWindow || !w->m_bIsMapped || !w->m_pWorkspace || w->isHidden() || (!w->isFullscreen() && !w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) continue; @@ -1709,20 +1709,19 @@ static PHLWINDOW getWeakWindowPred(Iterator cur, Iterator end, Iterator begin, c PHLWINDOW CCompositor::getWindowCycleHist(PHLWINDOWREF cur, bool focusableOnly, std::optional floating, bool visible, bool next) { const auto FINDER = [&](const PHLWINDOWREF& w) { return isWindowAvailableForCycle(cur, w, focusableOnly, floating, visible); }; // also m_vWindowFocusHistory has reverse order, so when it is next - we need to reverse again - return next ? - getWeakWindowPred(std::ranges::find(std::ranges::reverse_view(m_vWindowFocusHistory), cur), m_vWindowFocusHistory.rend(), m_vWindowFocusHistory.rbegin(), FINDER) : - getWeakWindowPred(std::ranges::find(m_vWindowFocusHistory, cur), m_vWindowFocusHistory.end(), m_vWindowFocusHistory.begin(), FINDER); + return next ? getWeakWindowPred(std::ranges::find(std::ranges::reverse_view(m_windowFocusHistory), cur), m_windowFocusHistory.rend(), m_windowFocusHistory.rbegin(), FINDER) : + getWeakWindowPred(std::ranges::find(m_windowFocusHistory, cur), m_windowFocusHistory.end(), m_windowFocusHistory.begin(), FINDER); } PHLWINDOW CCompositor::getWindowCycle(PHLWINDOW cur, bool focusableOnly, std::optional floating, bool visible, bool prev) { const auto FINDER = [&](const PHLWINDOW& w) { return isWindowAvailableForCycle(cur, w, focusableOnly, floating, visible); }; - return prev ? getWindowPred(std::ranges::find(std::ranges::reverse_view(m_vWindows), cur), m_vWindows.rend(), m_vWindows.rbegin(), FINDER) : - getWindowPred(std::ranges::find(m_vWindows, cur), m_vWindows.end(), m_vWindows.begin(), FINDER); + return prev ? getWindowPred(std::ranges::find(std::ranges::reverse_view(m_windows), cur), m_windows.rend(), m_windows.rbegin(), FINDER) : + getWindowPred(std::ranges::find(m_windows, cur), m_windows.end(), m_windows.begin(), FINDER); } WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() { WORKSPACEID lowest = -1337 + 1; - for (auto const& w : m_vWorkspaces) { + for (auto const& w : m_workspaces) { if (w->m_iID < -1 && w->m_iID < lowest) lowest = w->m_iID; } @@ -1731,7 +1730,7 @@ WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() { } PHLWORKSPACE CCompositor::getWorkspaceByName(const std::string& name) { - for (auto const& w : m_vWorkspaces) { + for (auto const& w : m_workspaces) { if (w->m_szName == name && !w->inert()) return w; } @@ -1753,7 +1752,7 @@ PHLWORKSPACE CCompositor::getWorkspaceByString(const std::string& str) { bool CCompositor::isPointOnAnyMonitor(const Vector2D& point) { return std::ranges::any_of( - m_vMonitors, [&](const PHLMONITOR& m) { return VECINRECT(point, m->vecPosition.x, m->vecPosition.y, m->vecSize.x + m->vecPosition.x, m->vecSize.y + m->vecPosition.y); }); + m_monitors, [&](const PHLMONITOR& m) { return VECINRECT(point, m->vecPosition.x, m->vecPosition.y, m->vecSize.x + m->vecPosition.x, m->vecSize.y + m->vecPosition.y); }); } bool CCompositor::isPointOnReservedArea(const Vector2D& point, const PHLMONITOR pMonitor) { @@ -1766,7 +1765,7 @@ bool CCompositor::isPointOnReservedArea(const Vector2D& point, const PHLMONITOR } PHLMONITOR CCompositor::getMonitorInDirection(const char& dir) { - return getMonitorInDirection(m_pLastMonitor.lock(), dir); + return getMonitorInDirection(m_lastMonitor.lock(), dir); } PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const char& dir) { @@ -1779,7 +1778,7 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c auto longestIntersect = -1; PHLMONITOR longestIntersectMonitor = nullptr; - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (m == pSourceMonitor) continue; @@ -1834,7 +1833,7 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c } void CCompositor::updateAllWindowsAnimatedDecorationValues() { - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (!w->m_bIsMapped) continue; @@ -1887,7 +1886,7 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { setBorderColor(*RENDERDATA.borderGradient); else { const bool GROUPLOCKED = pWindow->m_sGroupData.pNextWindow.lock() ? pWindow->getGroupHead()->m_sGroupData.locked : false; - if (pWindow == m_pLastWindow) { + if (pWindow == m_lastWindow) { const auto* const ACTIVECOLOR = !pWindow->m_sGroupData.pNextWindow.lock() ? (!pWindow->m_sGroupData.deny ? ACTIVECOL : NOGROUPACTIVECOL) : (GROUPLOCKED ? GROUPACTIVELOCKEDCOL : GROUPACTIVECOL); setBorderColor(pWindow->m_sWindowData.activeBorderColor.valueOr(*ACTIVECOLOR)); @@ -1903,7 +1902,7 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { if (pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN)) { *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alphaFullscreen.valueOrDefault().applyAlpha(*PFULLSCREENALPHA); } else { - if (pWindow == m_pLastWindow) + if (pWindow == m_lastWindow) *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alpha.valueOrDefault().applyAlpha(*PACTIVEALPHA); else *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alphaInactive.valueOrDefault().applyAlpha(*PINACTIVEALPHA); @@ -1911,7 +1910,7 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { // dim float goalDim = 1.F; - if (pWindow == m_pLastWindow.lock() || pWindow->m_sWindowData.noDim.valueOrDefault() || !*PDIMENABLED) + if (pWindow == m_lastWindow.lock() || pWindow->m_sWindowData.noDim.valueOrDefault() || !*PDIMENABLED) goalDim = 0; else goalDim = *PDIMSTRENGTH; @@ -1923,7 +1922,7 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { // shadow if (!pWindow->isX11OverrideRedirect() && !pWindow->m_bX11DoesntWantBorders) { - if (pWindow == m_pLastWindow) + if (pWindow == m_lastWindow) *pWindow->m_cRealShadowColor = CHyprColor(*PSHADOWCOL); else *pWindow->m_cRealShadowColor = CHyprColor(*PSHADOWCOLINACTIVE != INT64_MAX ? *PSHADOWCOLINACTIVE : *PSHADOWCOL); @@ -1936,12 +1935,12 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { MONITORID CCompositor::getNextAvailableMonitorID(std::string const& name) { // reuse ID if it's already in the map, and the monitor with that ID is not being used by another monitor - if (m_mMonitorIDMap.contains(name) && !std::ranges::any_of(m_vRealMonitors, [&](auto m) { return m->ID == m_mMonitorIDMap[name]; })) - return m_mMonitorIDMap[name]; + if (m_monitorIDMap.contains(name) && !std::ranges::any_of(m_realMonitors, [&](auto m) { return m->ID == m_monitorIDMap[name]; })) + return m_monitorIDMap[name]; // otherwise, find minimum available ID that is not in the map std::unordered_set usedIDs; - for (auto const& monitor : m_vRealMonitors) { + for (auto const& monitor : m_realMonitors) { usedIDs.insert(monitor->ID); } @@ -1949,7 +1948,7 @@ MONITORID CCompositor::getNextAvailableMonitorID(std::string const& name) { while (usedIDs.contains(nextID)) { nextID++; } - m_mMonitorIDMap[name] = nextID; + m_monitorIDMap[name] = nextID; return nextID; } @@ -1960,7 +1959,7 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor PWORKSPACEA->m_pMonitor = pMonitorB; PWORKSPACEA->moveToMonitor(pMonitorB->ID); - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_pWorkspace == PWORKSPACEA) { if (w->m_bPinned) { w->m_pWorkspace = PWORKSPACEB; @@ -1985,7 +1984,7 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor PWORKSPACEB->m_pMonitor = pMonitorA; PWORKSPACEB->moveToMonitor(pMonitorA->ID); - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_pWorkspace == PWORKSPACEB) { if (w->m_bPinned) { w->m_pWorkspace = PWORKSPACEA; @@ -2019,12 +2018,12 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor updateFullscreenFadeOnWorkspace(PWORKSPACEB); updateFullscreenFadeOnWorkspace(PWORKSPACEA); - if (pMonitorA->ID == g_pCompositor->m_pLastMonitor->ID || pMonitorB->ID == g_pCompositor->m_pLastMonitor->ID) { - const auto LASTWIN = pMonitorA->ID == g_pCompositor->m_pLastMonitor->ID ? PWORKSPACEB->getLastFocusedWindow() : PWORKSPACEA->getLastFocusedWindow(); + if (pMonitorA->ID == g_pCompositor->m_lastMonitor->ID || pMonitorB->ID == g_pCompositor->m_lastMonitor->ID) { + const auto LASTWIN = pMonitorA->ID == g_pCompositor->m_lastMonitor->ID ? PWORKSPACEB->getLastFocusedWindow() : PWORKSPACEA->getLastFocusedWindow(); g_pCompositor->focusWindow(LASTWIN ? LASTWIN : (g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING))); - const auto PNEWWORKSPACE = pMonitorA->ID == g_pCompositor->m_pLastMonitor->ID ? PWORKSPACEB : PWORKSPACEA; + const auto PNEWWORKSPACE = pMonitorA->ID == g_pCompositor->m_lastMonitor->ID ? PWORKSPACEB : PWORKSPACEA; g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspace", .data = PNEWWORKSPACE->m_szName}); g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspacev2", .data = std::format("{},{}", PNEWWORKSPACE->m_iID, PNEWWORKSPACE->m_szName)}); EMIT_HOOK_EVENT("workspace", PNEWWORKSPACE); @@ -2042,14 +2041,14 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { if (name == "current") - return g_pCompositor->m_pLastMonitor.lock(); + return g_pCompositor->m_lastMonitor.lock(); else if (isDirection(name)) return getMonitorInDirection(name[0]); else if (name[0] == '+' || name[0] == '-') { // relative - if (m_vMonitors.size() == 1) - return *m_vMonitors.begin(); + if (m_monitors.size() == 1) + return *m_monitors.begin(); const auto OFFSET = name[0] == '-' ? name : name.substr(1); @@ -2059,11 +2058,11 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { } int offsetLeft = std::stoi(OFFSET); - offsetLeft = offsetLeft < 0 ? -((-offsetLeft) % m_vMonitors.size()) : offsetLeft % m_vMonitors.size(); + offsetLeft = offsetLeft < 0 ? -((-offsetLeft) % m_monitors.size()) : offsetLeft % m_monitors.size(); int currentPlace = 0; - for (int i = 0; i < (int)m_vMonitors.size(); i++) { - if (m_vMonitors[i] == m_pLastMonitor) { + for (int i = 0; i < (int)m_monitors.size(); i++) { + if (m_monitors[i] == m_lastMonitor) { currentPlace = i; break; } @@ -2072,17 +2071,17 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { currentPlace += offsetLeft; if (currentPlace < 0) { - currentPlace = m_vMonitors.size() + currentPlace; + currentPlace = m_monitors.size() + currentPlace; } else { - currentPlace = currentPlace % m_vMonitors.size(); + currentPlace = currentPlace % m_monitors.size(); } - if (currentPlace != std::clamp(currentPlace, 0, (int)m_vMonitors.size() - 1)) { + if (currentPlace != std::clamp(currentPlace, 0, (int)m_monitors.size() - 1)) { Debug::log(WARN, "Error in getMonitorFromString: Vaxry's code sucks."); - currentPlace = std::clamp(currentPlace, 0, (int)m_vMonitors.size() - 1); + currentPlace = std::clamp(currentPlace, 0, (int)m_monitors.size() - 1); } - return m_vMonitors[currentPlace]; + return m_monitors[currentPlace]; } else if (isNumber(name)) { // change by ID MONITORID monID = MONITOR_INVALID; @@ -2094,14 +2093,14 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { return nullptr; } - if (monID > -1 && monID < (MONITORID)m_vMonitors.size()) { + if (monID > -1 && monID < (MONITORID)m_monitors.size()) { return getMonitorFromID(monID); } else { Debug::log(ERR, "Error in getMonitorFromString: invalid arg 1"); return nullptr; } } else { - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { if (!m->output) continue; @@ -2134,7 +2133,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo if (!SWITCHINGISACTIVE) nextWorkspaceOnMonitorID = pWorkspace->m_iID; else { - for (auto const& w : m_vWorkspaces) { + for (auto const& w : m_workspaces) { if (w->m_pMonitor == POLDMON && w->m_iID != pWorkspace->m_iID && !w->m_bIsSpecialWorkspace) { nextWorkspaceOnMonitorID = w->m_iID; break; @@ -2165,7 +2164,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo pWorkspace->m_pMonitor = pMonitor; pWorkspace->moveToMonitor(pMonitor->ID); - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_pWorkspace == pWorkspace) { if (w->m_bPinned) { w->m_pWorkspace = g_pCompositor->getWorkspaceByID(nextWorkspaceOnMonitorID); @@ -2195,7 +2194,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo } } - if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_pLastMonitor) { // if it was active, preserve its' status. If it wasn't, don't. + if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_lastMonitor) { // if it was active, preserve its' status. If it wasn't, don't. Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_iID); if (valid(pMonitor->activeWorkspace)) { @@ -2240,7 +2239,7 @@ bool CCompositor::workspaceIDOutOfBounds(const WORKSPACEID& id) { WORKSPACEID lowestID = INT64_MAX; WORKSPACEID highestID = INT64_MIN; - for (auto const& w : m_vWorkspaces) { + for (auto const& w : m_workspaces) { if (w->m_bIsSpecialWorkspace) continue; lowestID = std::min(w->m_iID, lowestID); @@ -2257,7 +2256,7 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { const auto FULLSCREEN = pWorkspace->m_bHasFullscreenWindow; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == pWorkspace) { if (w->m_bFadingOut || w->m_bPinned || w->isFullscreen()) @@ -2303,7 +2302,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS static auto PDIRECTSCANOUT = CConfigValue("render:direct_scanout"); static auto PALLOWPINFULLSCREEN = CConfigValue("binds:allow_pin_fullscreen"); - if (!validMapped(PWINDOW) || g_pCompositor->m_bUnsafeState) + if (!validMapped(PWINDOW) || g_pCompositor->m_unsafeState) return; state.internal = std::clamp(state.internal, (eFullscreenMode)0, FSMODE_MAX); @@ -2361,7 +2360,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); // make all windows on the same workspace under the fullscreen window - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (w->m_pWorkspace == PWORKSPACE && !w->isFullscreen() && !w->m_bFadingOut && !w->m_bPinned) w->m_bCreatedOverFullscreen = false; } @@ -2390,7 +2389,7 @@ PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) { if (!pWindow->m_bIsX11) return nullptr; - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (!w->m_bIsX11) continue; @@ -2402,7 +2401,7 @@ PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) { } void CCompositor::scheduleFrameForMonitor(PHLMONITOR pMonitor, IOutput::scheduleFrameReason reason) { - if ((m_pAqBackend->hasSession() && !m_pAqBackend->session->active) || !m_bSessionActive) + if ((m_aqBackend->hasSession() && !m_aqBackend->session->active) || !m_sessionActive) return; if (!pMonitor->m_bEnabled) @@ -2418,16 +2417,16 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { auto regexp = trim(regexp_); if (regexp.starts_with("active")) - return m_pLastWindow.lock(); + return m_lastWindow.lock(); else if (regexp.starts_with("floating") || regexp.starts_with("tiled")) { // first floating on the current ws - if (!valid(m_pLastWindow)) + if (!valid(m_lastWindow)) return nullptr; const bool FLOAT = regexp.starts_with("floating"); - for (auto const& w : m_vWindows) { - if (!w->m_bIsMapped || w->m_bIsFloating != FLOAT || w->m_pWorkspace != m_pLastWindow->m_pWorkspace || w->isHidden()) + for (auto const& w : m_windows) { + if (!w->m_bIsMapped || w->m_bIsFloating != FLOAT || w->m_pWorkspace != m_lastWindow->m_pWorkspace || w->isHidden()) continue; return w; @@ -2462,7 +2461,7 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { matchCheck = regexp.substr(4); } - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || (w->isHidden() && !g_pLayoutManager->getCurrentLayout()->isWindowReachable(w))) continue; @@ -2533,7 +2532,7 @@ void CCompositor::warpCursorTo(const Vector2D& pos, bool force) { if (*PNOWARPS && !force) { const auto PMONITORNEW = getMonitorFromVector(pos); - if (PMONITORNEW != m_pLastMonitor) + if (PMONITORNEW != m_lastMonitor) setActiveMonitor(PMONITORNEW); return; } @@ -2541,7 +2540,7 @@ void CCompositor::warpCursorTo(const Vector2D& pos, bool force) { g_pPointerManager->warpTo(pos); const auto PMONITORNEW = getMonitorFromVector(pos); - if (PMONITORNEW != m_pLastMonitor) + if (PMONITORNEW != m_lastMonitor) setActiveMonitor(PMONITORNEW); } @@ -2554,7 +2553,7 @@ void CCompositor::closeWindow(PHLWINDOW pWindow) { PHLLS CCompositor::getLayerSurfaceFromSurface(SP pSurface) { std::pair, bool> result = {pSurface, false}; - for (auto const& ls : m_vLayers) { + for (auto const& ls : m_layers) { if (ls->layerSurface && ls->layerSurface->surface == pSurface) return ls; @@ -2582,7 +2581,7 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con if (!args.contains(' ') && !args.contains('\t')) return relativeTo; - const auto PMONITOR = m_pLastMonitor; + const auto PMONITOR = m_lastMonitor; bool xIsPercent = false; bool yIsPercent = false; @@ -2643,7 +2642,7 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO return nullptr; } - const auto PWORKSPACE = m_vWorkspaces.emplace_back(CWorkspace::create(id, PMONITOR, NAME, SPECIAL, isEmpty)); + const auto PWORKSPACE = m_workspaces.emplace_back(CWorkspace::create(id, PMONITOR, NAME, SPECIAL, isEmpty)); PWORKSPACE->m_fAlpha->setValueAndWarp(0); @@ -2651,11 +2650,11 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO } void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) { - if (m_pLastMonitor == pMonitor) + if (m_lastMonitor == pMonitor) return; if (!pMonitor) { - m_pLastMonitor.reset(); + m_lastMonitor.reset(); return; } @@ -2668,7 +2667,7 @@ void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) { g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmonv2", .data = pMonitor->szName + "," + WORKSPACE_ID}); EMIT_HOOK_EVENT("focusedMon", pMonitor); - m_pLastMonitor = pMonitor->self; + m_lastMonitor = pMonitor->self; } bool CCompositor::isWorkspaceSpecial(const WORKSPACEID& id) { @@ -2677,7 +2676,7 @@ bool CCompositor::isWorkspaceSpecial(const WORKSPACEID& id) { WORKSPACEID CCompositor::getNewSpecialID() { WORKSPACEID highest = SPECIAL_WORKSPACE_START; - for (auto const& ws : m_vWorkspaces) { + for (auto const& ws : m_workspaces) { if (ws->m_bIsSpecialWorkspace && ws->m_iID > highest) { highest = ws->m_iID; } @@ -2801,7 +2800,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor } PHLWINDOW CCompositor::getForceFocus() { - for (auto const& w : m_vWindows) { + for (auto const& w : m_windows) { if (!w->m_bIsMapped || w->isHidden() || !w->m_pWorkspace || !w->m_pWorkspace->isVisible()) continue; @@ -2817,7 +2816,7 @@ PHLWINDOW CCompositor::getForceFocus() { void CCompositor::arrangeMonitors() { static auto* const PXWLFORCESCALEZERO = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling"); - std::vector toArrange(m_vMonitors.begin(), m_vMonitors.end()); + std::vector toArrange(m_monitors.begin(), m_monitors.end()); std::vector arranged; arranged.reserve(toArrange.size()); @@ -2887,7 +2886,7 @@ void CCompositor::arrangeMonitors() { // reset maxXOffsetRight (reuse) // and set xwayland positions aka auto for all maxXOffsetRight = 0; - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { Debug::log(LOG, "arrangeMonitors: {} xwayland [{}, {}]", m->szName, maxXOffsetRight, 0); m->vecXWaylandPosition = {maxXOffsetRight, 0}; maxXOffsetRight += (*PXWLFORCESCALEZERO ? m->vecTransformedSize.x : m->vecSize.x); @@ -2902,30 +2901,30 @@ void CCompositor::arrangeMonitors() { } void CCompositor::enterUnsafeState() { - if (m_bUnsafeState) + if (m_unsafeState) return; Debug::log(LOG, "Entering unsafe state"); - if (!m_pUnsafeOutput->m_bEnabled) - m_pUnsafeOutput->onConnect(false); + if (!m_unsafeOutput->m_bEnabled) + m_unsafeOutput->onConnect(false); - m_bUnsafeState = true; + m_unsafeState = true; - setActiveMonitor(m_pUnsafeOutput.lock()); + setActiveMonitor(m_unsafeOutput.lock()); } void CCompositor::leaveUnsafeState() { - if (!m_bUnsafeState) + if (!m_unsafeState) return; Debug::log(LOG, "Leaving unsafe state"); - m_bUnsafeState = false; + m_unsafeState = false; PHLMONITOR pNewMonitor = nullptr; - for (auto const& pMonitor : m_vMonitors) { - if (pMonitor->output != m_pUnsafeOutput->output) { + for (auto const& pMonitor : m_monitors) { + if (pMonitor->output != m_unsafeOutput->output) { pNewMonitor = pMonitor; break; } @@ -2933,10 +2932,10 @@ void CCompositor::leaveUnsafeState() { RASSERT(pNewMonitor, "Tried to leave unsafe without a monitor"); - if (m_pUnsafeOutput->m_bEnabled) - m_pUnsafeOutput->onDisconnect(); + if (m_unsafeOutput->m_bEnabled) + m_unsafeOutput->onDisconnect(); - for (auto const& m : m_vMonitors) { + for (auto const& m : m_monitors) { scheduleFrameForMonitor(m); } } @@ -2968,7 +2967,7 @@ void CCompositor::setPreferredTransformForSurface(SP pSurfac } void CCompositor::updateSuspendedStates() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped) continue; @@ -3010,17 +3009,17 @@ static void checkDefaultCursorWarp(PHLMONITOR monitor) { void CCompositor::onNewMonitor(SP output) { // add it to real - auto PNEWMONITOR = g_pCompositor->m_vRealMonitors.emplace_back(makeShared(output)); + auto PNEWMONITOR = g_pCompositor->m_realMonitors.emplace_back(makeShared(output)); if (std::string("HEADLESS-1") == output->name) { - g_pCompositor->m_pUnsafeOutput = PNEWMONITOR; - output->name = "FALLBACK"; // we are allowed to do this :) + g_pCompositor->m_unsafeOutput = PNEWMONITOR; + output->name = "FALLBACK"; // we are allowed to do this :) } Debug::log(LOG, "New output with name {}", output->name); PNEWMONITOR->szName = output->name; PNEWMONITOR->self = PNEWMONITOR; - const bool FALLBACK = g_pCompositor->m_pUnsafeOutput ? output == g_pCompositor->m_pUnsafeOutput->output : false; + const bool FALLBACK = g_pCompositor->m_unsafeOutput ? output == g_pCompositor->m_unsafeOutput->output : false; PNEWMONITOR->ID = FALLBACK ? MONITOR_INVALID : g_pCompositor->getNextAvailableMonitorID(output->name); PNEWMONITOR->isUnsafeFallback = FALLBACK; @@ -3037,14 +3036,14 @@ void CCompositor::onNewMonitor(SP output) { if ((!g_pHyprRenderer->m_pMostHzMonitor || PNEWMONITOR->refreshRate > g_pHyprRenderer->m_pMostHzMonitor->refreshRate) && PNEWMONITOR->m_bEnabled) g_pHyprRenderer->m_pMostHzMonitor = PNEWMONITOR; - g_pCompositor->m_bReadyToProcess = true; + g_pCompositor->m_readyToProcess = true; g_pConfigManager->m_wantsMonitorReload = true; g_pCompositor->scheduleFrameForMonitor(PNEWMONITOR, IOutput::AQ_SCHEDULE_NEW_MONITOR); checkDefaultCursorWarp(PNEWMONITOR); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pMonitor == PNEWMONITOR) { w->m_iLastSurfaceMonitorID = MONITOR_INVALID; w->updateSurfaceScaleTransformDetails(); @@ -3076,7 +3075,7 @@ bool CCompositor::shouldChangePreferredImageDescription() { } void CCompositor::ensurePersistentWorkspacesPresent(const std::vector& rules, PHLWORKSPACE pWorkspace) { - if (!m_pLastMonitor) + if (!m_lastMonitor) return; for (const auto& rule : rules) { @@ -3112,7 +3111,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorID : m_pLastMonitor->ID, wsname, false); + createNewWorkspace(id, PMONITOR ? PMONITOR->ID : m_lastMonitor->ID, wsname, false); } if (PWORKSPACE) diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 33780cc9..32e65286 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -25,29 +25,29 @@ class CCompositor { CCompositor(bool onlyConfig = false); ~CCompositor(); - wl_display* m_sWLDisplay = nullptr; - wl_event_loop* m_sWLEventLoop = nullptr; - int m_iDRMFD = -1; - bool m_bInitialized = false; - SP m_pAqBackend; + wl_display* m_wlDisplay = nullptr; + wl_event_loop* m_wlEventLoop = nullptr; + int m_drmFD = -1; + bool m_initialized = false; + SP m_aqBackend; - std::string m_szHyprTempDataRoot = ""; + std::string m_hyprTempDataRoot = ""; - std::string m_szWLDisplaySocket = ""; - std::string m_szInstanceSignature = ""; - std::string m_szInstancePath = ""; - std::string m_szCurrentSplash = "error"; + std::string m_wlDisplaySocket = ""; + std::string m_instanceSignature = ""; + std::string m_instancePath = ""; + std::string m_currentSplash = "error"; - std::vector m_vMonitors; - std::vector m_vRealMonitors; // for all monitors, even those turned off - std::vector m_vWindows; - std::vector m_vLayers; - std::vector m_vWorkspaces; - std::vector m_vWindowsFadingOut; - std::vector m_vSurfacesFadingOut; + std::vector m_monitors; + std::vector m_realMonitors; // for all monitors, even those turned off + std::vector m_windows; + std::vector m_layers; + std::vector m_workspaces; + std::vector m_windowsFadingOut; + std::vector m_surfacesFadingOut; - std::unordered_map m_mMonitorIDMap; - std::unordered_map m_mSeenMonitorWorkspaceMap; // map of seen monitor names to workspace IDs + std::unordered_map m_monitorIDMap; + std::unordered_map m_seenMonitorWorkspaceMap; // map of seen monitor names to workspace IDs void initServer(std::string socketName, int socketFd); void startCompositor(); @@ -56,23 +56,22 @@ class CCompositor { void bumpNofile(); void restoreNofile(); - WP m_pLastFocus; - PHLWINDOWREF m_pLastWindow; - PHLMONITORREF m_pLastMonitor; + WP m_lastFocus; + PHLWINDOWREF m_lastWindow; + PHLMONITORREF m_lastMonitor; - std::vector m_vWindowFocusHistory; // first element is the most recently focused. + std::vector m_windowFocusHistory; // first element is the most recently focused - bool m_bReadyToProcess = false; - bool m_bSessionActive = true; - bool m_bDPMSStateON = true; - bool m_bUnsafeState = false; // unsafe state is when there is no monitors. - bool m_bNextIsUnsafe = false; - PHLMONITORREF m_pUnsafeOutput; // fallback output for the unsafe state - bool m_bIsShuttingDown = false; - bool m_bFinalRequests = false; - bool m_bDesktopEnvSet = false; - bool m_bWantsXwayland = true; - bool m_bOnlyConfigVerification = false; + bool m_readyToProcess = false; + bool m_sessionActive = true; + bool m_dpmsStateOn = true; + bool m_unsafeState = false; // unsafe state is when there is no monitors + PHLMONITORREF m_unsafeOutput; // fallback output for the unsafe state + bool m_isShuttingDown = false; + bool m_finalRequests = false; + bool m_desktopEnvSet = false; + bool m_wantsXwayland = true; + bool m_onlyConfigVerification = false; // ------------------------------------------------- // diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index a6731f07..4bd00c99 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -793,7 +793,7 @@ CConfigManager::CConfigManager() { if (CONFIG_OPTIONS.size() != m_configValueNumber - 1 /* autogenerated is special */) Debug::log(LOG, "Warning: config descriptions have {} entries, but there are {} config values. This should fail tests!!", CONFIG_OPTIONS.size(), m_configValueNumber); - if (!g_pCompositor->m_bOnlyConfigVerification) { + if (!g_pCompositor->m_onlyConfigVerification) { Debug::log( INFO, "!!!!HEY YOU, YES YOU!!!!: further logs to stdout / logfile are disabled by default. BEFORE SENDING THIS LOG, ENABLE THEM. Use debug:disable_logs = false to do so: " @@ -987,11 +987,11 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { updateWatcher(); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { w->uncacheWindowDecos(); } - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); // Update the keyboard layout to the cfg'd one if this is not the first launch @@ -1037,23 +1037,23 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { } #ifndef NO_XWAYLAND - const auto PENABLEXWAYLAND = std::any_cast(m_config->getConfigValue("xwayland:enabled")); - g_pCompositor->m_bWantsXwayland = PENABLEXWAYLAND; + const auto PENABLEXWAYLAND = std::any_cast(m_config->getConfigValue("xwayland:enabled")); + g_pCompositor->m_wantsXwayland = PENABLEXWAYLAND; // enable/disable xwayland usage if (!m_isFirstLaunch && g_pXWayland /* XWayland has to be initialized by CCompositor::initManagers for this to make sense, and it doesn't have to be (e.g. very early plugin load) */) { bool prevEnabledXwayland = g_pXWayland->enabled(); - if (g_pCompositor->m_bWantsXwayland != prevEnabledXwayland) - g_pXWayland = makeUnique(g_pCompositor->m_bWantsXwayland); + if (g_pCompositor->m_wantsXwayland != prevEnabledXwayland) + g_pXWayland = makeUnique(g_pCompositor->m_wantsXwayland); } else - g_pCompositor->m_bWantsXwayland = PENABLEXWAYLAND; + g_pCompositor->m_wantsXwayland = PENABLEXWAYLAND; #endif - if (!m_isFirstLaunch && !g_pCompositor->m_bUnsafeState) + if (!m_isFirstLaunch && !g_pCompositor->m_unsafeState) refreshGroupBarGradients(); // Updates dynamic window and workspace rules - for (auto const& w : g_pCompositor->m_vWorkspaces) { + for (auto const& w : g_pCompositor->m_workspaces) { if (w->inert()) continue; w->updateWindows(); @@ -1082,7 +1082,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { Debug::m_coloredLogs = reinterpret_cast(m_config->getConfigValuePtr("debug:colored_stdout_logs")->getDataStaticPtr()); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { // mark blur dirty g_pHyprOpenGL->markBlurDirtyForMonitor(m); @@ -1132,7 +1132,7 @@ std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std:: // invalidate layouts if they changed if (COMMAND == "monitor" || COMMAND.contains("gaps_") || COMMAND.starts_with("dwindle:") || COMMAND.starts_with("master:")) { - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); } @@ -1371,7 +1371,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, } if (rule->bFocus != -1) { - if (rule->bFocus != (g_pCompositor->m_pLastWindow.lock() == pWindow)) + if (rule->bFocus != (g_pCompositor->m_lastWindow.lock() == pWindow)) continue; } @@ -1530,7 +1530,7 @@ void CConfigManager::dispatchExecOnce() { return; // update dbus env - if (g_pCompositor->m_pAqBackend->hasSession()) + if (g_pCompositor->m_aqBackend->hasSession()) handleRawExec("", #ifdef USES_SYSTEMD "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME PATH XDG_DATA_DIRS && hash " @@ -1560,11 +1560,11 @@ void CConfigManager::dispatchExecOnce() { void CConfigManager::dispatchExecShutdown() { if (m_finalExecRequests.empty()) { - g_pCompositor->m_bFinalRequests = false; + g_pCompositor->m_finalRequests = false; return; } - g_pCompositor->m_bFinalRequests = true; + g_pCompositor->m_finalRequests = true; for (auto const& c : m_finalExecRequests) { handleExecShutdown("", c); @@ -1580,7 +1580,7 @@ void CConfigManager::performMonitorReload() { bool overAgain = false; - for (auto const& m : g_pCompositor->m_vRealMonitors) { + for (auto const& m : g_pCompositor->m_realMonitors) { if (!m->output || m->isUnsafeFallback) continue; @@ -1637,7 +1637,7 @@ bool CConfigManager::shouldBlurLS(const std::string& ns) { } void CConfigManager::ensureMonitorStatus() { - for (auto const& rm : g_pCompositor->m_vRealMonitors) { + for (auto const& rm : g_pCompositor->m_realMonitors) { if (!rm->output || rm->isUnsafeFallback) continue; @@ -1719,7 +1719,7 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { return; } - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { ensureVRRForDisplay(m); } } @@ -1870,7 +1870,7 @@ std::optional CConfigManager::handleExecRawOnce(const std::string& } std::optional CConfigManager::handleExecShutdown(const std::string& command, const std::string& args) { - if (g_pCompositor->m_bFinalRequests) { + if (g_pCompositor->m_finalRequests) { g_pKeybindManager->spawn(args); return {}; } @@ -2616,7 +2616,7 @@ std::optional CConfigManager::handleLayerRule(const std::string& co m_layerRules.emplace_back(rule); - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) for (auto const& lsl : m->m_aLayerSurfaceLayers) for (auto const& ls : lsl) ls->applyRules(); @@ -2631,7 +2631,7 @@ void CConfigManager::updateBlurredLS(const std::string& name, const bool forceBl if (BYADDRESS) matchName = matchName.substr(8); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { for (auto const& lsl : m->m_aLayerSurfaceLayers) { for (auto const& ls : lsl) { if (BYADDRESS) { diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 261a36d6..1c485c15 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -132,7 +132,7 @@ std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer escapeJSONStrings(m->output->serial), (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, m->activeWorkspaceID(), (!m->activeWorkspace ? "" : escapeJSONStrings(m->activeWorkspace->m_szName)), m->activeSpecialWorkspaceID(), escapeJSONStrings(m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_szName : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, - (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m == g_pCompositor->m_pLastMonitor ? "true" : "false"), + (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m == g_pCompositor->m_lastMonitor ? "true" : "false"), (m->dpmsStatus ? "true" : "false"), (m->output->state->state().adaptiveSync ? "true" : "false"), (uint64_t)m->solitaryClient.get(), (m->tearingState.activelyTearing ? "true" : "false"), (uint64_t)m->lastScanout.get(), (m->m_bEnabled ? "false" : "true"), formatToString(m->output->state->state().drmFormat), m->pMirrorOf ? std::format("{}", m->pMirrorOf->ID) : "none", availableModesForOutput(m, format)); @@ -146,7 +146,7 @@ std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer m->output->make, m->output->model, m->output->serial, m->activeWorkspaceID(), (!m->activeWorkspace ? "" : m->activeWorkspace->m_szName), m->activeSpecialWorkspaceID(), (m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_szName : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, - (m == g_pCompositor->m_pLastMonitor ? "yes" : "no"), (int)m->dpmsStatus, m->output->state->state().adaptiveSync, (uint64_t)m->solitaryClient.get(), + (m == g_pCompositor->m_lastMonitor ? "yes" : "no"), (int)m->dpmsStatus, m->output->state->state().adaptiveSync, (uint64_t)m->solitaryClient.get(), m->tearingState.activelyTearing, (uint64_t)m->lastScanout.get(), !m->m_bEnabled, formatToString(m->output->state->state().drmFormat), m->pMirrorOf ? std::format("{}", m->pMirrorOf->ID) : "none", availableModesForOutput(m, format)); } @@ -168,7 +168,7 @@ static std::string monitorsRequest(eHyprCtlOutputFormat format, std::string requ if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - for (auto const& m : allMonitors ? g_pCompositor->m_vRealMonitors : g_pCompositor->m_vMonitors) { + for (auto const& m : allMonitors ? g_pCompositor->m_realMonitors : g_pCompositor->m_monitors) { result += CHyprCtl::getMonitorData(m, format); } @@ -176,7 +176,7 @@ static std::string monitorsRequest(eHyprCtlOutputFormat format, std::string requ result += "]"; } else { - for (auto const& m : allMonitors ? g_pCompositor->m_vRealMonitors : g_pCompositor->m_vMonitors) { + for (auto const& m : allMonitors ? g_pCompositor->m_realMonitors : g_pCompositor->m_monitors) { if (!m->output || m->ID == -1) continue; @@ -223,8 +223,8 @@ static std::string getGroupedData(PHLWINDOW w, eHyprCtlOutputFormat format) { std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { auto getFocusHistoryID = [](PHLWINDOW wnd) -> int { - for (size_t i = 0; i < g_pCompositor->m_vWindowFocusHistory.size(); ++i) { - if (g_pCompositor->m_vWindowFocusHistory[i].lock() == wnd) + for (size_t i = 0; i < g_pCompositor->m_windowFocusHistory.size(); ++i) { + if (g_pCompositor->m_windowFocusHistory[i].lock() == wnd) return i; } return -1; @@ -291,7 +291,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; @@ -302,7 +302,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque result += "]"; } else { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; @@ -389,11 +389,11 @@ static std::string getWorkspaceRuleData(const SWorkspaceRule& r, eHyprCtlOutputF } static std::string activeWorkspaceRequest(eHyprCtlOutputFormat format, std::string request) { - if (!g_pCompositor->m_pLastMonitor) + if (!g_pCompositor->m_lastMonitor) return "unsafe state"; std::string result = ""; - auto w = g_pCompositor->m_pLastMonitor->activeWorkspace; + auto w = g_pCompositor->m_lastMonitor->activeWorkspace; if (!valid(w)) return "internal error"; @@ -406,7 +406,7 @@ static std::string workspacesRequest(eHyprCtlOutputFormat format, std::string re if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - for (auto const& w : g_pCompositor->m_vWorkspaces) { + for (auto const& w : g_pCompositor->m_workspaces) { result += CHyprCtl::getWorkspaceData(w, format); result += ","; } @@ -414,7 +414,7 @@ static std::string workspacesRequest(eHyprCtlOutputFormat format, std::string re trimTrailingComma(result); result += "]"; } else { - for (auto const& w : g_pCompositor->m_vWorkspaces) { + for (auto const& w : g_pCompositor->m_workspaces) { result += CHyprCtl::getWorkspaceData(w, format); } } @@ -443,7 +443,7 @@ static std::string workspaceRulesRequest(eHyprCtlOutputFormat format, std::strin } static std::string activeWindowRequest(eHyprCtlOutputFormat format, std::string request) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!validMapped(PWINDOW)) return format == eHyprCtlOutputFormat::FORMAT_JSON ? "{}" : "Invalid"; @@ -462,7 +462,7 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "{\n"; - for (auto const& mon : g_pCompositor->m_vMonitors) { + for (auto const& mon : g_pCompositor->m_monitors) { result += std::format( R"#("{}": {{ "levels": {{ @@ -511,7 +511,7 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques result += "\n}\n"; } else { - for (auto const& mon : g_pCompositor->m_vMonitors) { + for (auto const& mon : g_pCompositor->m_monitors) { result += std::format("Monitor {}:\n", mon->szName); int layerLevel = 0; static const std::array levelNames = {"background", "bottom", "top", "overlay"}; @@ -1119,7 +1119,7 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) // decorations will probably need a repaint if (COMMAND.contains("decoration:") || COMMAND.contains("border") || COMMAND == "workspace" || COMMAND.contains("zoom_factor") || COMMAND == "source" || COMMAND.starts_with("windowrule")) { - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); } @@ -1152,7 +1152,7 @@ static std::string killRequest(eHyprCtlOutputFormat format, std::string request) } static std::string splashRequest(eHyprCtlOutputFormat format, std::string request) { - return g_pCompositor->m_szCurrentSplash; + return g_pCompositor->m_currentSplash; } static std::string cursorPosRequest(eHyprCtlOutputFormat format, std::string request) { @@ -1425,7 +1425,7 @@ static std::string dispatchOutput(eHyprCtlOutputFormat format, std::string reque bool added = false; if (!vars[3].empty()) { - for (auto const& m : g_pCompositor->m_vRealMonitors) { + for (auto const& m : g_pCompositor->m_realMonitors) { if (m->szName == vars[3]) return "Name already taken"; } @@ -1435,7 +1435,7 @@ static std::string dispatchOutput(eHyprCtlOutputFormat format, std::string reque if (g_pCompositor->getMonitorFromName(vars[3])) return "A real monitor already uses that name."; - for (auto const& impl : g_pCompositor->m_pAqBackend->getImplementations() | std::views::reverse) { + for (auto const& impl : g_pCompositor->m_aqBackend->getImplementations() | std::views::reverse) { auto type = impl->type(); if (type == Aquamarine::AQ_BACKEND_HEADLESS && (vars[2] == "headless" || vars[2] == "auto")) { @@ -1794,7 +1794,7 @@ std::string CHyprCtl::getReply(std::string request) { rd.blurFBDirty = true; } - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || !w->m_pWorkspace || !w->m_pWorkspace->isVisible()) continue; @@ -1802,7 +1802,7 @@ std::string CHyprCtl::getReply(std::string request) { g_pCompositor->updateWindowAnimatedDecorationValues(w); } - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); } @@ -1931,7 +1931,7 @@ void CHyprCtl::startHyprCtlSocket() { sockaddr_un SERVERADDRESS = {.sun_family = AF_UNIX}; - m_socketPath = g_pCompositor->m_szInstancePath + "/.socket.sock"; + m_socketPath = g_pCompositor->m_instancePath + "/.socket.sock"; strcpy(SERVERADDRESS.sun_path, m_socketPath.c_str()); @@ -1945,5 +1945,5 @@ void CHyprCtl::startHyprCtlSocket() { Debug::log(LOG, "Hypr socket started at {}", m_socketPath); - m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_socketFD.get(), WL_EVENT_READABLE, hyprCtlFDTick, nullptr); + m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_socketFD.get(), WL_EVENT_READABLE, hyprCtlFDTick, nullptr); } diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index e95aee95..d055ec90 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -57,7 +57,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { m_monitor = pMonitor; // anim data too - const auto PMONITORFORTICKS = g_pHyprRenderer->m_pMostHzMonitor ? g_pHyprRenderer->m_pMostHzMonitor.lock() : g_pCompositor->m_pLastMonitor.lock(); + const auto PMONITORFORTICKS = g_pHyprRenderer->m_pMostHzMonitor ? g_pHyprRenderer->m_pMostHzMonitor.lock() : g_pCompositor->m_lastMonitor.lock(); if (PMONITORFORTICKS) { if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->refreshRate) m_lastAnimationTicks.pop_front(); @@ -199,7 +199,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { cairo_get_current_point(cr, &posX, &posY); g_pHyprRenderer->damageBox(m_lastDrawnBox); - m_lastDrawnBox = {(int)g_pCompositor->m_vMonitors.front()->vecPosition.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_vMonitors.front()->vecPosition.y + offset + MARGIN_TOP - 1, + m_lastDrawnBox = {(int)g_pCompositor->m_monitors.front()->vecPosition.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_monitors.front()->vecPosition.y + offset + MARGIN_TOP - 1, (int)maxTextW + 2, posY - offset - MARGIN_TOP + 2}; g_pHyprRenderer->damageBox(m_lastDrawnBox); @@ -235,7 +235,7 @@ void CHyprDebugOverlay::frameData(PHLMONITOR pMonitor) { void CHyprDebugOverlay::draw() { - const auto PMONITOR = g_pCompositor->m_vMonitors.front(); + const auto PMONITOR = g_pCompositor->m_monitors.front(); if (!m_cairoSurface || !m_cairo) { m_cairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); @@ -250,7 +250,7 @@ void CHyprDebugOverlay::draw() { // draw the things int offsetY = 0; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { offsetY += m_monitorOverlays[m].draw(offsetY); offsetY += 5; // for padding between mons } diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index 50cb4f35..ede5f8e2 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -49,7 +49,7 @@ void CHyprNotificationOverlay::addNotification(const std::string& text, const CH PNOTIF->icon = icon; PNOTIF->fontSize = fontSize; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { g_pCompositor->scheduleFrameForMonitor(m); } } diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index c92169bc..c8081143 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -15,7 +15,7 @@ PHLLS CLayerSurface::create(SP resource) { PHLLS pLS = SP(new CLayerSurface(resource)); - auto pMonitor = resource->monitor.empty() ? g_pCompositor->m_pLastMonitor.lock() : g_pCompositor->getMonitorFromName(resource->monitor); + auto pMonitor = resource->monitor.empty() ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromName(resource->monitor); pLS->surface->assign(resource->surface.lock(), pLS); @@ -25,7 +25,7 @@ PHLLS CLayerSurface::create(SP resource) { } if (pMonitor->pMirrorOf) - pMonitor = g_pCompositor->m_vMonitors.front(); + pMonitor = g_pCompositor->m_monitors.front(); pLS->self = pLS; @@ -76,7 +76,7 @@ CLayerSurface::~CLayerSurface() { g_pHyprRenderer->makeEGLCurrent(); std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == self.lock(); }); - for (auto const& mon : g_pCompositor->m_vRealMonitors) { + for (auto const& mon : g_pCompositor->m_realMonitors) { for (auto& lsl : mon->m_aLayerSurfaceLayers) { std::erase_if(lsl, [this](auto& ls) { return ls.expired() || ls.get() == this; }); } @@ -201,7 +201,7 @@ void CLayerSurface::onUnmap() { std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == self.lock(); }); - if (!monitor || g_pCompositor->m_bUnsafeState) { + if (!monitor || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Layersurface unmapping on invalid monitor (removed?) ignoring."); g_pCompositor->addToFadingOutSafe(self.lock()); @@ -238,11 +238,11 @@ void CLayerSurface::onUnmap() { // refocus if needed // vvvvvvvvvvvvv if there is a last focus and the last focus is not keyboard focusable, fallback to window - if (WASLASTFOCUS || (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus->hlSurface && !g_pCompositor->m_pLastFocus->hlSurface->keyboardFocusable())) { + if (WASLASTFOCUS || (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->hlSurface && !g_pCompositor->m_lastFocus->hlSurface->keyboardFocusable())) { if (!g_pInputManager->refocusLastWindow(PMONITOR)) g_pInputManager->refocus(); - } else if (g_pCompositor->m_pLastFocus && g_pCompositor->m_pLastFocus != surface->resource()) - g_pSeatManager->setKeyboardFocus(g_pCompositor->m_pLastFocus.lock()); + } else if (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus != surface->resource()) + g_pSeatManager->setKeyboardFocus(g_pCompositor->m_lastFocus.lock()); CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height}; g_pHyprRenderer->damageBox(geomFixed); diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index 4e77f36f..e4ac070c 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -166,7 +166,7 @@ void CSubsurface::onMap() { void CSubsurface::onUnmap() { damageLastArea(); - if (m_pWLSurface->resource() == g_pCompositor->m_pLastFocus) + if (m_pWLSurface->resource() == g_pCompositor->m_lastFocus) g_pInputManager->releaseAllMouseButtons(); g_pInputManager->simulateMouseMovement(); diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index e2131133..a37424c8 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -115,9 +115,9 @@ CWindow::CWindow(SP surface) : m_pXWaylandSurface(surface) { } CWindow::~CWindow() { - if (g_pCompositor->m_pLastWindow == m_pSelf) { - g_pCompositor->m_pLastFocus.reset(); - g_pCompositor->m_pLastWindow.reset(); + if (g_pCompositor->m_lastWindow == m_pSelf) { + g_pCompositor->m_lastFocus.reset(); + g_pCompositor->m_lastWindow.reset(); } events.destroy.emit(); @@ -372,7 +372,7 @@ void CWindow::updateToplevel() { } void CWindow::updateSurfaceScaleTransformDetails(bool force) { - if (!m_bIsMapped || m_bHidden || g_pCompositor->m_bUnsafeState) + if (!m_bIsMapped || m_bHidden || g_pCompositor->m_unsafeState) return; const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(m_iLastSurfaceMonitorID); @@ -489,7 +489,7 @@ PHLWINDOW CWindow::x11TransientFor() { if (s == m_pXWaylandSurface) return nullptr; // dead-ass circle - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pXWaylandSurface != s) continue; return w; @@ -516,7 +516,7 @@ void CWindow::onUnmap() { m_iLastWorkspace = m_pWorkspace->m_iID; - std::erase_if(g_pCompositor->m_vWindowFocusHistory, [this](const auto& other) { return other.expired() || other == m_pSelf; }); + std::erase_if(g_pCompositor->m_windowFocusHistory, [this](const auto& other) { return other.expired() || other == m_pSelf; }); if (*PCLOSEONLASTSPECIAL && m_pWorkspace && m_pWorkspace->getWindows() == 0 && onSpecialWorkspace()) { const auto PMONITOR = m_pMonitor.lock(); @@ -577,7 +577,7 @@ void CWindow::onMap() { m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F); - g_pCompositor->m_vWindowFocusHistory.push_back(m_pSelf); + g_pCompositor->m_windowFocusHistory.push_back(m_pSelf); m_vReportedSize = m_vPendingReportedSize; m_bAnimatingIn = true; @@ -612,8 +612,8 @@ void CWindow::onBorderAngleAnimEnd(WP pav) { void CWindow::setHidden(bool hidden) { m_bHidden = hidden; - if (hidden && g_pCompositor->m_pLastWindow == m_pSelf) - g_pCompositor->m_pLastWindow.reset(); + if (hidden && g_pCompositor->m_lastWindow == m_pSelf) + g_pCompositor->m_lastWindow.reset(); setSuspended(hidden); } @@ -1039,7 +1039,7 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto WORKSPACE = PCURRENT->m_pWorkspace; const auto MODE = PCURRENT->m_sFullscreenState.internal; - const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_pLastWindow.lock(); + const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_lastWindow.lock(); if (FULLSCREEN) g_pCompositor->setWindowFullscreenInternal(PCURRENT, FSMODE_NONE); @@ -1392,7 +1392,7 @@ std::unordered_map CWindow::getEnv() { } void CWindow::activate(bool force) { - if (g_pCompositor->m_pLastWindow == m_pSelf) + if (g_pCompositor->m_lastWindow == m_pSelf) return; static auto PFOCUSONACTIVATE = CConfigValue("misc:focus_on_activate"); @@ -1458,7 +1458,7 @@ void CWindow::onUpdateMeta() { g_pEventManager->postEvent(SHyprIPCEvent{"windowtitlev2", std::format("{:x},{}", (uintptr_t)this, m_szTitle)}); EMIT_HOOK_EVENT("windowTitle", m_pSelf.lock()); - if (m_pSelf == g_pCompositor->m_pLastWindow) { // if it's the active, let's post an event to update others + if (m_pSelf == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_szClass + "," + m_szTitle}); g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("activeWindow", m_pSelf.lock()); @@ -1472,7 +1472,7 @@ void CWindow::onUpdateMeta() { if (m_szClass != NEWCLASS) { m_szClass = NEWCLASS; - if (m_pSelf == g_pCompositor->m_pLastWindow) { // if it's the active, let's post an event to update others + if (m_pSelf == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_szClass + "," + m_szTitle}); g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("activeWindow", m_pSelf.lock()); @@ -1618,7 +1618,7 @@ PHLWINDOW CWindow::getSwallower() { if (!currentPid) break; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || w->isHidden()) continue; @@ -1643,7 +1643,7 @@ PHLWINDOW CWindow::getSwallower() { return candidates[0]; // walk up the focus history and find the last focused - for (auto const& w : g_pCompositor->m_vWindowFocusHistory) { + for (auto const& w : g_pCompositor->m_windowFocusHistory) { if (!w) continue; diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 322c4e33..5907c970 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -85,7 +85,7 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { // set floating windows offset callbacks m_vRenderOffset->setUpdateCallback([&](auto) { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!validMapped(w) || w->workspaceID() != m_iID) continue; @@ -524,7 +524,7 @@ MONITORID CWorkspace::monitorID() { } PHLWINDOW CWorkspace::getFullscreenWindow() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == m_pSelf && w->isFullscreen()) return w; } @@ -546,7 +546,7 @@ bool CWorkspace::isVisibleNotCovered() { int CWorkspace::getWindows(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->workspaceID() != m_iID || !w->m_bIsMapped) continue; if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value()) @@ -563,7 +563,7 @@ int CWorkspace::getWindows(std::optional onlyTiled, std::optional on int CWorkspace::getGroups(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->workspaceID() != m_iID || !w->m_bIsMapped) continue; if (!w->m_sGroupData.head) @@ -580,7 +580,7 @@ int CWorkspace::getGroups(std::optional onlyTiled, std::optional onl } PHLWINDOW CWorkspace::getFirstWindow() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && !w->isHidden()) return w; } @@ -591,7 +591,7 @@ PHLWINDOW CWorkspace::getFirstWindow() { PHLWINDOW CWorkspace::getTopLeftWindow() { const auto PMONITOR = m_pMonitor.lock(); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden()) continue; @@ -604,7 +604,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { } bool CWorkspace::hasUrgentWindow() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && w->m_bIsUrgent) return true; } @@ -613,7 +613,7 @@ bool CWorkspace::hasUrgentWindow() { } void CWorkspace::updateWindowDecos() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace != m_pSelf) continue; @@ -624,7 +624,7 @@ void CWorkspace::updateWindowDecos() { void CWorkspace::updateWindowData() { const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_pSelf.lock()); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace != m_pSelf) continue; @@ -633,7 +633,7 @@ void CWorkspace::updateWindowData() { } void CWorkspace::forceReportSizesToWindows() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden()) continue; @@ -658,9 +658,9 @@ void CWorkspace::rename(const std::string& name) { } void CWorkspace::updateWindows() { - m_bHasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_vWindows, [this](const auto& w) { return w->m_bIsMapped && w->m_pWorkspace == m_pSelf && w->isFullscreen(); }); + m_bHasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_bIsMapped && w->m_pWorkspace == m_pSelf && w->isFullscreen(); }); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || w->m_pWorkspace != m_pSelf) continue; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 2d8bdc35..91f38d11 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -57,10 +57,10 @@ void Events::listener_mapWindow(void* owner, void* data) { static auto PNEWTAKESOVERFS = CConfigValue("misc:new_window_takes_over_fullscreen"); static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); - auto PMONITOR = g_pCompositor->m_pLastMonitor.lock(); - if (!g_pCompositor->m_pLastMonitor) { + auto PMONITOR = g_pCompositor->m_lastMonitor.lock(); + if (!g_pCompositor->m_lastMonitor) { g_pCompositor->setActiveMonitor(g_pCompositor->getMonitorFromVector({})); - PMONITOR = g_pCompositor->m_pLastMonitor.lock(); + PMONITOR = g_pCompositor->m_lastMonitor.lock(); } auto PWORKSPACE = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; PWINDOW->m_pMonitor = PMONITOR; @@ -153,7 +153,7 @@ void Events::listener_mapWindow(void* owner, void* data) { if (const auto PM = g_pCompositor->getMonitorFromID(MONITOR); PM) PWINDOW->m_pMonitor = PM; else - PWINDOW->m_pMonitor = g_pCompositor->m_vMonitors.at(0); + PWINDOW->m_pMonitor = g_pCompositor->m_monitors.at(0); } else { const auto PMONITOR = g_pCompositor->getMonitorFromName(MONITORSTR); if (PMONITOR) @@ -353,7 +353,7 @@ void Events::listener_mapWindow(void* owner, void* data) { else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_bNoInitialFocus) g_pKeybindManager->m_mDispatchers["workspace"](requestedWorkspaceName); - PMONITOR = g_pCompositor->m_pLastMonitor.lock(); + PMONITOR = g_pCompositor->m_lastMonitor.lock(); } requestedFSMonitor = MONITOR_INVALID; @@ -570,7 +570,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize->goal() - Vector2D(10, 10); } - const auto PFOCUSEDWINDOWPREV = g_pCompositor->m_pLastWindow.lock(); + const auto PFOCUSEDWINDOWPREV = g_pCompositor->m_lastWindow.lock(); if (PWINDOW->m_sWindowData.allowsInput.valueOrDefault()) { // if default value wasn't set to false getPriority() would throw an exception PWINDOW->m_sWindowData.noFocus = CWindowOverridableVar(false, PWINDOW->m_sWindowData.allowsInput.getPriority()); @@ -580,7 +580,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // check LS focus grab const auto PFORCEFOCUS = g_pCompositor->getForceFocus(); - const auto PLSFROMFOCUS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_pLastFocus.lock()); + const auto PLSFROMFOCUS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); if (PLSFROMFOCUS && PLSFROMFOCUS->layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) PWINDOW->m_bNoInitialFocus = true; @@ -750,10 +750,10 @@ void Events::listener_unmapWindow(void* owner, void* data) { bool wasLastWindow = false; - if (PWINDOW == g_pCompositor->m_pLastWindow.lock()) { + if (PWINDOW == g_pCompositor->m_lastWindow.lock()) { wasLastWindow = true; - g_pCompositor->m_pLastWindow.reset(); - g_pCompositor->m_pLastFocus.reset(); + g_pCompositor->m_lastWindow.reset(); + g_pCompositor->m_lastFocus.reset(); g_pInputManager->releaseAllMouseButtons(); } @@ -785,7 +785,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { Debug::log(LOG, "On closed window, new focused candidate is {}", PWINDOWCANDIDATE); - if (PWINDOWCANDIDATE != g_pCompositor->m_pLastWindow.lock() && PWINDOWCANDIDATE) { + if (PWINDOWCANDIDATE != g_pCompositor->m_lastWindow.lock() && PWINDOWCANDIDATE) { g_pCompositor->focusWindow(PWINDOWCANDIDATE); if (*PEXITRETAINSFS && CURRENTWINDOWFSSTATE) g_pCompositor->setWindowFullscreenInternal(PWINDOWCANDIDATE, CURRENTFSMODE); @@ -797,7 +797,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pInputManager->sendMotionEventsToFocused(); // CWindow::onUnmap will remove this window's active status, but we can't really do it above. - if (PWINDOW == g_pCompositor->m_pLastWindow.lock() || !g_pCompositor->m_pLastWindow.lock()) { + if (PWINDOW == g_pCompositor->m_lastWindow.lock() || !g_pCompositor->m_lastWindow.lock()) { g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", ","}); g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", ""}); EMIT_HOOK_EVENT("activeWindow", (PHLWINDOW) nullptr); @@ -899,9 +899,9 @@ void Events::listener_destroyWindow(void* owner, void* data) { Debug::log(LOG, "{:c} destroyed, queueing.", PWINDOW); - if (PWINDOW == g_pCompositor->m_pLastWindow.lock()) { - g_pCompositor->m_pLastWindow.reset(); - g_pCompositor->m_pLastFocus.reset(); + if (PWINDOW == g_pCompositor->m_lastWindow.lock()) { + g_pCompositor->m_lastWindow.reset(); + g_pCompositor->m_lastFocus.reset(); } PWINDOW->m_pWLSurface->unassign(); @@ -934,7 +934,7 @@ void Events::listener_activateX11(void* owner, void* data) { Debug::log(LOG, "Unmanaged X11 {} requests activate", PWINDOW); - if (g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->getPID() != PWINDOW->getPID()) + if (g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->getPID() != PWINDOW->getPID()) return; if (!PWINDOW->m_pXWaylandSurface->wantsFocus()) @@ -944,7 +944,7 @@ void Events::listener_activateX11(void* owner, void* data) { return; } - if (PWINDOW == g_pCompositor->m_pLastWindow.lock() || (PWINDOW->m_eSuppressedEvents & SUPPRESS_ACTIVATE)) + if (PWINDOW == g_pCompositor->m_lastWindow.lock() || (PWINDOW->m_eSuppressedEvents & SUPPRESS_ACTIVATE)) return; PWINDOW->activate(); diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 88af38c7..6f97c3bf 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -139,7 +139,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } else if (in.starts_with("empty")) { const bool same_mon = in.substr(5).contains("m"); const bool next = in.substr(5).contains("n"); - if ((same_mon || next) && !g_pCompositor->m_pLastMonitor) { + if ((same_mon || next) && !g_pCompositor->m_lastMonitor) { Debug::log(ERR, "Empty monitor workspace on monitor null!"); return {WORKSPACE_INVALID}; } @@ -148,12 +148,12 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (same_mon) { for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) { const auto PMONITOR = g_pCompositor->getMonitorFromName(rule.monitor); - if (PMONITOR && (PMONITOR->ID != g_pCompositor->m_pLastMonitor->ID)) + if (PMONITOR && (PMONITOR->ID != g_pCompositor->m_lastMonitor->ID)) invalidWSes.insert(rule.workspaceId); } } - WORKSPACEID id = next ? g_pCompositor->m_pLastMonitor->activeWorkspaceID() : 0; + WORKSPACEID id = next ? g_pCompositor->m_lastMonitor->activeWorkspaceID() : 0; while (++id < LONG_MAX) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(id); if (!invalidWSes.contains(id) && (!PWORKSPACE || PWORKSPACE->getWindows() == 0)) { @@ -162,10 +162,10 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } } } else if (in.starts_with("prev")) { - if (!g_pCompositor->m_pLastMonitor) + if (!g_pCompositor->m_lastMonitor) return {WORKSPACE_INVALID}; - const auto PWORKSPACE = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; if (!valid(PWORKSPACE)) return {WORKSPACE_INVALID}; @@ -179,7 +179,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } else { if (in[0] == 'r' && (in[1] == '-' || in[1] == '+' || in[1] == '~') && isNumber(in.substr(2))) { bool absolute = in[1] == '~'; - if (!g_pCompositor->m_pLastMonitor) { + if (!g_pCompositor->m_lastMonitor) { Debug::log(ERR, "Relative monitor workspace on monitor null!"); return {WORKSPACE_INVALID}; } @@ -196,15 +196,15 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { std::set invalidWSes; // Collect all the workspaces we can't jump to. - for (auto const& ws : g_pCompositor->m_vWorkspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_pLastMonitor)) { + for (auto const& ws : g_pCompositor->m_workspaces) { + if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor)) { // Can't jump to this workspace invalidWSes.insert(ws->m_iID); } } for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) { const auto PMONITOR = g_pCompositor->getMonitorFromName(rule.monitor); - if (!PMONITOR || PMONITOR->ID == g_pCompositor->m_pLastMonitor->ID) { + if (!PMONITOR || PMONITOR->ID == g_pCompositor->m_lastMonitor->ID) { // Can't be invalid continue; } @@ -214,8 +214,8 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { // Prepare all named workspaces in case when we need them std::vector namedWSes; - for (auto const& ws : g_pCompositor->m_vWorkspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_pLastMonitor) || ws->m_iID >= 0) + for (auto const& ws : g_pCompositor->m_workspaces) { + if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor) || ws->m_iID >= 0) continue; namedWSes.push_back(ws->m_iID); @@ -242,7 +242,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } else { // Just take a blind guess at where we'll probably end up - WORKSPACEID activeWSID = g_pCompositor->m_pLastMonitor->activeWorkspace ? g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_iID : 1; WORKSPACEID predictedWSID = activeWSID + remains; int remainingWSes = 0; char walkDir = in[1]; @@ -341,7 +341,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { bool onAllMonitors = in[0] == 'e'; bool absolute = in[1] == '~'; - if (!g_pCompositor->m_pLastMonitor) { + if (!g_pCompositor->m_lastMonitor) { Debug::log(ERR, "Relative monitor workspace on monitor null!"); return {WORKSPACE_INVALID}; } @@ -358,8 +358,8 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { int remains = (int)result.id; std::vector validWSes; - for (auto const& ws : g_pCompositor->m_vWorkspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_pLastMonitor && !onAllMonitors)) + for (auto const& ws : g_pCompositor->m_workspaces) { + if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor && !onAllMonitors)) continue; validWSes.push_back(ws->m_iID); @@ -384,7 +384,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { remains = remains < 0 ? -((-remains) % validWSes.size()) : remains % validWSes.size(); // get the current item - WORKSPACEID activeWSID = g_pCompositor->m_pLastMonitor->activeWorkspace ? g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_iID : 1; for (ssize_t i = 0; i < (ssize_t)validWSes.size(); i++) { if (validWSes[i] == activeWSID) { currentItem = i; @@ -407,8 +407,8 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { result.name = g_pCompositor->getWorkspaceByID(validWSes[currentItem])->m_szName; } else { if (in[0] == '+' || in[0] == '-') { - if (g_pCompositor->m_pLastMonitor) { - const auto PLUSMINUSRESULT = getPlusMinusKeywordResult(in, g_pCompositor->m_pLastMonitor->activeWorkspaceID()); + if (g_pCompositor->m_lastMonitor) { + const auto PLUSMINUSRESULT = getPlusMinusKeywordResult(in, g_pCompositor->m_lastMonitor->activeWorkspaceID()); if (!PLUSMINUSRESULT.has_value()) return {WORKSPACE_INVALID}; diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 81223428..fc5a97c8 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -97,7 +97,7 @@ void CMonitor::onConnect(bool noRule) { Debug::log(LOG, "Removing monitor {} from realMonitors", szName); - std::erase_if(g_pCompositor->m_vRealMonitors, [&](PHLMONITOR& el) { return el.get() == this; }); + std::erase_if(g_pCompositor->m_realMonitors, [&](PHLMONITOR& el) { return el.get() == this; }); }); listeners.state = output->events.state.registerListener([this](std::any d) { @@ -178,7 +178,7 @@ void CMonitor::onConnect(bool noRule) { PHLMONITOR* thisWrapper = nullptr; // find the wrap - for (auto& m : g_pCompositor->m_vRealMonitors) { + for (auto& m : g_pCompositor->m_realMonitors) { if (m->ID == ID) { thisWrapper = &m; break; @@ -187,8 +187,8 @@ void CMonitor::onConnect(bool noRule) { RASSERT(thisWrapper->get(), "CMonitor::onConnect: Had no wrapper???"); - if (std::find_if(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_vMonitors.end()) - g_pCompositor->m_vMonitors.push_back(*thisWrapper); + if (std::find_if(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) + g_pCompositor->m_monitors.push_back(*thisWrapper); m_bEnabled = true; @@ -208,11 +208,11 @@ void CMonitor::onConnect(bool noRule) { setupDefaultWS(monitorRule); - for (auto const& ws : g_pCompositor->m_vWorkspaces) { + for (auto const& ws : g_pCompositor->m_workspaces) { if (!valid(ws)) continue; - if (ws->m_szLastMonitor == szName || g_pCompositor->m_vMonitors.size() == 1 /* avoid lost workspaces on recover */) { + if (ws->m_szLastMonitor == szName || g_pCompositor->m_monitors.size() == 1 /* avoid lost workspaces on recover */) { g_pCompositor->moveWorkspaceToMonitor(ws, self.lock()); ws->startAnim(true, true, true); ws->m_szLastMonitor = ""; @@ -229,7 +229,7 @@ void CMonitor::onConnect(bool noRule) { if (!activeMonitorRule.mirrorOf.empty()) setMirror(activeMonitorRule.mirrorOf); - if (!g_pCompositor->m_pLastMonitor) // set the last monitor if it isnt set yet + if (!g_pCompositor->m_lastMonitor) // set the last monitor if it isnt set yet g_pCompositor->setActiveMonitor(self.lock()); g_pHyprRenderer->arrangeLayersForMonitor(ID); @@ -240,8 +240,8 @@ void CMonitor::onConnect(bool noRule) { // verify last mon valid bool found = false; - for (auto const& m : g_pCompositor->m_vMonitors) { - if (m == g_pCompositor->m_pLastMonitor) { + for (auto const& m : g_pCompositor->m_monitors) { + if (m == g_pCompositor->m_lastMonitor) { found = true; break; } @@ -249,8 +249,8 @@ void CMonitor::onConnect(bool noRule) { Debug::log(LOG, "checking if we have seen this monitor before: {}", szName); // if we saw this monitor before, set it to the workspace it was on - if (g_pCompositor->m_mSeenMonitorWorkspaceMap.contains(szName)) { - auto workspaceID = g_pCompositor->m_mSeenMonitorWorkspaceMap[szName]; + if (g_pCompositor->m_seenMonitorWorkspaceMap.contains(szName)) { + auto workspaceID = g_pCompositor->m_seenMonitorWorkspaceMap[szName]; Debug::log(LOG, "Monitor {} was on workspace {}, setting it to that", szName, workspaceID); auto ws = g_pCompositor->getWorkspaceByID(workspaceID); if (ws) { @@ -263,7 +263,7 @@ void CMonitor::onConnect(bool noRule) { if (!found) g_pCompositor->setActiveMonitor(self.lock()); - renderTimer = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, ratHandler, this); + renderTimer = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, ratHandler, this); g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEW_MONITOR); @@ -279,7 +279,7 @@ void CMonitor::onConnect(bool noRule) { void CMonitor::onDisconnect(bool destroy) { EMIT_HOOK_EVENT("preMonitorRemoved", self.lock()); CScopeGuard x = {[this]() { - if (g_pCompositor->m_bIsShuttingDown) + if (g_pCompositor->m_isShuttingDown) return; g_pEventManager->postEvent(SHyprIPCEvent{"monitorremoved", szName}); EMIT_HOOK_EVENT("monitorRemoved", self.lock()); @@ -291,7 +291,7 @@ void CMonitor::onDisconnect(bool destroy) { renderTimer = nullptr; } - if (!m_bEnabled || g_pCompositor->m_bIsShuttingDown) + if (!m_bEnabled || g_pCompositor->m_isShuttingDown) return; Debug::log(LOG, "onDisconnect called for {}", output->name); @@ -303,12 +303,12 @@ void CMonitor::onDisconnect(bool destroy) { // record what workspace this monitor was on if (activeWorkspace) { Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", szName, activeWorkspace->m_iID); - g_pCompositor->m_mSeenMonitorWorkspaceMap[szName] = activeWorkspace->m_iID; + g_pCompositor->m_seenMonitorWorkspaceMap[szName] = activeWorkspace->m_iID; } // Cleanup everything. Move windows back, snap cursor, shit. PHLMONITOR BACKUPMON = nullptr; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m.get() != this) { BACKUPMON = m; break; @@ -361,7 +361,7 @@ void CMonitor::onDisconnect(bool destroy) { // move workspaces std::vector wspToMove; - for (auto const& w : g_pCompositor->m_vWorkspaces) { + for (auto const& w : g_pCompositor->m_workspaces) { if (w->m_pMonitor == self || !w->m_pMonitor) wspToMove.push_back(w); } @@ -372,9 +372,9 @@ void CMonitor::onDisconnect(bool destroy) { w->startAnim(true, true, true); } } else { - g_pCompositor->m_pLastFocus.reset(); - g_pCompositor->m_pLastWindow.reset(); - g_pCompositor->m_pLastMonitor.reset(); + g_pCompositor->m_lastFocus.reset(); + g_pCompositor->m_lastWindow.reset(); + g_pCompositor->m_lastMonitor.reset(); } if (activeWorkspace) @@ -388,14 +388,14 @@ void CMonitor::onDisconnect(bool destroy) { if (!state.commit()) Debug::log(WARN, "state.commit() failed in CMonitor::onDisconnect"); - if (g_pCompositor->m_pLastMonitor == self) - g_pCompositor->setActiveMonitor(BACKUPMON ? BACKUPMON : g_pCompositor->m_pUnsafeOutput.lock()); + if (g_pCompositor->m_lastMonitor == self) + g_pCompositor->setActiveMonitor(BACKUPMON ? BACKUPMON : g_pCompositor->m_unsafeOutput.lock()); if (g_pHyprRenderer->m_pMostHzMonitor == self) { int mostHz = 0; PHLMONITOR pMonitorMostHz = nullptr; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->refreshRate > mostHz && m != self) { pMonitorMostHz = m; mostHz = m->refreshRate; @@ -404,7 +404,7 @@ void CMonitor::onDisconnect(bool destroy) { g_pHyprRenderer->m_pMostHzMonitor = pMonitorMostHz; } - std::erase_if(g_pCompositor->m_vMonitors, [&](PHLMONITOR& el) { return el.get() == this; }); + std::erase_if(g_pCompositor->m_monitors, [&](PHLMONITOR& el) { return el.get() == this; }); } bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { @@ -844,8 +844,8 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { // Set scale for all surfaces on this monitor, needed for some clients // but not on unsafe state to avoid crashes - if (!g_pCompositor->m_bUnsafeState) { - for (auto const& w : g_pCompositor->m_vWindows) { + if (!g_pCompositor->m_unsafeState) { + for (auto const& w : g_pCompositor->m_windows) { w->updateSurfaceScaleTransformDetails(); } } @@ -950,7 +950,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { } if (wsID == WORKSPACE_INVALID || (wsID >= SPECIAL_WORKSPACE_START && wsID <= -2)) { - wsID = g_pCompositor->m_vWorkspaces.size() + 1; + wsID = g_pCompositor->m_workspaces.size() + 1; newDefaultWorkspaceName = std::to_string(wsID); Debug::log(LOG, "Invalid workspace= directive name in monitor parsing, workspace name \"{}\" is invalid.", g_pConfigManager->getDefaultWorkspaceFor(szName)); @@ -970,7 +970,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { if (newDefaultWorkspaceName == "") newDefaultWorkspaceName = std::to_string(wsID); - PNEWWORKSPACE = g_pCompositor->m_vWorkspaces.emplace_back(CWorkspace::create(wsID, self.lock(), newDefaultWorkspaceName)); + PNEWWORKSPACE = g_pCompositor->m_workspaces.emplace_back(CWorkspace::create(wsID, self.lock(), newDefaultWorkspaceName)); } activeWorkspace = PNEWWORKSPACE; @@ -1018,7 +1018,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { PHLMONITOR* thisWrapper = nullptr; // find the wrap - for (auto& m : g_pCompositor->m_vRealMonitors) { + for (auto& m : g_pCompositor->m_realMonitors) { if (m->ID == ID) { thisWrapper = &m; break; @@ -1027,9 +1027,8 @@ void CMonitor::setMirror(const std::string& mirrorOf) { RASSERT(thisWrapper->get(), "CMonitor::setMirror: Had no wrapper???"); - if (std::find_if(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](auto& other) { return other.get() == this; }) == - g_pCompositor->m_vMonitors.end()) { - g_pCompositor->m_vMonitors.push_back(*thisWrapper); + if (std::find_if(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) { + g_pCompositor->m_monitors.push_back(*thisWrapper); } setupDefaultWS(RULE); @@ -1037,7 +1036,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { applyMonitorRule((SMonitorRule*)&RULE, true); // will apply the offset and stuff } else { PHLMONITOR BACKUPMON = nullptr; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m.get() != this) { BACKUPMON = m; break; @@ -1046,7 +1045,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { // move all the WS std::vector wspToMove; - for (auto const& w : g_pCompositor->m_vWorkspaces) { + for (auto const& w : g_pCompositor->m_workspaces) { if (w->m_pMonitor == self || !w->m_pMonitor) wspToMove.push_back(w); } @@ -1065,11 +1064,11 @@ void CMonitor::setMirror(const std::string& mirrorOf) { pMirrorOf->mirrors.push_back(self); // remove from mvmonitors - std::erase_if(g_pCompositor->m_vMonitors, [&](const auto& other) { return other == self; }); + std::erase_if(g_pCompositor->m_monitors, [&](const auto& other) { return other == self; }); g_pCompositor->arrangeMonitors(); - g_pCompositor->setActiveMonitor(g_pCompositor->m_vMonitors.front()); + g_pCompositor->setActiveMonitor(g_pCompositor->m_monitors.front()); g_pCompositor->sanityCheckWorkspaces(); @@ -1127,13 +1126,13 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo pWorkspace->startAnim(true, ANIMTOLEFT); // move pinned windows - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == POLDWORKSPACE && w->m_bPinned) w->moveToWorkspace(pWorkspace); } - if (!noFocus && !g_pCompositor->m_pLastMonitor->activeSpecialWorkspace && - !(g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bPinned && g_pCompositor->m_pLastWindow->m_pMonitor == self)) { + if (!noFocus && !g_pCompositor->m_lastMonitor->activeSpecialWorkspace && + !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); auto pWindow = pWorkspace->m_bHasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow(); @@ -1195,7 +1194,7 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); - if (!(g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bPinned && g_pCompositor->m_pLastWindow->m_pMonitor == self)) { + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { if (const auto PLAST = activeWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else @@ -1238,7 +1237,7 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { if (animate) pWorkspace->startAnim(true, true); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == pWorkspace) { w->m_pMonitor = self; w->updateSurfaceScaleTransformDetails(); @@ -1264,7 +1263,7 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); - if (!(g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bPinned && g_pCompositor->m_pLastWindow->m_pMonitor == self)) { + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { if (const auto PLAST = pWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else @@ -1470,12 +1469,11 @@ void CMonitor::debugLastPresentation(const std::string& message) { } void CMonitor::onMonitorFrame() { - if ((g_pCompositor->m_pAqBackend->hasSession() && !g_pCompositor->m_pAqBackend->session->active) || !g_pCompositor->m_bSessionActive || g_pCompositor->m_bUnsafeState) { + if ((g_pCompositor->m_aqBackend->hasSession() && !g_pCompositor->m_aqBackend->session->active) || !g_pCompositor->m_sessionActive || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Attempted to render frame on inactive session!"); - if (g_pCompositor->m_bUnsafeState && std::ranges::any_of(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](auto& m) { - return m->output != g_pCompositor->m_pUnsafeOutput->output; - })) { + if (g_pCompositor->m_unsafeState && + std::ranges::any_of(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& m) { return m->output != g_pCompositor->m_unsafeOutput->output; })) { // restore from unsafe state g_pCompositor->leaveUnsafeState(); } diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 75b04286..72036ff8 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -18,7 +18,7 @@ CHyprError::CHyprError() { if (!m_bIsCreated) return; - g_pHyprRenderer->damageMonitor(g_pCompositor->m_pLastMonitor.lock()); + g_pHyprRenderer->damageMonitor(g_pCompositor->m_lastMonitor.lock()); m_bMonitorChanged = true; }); @@ -47,7 +47,7 @@ void CHyprError::createQueued() { m_fFadeOpacity->setValueAndWarp(0.f); *m_fFadeOpacity = 1.f; - const auto PMONITOR = g_pCompositor->m_vMonitors.front(); + const auto PMONITOR = g_pCompositor->m_monitors.front(); const auto SCALE = PMONITOR->scale; @@ -182,7 +182,7 @@ void CHyprError::draw() { m_bIsCreated = false; m_szQueued = ""; - for (auto& m : g_pCompositor->m_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { g_pHyprRenderer->arrangeLayersForMonitor(m->ID); } diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 57d3df4a..ba4370e5 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -100,7 +100,7 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for PHLMONITOR PMONITOR = nullptr; if (g_pCompositor->isWorkspaceSpecial(pNode->workspaceID)) { - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->activeSpecialWorkspaceID() == pNode->workspaceID) { PMONITOR = m; break; @@ -253,9 +253,9 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir OPENINGON = getClosestNodeOnWorkspace(PNODE->workspaceID, MOUSECOORDS); } else if (*PUSEACTIVE) { - if (g_pCompositor->m_pLastWindow.lock() && !g_pCompositor->m_pLastWindow->m_bIsFloating && g_pCompositor->m_pLastWindow.lock() != pWindow && - g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace && g_pCompositor->m_pLastWindow->m_bIsMapped) { - OPENINGON = getNodeFromWindow(g_pCompositor->m_pLastWindow.lock()); + if (g_pCompositor->m_lastWindow.lock() && !g_pCompositor->m_lastWindow->m_bIsFloating && g_pCompositor->m_lastWindow.lock() != pWindow && + g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace && g_pCompositor->m_lastWindow->m_bIsMapped) { + OPENINGON = getNodeFromWindow(g_pCompositor->m_lastWindow.lock()); } else { OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS)); } @@ -547,7 +547,7 @@ void CHyprDwindleLayout::onBeginDragWindow() { void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorner corner, PHLWINDOW pWindow) { - const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_lastWindow.lock(); if (!validMapped(PWINDOW)) return; @@ -1065,7 +1065,7 @@ std::string CHyprDwindleLayout::getLayoutName() { } void CHyprDwindleLayout::onEnable() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_bIsFloating || !w->m_bIsMapped || w->isHidden()) continue; @@ -1078,20 +1078,20 @@ void CHyprDwindleLayout::onDisable() { } Vector2D CHyprDwindleLayout::predictSizeForNewWindowTiled() { - if (!g_pCompositor->m_pLastMonitor) + if (!g_pCompositor->m_lastMonitor) return {}; // get window candidate - PHLWINDOW candidate = g_pCompositor->m_pLastWindow.lock(); + PHLWINDOW candidate = g_pCompositor->m_lastWindow.lock(); if (!candidate) - candidate = g_pCompositor->m_pLastMonitor->activeWorkspace->getFirstWindow(); + candidate = g_pCompositor->m_lastMonitor->activeWorkspace->getFirstWindow(); // create a fake node SDwindleNodeData node; if (!candidate) - return g_pCompositor->m_pLastMonitor->vecSize; + return g_pCompositor->m_lastMonitor->vecSize; else { const auto PNODE = getNodeFromWindow(candidate); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index e87267da..963639e5 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -195,8 +195,8 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) { static auto PAUTOGROUP = CConfigValue("group:auto_group"); - const PHLWINDOW OPENINGON = g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ? - g_pCompositor->m_pLastWindow.lock() : + const PHLWINDOW OPENINGON = g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace ? + g_pCompositor->m_lastWindow.lock() : (pWindow->m_pWorkspace ? pWindow->m_pWorkspace->getFirstWindow() : nullptr); const bool FLOATEDINTOTILED = pWindow->m_bIsFloating && !OPENINGON->m_bIsFloating; const bool SWALLOWING = pWindow->m_pSwallowed || pWindow->m_bGroupSwallowed; @@ -406,7 +406,7 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA const auto WSID = DRAGGINGWINDOW->workspaceID(); const bool HASFULLSCREEN = DRAGGINGWINDOW->m_pWorkspace && DRAGGINGWINDOW->m_pWorkspace->m_bHasFullscreenWindow; - for (auto& other : g_pCompositor->m_vWindows) { + for (auto& other : g_pCompositor->m_windows) { if ((HASFULLSCREEN && !other->m_bCreatedOverFullscreen) || other == DRAGGINGWINDOW || other->workspaceID() != WSID || !other->m_bIsMapped || other->m_bFadingOut || other->isX11OverrideRedirect()) continue; @@ -748,7 +748,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { // fix pseudo leaving artifacts g_pHyprRenderer->damageMonitor(pWindow->m_pMonitor.lock()); - if (pWindow == g_pCompositor->m_pLastWindow) + if (pWindow == g_pCompositor->m_lastWindow) m_pLastTiledWindow = pWindow; } else { onWindowRemovedTiling(pWindow); @@ -784,7 +784,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { } void IHyprLayout::moveActiveWindow(const Vector2D& delta, PHLWINDOW pWindow) { - const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_lastWindow.lock(); if (!validMapped(PWINDOW)) return; @@ -820,7 +820,7 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { if (pWindow->m_bIsFloating) { // find whether there is a floating window below this one - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_bIsMapped && !w->isHidden() && w->m_bIsFloating && !w->isX11OverrideRedirect() && w->m_pWorkspace == pWindow->m_pWorkspace && !w->m_bX11ShouldntFocus && !w->m_sWindowData.noFocus.valueOrDefault() && w != pWindow) { if (VECINRECT((pWindow->m_vSize / 2.f + pWindow->m_vPosition), w->m_vPosition.x, w->m_vPosition.y, w->m_vPosition.x + w->m_vSize.x, @@ -840,7 +840,7 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { return PWINDOWCANDIDATE; // if not, floating window - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_bIsMapped && !w->isHidden() && w->m_bIsFloating && !w->isX11OverrideRedirect() && w->m_pWorkspace == pWindow->m_pWorkspace && !w->m_bX11ShouldntFocus && !w->m_sWindowData.noFocus.valueOrDefault() && w != pWindow) return w; @@ -860,7 +860,7 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { pWindowCandidate = PWORKSPACE->getFirstWindow(); if (!pWindowCandidate || pWindow == pWindowCandidate || !pWindowCandidate->m_bIsMapped || pWindowCandidate->isHidden() || pWindowCandidate->m_bX11ShouldntFocus || - pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_pMonitor != g_pCompositor->m_pLastMonitor) + pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_pMonitor != g_pCompositor->m_lastMonitor) return nullptr; return pWindowCandidate; @@ -888,7 +888,7 @@ void IHyprLayout::requestFocusForWindow(PHLWINDOW pWindow) { Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // get all rules, see if we have any size overrides. Vector2D sizeOverride = {}; - if (g_pCompositor->m_pLastMonitor) { + if (g_pCompositor->m_lastMonitor) { for (auto const& r : g_pConfigManager->getMatchingRules(pWindow, true, true)) { if (r->ruleType != CWindowRule::RULE_SIZE) continue; @@ -900,11 +900,11 @@ Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // ge const auto MAXSIZE = pWindow->requestedMaxSize(); - const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, g_pCompositor->m_pLastMonitor->vecSize.x) : - stringToPercentage(SIZEXSTR, g_pCompositor->m_pLastMonitor->vecSize.x); + const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->vecSize.x) : + stringToPercentage(SIZEXSTR, g_pCompositor->m_lastMonitor->vecSize.x); - const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, g_pCompositor->m_pLastMonitor->vecSize.y) : - stringToPercentage(SIZEYSTR, g_pCompositor->m_pLastMonitor->vecSize.y); + const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->vecSize.y) : + stringToPercentage(SIZEYSTR, g_pCompositor->m_lastMonitor->vecSize.y); sizeOverride = {SIZEX, SIZEY}; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index bac2c42e..555d660f 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -92,7 +92,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire const auto PNODE = [&]() { if (*PNEWONACTIVE != "none" && !BNEWISMASTER) { - const auto pLastNode = getNodeFromWindow(g_pCompositor->m_pLastWindow.lock()); + const auto pLastNode = getNodeFromWindow(g_pCompositor->m_lastWindow.lock()); if (pLastNode && !(pLastNode->isMaster && (getMastersOnWorkspace(pWindow->workspaceID()) == 1 || *PNEWSTATUS == "slave"))) { auto it = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *pLastNode); if (!BNEWBEFOREACTIVE) @@ -110,8 +110,8 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire static auto PMFACT = CConfigValue("master:mfact"); float lastSplitPercent = *PMFACT; - auto OPENINGON = isWindowTiled(g_pCompositor->m_pLastWindow.lock()) && g_pCompositor->m_pLastWindow->m_pWorkspace == pWindow->m_pWorkspace ? - getNodeFromWindow(g_pCompositor->m_pLastWindow.lock()) : + auto OPENINGON = isWindowTiled(g_pCompositor->m_lastWindow.lock()) && g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace ? + getNodeFromWindow(g_pCompositor->m_lastWindow.lock()) : getMasterNodeOnWorkspace(pWindow->workspaceID()); const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); @@ -621,7 +621,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { PHLMONITOR PMONITOR = nullptr; if (g_pCompositor->isWorkspaceSpecial(pNode->workspaceID)) { - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->activeSpecialWorkspaceID() == pNode->workspaceID) { PMONITOR = m; break; @@ -718,7 +718,7 @@ bool CHyprMasterLayout::isWindowTiled(PHLWINDOW pWindow) { } void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorner corner, PHLWINDOW pWindow) { - const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = pWindow ? pWindow : g_pCompositor->m_lastWindow.lock(); if (!validMapped(PWINDOW)) return; @@ -1443,32 +1443,32 @@ void CHyprMasterLayout::replaceWindowDataWith(PHLWINDOW from, PHLWINDOW to) { Vector2D CHyprMasterLayout::predictSizeForNewWindowTiled() { static auto PNEWSTATUS = CConfigValue("master:new_status"); - if (!g_pCompositor->m_pLastMonitor) + if (!g_pCompositor->m_lastMonitor) return {}; - const int NODES = getNodesOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID); + const int NODES = getNodesOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); if (NODES <= 0) - return g_pCompositor->m_pLastMonitor->vecSize; + return g_pCompositor->m_lastMonitor->vecSize; - const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID); + const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); if (!MASTER) // wtf return {}; if (*PNEWSTATUS == "master") { return MASTER->size; } else { - const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace->m_iID); + const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); // TODO: make this better - return {g_pCompositor->m_pLastMonitor->vecSize.x - MASTER->size.x, g_pCompositor->m_pLastMonitor->vecSize.y / (SLAVES + 1)}; + return {g_pCompositor->m_lastMonitor->vecSize.x - MASTER->size.x, g_pCompositor->m_lastMonitor->vecSize.y / (SLAVES + 1)}; } return {}; } void CHyprMasterLayout::onEnable() { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_bIsFloating || !w->m_bIsMapped || w->isHidden()) continue; diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index acdb39b7..69d127a7 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -50,7 +50,7 @@ void CANRManager::onTick() { for (auto& data : m_data) { PHLWINDOW firstWindow; int count = 0; - for (const auto& w : g_pCompositor->m_vWindows) { + for (const auto& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped) continue; @@ -69,7 +69,7 @@ void CANRManager::onTick() { if (!data->isRunning() && !data->dialogSaidWait) { data->runDialog("Application Not Responding", firstWindow->m_szTitle, firstWindow->m_szClass, data->getPid()); - for (const auto& w : g_pCompositor->m_vWindows) { + for (const auto& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped) continue; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index d3b4ab22..c3052796 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -20,8 +20,8 @@ static int wlTick(SP self, void* data) { if (g_pAnimationManager) g_pAnimationManager->onTicked(); - if (g_pCompositor->m_bSessionActive && g_pAnimationManager && g_pHookSystem && !g_pCompositor->m_bUnsafeState && - std::ranges::any_of(g_pCompositor->m_vMonitors, [](const auto& mon) { return mon->m_bEnabled && mon->output; })) { + if (g_pCompositor->m_sessionActive && g_pAnimationManager && g_pHookSystem && !g_pCompositor->m_unsafeState && + std::ranges::any_of(g_pCompositor->m_monitors, [](const auto& mon) { return mon->m_bEnabled && mon->output; })) { g_pAnimationManager->tick(); EMIT_HOOK_EVENT("tick", nullptr); } @@ -109,7 +109,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { g_pHyprRenderer->damageMonitor(PMONITOR); // TODO: just make this into a damn callback already vax... - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || w->isHidden() || w->m_pWorkspace != PWORKSPACE) continue; @@ -127,7 +127,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { } // damage any workspace window that is on any monitor - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!validMapped(w) || w->m_pWorkspace != PWORKSPACE || w->m_bPinned) continue; @@ -163,7 +163,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { PWINDOW->updateWindowDecos(); g_pHyprRenderer->damageWindow(PWINDOW); } else if (PWORKSPACE) { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!validMapped(w) || w->m_pWorkspace != PWORKSPACE) continue; diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index 1535734b..9a949283 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -290,7 +290,7 @@ void CCursorManager::updateTheme() { static auto PUSEHYPRCURSOR = CConfigValue("cursor:enable_hyprcursor"); float highestScale = 1.0; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->scale > highestScale) highestScale = m->scale; } @@ -307,7 +307,7 @@ void CCursorManager::updateTheme() { m_pHyprcursor->loadThemeStyle(m_sCurrentStyleInfo); } - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { m->forceFullFrames = 5; g_pCompositor->scheduleFrameForMonitor(m, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_SHAPE); } diff --git a/src/managers/EventManager.cpp b/src/managers/EventManager.cpp index 6231f0bc..d7535dc7 100644 --- a/src/managers/EventManager.cpp +++ b/src/managers/EventManager.cpp @@ -18,7 +18,7 @@ CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_ } sockaddr_un SERVERADDRESS = {.sun_family = AF_UNIX}; - const auto PATH = g_pCompositor->m_szInstancePath + "/.socket2.sock"; + const auto PATH = g_pCompositor->m_instancePath + "/.socket2.sock"; if (PATH.length() > sizeof(SERVERADDRESS.sun_path) - 1) { Debug::log(ERR, "Socket2 path is too long. (2) IPC will not work."); return; @@ -37,7 +37,7 @@ CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_ return; } - m_pEventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_iSocketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr); + m_pEventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_iSocketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr); } CEventManager::~CEventManager() { @@ -85,7 +85,7 @@ int CEventManager::onServerEvent(int fd, uint32_t mask) { Debug::log(LOG, "Socket2 accepted a new client at FD {}", ACCEPTEDCONNECTION.get()); // add to event loop so we can close it when we need to - auto* eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, ACCEPTEDCONNECTION.get(), 0, onServerEvent, nullptr); + auto* eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, ACCEPTEDCONNECTION.get(), 0, onServerEvent, nullptr); m_vClients.emplace_back(SClient{ std::move(ACCEPTEDCONNECTION), {}, @@ -141,7 +141,7 @@ std::string CEventManager::formatEvent(const SHyprIPCEvent& event) const { } void CEventManager::postEvent(const SHyprIPCEvent& event) { - if (g_pCompositor->m_bIsShuttingDown) { + if (g_pCompositor->m_isShuttingDown) { Debug::log(WARN, "Suppressed (shutting down) event of type {}, content: {}", event.event, event.data); return; } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 2eae60b9..9d7163f6 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -48,7 +48,7 @@ static std::vector> getHyprlandLaunchEnv(PHL if (!*PINITIALWSTRACKING || g_pConfigManager->m_isLaunchingExecOnce) return {}; - const auto PMONITOR = g_pCompositor->m_pLastMonitor; + const auto PMONITOR = g_pCompositor->m_lastMonitor; if (!PMONITOR || !PMONITOR->activeWorkspace) return {}; @@ -330,15 +330,15 @@ static void updateRelativeCursorCoords() { if (*PNOWARPS) return; - if (g_pCompositor->m_pLastWindow) - g_pCompositor->m_pLastWindow->m_vRelativeCursorCoordsOnLastWarp = g_pInputManager->getMouseCoordsInternal() - g_pCompositor->m_pLastWindow->m_vPosition; + if (g_pCompositor->m_lastWindow) + g_pCompositor->m_lastWindow->m_vRelativeCursorCoordsOnLastWarp = g_pInputManager->getMouseCoordsInternal() - g_pCompositor->m_lastWindow->m_vPosition; } bool CKeybindManager::tryMoveFocusToMonitor(PHLMONITOR monitor) { if (!monitor) return false; - const auto LASTMONITOR = g_pCompositor->m_pLastMonitor.lock(); + const auto LASTMONITOR = g_pCompositor->m_lastMonitor.lock(); if (!LASTMONITOR) return false; if (LASTMONITOR == monitor) { @@ -349,7 +349,7 @@ bool CKeybindManager::tryMoveFocusToMonitor(PHLMONITOR monitor) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); static auto PNOWARPS = CConfigValue("cursor:no_warps"); - const auto PWORKSPACE = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; const auto PNEWMAINWORKSPACE = monitor->activeWorkspace; g_pInputManager->unconstrainMouse(); @@ -381,7 +381,7 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); static auto PNOWARPS = CConfigValue("cursor:no_warps"); - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (PWINDOWTOCHANGETO == PLASTWINDOW || !PWINDOWTOCHANGETO) return; @@ -426,7 +426,7 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF }; bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { - if (!g_pCompositor->m_bSessionActive || g_pCompositor->m_bUnsafeState) { + if (!g_pCompositor->m_sessionActive || g_pCompositor->m_unsafeState) { m_dPressedKeys.clear(); return true; } @@ -876,7 +876,7 @@ bool CKeybindManager::handleVT(xkb_keysym_t keysym) { // beyond this point, return true to not handle anything else. // we'll avoid printing shit to active windows. - if (g_pCompositor->m_pAqBackend->hasSession()) { + if (g_pCompositor->m_aqBackend->hasSession()) { const unsigned int TTY = keysym - XKB_KEY_XF86Switch_VT_1 + 1; // vtnr is bugged for some reason. @@ -899,7 +899,7 @@ bool CKeybindManager::handleVT(xkb_keysym_t keysym) { Debug::log(LOG, "Switching from VT {} to VT {}", ttynum, TTY); - g_pCompositor->m_pAqBackend->session->switchVT(TTY); + g_pCompositor->m_aqBackend->session->switchVT(TTY); } return true; @@ -992,7 +992,7 @@ uint64_t CKeybindManager::spawnRawProc(std::string args, PHLWORKSPACE pInitialWo for (auto const& e : HLENV) { setenv(e.first.c_str(), e.second.c_str(), 1); } - setenv("WAYLAND_DISPLAY", g_pCompositor->m_szWLDisplaySocket.c_str(), 1); + setenv("WAYLAND_DISPLAY", g_pCompositor->m_wlDisplaySocket.c_str(), 1); int devnull = open("/dev/null", O_WRONLY | O_CLOEXEC); if (devnull != -1) { @@ -1024,7 +1024,7 @@ uint64_t CKeybindManager::spawnRawProc(std::string args, PHLWORKSPACE pInitialWo } SDispatchResult CKeybindManager::killActive(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) { Debug::log(ERR, "killActive: no window found"); @@ -1037,7 +1037,7 @@ SDispatchResult CKeybindManager::killActive(std::string args) { } SDispatchResult CKeybindManager::closeActive(std::string args) { - g_pCompositor->closeWindow(g_pCompositor->m_pLastWindow.lock()); + g_pCompositor->closeWindow(g_pCompositor->m_lastWindow.lock()); return {}; } @@ -1078,13 +1078,13 @@ SDispatchResult CKeybindManager::signalActive(std::string args) { Debug::log(ERR, "signalActive: invalid signal number {}", SIGNALNUM); return {.success = false, .error = std::format("signalActive: invalid signal number {}", SIGNALNUM)}; } - kill(g_pCompositor->m_pLastWindow.lock()->getPID(), SIGNALNUM); + kill(g_pCompositor->m_lastWindow.lock()->getPID(), SIGNALNUM); } catch (const std::exception& e) { Debug::log(ERR, "signalActive: invalid signal format \"{}\"", args); return {.success = false, .error = std::format("signalActive: invalid signal format \"{}\"", args)}; } - kill(g_pCompositor->m_pLastWindow.lock()->getPID(), std::stoi(args)); + kill(g_pCompositor->m_lastWindow.lock()->getPID(), std::stoi(args)); return {}; } @@ -1128,7 +1128,7 @@ static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional< if (args != "active" && args.length() > 1) PWINDOW = g_pCompositor->getWindowByRegex(args); else - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1181,7 +1181,7 @@ SDispatchResult CKeybindManager::setActiveTiled(std::string args) { } SDispatchResult CKeybindManager::centerWindow(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW || !PWINDOW->m_bIsFloating || PWINDOW->isFullscreen()) return {.success = false, .error = "No floating window found"}; @@ -1204,7 +1204,7 @@ SDispatchResult CKeybindManager::toggleActivePseudo(std::string args) { if (args != "active" && args.length() > 1) PWINDOW = g_pCompositor->getWindowByRegex(args); else - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1245,7 +1245,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { static auto PWORKSPACECENTERON = CConfigValue("binds:workspace_center_on"); static auto PHIDESPECIALONWORKSPACECHANGE = CConfigValue("binds:hide_special_on_workspace_change"); - const auto PMONITOR = g_pCompositor->m_pLastMonitor.lock(); + const auto PMONITOR = g_pCompositor->m_lastMonitor.lock(); if (!PMONITOR) return {.success = false, .error = "Last monitor not found"}; @@ -1320,7 +1320,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { } if (!g_pInputManager->m_bLastFocusOnLS) { - if (g_pCompositor->m_pLastFocus) + if (g_pCompositor->m_lastFocus) g_pInputManager->sendMotionEventsToFocused(); else g_pInputManager->simulateMouseMovement(); @@ -1340,7 +1340,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { } SDispatchResult CKeybindManager::fullscreenActive(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1356,7 +1356,7 @@ SDispatchResult CKeybindManager::fullscreenActive(std::string args) { } SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); const auto ARGS = CVarList(args, 2, ' '); if (!PWINDOW) @@ -1397,7 +1397,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { PWINDOW = g_pCompositor->getWindowByRegex(args.substr(args.find_last_of(',') + 1)); args = args.substr(0, args.find_last_of(',')); } else { - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); } if (!PWINDOW) @@ -1458,7 +1458,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspaceSilent(std::string args) { PWINDOW = g_pCompositor->getWindowByRegex(args.substr(args.find_last_of(',') + 1)); args = args.substr(0, args.find_last_of(',')); } else { - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); } if (!PWINDOW) @@ -1485,7 +1485,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspaceSilent(std::string args) { g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace); } - if (PWINDOW == g_pCompositor->m_pLastWindow) { + if (PWINDOW == g_pCompositor->m_lastWindow) { if (const auto PATCOORDS = g_pCompositor->vectorToWindowUnified(OLDMIDDLE, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING, PWINDOW); PATCOORDS) g_pCompositor->focusWindow(PATCOORDS); else @@ -1506,7 +1506,7 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { return {.success = false, .error = std::format("Cannot move focus in direction {}, unsupported direction. Supported: l,r,u/t,d/b", arg)}; } - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) { if (*PMONITORFALLBACK) tryMoveFocusToMonitor(g_pCompositor->getMonitorInDirection(arg)); @@ -1520,7 +1520,7 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { // Prioritize focus change within groups if the window is a part of it. if (*PGROUPCYCLE && PLASTWINDOW->m_sGroupData.pNextWindow) { - auto isTheOnlyGroupOnWs = !PWINDOWTOCHANGETO && g_pCompositor->m_vMonitors.size() == 1; + auto isTheOnlyGroupOnWs = !PWINDOWTOCHANGETO && g_pCompositor->m_monitors.size() == 1; if (arg == 'l' && (PLASTWINDOW != PLASTWINDOW->getGroupHead() || isTheOnlyGroupOnWs)) { PLASTWINDOW->setGroupCurrent(PLASTWINDOW->getGroupPrevious()); return {}; @@ -1592,8 +1592,8 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { SDispatchResult CKeybindManager::focusUrgentOrLast(std::string args) { const auto PWINDOWURGENT = g_pCompositor->getUrgentWindow(); - const auto PWINDOWPREV = g_pCompositor->m_pLastWindow.lock() ? (g_pCompositor->m_vWindowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_vWindowFocusHistory[1].lock()) : - (g_pCompositor->m_vWindowFocusHistory.empty() ? nullptr : g_pCompositor->m_vWindowFocusHistory[0].lock()); + const auto PWINDOWPREV = g_pCompositor->m_lastWindow.lock() ? (g_pCompositor->m_windowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_windowFocusHistory[1].lock()) : + (g_pCompositor->m_windowFocusHistory.empty() ? nullptr : g_pCompositor->m_windowFocusHistory[0].lock()); if (!PWINDOWURGENT && !PWINDOWPREV) return {.success = false, .error = "Window not found"}; @@ -1604,8 +1604,8 @@ SDispatchResult CKeybindManager::focusUrgentOrLast(std::string args) { } SDispatchResult CKeybindManager::focusCurrentOrLast(std::string args) { - const auto PWINDOWPREV = g_pCompositor->m_pLastWindow.lock() ? (g_pCompositor->m_vWindowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_vWindowFocusHistory[1].lock()) : - (g_pCompositor->m_vWindowFocusHistory.empty() ? nullptr : g_pCompositor->m_vWindowFocusHistory[0].lock()); + const auto PWINDOWPREV = g_pCompositor->m_lastWindow.lock() ? (g_pCompositor->m_windowFocusHistory.size() < 2 ? nullptr : g_pCompositor->m_windowFocusHistory[1].lock()) : + (g_pCompositor->m_windowFocusHistory.empty() ? nullptr : g_pCompositor->m_windowFocusHistory[0].lock()); if (!PWINDOWPREV) return {.success = false, .error = "Window not found"}; @@ -1624,7 +1624,7 @@ SDispatchResult CKeybindManager::swapActive(std::string args) { } Debug::log(LOG, "Swapping active window in direction {}", arg); - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "Window to swap with not found"}; @@ -1667,7 +1667,7 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { return {.success = false, .error = std::format("Cannot move window in direction {}, unsupported direction. Supported: l,r,u/t,d/b", arg)}; } - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "Window to move not found"}; @@ -1724,7 +1724,7 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { } SDispatchResult CKeybindManager::toggleGroup(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1741,7 +1741,7 @@ SDispatchResult CKeybindManager::toggleGroup(std::string args) { } SDispatchResult CKeybindManager::changeGroupActive(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1775,7 +1775,7 @@ SDispatchResult CKeybindManager::changeGroupActive(std::string args) { SDispatchResult CKeybindManager::toggleSplit(std::string args) { SLayoutMessageHeader header; - header.pWindow = g_pCompositor->m_pLastWindow.lock(); + header.pWindow = g_pCompositor->m_lastWindow.lock(); if (!header.pWindow) return {.success = false, .error = "Window not found"}; @@ -1792,7 +1792,7 @@ SDispatchResult CKeybindManager::toggleSplit(std::string args) { SDispatchResult CKeybindManager::swapSplit(std::string args) { SLayoutMessageHeader header; - header.pWindow = g_pCompositor->m_pLastWindow.lock(); + header.pWindow = g_pCompositor->m_lastWindow.lock(); if (!header.pWindow) return {.success = false, .error = "Window not found"}; @@ -1822,7 +1822,7 @@ SDispatchResult CKeybindManager::alterSplitRatio(std::string args) { return {.success = false, .error = "Splitratio invalid in alterSplitRatio!"}; } - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "Window not found"}; @@ -1852,7 +1852,7 @@ SDispatchResult CKeybindManager::moveCursorToCorner(std::string arg) { return {.success = false, .error = "moveCursorToCorner, corner not 0 - 3."}; } - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "Window not found"}; @@ -1913,7 +1913,7 @@ SDispatchResult CKeybindManager::moveCursor(std::string args) { SDispatchResult CKeybindManager::workspaceOpt(std::string args) { // current workspace - const auto PWORKSPACE = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; if (!PWORKSPACE) return {.success = false, .error = "Workspace not found"}; // ???? @@ -1922,7 +1922,7 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { PWORKSPACE->m_bDefaultPseudo = !PWORKSPACE->m_bDefaultPseudo; // apply - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE) continue; @@ -1933,7 +1933,7 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { // apply // we make a copy because changeWindowFloatingMode might invalidate the iterator - std::vector ptrs(g_pCompositor->m_vWindows.begin(), g_pCompositor->m_vWindows.end()); + std::vector ptrs(g_pCompositor->m_windows.begin(), g_pCompositor->m_windows.end()); for (auto const& w : ptrs) { if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE || w->isHidden()) @@ -1960,7 +1960,7 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { } // recalc mon - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(g_pCompositor->m_pLastMonitor->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(g_pCompositor->m_lastMonitor->ID); return {}; } @@ -1990,7 +1990,7 @@ SDispatchResult CKeybindManager::renameWorkspace(std::string args) { SDispatchResult CKeybindManager::exitHyprland(std::string argz) { g_pConfigManager->dispatchExecShutdown(); - if (g_pCompositor->m_bFinalRequests) + if (g_pCompositor->m_finalRequests) return {}; // Exiting deferred until requests complete g_pCompositor->stopCompositor(); @@ -2006,7 +2006,7 @@ SDispatchResult CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) } // get the current workspace - const auto PCURRENTWORKSPACE = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; if (!PCURRENTWORKSPACE) { Debug::log(ERR, "moveCurrentWorkspaceToMonitor invalid workspace!"); return {.success = false, .error = "moveCurrentWorkspaceToMonitor invalid workspace!"}; @@ -2057,7 +2057,7 @@ SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args return {.success = false, .error = "focusWorkspaceOnCurrentMonitor invalid workspace!"}; } - const auto PCURRMONITOR = g_pCompositor->m_pLastMonitor.lock(); + const auto PCURRMONITOR = g_pCompositor->m_lastMonitor.lock(); if (!PCURRMONITOR) { Debug::log(ERR, "focusWorkspaceOnCurrentMonitor monitor doesn't exist!"); @@ -2112,10 +2112,10 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { } bool requestedWorkspaceIsAlreadyOpen = false; - const auto PMONITOR = g_pCompositor->m_pLastMonitor; + const auto PMONITOR = g_pCompositor->m_lastMonitor; auto specialOpenOnMonitor = PMONITOR->activeSpecialWorkspaceID(); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->activeSpecialWorkspaceID() == workspaceID) { requestedWorkspaceIsAlreadyOpen = true; break; @@ -2160,7 +2160,7 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { SDispatchResult CKeybindManager::forceRendererReload(std::string args) { bool overAgain = false; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!m->output) continue; @@ -2178,7 +2178,7 @@ SDispatchResult CKeybindManager::forceRendererReload(std::string args) { } SDispatchResult CKeybindManager::resizeActive(std::string args) { - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "No window found"}; @@ -2200,7 +2200,7 @@ SDispatchResult CKeybindManager::resizeActive(std::string args) { } SDispatchResult CKeybindManager::moveActive(std::string args) { - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "No window found"}; @@ -2266,9 +2266,9 @@ SDispatchResult CKeybindManager::resizeWindow(std::string args) { } SDispatchResult CKeybindManager::circleNext(std::string arg) { - if (g_pCompositor->m_pLastWindow.expired()) { + if (g_pCompositor->m_lastWindow.expired()) { // if we have a clear focus, find the first window and get the next focusable. - const auto PWS = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PWS = g_pCompositor->m_lastMonitor->activeWorkspace; if (PWS && PWS->getWindows() > 0) { const auto PWINDOW = PWS->getFirstWindow(); switchToWindow(PWINDOW); @@ -2289,8 +2289,8 @@ SDispatchResult CKeybindManager::circleNext(std::string arg) { const auto PREV = args.contains("prev") || args.contains("p") || args.contains("last") || args.contains("l"); const auto NEXT = args.contains("next") || args.contains("n"); // prev is default in classic alt+tab const auto HIST = args.contains("hist") || args.contains("h"); - const auto& w = HIST ? g_pCompositor->getWindowCycleHist(g_pCompositor->m_pLastWindow, true, floatStatus, VISIBLE, NEXT) : - g_pCompositor->getWindowCycle(g_pCompositor->m_pLastWindow.lock(), true, floatStatus, VISIBLE, PREV); + const auto& w = HIST ? g_pCompositor->getWindowCycleHist(g_pCompositor->m_lastWindow, true, floatStatus, VISIBLE, NEXT) : + g_pCompositor->getWindowCycle(g_pCompositor->m_lastWindow.lock(), true, floatStatus, VISIBLE, PREV); switchToWindow(w, HIST); @@ -2313,8 +2313,8 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { updateRelativeCursorCoords(); - if (g_pCompositor->m_pLastMonitor && g_pCompositor->m_pLastMonitor->activeWorkspace != PWINDOW->m_pWorkspace && - g_pCompositor->m_pLastMonitor->activeSpecialWorkspace != PWINDOW->m_pWorkspace) { + if (g_pCompositor->m_lastMonitor && g_pCompositor->m_lastMonitor->activeWorkspace != PWINDOW->m_pWorkspace && + g_pCompositor->m_lastMonitor->activeSpecialWorkspace != PWINDOW->m_pWorkspace) { Debug::log(LOG, "Fake executing workspace to move focus"); changeworkspace(PWORKSPACE->getConfigName()); } @@ -2357,7 +2357,7 @@ SDispatchResult CKeybindManager::tagWindow(std::string args) { CVarList vars{args, 0, 's', true}; if (vars.size() == 1) - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); else if (vars.size() == 2) PWINDOW = g_pCompositor->getWindowByRegex(vars[1]); else @@ -2372,7 +2372,7 @@ SDispatchResult CKeybindManager::tagWindow(std::string args) { } SDispatchResult CKeybindManager::toggleSwallow(std::string args) { - PHLWINDOWREF pWindow = g_pCompositor->m_pLastWindow; + PHLWINDOWREF pWindow = g_pCompositor->m_lastWindow; if (!valid(pWindow) || !valid(pWindow->m_pSwallowed)) return {}; @@ -2430,7 +2430,7 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { return {.success = false, .error = "No kb in pass?"}; } - const auto XWTOXW = PWINDOW->m_bIsX11 && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bIsX11; + const auto XWTOXW = PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsX11; const auto LASTMOUSESURF = g_pSeatManager->state.pointerFocus.lock(); const auto LASTKBSURF = g_pSeatManager->state.keyboardFocus.lock(); @@ -2567,7 +2567,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { const std::string regexp = ARGS[2]; PHLWINDOW PWINDOW = nullptr; - const auto LASTSURFACE = g_pCompositor->m_pLastFocus.lock(); + const auto LASTSURFACE = g_pCompositor->m_lastFocus.lock(); //if regexp is not empty, send shortcut to current window //else, dont change focus @@ -2592,10 +2592,10 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { //copied the rest from pass and modified it // if wl -> xwl, activate destination - if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_pLastWindow && !g_pCompositor->m_pLastWindow->m_bIsX11) + if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_bIsX11) g_pXWaylandManager->activateSurface(PWINDOW->m_pWLSurface->resource(), true); // if xwl -> xwl, send to current. Timing issues make this not work. - if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_pLastWindow && g_pCompositor->m_pLastWindow->m_bIsX11) + if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow && g_pCompositor->m_lastWindow->m_bIsX11) PWINDOW = nullptr; g_pSeatManager->sendKeyboardMods(MOD, 0, 0, 0); @@ -2647,7 +2647,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { } SDispatchResult CKeybindManager::layoutmsg(std::string msg) { - SLayoutMessageHeader hd = {g_pCompositor->m_pLastWindow.lock()}; + SLayoutMessageHeader hd = {g_pCompositor->m_lastWindow.lock()}; g_pLayoutManager->getCurrentLayout()->layoutMessage(hd, msg); return {}; @@ -2662,7 +2662,7 @@ SDispatchResult CKeybindManager::dpms(std::string arg) { if (arg.find_first_of(' ') != std::string::npos) port = arg.substr(arg.find_first_of(' ') + 1); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!port.empty() && m->szName != port) continue; @@ -2687,7 +2687,7 @@ SDispatchResult CKeybindManager::dpms(std::string arg) { m->events.dpmsChanged.emit(); } - g_pCompositor->m_bDPMSStateON = enable; + g_pCompositor->m_dpmsStateOn = enable; g_pPointerManager->recheckEnteredOutputs(); @@ -2698,14 +2698,14 @@ SDispatchResult CKeybindManager::swapnext(std::string arg) { PHLWINDOW toSwap = nullptr; - if (g_pCompositor->m_pLastWindow.expired()) + if (g_pCompositor->m_lastWindow.expired()) return {}; - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); const auto PLASTCYCLED = - validMapped(g_pCompositor->m_pLastWindow->m_pLastCycledWindow) && g_pCompositor->m_pLastWindow->m_pLastCycledWindow->m_pWorkspace == PLASTWINDOW->m_pWorkspace ? - g_pCompositor->m_pLastWindow->m_pLastCycledWindow.lock() : + validMapped(g_pCompositor->m_lastWindow->m_pLastCycledWindow) && g_pCompositor->m_lastWindow->m_pLastCycledWindow->m_pWorkspace == PLASTWINDOW->m_pWorkspace ? + g_pCompositor->m_lastWindow->m_pLastCycledWindow.lock() : nullptr; const bool NEED_PREV = arg == "last" || arg == "l" || arg == "prev" || arg == "p"; @@ -2749,7 +2749,7 @@ SDispatchResult CKeybindManager::pinActive(std::string args) { if (args != "active" && args.length() > 1) PWINDOW = g_pCompositor->getWindowByRegex(args); else - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) { Debug::log(ERR, "pin: window not found"); @@ -2836,8 +2836,8 @@ SDispatchResult CKeybindManager::changeMouseBindMode(const eMouseBindMode MODE) } SDispatchResult CKeybindManager::bringActiveToTop(std::string args) { - if (g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bIsFloating) - g_pCompositor->changeWindowZOrder(g_pCompositor->m_pLastWindow.lock(), true); + if (g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsFloating) + g_pCompositor->changeWindowZOrder(g_pCompositor->m_lastWindow.lock(), true); return {}; } @@ -2847,8 +2847,8 @@ SDispatchResult CKeybindManager::alterZOrder(std::string args) { const auto POSITION = args.substr(0, args.find_first_of(',')); auto PWINDOW = g_pCompositor->getWindowByRegex(WINDOWREGEX); - if (!PWINDOW && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_bIsFloating) - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + if (!PWINDOW && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsFloating) + PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) { Debug::log(ERR, "alterZOrder: no window"); @@ -2884,7 +2884,7 @@ SDispatchResult CKeybindManager::lockGroups(std::string args) { } SDispatchResult CKeybindManager::lockActiveGroup(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "No window found"}; @@ -2988,7 +2988,7 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) { return {.success = false, .error = std::format("Cannot move into group in direction {}, unsupported direction. Supported: l,r,u/t,d/b", arg)}; } - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW || PWINDOW->m_sGroupData.deny) return {}; @@ -3018,7 +3018,7 @@ SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) { if (args != "active" && args.length() > 1) PWINDOW = g_pCompositor->getWindowByRegex(args); else - PWINDOW = g_pCompositor->m_pLastWindow.lock(); + PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "No window found"}; @@ -3041,7 +3041,7 @@ SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) { return {.success = false, .error = std::format("Cannot move into group in direction {}, unsupported direction. Supported: l,r,u/t,d/b", arg)}; } - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) return {.success = false, .error = "No window found"}; @@ -3100,7 +3100,7 @@ SDispatchResult CKeybindManager::setIgnoreGroupLock(std::string args) { } SDispatchResult CKeybindManager::denyWindowFromGroup(std::string args) { - const auto PWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW || (PWINDOW && PWINDOW->m_sGroupData.pNextWindow.lock())) return {}; @@ -3132,7 +3132,7 @@ SDispatchResult CKeybindManager::global(std::string args) { SDispatchResult CKeybindManager::moveGroupWindow(std::string args) { const auto BACK = args == "b" || args == "prev"; - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PLASTWINDOW) return {.success = false, .error = "No window found"}; @@ -3165,7 +3165,7 @@ SDispatchResult CKeybindManager::setProp(std::string args) { if (vars.size() < 3) return {.success = false, .error = "Not enough args"}; - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); const auto PWINDOW = g_pCompositor->getWindowByRegex(vars[0]); if (!PWINDOW) @@ -3267,7 +3267,7 @@ SDispatchResult CKeybindManager::setProp(std::string args) { g_pCompositor->focusWindow(PLASTWINDOW); } - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); return {}; diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index c16650be..d9e5c9f3 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -33,7 +33,7 @@ CPointerManager::CPointerManager() { PMONITOR->events.disconnect.registerStaticListener([this](void* owner, std::any data) { g_pEventLoopManager->doLater([this]() { onMonitorLayoutChange(); }); }, nullptr); PMONITOR->events.destroy.registerStaticListener( [this](void* owner, std::any data) { - if (g_pCompositor && !g_pCompositor->m_bIsShuttingDown) + if (g_pCompositor && !g_pCompositor->m_isShuttingDown) std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); }); }, nullptr); @@ -213,7 +213,7 @@ void CPointerManager::resetCursorImage(bool apply) { damageIfSoftware(); if (currentCursorImage.surface) { - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { currentCursorImage.surface->resource()->leave(m); } @@ -258,7 +258,7 @@ void CPointerManager::resetCursorImage(bool apply) { void CPointerManager::updateCursorBackend() { const auto CURSORBOX = getCursorBoxGlobal(); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!m->m_bEnabled || !m->dpmsStatus) { Debug::log(TRACE, "Not updating hw cursors: disabled / dpms off display"); continue; @@ -297,7 +297,7 @@ void CPointerManager::onCursorMoved() { const auto CURSORBOX = getCursorBoxGlobal(); bool recalc = false; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { auto state = stateFor(m); state->box = getCursorBoxLogicalForMonitor(state->monitor.lock()); @@ -433,7 +433,7 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_iDRMFD; + options.multigpu = state->monitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_drmFD; // We do not set the format (unless shm). If it's unset (DRM_FORMAT_INVALID) then the swapchain will pick for us, // but if it's set, we don't wanna change it. if (shouldUseCpuBuffer) @@ -777,7 +777,7 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { abs.y = std::clamp(abs.y, 0.0, 1.0); // find x and y size of the entire space - const auto& MONITORS = g_pCompositor->m_vMonitors; + const auto& MONITORS = g_pCompositor->m_monitors; Vector2D topLeft = MONITORS.at(0)->vecPosition, bottomRight = MONITORS.at(0)->vecPosition + MONITORS.at(0)->vecSize; for (size_t i = 1; i < MONITORS.size(); ++i) { const auto EXTENT = MONITORS[i]->logicalBox().extent(); @@ -795,7 +795,7 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { auto outputMappedArea = [&mappedArea](const std::string& output) { if (output == "current") { - if (const auto PLASTMONITOR = g_pCompositor->m_pLastMonitor.lock(); PLASTMONITOR) + if (const auto PLASTMONITOR = g_pCompositor->m_lastMonitor.lock(); PLASTMONITOR) return PLASTMONITOR->logicalBox(); } else if (const auto PMONITOR = g_pCompositor->getMonitorFromString(output); PMONITOR) return PMONITOR->logicalBox(); @@ -851,7 +851,7 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { void CPointerManager::onMonitorLayoutChange() { currentMonitorLayout.monitorBoxes.clear(); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->isMirror() || !m->m_bEnabled || !m->output) continue; @@ -903,7 +903,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -914,7 +914,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -937,7 +937,7 @@ void CPointerManager::attachPointer(SP pointer) { listener->frame = pointer->pointerEvents.frame.registerListener([] (std::any e) { bool shouldSkip = false; if (!g_pSeatManager->mouse.expired() && g_pInputManager->isLocked()) { - auto PMONITOR = g_pCompositor->m_pLastMonitor.get(); + auto PMONITOR = g_pCompositor->m_lastMonitor.get(); shouldSkip = PMONITOR && PMONITOR->shouldSkipScheduleFrameOnMouseEvent(); } g_pSeatManager->isPointerFrameSkipped = shouldSkip; @@ -952,7 +952,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -979,7 +979,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -1042,7 +1042,7 @@ void CPointerManager::attachTouch(SP touch) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -1097,7 +1097,7 @@ void CPointerManager::attachTablet(SP tablet) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); @@ -1116,7 +1116,7 @@ void CPointerManager::attachTablet(SP tablet) { PROTO::idle->onActivity(); - if (!g_pCompositor->m_bDPMSStateON && *PMOUSEDPMS) + if (!g_pCompositor->m_dpmsStateOn && *PMOUSEDPMS) g_pKeybindManager->dpms("on"); }); diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index c9bc2510..cbe1d4b1 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -109,7 +109,7 @@ CProtocolManager::CProtocolManager() { // ignore mirrored outputs. I don't think this will ever be hit as mirrors are applied after // this event is emitted iirc. // also ignore the fallback - if (M->isMirror() || M == g_pCompositor->m_pUnsafeOutput) + if (M->isMirror() || M == g_pCompositor->m_unsafeOutput) return; if (PROTO::outputs.contains(M->szName)) @@ -194,7 +194,7 @@ CProtocolManager::CProtocolManager() { // ! please read the top of this file before adding another protocol - for (auto const& b : g_pCompositor->m_pAqBackend->getImplementations()) { + for (auto const& b : g_pCompositor->m_aqBackend->getImplementations()) { if (b->type() != Aquamarine::AQ_BACKEND_DRM) continue; diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 23db671a..5fef7b5f 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -43,7 +43,7 @@ uint32_t CSeatManager::nextSerial(SP seatResource) { ASSERT(container); - auto serial = wl_display_next_serial(g_pCompositor->m_sWLDisplay); + auto serial = wl_display_next_serial(g_pCompositor->m_wlDisplay); container->serials.emplace_back(serial); @@ -621,7 +621,7 @@ void CSeatManager::setGrab(SP grab) { refocus = layer->interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; if (refocus) { - auto candidate = g_pCompositor->m_pLastWindow.lock(); + auto candidate = g_pCompositor->m_lastWindow.lock(); if (candidate) g_pCompositor->focusWindow(candidate); diff --git a/src/managers/SessionLockManager.cpp b/src/managers/SessionLockManager.cpp index 40611199..ecca3c96 100644 --- a/src/managers/SessionLockManager.cpp +++ b/src/managers/SessionLockManager.cpp @@ -24,8 +24,8 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : sur }); listeners.destroy = surface_->events.destroy.registerListener([this](std::any data) { - if (pWlrSurface == g_pCompositor->m_pLastFocus) - g_pCompositor->m_pLastFocus.reset(); + if (pWlrSurface == g_pCompositor->m_lastFocus) + g_pCompositor->m_lastFocus.reset(); g_pSessionLockManager->removeSessionLockSurface(this); }); @@ -33,7 +33,7 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : sur listeners.commit = surface_->events.commit.registerListener([this](std::any data) { const auto PMONITOR = g_pCompositor->getMonitorFromID(iMonitorID); - if (mapped && !g_pCompositor->m_pLastFocus) + if (mapped && !g_pCompositor->m_lastFocus) g_pInputManager->simulateMouseMovement(); if (PMONITOR) @@ -75,7 +75,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { m_pSessionLock.reset(); g_pInputManager->refocus(); - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) g_pHyprRenderer->damageMonitor(m); }); @@ -83,7 +83,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { m_pSessionLock.reset(); g_pCompositor->focusSurface(nullptr); - for (auto const& m : g_pCompositor->m_vMonitors) + for (auto const& m : g_pCompositor->m_monitors) g_pHyprRenderer->damageMonitor(m); }); @@ -92,7 +92,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { // Normally the locked event is sent after each output rendered a lock screen frame. // When there are no outputs, send it right away. - if (g_pCompositor->m_bUnsafeState) { + if (g_pCompositor->m_unsafeState) { m_pSessionLock->lock->sendLocked(); m_pSessionLock->m_hasSentLocked = true; } @@ -138,7 +138,7 @@ void CSessionLockManager::onLockscreenRenderedOnMonitor(uint64_t id) { if (!m_pSessionLock || m_pSessionLock->m_hasSentLocked) return; m_pSessionLock->m_lockedMonitors.emplace(id); - const bool LOCKED = std::ranges::all_of(g_pCompositor->m_vMonitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->ID); }); + const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->ID); }); if (LOCKED && m_pSessionLock->lock->good()) { m_pSessionLock->lock->sendLocked(); m_pSessionLock->m_hasSentLocked = true; @@ -166,7 +166,7 @@ void CSessionLockManager::removeSessionLockSurface(SSessionLockSurface* pSLS) { std::erase_if(m_pSessionLock->vSessionLockSurfaces, [&](const auto& other) { return pSLS == other.get(); }); - if (g_pCompositor->m_pLastFocus) + if (g_pCompositor->m_lastFocus) return; for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) { diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index e8481a26..e33621c9 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -69,8 +69,8 @@ void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) { pWindow->m_pXDGSurface->toplevel->setActive(activate); if (activate) { - g_pCompositor->m_pLastFocus = getWindowSurface(pWindow); - g_pCompositor->m_pLastWindow = pWindow; + g_pCompositor->m_lastFocus = getWindowSurface(pWindow); + g_pCompositor->m_lastWindow = pWindow; } if (!pWindow->m_bPinned) @@ -169,7 +169,7 @@ Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& coord) { PHLMONITOR pMonitor = nullptr; double bestDistance = __FLT_MAX__; - for (const auto& m : g_pCompositor->m_vMonitors) { + for (const auto& m : g_pCompositor->m_monitors) { const auto SIZ = *PXWLFORCESCALEZERO ? m->vecTransformedSize : m->vecSize; double distance = vecToRectDistanceSquared(coord, {m->vecPosition.x, m->vecPosition.y}, {m->vecPosition.x + SIZ.x - 1, m->vecPosition.y + SIZ.y - 1}); @@ -200,7 +200,7 @@ Vector2D CHyprXWaylandManager::xwaylandToWaylandCoords(const Vector2D& coord) { PHLMONITOR pMonitor = nullptr; double bestDistance = __FLT_MAX__; - for (const auto& m : g_pCompositor->m_vMonitors) { + for (const auto& m : g_pCompositor->m_monitors) { const auto SIZ = *PXWLFORCESCALEZERO ? m->vecTransformedSize : m->vecSize; double distance = diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index d1245bbf..14ff75f5 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -89,11 +89,11 @@ void CEventLoopManager::enterLoop() { m_configWatcherInotifySource = wl_event_loop_add_fd(m_sWayland.loop, FD.get(), WL_EVENT_READABLE, configWatcherWrite, nullptr); syncPollFDs(); - m_sListeners.pollFDsChanged = g_pCompositor->m_pAqBackend->events.pollFDsChanged.registerListener([this](std::any d) { syncPollFDs(); }); + m_sListeners.pollFDsChanged = g_pCompositor->m_aqBackend->events.pollFDsChanged.registerListener([this](std::any d) { syncPollFDs(); }); // if we have a session, dispatch it to get the pending input devices - if (g_pCompositor->m_pAqBackend->hasSession()) - g_pCompositor->m_pAqBackend->session->dispatchPendingEventsAsync(); + if (g_pCompositor->m_aqBackend->hasSession()) + g_pCompositor->m_aqBackend->session->dispatchPendingEventsAsync(); wl_display_run(m_sWayland.display); @@ -186,7 +186,7 @@ void CEventLoopManager::doOnReadable(CFileDescriptor fd, const std::functionm_pAqBackend->getPollFDs(); + auto aqPollFDs = g_pCompositor->m_aqBackend->getPollFDs(); std::erase_if(aqEventSources, [&](const auto& item) { auto const& [fd, eventSourceData] = item; diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index 67837c17..4481002a 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -50,7 +50,7 @@ void CInputManager::recheckIdleInhibitorStatus() { } // check manual user-set inhibitors - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (isWindowInhibiting(w)) { PROTO::idle->setInhibit(true); return; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 6c3b3699..a1158f42 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -149,24 +149,24 @@ void CInputManager::simulateMouseMovement() { } void CInputManager::sendMotionEventsToFocused() { - if (!g_pCompositor->m_pLastFocus || isConstrained()) + if (!g_pCompositor->m_lastFocus || isConstrained()) return; // todo: this sucks ass - const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_pLastFocus.lock()); - const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_pLastFocus.lock()); + const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); + const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition->goal() : (PLS ? Vector2D{PLS->geometry.x, PLS->geometry.y} : Vector2D{})); m_bEmptyFocusCursorSet = false; - g_pSeatManager->setPointerFocus(g_pCompositor->m_pLastFocus.lock(), LOCAL); + g_pSeatManager->setPointerFocus(g_pCompositor->m_lastFocus.lock(), LOCAL); } void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { m_bLastInputMouse = mouse; - if (!g_pCompositor->m_bReadyToProcess || g_pCompositor->m_bIsShuttingDown || g_pCompositor->m_bUnsafeState) + if (!g_pCompositor->m_readyToProcess || g_pCompositor->m_isShuttingDown || g_pCompositor->m_unsafeState) return; Vector2D const mouseCoords = getMouseCoordsInternal(); @@ -205,7 +205,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { m_vLastCursorPosFloored = MOUSECOORDSFLOORED; - const auto PMONITOR = isLocked() && g_pCompositor->m_pLastMonitor ? g_pCompositor->m_pLastMonitor.lock() : g_pCompositor->getMonitorFromCursor(); + const auto PMONITOR = isLocked() && g_pCompositor->m_lastMonitor ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromCursor(); // this can happen if there are no displays hooked up to Hyprland if (PMONITOR == nullptr) @@ -221,7 +221,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // constraints if (!g_pSeatManager->mouse.expired() && isConstrained()) { - const auto SURF = CWLSurface::fromResource(g_pCompositor->m_pLastFocus.lock()); + const auto SURF = CWLSurface::fromResource(g_pCompositor->m_lastFocus.lock()); const auto CONSTRAINT = SURF ? SURF->constraint() : nullptr; if (CONSTRAINT) { @@ -245,7 +245,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Debug::log(ERR, "BUG THIS: Null SURF/CONSTRAINT in mouse refocus. Ignoring constraints. {:x} {:x}", (uintptr_t)SURF.get(), (uintptr_t)CONSTRAINT.get()); } - if (PMONITOR != g_pCompositor->m_pLastMonitor && (*PMOUSEFOCUSMON || refocus) && m_pForcedFocus.expired()) + if (PMONITOR != g_pCompositor->m_lastMonitor && (*PMOUSEFOCUSMON || refocus) && m_pForcedFocus.expired()) g_pCompositor->setActiveMonitor(PMONITOR); if (g_pSessionLockManager->isSessionLocked()) { @@ -274,7 +274,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // if we are holding a pointer button, // and we're not dnd-ing, don't refocus. Keep focus on last surface. - if (!PROTO::data->dndActive() && !m_lCurrentlyHeldButtons.empty() && g_pCompositor->m_pLastFocus && g_pSeatManager->state.pointerFocus && !m_bHardInput) { + if (!PROTO::data->dndActive() && !m_lCurrentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pSeatManager->state.pointerFocus && !m_bHardInput) { foundSurface = g_pSeatManager->state.pointerFocus.lock(); // IME popups aren't desktop-like elements @@ -294,7 +294,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { const auto PWINDOW = HLSurface->getWindow(); surfacePos = BOX->pos(); pFoundLayerSurface = HLSurface->getLayer(); - pFoundWindow = !PWINDOW || PWINDOW->isHidden() ? g_pCompositor->m_pLastWindow.lock() : PWINDOW; + pFoundWindow = !PWINDOW || PWINDOW->isHidden() ? g_pCompositor->m_lastWindow.lock() : PWINDOW; } else // reset foundSurface, find one normally foundSurface = nullptr; } else // reset foundSurface, find one normally @@ -417,7 +417,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &surfaceCoords, &pFoundLayerSurface); if (g_pPointerManager->softwareLockedFor(PMONITOR->self.lock()) > 0 && !skipFrameSchedule) - g_pCompositor->scheduleFrameForMonitor(g_pCompositor->m_pLastMonitor.lock(), Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE); + g_pCompositor->scheduleFrameForMonitor(g_pCompositor->m_lastMonitor.lock(), Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE); // FIXME: This will be disabled during DnD operations because we do not exactly follow the spec // xdg-popup grabs should be keyboard-only, while they are absolute in our case... @@ -458,7 +458,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pSeatManager->setPointerFocus(nullptr, {}); - if (refocus || g_pCompositor->m_pLastWindow.expired()) // if we are forcing a refocus, and we don't find a surface, clear the kb focus too! + if (refocus || g_pCompositor->m_lastWindow.expired()) // if we are forcing a refocus, and we don't find a surface, clear the kb focus too! g_pCompositor->focusWindow(nullptr); return; @@ -480,8 +480,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { bool allowKeyboardRefocus = true; - if (!refocus && g_pCompositor->m_pLastFocus) { - const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_pLastFocus.lock()); + if (!refocus && g_pCompositor->m_lastFocus) { + const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); if (PLS && PLS->layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) allowKeyboardRefocus = false; @@ -518,8 +518,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (FOLLOWMOUSE != 1 && !refocus) { - if (pFoundWindow != g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow.lock() && - ((pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR == 2) || (g_pCompositor->m_pLastWindow->m_bIsFloating != pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR != 0))) { + if (pFoundWindow != g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow.lock() && + ((pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR == 2) || (g_pCompositor->m_lastWindow->m_bIsFloating != pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR != 0))) { // enter if change floating style if (FOLLOWMOUSE != 3 && allowKeyboardRefocus) g_pCompositor->focusWindow(pFoundWindow, foundSurface); @@ -527,10 +527,10 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } else if (FOLLOWMOUSE == 2 || FOLLOWMOUSE == 3) g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); - if (pFoundWindow == g_pCompositor->m_pLastWindow) + if (pFoundWindow == g_pCompositor->m_lastWindow) g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); - if (FOLLOWMOUSE != 0 || pFoundWindow == g_pCompositor->m_pLastWindow) + if (FOLLOWMOUSE != 0 || pFoundWindow == g_pCompositor->m_lastWindow) g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); if (g_pSeatManager->state.pointerFocus == foundSurface) @@ -540,12 +540,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { return; // don't enter any new surfaces } else { if (allowKeyboardRefocus && ((FOLLOWMOUSE != 3 && (*PMOUSEREFOCUS || m_pLastMouseFocus.lock() != pFoundWindow)) || refocus)) { - if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_pLastWindow.lock() != pFoundWindow || g_pCompositor->m_pLastFocus != foundSurface || refocus) { + if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow || g_pCompositor->m_lastFocus != foundSurface || refocus) { m_pLastMouseFocus = pFoundWindow; // TODO: this looks wrong. When over a popup, it constantly is switching. // Temp fix until that's figured out. Otherwise spams windowrule lookups and other shit. - if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_pLastWindow.lock() != pFoundWindow) { + if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow) { if (m_fMousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) { const bool hasNoFollowMouse = pFoundWindow && pFoundWindow->m_sWindowData.noFollowMouse.valueOrDefault(); @@ -747,7 +747,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { break; if ((g_pSeatManager->mouse.expired() || !isConstrained()) /* No constraints */ - && (w && g_pCompositor->m_pLastWindow.lock() != w) /* window should change */) { + && (w && g_pCompositor->m_lastWindow.lock() != w) /* window should change */) { // a bit hacky // if we only pressed one button, allow us to refocus. m_lCurrentlyHeldButtons.size() > 0 will stick the focus if (m_lCurrentlyHeldButtons.size() == 1) { @@ -776,7 +776,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { // notify app if we didnt handle it g_pSeatManager->sendPointerButton(e.timeMs, e.button, e.state); - if (const auto PMON = g_pCompositor->getMonitorFromVector(mouseCoords); PMON != g_pCompositor->m_pLastMonitor && PMON) + if (const auto PMON = g_pCompositor->getMonitorFromVector(mouseCoords); PMON != g_pCompositor->m_lastMonitor && PMON) g_pCompositor->setActiveMonitor(PMON); if (g_pSeatManager->seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) { @@ -956,7 +956,7 @@ void CInputManager::setupKeyboard(SP keeb) { if (PKEEB->enabled) PROTO::idle->onActivity(); - if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_bDPMSStateON) + if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) g_pKeybindManager->dpms("on"); }, keeb.get()); @@ -970,7 +970,7 @@ void CInputManager::setupKeyboard(SP keeb) { if (PKEEB->enabled) PROTO::idle->onActivity(); - if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_bDPMSStateON) + if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) g_pKeybindManager->dpms("on"); }, keeb.get()); @@ -1467,15 +1467,15 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { foundSurface = nullptr; } - if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->m_pLastWindow->m_pWorkspace && g_pCompositor->m_pLastWindow->m_pWorkspace->isVisibleNotCovered()) { + if (!foundSurface && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pWorkspace && g_pCompositor->m_lastWindow->m_pWorkspace->isVisibleNotCovered()) { // then the last focused window if we're on the same workspace as it - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); g_pCompositor->focusWindow(PLASTWINDOW); } else { // otherwise fall back to a normal refocus. if (foundSurface && !foundSurface->hlSurface->keyboardFocusable()) { - const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); + const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); g_pCompositor->focusWindow(PLASTWINDOW); } @@ -1505,7 +1505,7 @@ void CInputManager::unconstrainMouse() { bool CInputManager::isConstrained() { return std::any_of(m_vConstraints.begin(), m_vConstraints.end(), [](auto const& c) { const auto constraint = c.lock(); - return constraint && constraint->isActive() && constraint->owner()->resource() == g_pCompositor->m_pLastFocus; + return constraint && constraint->isActive() && constraint->owner()->resource() == g_pCompositor->m_lastFocus; }); } @@ -1513,7 +1513,7 @@ bool CInputManager::isLocked() { if (!isConstrained()) return false; - const auto SURF = CWLSurface::fromResource(g_pCompositor->m_pLastFocus.lock()); + const auto SURF = CWLSurface::fromResource(g_pCompositor->m_lastFocus.lock()); const auto CONSTRAINT = SURF ? SURF->constraint() : nullptr; return CONSTRAINT && CONSTRAINT->isLocked(); diff --git a/src/managers/input/InputMethodRelay.cpp b/src/managers/input/InputMethodRelay.cpp index 5f6c4354..c51d3ebe 100644 --- a/src/managers/input/InputMethodRelay.cpp +++ b/src/managers/input/InputMethodRelay.cpp @@ -55,17 +55,17 @@ void CInputMethodRelay::onNewIME(SP pIME) { Debug::log(LOG, "New input popup"); }); - if (!g_pCompositor->m_pLastFocus) + if (!g_pCompositor->m_lastFocus) return; for (auto const& ti : m_vTextInputs) { - if (ti->client() != g_pCompositor->m_pLastFocus->client()) + if (ti->client() != g_pCompositor->m_lastFocus->client()) continue; if (ti->isV3()) - ti->enter(g_pCompositor->m_pLastFocus.lock()); + ti->enter(g_pCompositor->m_lastFocus.lock()); else - ti->onEnabled(g_pCompositor->m_pLastFocus.lock()); + ti->onEnabled(g_pCompositor->m_lastFocus.lock()); } } @@ -74,11 +74,11 @@ void CInputMethodRelay::removePopup(CInputPopup* pPopup) { } CTextInput* CInputMethodRelay::getFocusedTextInput() { - if (!g_pCompositor->m_pLastFocus) + if (!g_pCompositor->m_lastFocus) return nullptr; for (auto const& ti : m_vTextInputs) { - if (ti->focusedSurface() == g_pCompositor->m_pLastFocus) + if (ti->focusedSurface() == g_pCompositor->m_lastFocus) return ti.get(); } diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index 70700bf4..24971c7c 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -17,8 +17,8 @@ void CInputManager::onSwipeBegin(IPointer::SSwipeBeginEvent e) { return; int onMonitor = 0; - for (auto const& w : g_pCompositor->m_vWorkspaces) { - if (w->m_pMonitor == g_pCompositor->m_pLastMonitor && !g_pCompositor->isWorkspaceSpecial(w->m_iID)) + for (auto const& w : g_pCompositor->m_workspaces) { + if (w->m_pMonitor == g_pCompositor->m_lastMonitor && !g_pCompositor->isWorkspaceSpecial(w->m_iID)) onMonitor++; } @@ -29,18 +29,18 @@ void CInputManager::onSwipeBegin(IPointer::SSwipeBeginEvent e) { } void CInputManager::beginWorkspaceSwipe() { - const auto PWORKSPACE = g_pCompositor->m_pLastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_szName); m_sActiveSwipe.pWorkspaceBegin = PWORKSPACE; m_sActiveSwipe.delta = 0; - m_sActiveSwipe.pMonitor = g_pCompositor->m_pLastMonitor; + m_sActiveSwipe.pMonitor = g_pCompositor->m_lastMonitor; m_sActiveSwipe.avgSpeed = 0; m_sActiveSwipe.speedPoints = 0; if (PWORKSPACE->m_bHasFullscreenWindow) { - for (auto const& ls : g_pCompositor->m_pLastMonitor->m_aLayerSurfaceLayers[2]) { + for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { *ls->alpha = 1.f; } } @@ -186,7 +186,7 @@ void CInputManager::endWorkspaceSwipe() { g_pInputManager->refocus(); // apply alpha - for (auto const& ls : g_pCompositor->m_pLastMonitor->m_aLayerSurfaceLayers[2]) { + for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { *ls->alpha = pSwitchedTo->m_bHasFullscreenWindow && pSwitchedTo->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index 4b28d513..25c5b949 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -31,8 +31,8 @@ void CTextInput::initCallbacks() { g_pInputManager->m_sIMERelay.deactivateIME(this); }); - if (!g_pCompositor->m_pLastFocus.expired() && g_pCompositor->m_pLastFocus->client() == INPUT->client()) - enter(g_pCompositor->m_pLastFocus.lock()); + if (!g_pCompositor->m_lastFocus.expired() && g_pCompositor->m_lastFocus->client() == INPUT->client()) + enter(g_pCompositor->m_lastFocus.lock()); } else { const auto INPUT = pV1Input.lock(); @@ -63,7 +63,7 @@ void CTextInput::onEnabled(SP surfV1) { // v1 only, map surface to PTI if (!isV3()) { - if (g_pCompositor->m_pLastFocus != surfV1 || !pV1Input->active) + if (g_pCompositor->m_lastFocus != surfV1 || !pV1Input->active) return; enter(surfV1); diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index c745eb9d..6ce1033b 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -25,7 +25,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { auto PMONITOR = g_pCompositor->getMonitorFromName(!e.device->boundOutput.empty() ? e.device->boundOutput : ""); - PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_pLastMonitor.lock(); + PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_lastMonitor.lock(); g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp index fe795985..cf1fd1a0 100644 --- a/src/managers/permissions/DynamicPermissionManager.cpp +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -27,7 +27,7 @@ CDynamicPermissionRule::CDynamicPermissionRule(wl_client* const client, eDynamic wl_list_init(&m_destroyWrapper.listener.link); m_destroyWrapper.listener.notify = ::clientDestroyInternal; m_destroyWrapper.parent = this; - wl_display_add_destroy_listener(g_pCompositor->m_sWLDisplay, &m_destroyWrapper.listener); + wl_display_add_destroy_listener(g_pCompositor->m_wlDisplay, &m_destroyWrapper.listener); } CDynamicPermissionRule::~CDynamicPermissionRule() { diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index e1c9f39c..523ae7cf 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -130,7 +130,7 @@ APICALL bool HyprlandAPI::removeWindowDecoration(HANDLE handle, IHyprWindowDecor if (!PLUGIN) return false; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { for (auto const& d : w->m_dWindowDecorations) { if (d.get() == pDecoration) { w->removeWindowDeco(pDecoration); diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index 7dbe635b..125e717e 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -51,7 +51,7 @@ CHyprlandCTMControlResource::CHyprlandCTMControlResource(SPm_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { if (!ctms.contains(m->szName)) { PROTO::ctm->setCTM(m, Mat3x3::identity()); continue; @@ -73,7 +73,7 @@ CHyprlandCTMControlResource::~CHyprlandCTMControlResource() { if (blocked) return; - for (auto& m : g_pCompositor->m_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { PROTO::ctm->setCTM(m, Mat3x3::identity()); } } diff --git a/src/protocols/DRMLease.cpp b/src/protocols/DRMLease.cpp index e70f0441..2fd1b890 100644 --- a/src/protocols/DRMLease.cpp +++ b/src/protocols/DRMLease.cpp @@ -245,7 +245,7 @@ CDRMLeaseDevice::CDRMLeaseDevice(SP drmBackend) : backe } CDRMLeaseProtocol::CDRMLeaseProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { - for (auto const& b : g_pCompositor->m_pAqBackend->getImplementations()) { + for (auto const& b : g_pCompositor->m_aqBackend->getImplementations()) { if (b->type() != Aquamarine::AQ_BACKEND_DRM) continue; diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index c2960746..5d04d53f 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -200,7 +200,7 @@ bool CDRMSyncobjManagerResource::good() { return resource->resource(); } -CDRMSyncobjProtocol::CDRMSyncobjProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name), drmFD(g_pCompositor->m_iDRMFD) {} +CDRMSyncobjProtocol::CDRMSyncobjProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name), drmFD(g_pCompositor->m_drmFD) {} void CDRMSyncobjProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { const auto& RESOURCE = m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id))); diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index 4e5fda48..16465763 100644 --- a/src/protocols/ForeignToplevel.cpp +++ b/src/protocols/ForeignToplevel.cpp @@ -31,7 +31,7 @@ CForeignToplevelList::CForeignToplevelList(SP resourc LOGM(LOG, "CForeignToplevelList: finished"); }); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!PROTO::foreignToplevel->windowValidForForeign(w)) return; diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index 945d802d..b4210bac 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -174,7 +174,7 @@ void CForeignToplevelHandleWlr::sendState() { wl_array state; wl_array_init(&state); - if (PWINDOW == g_pCompositor->m_pLastWindow) { + if (PWINDOW == g_pCompositor->m_lastWindow) { auto p = (uint32_t*)wl_array_add(&state, sizeof(uint32_t)); *p = ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ACTIVATED; } @@ -205,14 +205,14 @@ CForeignToplevelWlrManager::CForeignToplevelWlrManager(SPonManagerResourceDestroy(this); }); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!PROTO::foreignToplevelWlr->windowValidForForeign(w)) continue; onMap(w); } - lastFocus = g_pCompositor->m_pLastWindow; + lastFocus = g_pCompositor->m_lastWindow; } void CForeignToplevelWlrManager::onMap(PHLWINDOW pWindow) { diff --git a/src/protocols/InputMethodV2.cpp b/src/protocols/InputMethodV2.cpp index 33121ecd..db925757 100644 --- a/src/protocols/InputMethodV2.cpp +++ b/src/protocols/InputMethodV2.cpp @@ -95,8 +95,8 @@ CInputMethodPopupV2::CInputMethodPopupV2(SP resource_, listeners.destroySurface.reset(); listeners.commitSurface.reset(); - if (g_pCompositor->m_pLastFocus == pSurface) - g_pCompositor->m_pLastFocus.reset(); + if (g_pCompositor->m_lastFocus == pSurface) + g_pCompositor->m_lastFocus.reset(); pSurface.reset(); }); diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index c88dc925..0b64e7fd 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -189,7 +189,7 @@ void CLayerShellResource::sendClosed() { void CLayerShellResource::configure(const Vector2D& size_) { size = size_; - auto serial = wl_display_next_serial(g_pCompositor->m_sWLDisplay); + auto serial = wl_display_next_serial(g_pCompositor->m_wlDisplay); serials.push_back({serial, size_}); @@ -247,7 +247,7 @@ void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id } SURF->role = makeShared(RESOURCE); - g_pCompositor->m_vLayers.emplace_back(CLayerSurface::create(RESOURCE)); + g_pCompositor->m_layers.emplace_back(CLayerSurface::create(RESOURCE)); LOGM(LOG, "New wlr_layer_surface {:x}", (uintptr_t)RESOURCE.get()); } diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index 78834368..4744fec4 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -409,7 +409,7 @@ void CLinuxDMABUFResource::sendMods() { CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { static auto P = g_pHookSystem->hookDynamic("ready", [this](void* self, SCallbackInfo& info, std::any d) { - int rendererFD = g_pCompositor->m_iDRMFD; + int rendererFD = g_pCompositor->m_drmFD; auto dev = devIDFromFD(rendererFD); if (!dev.has_value()) { @@ -428,11 +428,11 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const std::vector> tches; - if (g_pCompositor->m_pAqBackend->hasSession()) { + if (g_pCompositor->m_aqBackend->hasSession()) { // this assumes there's only 1 device used for both scanout and rendering // also that each monitor never changes its primary plane - for (auto const& mon : g_pCompositor->m_vMonitors) { + for (auto const& mon : g_pCompositor->m_monitors) { auto tranche = SDMABUFTranche{ .device = mainDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, diff --git a/src/protocols/MesaDRM.cpp b/src/protocols/MesaDRM.cpp index caa539a2..41c34d89 100644 --- a/src/protocols/MesaDRM.cpp +++ b/src/protocols/MesaDRM.cpp @@ -112,7 +112,7 @@ bool CMesaDRMResource::good() { CMesaDRMProtocol::CMesaDRMProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { drmDevice* dev = nullptr; - int drmFD = g_pCompositor->m_iDRMFD; + int drmFD = g_pCompositor->m_drmFD; if (drmGetDevice2(drmFD, 0, &dev) != 0) { LOGM(ERR, "Failed to get device, disabling MesaDRM"); removeGlobal(); diff --git a/src/protocols/OutputManagement.cpp b/src/protocols/OutputManagement.cpp index 49922b39..1e3835a6 100644 --- a/src/protocols/OutputManagement.cpp +++ b/src/protocols/OutputManagement.cpp @@ -31,8 +31,8 @@ COutputManager::COutputManager(SP resource_) : resource(re }); // send all heads at start - for (auto const& m : g_pCompositor->m_vRealMonitors) { - if (m == g_pCompositor->m_pUnsafeOutput) + for (auto const& m : g_pCompositor->m_realMonitors) { + if (m == g_pCompositor->m_unsafeOutput) continue; LOGM(LOG, " | sending output head for {}", m->szName); @@ -67,7 +67,7 @@ void COutputManager::makeAndSendNewHead(PHLMONITOR pMonitor) { } void COutputManager::ensureMonitorSent(PHLMONITOR pMonitor) { - if (pMonitor == g_pCompositor->m_pUnsafeOutput) + if (pMonitor == g_pCompositor->m_unsafeOutput) return; for (auto const& hw : heads) { @@ -86,7 +86,7 @@ void COutputManager::ensureMonitorSent(PHLMONITOR pMonitor) { } void COutputManager::sendDone() { - resource->sendDone(wl_display_next_serial(g_pCompositor->m_sWLDisplay)); + resource->sendDone(wl_display_next_serial(g_pCompositor->m_wlDisplay)); } COutputHead::COutputHead(SP resource_, PHLMONITOR pMonitor_) : resource(resource_), pMonitor(pMonitor_) { @@ -611,7 +611,7 @@ void COutputManagementProtocol::destroyResource(COutputConfigurationHead* resour } void COutputManagementProtocol::updateAllOutputs() { - for (auto const& m : g_pCompositor->m_vRealMonitors) { + for (auto const& m : g_pCompositor->m_realMonitors) { for (auto const& mgr : m_vManagers) { mgr->ensureMonitorSent(m); } diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index 0a93d332..b4868b56 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -242,7 +242,7 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra g_pInputManager->m_vConstraints.emplace_back(constraint); - if (g_pCompositor->m_pLastFocus == OWNER->resource()) + if (g_pCompositor->m_lastFocus == OWNER->resource()) constraint->activate(); } diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 11aa5957..8480e692 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -150,7 +150,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ lockedSWCursors = true; // TODO: make it per-monitor if (!PROTO::screencopy->m_bTimerArmed) { - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { g_pPointerManager->lockSoftwareForMonitor(m); } PROTO::screencopy->m_bTimerArmed = true; @@ -402,7 +402,7 @@ CScreencopyProtocol::CScreencopyProtocol(const wl_interface* iface, const int& v std::nullopt, [this](SP self, void* data) { // TODO: make it per-monitor - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { g_pPointerManager->unlockSoftwareForMonitor(m); } m_bTimerArmed = false; diff --git a/src/protocols/SecurityContext.cpp b/src/protocols/SecurityContext.cpp index 30fca260..8c4ff756 100644 --- a/src/protocols/SecurityContext.cpp +++ b/src/protocols/SecurityContext.cpp @@ -29,7 +29,7 @@ static void onSecurityContextClientDestroy(wl_listener* l, void* d) { } CSecurityContextSandboxedClient::CSecurityContextSandboxedClient(CFileDescriptor clientFD_) : clientFD(std::move(clientFD_)) { - client = wl_client_create(g_pCompositor->m_sWLDisplay, clientFD.get()); + client = wl_client_create(g_pCompositor->m_wlDisplay, clientFD.get()); if (!client) return; @@ -113,8 +113,8 @@ CSecurityContext::CSecurityContext(SP resource_, int liste LOGM(LOG, "security_context at 0x{:x} commits", (uintptr_t)this); - listenSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, listenFD.get(), WL_EVENT_READABLE, ::onListenFdEvent, this); - closeSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, closeFD.get(), 0, ::onCloseFdEvent, this); + listenSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, listenFD.get(), WL_EVENT_READABLE, ::onListenFdEvent, this); + closeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, closeFD.get(), 0, ::onCloseFdEvent, this); if (!listenSource || !closeSource) { r->noMemory(); diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index d87775e9..63ece928 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -50,8 +50,8 @@ CSessionLockSurface::CSessionLockSurface(SP resource_, pSurface->unmap(); listeners.surfaceCommit.reset(); listeners.surfaceDestroy.reset(); - if (g_pCompositor->m_pLastFocus == pSurface) - g_pCompositor->m_pLastFocus.reset(); + if (g_pCompositor->m_lastFocus == pSurface) + g_pCompositor->m_lastFocus.reset(); pSurface.reset(); }); diff --git a/src/protocols/ShortcutsInhibit.cpp b/src/protocols/ShortcutsInhibit.cpp index 5786de26..61669107 100644 --- a/src/protocols/ShortcutsInhibit.cpp +++ b/src/protocols/ShortcutsInhibit.cpp @@ -68,14 +68,14 @@ void CKeyboardShortcutsInhibitProtocol::onInhibit(CZwpKeyboardShortcutsInhibitMa } bool CKeyboardShortcutsInhibitProtocol::isInhibited() { - if (!g_pCompositor->m_pLastFocus) + if (!g_pCompositor->m_lastFocus) return false; - if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_pLastFocus.lock()); PWINDOW && PWINDOW->m_sWindowData.noShortcutsInhibit.valueOrDefault()) + if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); PWINDOW && PWINDOW->m_sWindowData.noShortcutsInhibit.valueOrDefault()) return false; for (auto const& in : m_vInhibitors) { - if (in->surface() != g_pCompositor->m_pLastFocus) + if (in->surface() != g_pCompositor->m_lastFocus) continue; return true; diff --git a/src/protocols/Tablet.cpp b/src/protocols/Tablet.cpp index 449fb576..843703f0 100644 --- a/src/protocols/Tablet.cpp +++ b/src/protocols/Tablet.cpp @@ -210,7 +210,7 @@ void CTabletToolV2Resource::queueFrame() { if (frameSource) return; - frameSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, [](void* data) { ((CTabletToolV2Resource*)data)->sendFrame(false); }, this); + frameSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, [](void* data) { ((CTabletToolV2Resource*)data)->sendFrame(false); }, this); } void CTabletToolV2Resource::sendFrame(bool removeSource) { diff --git a/src/protocols/TearingControl.cpp b/src/protocols/TearingControl.cpp index 16e85352..f78d365e 100644 --- a/src/protocols/TearingControl.cpp +++ b/src/protocols/TearingControl.cpp @@ -53,7 +53,7 @@ CTearingControl::CTearingControl(SP resource_, SPsetDestroy([this](CWpTearingControlV1* res) { PROTO::tearing->onControllerDestroy(this); }); resource->setSetPresentationHint([this](CWpTearingControlV1* res, wpTearingControlV1PresentationHint hint) { this->onHint(hint); }); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWLSurface->resource() == surf_) { pWindow = w; break; diff --git a/src/protocols/WaylandProtocol.cpp b/src/protocols/WaylandProtocol.cpp index 48bd6d2a..8eff80b0 100644 --- a/src/protocols/WaylandProtocol.cpp +++ b/src/protocols/WaylandProtocol.cpp @@ -21,7 +21,7 @@ void IWaylandProtocol::onDisplayDestroy() { } IWaylandProtocol::IWaylandProtocol(const wl_interface* iface, const int& ver, const std::string& name) : - m_szName(name), m_pGlobal(wl_global_create(g_pCompositor->m_sWLDisplay, iface, ver, this, &bindManagerInternal)) { + m_szName(name), m_pGlobal(wl_global_create(g_pCompositor->m_wlDisplay, iface, ver, this, &bindManagerInternal)) { if UNLIKELY (!m_pGlobal) { LOGM(ERR, "could not create a global [{}]", m_szName); @@ -31,7 +31,7 @@ IWaylandProtocol::IWaylandProtocol(const wl_interface* iface, const int& ver, co wl_list_init(&m_liDisplayDestroy.listener.link); m_liDisplayDestroy.listener.notify = displayDestroyInternal; m_liDisplayDestroy.parent = this; - wl_display_add_destroy_listener(g_pCompositor->m_sWLDisplay, &m_liDisplayDestroy.listener); + wl_display_add_destroy_listener(g_pCompositor->m_wlDisplay, &m_liDisplayDestroy.listener); LOGM(LOG, "Registered global [{}]", m_szName); } diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index 4170d4dd..449348b9 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -431,7 +431,7 @@ CXDGSurfaceResource::CXDGSurfaceResource(SP resource_, SPm_vWindows.emplace_back(CWindow::create(self.lock())); + g_pCompositor->m_windows.emplace_back(CWindow::create(self.lock())); for (auto const& p : popups) { if (!p) @@ -503,8 +503,8 @@ uint32_t CXDGSurfaceResource::scheduleConfigure() { if (configureSource) return scheduledSerial; - configureSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, onConfigure, this); - scheduledSerial = wl_display_next_serial(g_pCompositor->m_sWLDisplay); + configureSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, onConfigure, this); + scheduledSerial = wl_display_next_serial(g_pCompositor->m_wlDisplay); return scheduledSerial; } diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 2915be75..8ac5d31d 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -683,7 +683,7 @@ void CWLDataDeviceProtocol::updateDrag() { dnd.focusedDevice->sendDataOffer(offer); if (const auto WL = offer->getWayland(); WL) WL->sendData(); - dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_sWLDisplay), g_pSeatManager->state.dndPointerFocus.lock(), + dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->state.dndPointerFocus.lock(), g_pSeatManager->state.dndPointerFocus->current.size / 2.F, offer); } diff --git a/src/protocols/core/Output.cpp b/src/protocols/core/Output.cpp index 77f0661e..41e03e78 100644 --- a/src/protocols/core/Output.cpp +++ b/src/protocols/core/Output.cpp @@ -41,7 +41,7 @@ CWLOutputResource::CWLOutputResource(SP resource_, PHLMONITOR pMonito if (!GEOMETRY.has_value()) return; - for (auto& m : g_pCompositor->m_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { if (!m->logicalBox().expand(-4).overlaps(*GEOMETRY)) continue; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 4746f5b1..d3ac7962 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -260,7 +260,7 @@ EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { return EGL_NO_DEVICE_EXT; } -CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_iDRMFD) { +CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_drmFD) { const std::string EGLEXTENSIONS = (const char*)eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); Debug::log(LOG, "Supported EGL extensions: ({}) {}", std::count(EGLEXTENSIONS.begin(), EGLEXTENSIONS.end(), ' '), EGLEXTENSIONS); @@ -2083,7 +2083,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { }; bool hasWindows = false; - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == pMonitor->activeWorkspace && !w->isHidden() && w->m_bIsMapped && (!w->m_bIsFloating || *PBLURXRAY)) { // check if window is valid @@ -2095,7 +2095,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { } } - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { for (auto const& lsl : m->m_aLayerSurfaceLayers) { for (auto const& ls : lsl) { if (!ls->layerSurface || ls->xray != 1) @@ -2640,7 +2640,7 @@ void CHyprOpenGLImpl::renderSplash(cairo_t* const CAIRO, cairo_surface_t* const cairo_set_source_rgba(CAIRO, COLOR.r, COLOR.g, COLOR.b, COLOR.a); int textW = 0, textH = 0; - pango_layout_set_text(layoutText, g_pCompositor->m_szCurrentSplash.c_str(), -1); + pango_layout_set_text(layoutText, g_pCompositor->m_currentSplash.c_str(), -1); pango_layout_get_size(layoutText, &textW, &textH); textW /= PANGO_SCALE; textH /= PANGO_SCALE; @@ -2845,11 +2845,10 @@ void CHyprOpenGLImpl::initAssets() { m_pLockDeadTexture = loadAsset("lockdead.png"); m_pLockDead2Texture = loadAsset("lockdead2.png"); - m_pLockTtyTextTexture = renderText(std::format("Running on tty {}", - g_pCompositor->m_pAqBackend->hasSession() && g_pCompositor->m_pAqBackend->session->vt > 0 ? - std::to_string(g_pCompositor->m_pAqBackend->session->vt) : - "unknown"), - CHyprColor{0.9F, 0.9F, 0.9F, 0.7F}, 20, true); + m_pLockTtyTextTexture = renderText( + std::format("Running on tty {}", + g_pCompositor->m_aqBackend->hasSession() && g_pCompositor->m_aqBackend->session->vt > 0 ? std::to_string(g_pCompositor->m_aqBackend->session->vt) : "unknown"), + CHyprColor{0.9F, 0.9F, 0.9F, 0.7F}, 20, true); m_pScreencopyDeniedTexture = renderText("Permission denied to share screen", Colors::WHITE, 20); diff --git a/src/render/Renderbuffer.cpp b/src/render/Renderbuffer.cpp index 1ea9f785..c5e3b3a4 100644 --- a/src/render/Renderbuffer.cpp +++ b/src/render/Renderbuffer.cpp @@ -9,7 +9,7 @@ #include CRenderbuffer::~CRenderbuffer() { - if (!g_pCompositor || g_pCompositor->m_bIsShuttingDown || !g_pHyprRenderer) + if (!g_pCompositor || g_pCompositor->m_isShuttingDown || !g_pHyprRenderer) return; g_pHyprRenderer->makeEGLCurrent(); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 46905ab8..ffc4002e 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -54,8 +54,8 @@ static int cursorTicker(void* data) { } CHyprRenderer::CHyprRenderer() { - if (g_pCompositor->m_pAqBackend->hasSession()) { - for (auto const& dev : g_pCompositor->m_pAqBackend->session->sessionDevices) { + if (g_pCompositor->m_aqBackend->hasSession()) { + for (auto const& dev : g_pCompositor->m_aqBackend->session->sessionDevices) { const auto DRMV = drmGetVersion(dev->fd); if (!DRMV) continue; @@ -73,7 +73,7 @@ CHyprRenderer::CHyprRenderer() { } else { Debug::log(LOG, "Aq backend has no session, omitting full DRM node checks"); - const auto DRMV = drmGetVersion(g_pCompositor->m_iDRMFD); + const auto DRMV = drmGetVersion(g_pCompositor->m_drmFD); if (DRMV) { std::string name = std::string{DRMV->name, DRMV->name_len}; @@ -119,13 +119,13 @@ CHyprRenderer::CHyprRenderer() { g_pEventLoopManager->doLater([this]() { if (!g_pHyprError->active()) return; - for (auto& m : g_pCompositor->m_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { arrangeLayersForMonitor(m->ID); } }); }); - m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, cursorTicker, nullptr); + m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, cursorTicker, nullptr); wl_event_source_timer_update(m_pCursorTicker, 500); m_tRenderUnfocusedTimer = makeShared( @@ -148,7 +148,7 @@ CHyprRenderer::CHyprRenderer() { w->m_pWLSurface->resource()->frame(Time::steadyNow()); auto FEEDBACK = makeShared(w->m_pWLSurface->resource()); - FEEDBACK->attachMonitor(g_pCompositor->m_pLastMonitor.lock()); + FEEDBACK->attachMonitor(g_pCompositor->m_lastMonitor.lock()); FEEDBACK->discarded(); PROTO::presentation->queueData(FEEDBACK); } @@ -252,7 +252,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) { if (PWORKSPACE && PWORKSPACE->isVisible()) return true; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (PWORKSPACE && PWORKSPACE->m_pMonitor == m && (PWORKSPACE->m_vRenderOffset->isBeingAnimated() || PWORKSPACE->m_fAlpha->isBeingAnimated())) return true; @@ -269,7 +269,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS); // loop over the tiled windows that are fading out - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!shouldRenderWindow(w, pMonitor)) continue; @@ -286,7 +286,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR } // and floating ones too - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (!shouldRenderWindow(w, pMonitor)) continue; @@ -306,7 +306,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR } // TODO: this pass sucks - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { const auto PWORKSPACE = w->m_pWorkspace; if (w->m_pWorkspace != pWorkspace || !w->isFullscreen()) { @@ -339,7 +339,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR } // then render windows over fullscreen. - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace != pWorkspaceWindow->m_pWorkspace || !w->m_bIsFloating || (!w->m_bCreatedOverFullscreen && !w->m_bPinned) || (!w->m_bIsMapped && !w->m_bFadingOut) || w->isFullscreen()) continue; @@ -360,9 +360,9 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOWS); std::vector windows, tiledFadingOut; - windows.reserve(g_pCompositor->m_vWindows.size()); + windows.reserve(g_pCompositor->m_windows.size()); - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->isHidden() || (!w->m_bIsMapped && !w->m_bFadingOut)) continue; @@ -384,7 +384,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo continue; // render active window after all others of this pass - if (w == g_pCompositor->m_pLastWindow) { + if (w == g_pCompositor->m_lastWindow) { lastWindow = w.lock(); continue; } @@ -907,7 +907,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA renderWorkspaceWindows(pMonitor, pWorkspace, time); // and then special - for (auto const& ws : g_pCompositor->m_vWorkspaces) { + for (auto const& ws : g_pCompositor->m_workspaces) { if (ws->m_pMonitor == pMonitor && ws->m_fAlpha->value() > 0.f && ws->m_bIsSpecialWorkspace) { const auto SPECIALANIMPROGRS = ws->m_vRenderOffset->isBeingAnimated() ? ws->m_vRenderOffset->getCurveValue() : ws->m_fAlpha->getCurveValue(); const bool ANIMOUT = !pMonitor->activeSpecialWorkspace; @@ -935,7 +935,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA } // special - for (auto const& ws : g_pCompositor->m_vWorkspaces) { + for (auto const& ws : g_pCompositor->m_workspaces) { if (ws->m_fAlpha->value() > 0.f && ws->m_bIsSpecialWorkspace) { if (ws->m_bHasFullscreenWindow) renderWorkspaceWindowsFullscreen(pMonitor, ws, time); @@ -945,7 +945,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA } // pinned always above - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut) continue; @@ -1177,7 +1177,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (*PDEBUGOVERLAY == 1) g_pDebugOverlay->frameData(pMonitor); - if (!g_pCompositor->m_bSessionActive) + if (!g_pCompositor->m_sessionActive) return; if (pMonitor->ID == m_pMostHzMonitor->ID || @@ -1329,13 +1329,13 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { renderLockscreen(pMonitor, NOW, renderBox); - if (pMonitor == g_pCompositor->m_pLastMonitor) { + if (pMonitor == g_pCompositor->m_lastMonitor) { g_pHyprNotificationOverlay->draw(pMonitor); g_pHyprError->draw(); } // for drawing the debug overlay - if (pMonitor == g_pCompositor->m_vMonitors.front() && *PDEBUGOVERLAY == 1) { + if (pMonitor == g_pCompositor->m_monitors.front() && *PDEBUGOVERLAY == 1) { renderStartOverlay = std::chrono::high_resolution_clock::now(); g_pDebugOverlay->draw(); endRenderOverlay = std::chrono::high_resolution_clock::now(); @@ -1410,7 +1410,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { g_pDebugOverlay->renderData(pMonitor, durationUs); if (*PDEBUGOVERLAY == 1) { - if (pMonitor == g_pCompositor->m_vMonitors.front()) { + if (pMonitor == g_pCompositor->m_monitors.front()) { const float noOverlayUs = durationUs - std::chrono::duration_cast(endRenderOverlay - renderStartOverlay).count() / 1000.f; g_pDebugOverlay->renderDataNoOverlay(pMonitor, noOverlayUs); } else @@ -1591,7 +1591,7 @@ void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace } void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now) { - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w->isHidden() || !w->m_bIsMapped || w->m_bFadingOut || !w->m_pWLSurface->resource()) continue; @@ -1779,7 +1779,7 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) { CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; - if (g_pHyprError->active() && g_pCompositor->m_pLastMonitor == PMONITOR->self) { + if (g_pHyprError->active() && g_pCompositor->m_lastMonitor == PMONITOR->self) { const auto HEIGHT = g_pHyprError->height(); if (*BAR_POSITION == 0) { PMONITOR->vecReservedTopLeft.y = HEIGHT; @@ -1824,7 +1824,7 @@ void CHyprRenderer::damageSurface(SP pSurface, double x, dou if (!pSurface) return; // wut? - if (g_pCompositor->m_bUnsafeState) + if (g_pCompositor->m_unsafeState) return; const auto WLSURF = CWLSurface::fromResource(pSurface); @@ -1847,7 +1847,7 @@ void CHyprRenderer::damageSurface(SP pSurface, double x, dou CRegion damageBoxForEach; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!m->output) continue; @@ -1865,7 +1865,7 @@ void CHyprRenderer::damageSurface(SP pSurface, double x, dou } void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { - if (g_pCompositor->m_bUnsafeState) + if (g_pCompositor->m_unsafeState) return; CBox windowBox = pWindow->getFullWindowBoundingBox(); @@ -1874,7 +1874,7 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { windowBox.translate(PWINDOWWORKSPACE->m_vRenderOffset->value()); windowBox.translate(pWindow->m_vFloatingOffset); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (forceFull || shouldRenderWindow(pWindow, m)) { // only damage if window is rendered on monitor CBox fixedDamageBox = {windowBox.x - m->vecPosition.x, windowBox.y - m->vecPosition.y, windowBox.width, windowBox.height}; fixedDamageBox.scale(m->scale); @@ -1892,7 +1892,7 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { } void CHyprRenderer::damageMonitor(PHLMONITOR pMonitor) { - if (g_pCompositor->m_bUnsafeState || pMonitor->isMirror()) + if (g_pCompositor->m_unsafeState || pMonitor->isMirror()) return; CBox damageBox = {0, 0, INT16_MAX, INT16_MAX}; @@ -1905,10 +1905,10 @@ void CHyprRenderer::damageMonitor(PHLMONITOR pMonitor) { } void CHyprRenderer::damageBox(const CBox& box, bool skipFrameSchedule) { - if (g_pCompositor->m_bUnsafeState) + if (g_pCompositor->m_unsafeState) return; - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (m->isMirror()) continue; // don't damage mirrors traditionally @@ -2015,7 +2015,7 @@ void CHyprRenderer::ensureCursorRenderingMode() { if (HIDE) { Debug::log(LOG, "Hiding the cursor (hl-mandated)"); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!g_pPointerManager->softwareLockedFor(m)) continue; @@ -2027,7 +2027,7 @@ void CHyprRenderer::ensureCursorRenderingMode() { } else { Debug::log(LOG, "Showing the cursor (hl-mandated)"); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!g_pPointerManager->softwareLockedFor(m)) continue; @@ -2098,7 +2098,7 @@ static int handleCrashLoop(void* data) { void CHyprRenderer::initiateManualCrash() { g_pHyprNotificationOverlay->addNotification("Manual crash initiated. Farewell...", CHyprColor(0), 5000, ICON_INFO); - m_pCrashingLoop = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, handleCrashLoop, nullptr); + m_pCrashingLoop = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, handleCrashLoop, nullptr); wl_event_source_timer_update(m_pCrashingLoop, 1000); m_bCrashingInProgress = true; @@ -2143,7 +2143,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { return; } - for (auto const& w : g_pCompositor->m_vWindows) { + for (auto const& w : g_pCompositor->m_windows) { if (w == PCANDIDATE || (!w->m_bIsMapped && !w->m_bFadingOut) || w->isHidden()) continue; diff --git a/src/render/Texture.cpp b/src/render/Texture.cpp index fd5b682e..8c25bf30 100644 --- a/src/render/Texture.cpp +++ b/src/render/Texture.cpp @@ -8,7 +8,7 @@ CTexture::CTexture() = default; CTexture::~CTexture() { - if (!g_pCompositor || g_pCompositor->m_bIsShuttingDown || !g_pHyprRenderer) + if (!g_pCompositor || g_pCompositor->m_isShuttingDown || !g_pHyprRenderer) return; g_pHyprRenderer->makeEGLCurrent(); diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 54f6690e..4af6e449 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -132,7 +132,7 @@ void CHyprBorderDecoration::damageEntire() { CRegion borderRegion(surfaceBoxExpandedBorder); borderRegion.subtract(surfaceBoxShrunkRounding); - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!g_pHyprRenderer->shouldRenderWindow(m_pWindow.lock(), m)) { const CRegion monitorRegion({m->vecPosition, m->vecSize}); borderRegion.subtract(monitorRegion); diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index 60b1b33a..a9593c1f 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -66,7 +66,7 @@ void CHyprDropShadowDecoration::damageEntire() { shadowRegion.subtract(CRegion(surfaceBox)); } - for (auto const& m : g_pCompositor->m_vMonitors) { + for (auto const& m : g_pCompositor->m_monitors) { if (!g_pHyprRenderer->shouldRenderWindow(PWINDOW, m)) { const CRegion monitorRegion({m->vecPosition, m->vecSize}); shadowRegion.subtract(monitorRegion); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 8dff879b..50726514 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -151,7 +151,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE; - CHyprColor color = m_dwGroupMembers[WINDOWINDEX].lock() == g_pCompositor->m_pLastWindow.lock() ? PCOLACTIVE->m_colors[0] : PCOLINACTIVE->m_colors[0]; + CHyprColor color = m_dwGroupMembers[WINDOWINDEX].lock() == g_pCompositor->m_lastWindow.lock() ? PCOLACTIVE->m_colors[0] : PCOLINACTIVE->m_colors[0]; color.a *= a; if (!rect.empty()) { @@ -192,8 +192,8 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (!rect.empty()) { if (*PGRADIENTS) { - const auto GRADIENTTEX = (m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_pLastWindow ? (GROUPLOCKED ? m_tGradientLockedActive : m_tGradientActive) : - (GROUPLOCKED ? m_tGradientLockedInactive : m_tGradientInactive)); + const auto GRADIENTTEX = (m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? (GROUPLOCKED ? m_tGradientLockedActive : m_tGradientActive) : + (GROUPLOCKED ? m_tGradientLockedInactive : m_tGradientInactive)); if (GRADIENTTEX->m_iTexID) { CTexPassElement::SRenderData data; data.tex = GRADIENTTEX; @@ -289,10 +289,10 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float static void renderGradientTo(SP tex, CGradientValueData* grad) { - if (!g_pCompositor->m_pLastMonitor) + if (!g_pCompositor->m_lastMonitor) return; - const Vector2D& bufferSize = g_pCompositor->m_pLastMonitor->vecPixelSize; + const Vector2D& bufferSize = g_pCompositor->m_lastMonitor->vecPixelSize; const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, bufferSize.x, bufferSize.y); const auto CAIRO = cairo_create(CAIROSURFACE); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 60c1bc30..16d94785 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -186,7 +186,7 @@ CRegion CRenderPass::render(const CRegion& damage_) { if (*PDEBUGPASS) { renderDebugData(); g_pEventLoopManager->doLater([] { - for (auto& m : g_pCompositor->m_vMonitors) { + for (auto& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); } }); @@ -240,8 +240,8 @@ void CRenderPass::renderDebugData() { renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); renderHLSurface(debugData.pointerFocusText, g_pSeatManager->state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); - if (g_pCompositor->m_pLastWindow) - renderHLSurface(debugData.lastWindowText, g_pCompositor->m_pLastWindow->m_pWLSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); + if (g_pCompositor->m_lastWindow) + renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_pWLSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); if (g_pSeatManager->state.pointerFocus) { if (g_pSeatManager->state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->state.pointerFocus->current.size}).getExtents().size() != diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp index b4f05ac6..a2e0e9fa 100644 --- a/src/xwayland/Server.cpp +++ b/src/xwayland/Server.cpp @@ -286,7 +286,7 @@ bool CXWaylandServer::create() { // TODO: lazy mode - idleSource = wl_event_loop_add_idle(g_pCompositor->m_sWLEventLoop, ::startServer, nullptr); + idleSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, ::startServer, nullptr); return true; } @@ -345,7 +345,7 @@ bool CXWaylandServer::start() { return false; } - xwaylandClient = wl_client_create(g_pCompositor->m_sWLDisplay, waylandFDs[0].get()); + xwaylandClient = wl_client_create(g_pCompositor->m_wlDisplay, waylandFDs[0].get()); if (!xwaylandClient) { Debug::log(ERR, "wl_client_create failed"); die(); @@ -369,7 +369,7 @@ bool CXWaylandServer::start() { return false; } - pipeSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, notifyFds[0].get(), WL_EVENT_READABLE, ::xwaylandReady, nullptr); + pipeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, notifyFds[0].get(), WL_EVENT_READABLE, ::xwaylandReady, nullptr); pipeFd = std::move(notifyFds[0]); auto serverPID = fork(); diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 54109e53..f0fad928 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -45,7 +45,7 @@ void CXWM::handleCreate(xcb_create_notify_event_t* e) { Debug::log(LOG, "[xwm] New XSurface at {:x} with xid of {}", (uintptr_t)XSURF.get(), e->window); const auto WINDOW = CWindow::create(XSURF); - g_pCompositor->m_vWindows.emplace_back(WINDOW); + g_pCompositor->m_windows.emplace_back(WINDOW); WINDOW->m_pSelf = WINDOW; Debug::log(LOG, "[xwm] New XWayland window at {:x} for surf {:x}", (uintptr_t)WINDOW.get(), (uintptr_t)XSURF.get()); } @@ -933,7 +933,7 @@ CXWM::CXWM() : connection(g_pXWayland->pServer->xwmFDs[0].get()) { xcb_screen_iterator_t screen_iterator = xcb_setup_roots_iterator(xcb_get_setup(connection)); screen = screen_iterator.data; - eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, g_pXWayland->pServer->xwmFDs[0].get(), WL_EVENT_READABLE, ::onX11Event, nullptr); + eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, g_pXWayland->pServer->xwmFDs[0].get(), WL_EVENT_READABLE, ::onX11Event, nullptr); wl_event_source_check(eventSource); gatherResources(); @@ -1000,7 +1000,7 @@ void CXWM::activateSurface(SP surf, bool activate) { if ((surf == focusedSurface && activate) || (surf && surf->overrideRedirect)) return; - if (!surf || (!activate && g_pCompositor->m_pLastWindow && !g_pCompositor->m_pLastWindow->m_bIsX11)) { + if (!surf || (!activate && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_bIsX11)) { setActiveWindow((uint32_t)XCB_WINDOW_NONE); focusWindow(nullptr); } else { @@ -1270,7 +1270,7 @@ void CXWM::getTransferData(SXSelection& sel) { auto& updatedTransfer = *newIt; if (updatedTransfer->eventSource && updatedTransfer->wlFD.get() != -1) - updatedTransfer->eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, updatedTransfer->wlFD.get(), WL_EVENT_WRITABLE, ::writeDataSource, &sel); + updatedTransfer->eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, updatedTransfer->wlFD.get(), WL_EVENT_WRITABLE, ::writeDataSource, &sel); } void CXWM::setCursor(unsigned char* pixData, uint32_t stride, const Vector2D& size, const Vector2D& hotspot) { @@ -1444,7 +1444,7 @@ bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) { selection->send(mime, CFileDescriptor{p[1]}); - transfer->eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, transfer->wlFD.get(), WL_EVENT_READABLE, ::readDataSource, this); + transfer->eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, transfer->wlFD.get(), WL_EVENT_READABLE, ::readDataSource, this); transfers.emplace_back(std::move(transfer)); return true; diff --git a/src/xwayland/XWayland.cpp b/src/xwayland/XWayland.cpp index 9d2a0ea4..041cf87c 100644 --- a/src/xwayland/XWayland.cpp +++ b/src/xwayland/XWayland.cpp @@ -8,7 +8,7 @@ CXWayland::CXWayland(const bool wantsEnabled) { // Disable Xwayland and clean up if the user disabled it. if (!wantsEnabled) { Debug::log(LOG, "XWayland has been disabled, cleaning up..."); - for (auto& w : g_pCompositor->m_vWindows) { + for (auto& w : g_pCompositor->m_windows) { if (!w->m_bIsX11) continue; g_pCompositor->closeWindow(w); From b06fbdb7431aa2b6653d788ad9fb758478c72d4c Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 23 Apr 2025 22:31:14 +0100 Subject: [PATCH 0099/1077] dwindle: use idealIgnoreReserved for moveWindowTo bbs fixes #10005 --- src/layout/DwindleLayout.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index ba4370e5..7e823f88 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -816,18 +816,20 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, const auto originalWorkspaceID = pWindow->workspaceID(); const Vector2D originalPos = pWindow->middle(); - if (!PNODE) + if (!PNODE || !pWindow->m_pMonitor) return; - Vector2D focalPoint; + Vector2D focalPoint; + + const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{pWindow->m_pMonitor->vecPosition, pWindow->m_pMonitor->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); switch (dir[0]) { case 't': - case 'u': focalPoint = pWindow->m_vPosition + Vector2D{pWindow->m_vSize.x / 2.0, -1.0}; break; + case 'u': focalPoint = WINDOWIDEALBB.pos() + Vector2D{WINDOWIDEALBB.size().x / 2.0, -1.0}; break; case 'd': - case 'b': focalPoint = pWindow->m_vPosition + Vector2D{pWindow->m_vSize.x / 2.0, pWindow->m_vSize.y + 1.0}; break; - case 'l': focalPoint = pWindow->m_vPosition + Vector2D{-1.0, pWindow->m_vSize.y / 2.0}; break; - case 'r': focalPoint = pWindow->m_vPosition + Vector2D{pWindow->m_vSize.x + 1.0, pWindow->m_vSize.y / 2.0}; break; + case 'b': focalPoint = WINDOWIDEALBB.pos() + Vector2D{WINDOWIDEALBB.size().x / 2.0, WINDOWIDEALBB.size().y + 1.0}; break; + case 'l': focalPoint = WINDOWIDEALBB.pos() + Vector2D{-1.0, WINDOWIDEALBB.size().y / 2.0}; break; + case 'r': focalPoint = WINDOWIDEALBB.pos() + Vector2D{WINDOWIDEALBB.size().x + 1.0, WINDOWIDEALBB.size().y / 2.0}; break; default: UNREACHABLE(); } From a9549dbca060b65ae6ec50f9bc68cdf1823d6cbe Mon Sep 17 00:00:00 2001 From: WhySoBad <49595640+WhySoBad@users.noreply.github.com> Date: Thu, 24 Apr 2025 18:10:57 +0200 Subject: [PATCH 0100/1077] protocols: add Hyprland toplevel mapping implementation (#9775) --- CMakeLists.txt | 3 +- protocols/meson.build | 3 +- src/managers/ProtocolManager.cpp | 4 ++ src/protocols/ForeignToplevel.cpp | 7 +++ src/protocols/ForeignToplevel.hpp | 3 ++ src/protocols/ForeignToplevelWlr.cpp | 12 ++--- src/protocols/ToplevelMapping.cpp | 78 ++++++++++++++++++++++++++++ src/protocols/ToplevelMapping.hpp | 46 ++++++++++++++++ subprojects/hyprland-protocols | 2 +- 9 files changed, 147 insertions(+), 11 deletions(-) create mode 100644 src/protocols/ToplevelMapping.cpp create mode 100644 src/protocols/ToplevelMapping.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index bd5e96b3..54048a44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -316,7 +316,7 @@ endfunction() target_link_libraries(Hyprland OpenGL::EGL OpenGL::GL Threads::Threads) -pkg_check_modules(hyprland_protocols_dep hyprland-protocols>=0.6.2) +pkg_check_modules(hyprland_protocols_dep hyprland-protocols>=0.6.4) if(hyprland_protocols_dep_FOUND) pkg_get_variable(HYPRLAND_PROTOCOLS hyprland-protocols pkgdatadir) message(STATUS "hyprland-protocols dependency set to ${HYPRLAND_PROTOCOLS}") @@ -348,6 +348,7 @@ protocolnew("protocols" "wayland-drm" true) protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-ctm-control-v1" true) protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-surface-v1" true) protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-lock-notify-v1" true) +protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-toplevel-mapping-v1" true) protocolnew("staging/tearing-control" "tearing-control-v1" false) protocolnew("staging/fractional-scale" "fractional-scale-v1" false) diff --git a/protocols/meson.build b/protocols/meson.build index e4f18234..a0cad39b 100644 --- a/protocols/meson.build +++ b/protocols/meson.build @@ -7,7 +7,7 @@ wayland_protos = dependency( hyprland_protos = dependency( 'hyprland-protocols', - version: '>=0.6.2', + version: '>=0.6.4', fallback: 'hyprland-protocols', ) @@ -37,6 +37,7 @@ protocols = [ 'frog-color-management-v1.xml', hyprland_protocol_dir / 'protocols/hyprland-global-shortcuts-v1.xml', hyprland_protocol_dir / 'protocols/hyprland-toplevel-export-v1.xml', + hyprland_protocol_dir / 'protocols/hyprland-toplevel-mapping-v1.xml', hyprland_protocol_dir / 'protocols/hyprland-focus-grab-v1.xml', hyprland_protocol_dir / 'protocols/hyprland-ctm-control-v1.xml', hyprland_protocol_dir / 'protocols/hyprland-surface-v1.xml', diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index cbe1d4b1..8ebe8010 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -42,6 +42,7 @@ #include "../protocols/DRMSyncobj.hpp" #include "../protocols/Screencopy.hpp" #include "../protocols/ToplevelExport.hpp" +#include "../protocols/ToplevelMapping.hpp" #include "../protocols/TextInputV1.hpp" #include "../protocols/GlobalShortcuts.hpp" #include "../protocols/XDGDialog.hpp" @@ -68,6 +69,7 @@ #include #include +#include // ******************************************************************************************** // * IMPORTANT: make sure to .reset() any protocol UP's you create! (put reset in destructor) * @@ -175,6 +177,7 @@ CProtocolManager::CProtocolManager() { PROTO::xwaylandShell = makeUnique(&xwayland_shell_v1_interface, 1, "XWaylandShell"); PROTO::screencopy = makeUnique(&zwlr_screencopy_manager_v1_interface, 3, "Screencopy"); PROTO::toplevelExport = makeUnique(&hyprland_toplevel_export_manager_v1_interface, 2, "ToplevelExport"); + PROTO::toplevelMapping = makeUnique(&hyprland_toplevel_mapping_manager_v1_interface, 1, "ToplevelMapping"); PROTO::globalShortcuts = makeUnique(&hyprland_global_shortcuts_manager_v1_interface, 1, "GlobalShortcuts"); PROTO::xdgDialog = makeUnique(&xdg_wm_dialog_v1_interface, 1, "XDGDialog"); PROTO::singlePixel = makeUnique(&wp_single_pixel_buffer_manager_v1_interface, 1, "SinglePixel"); @@ -262,6 +265,7 @@ CProtocolManager::~CProtocolManager() { PROTO::xwaylandShell.reset(); PROTO::screencopy.reset(); PROTO::toplevelExport.reset(); + PROTO::toplevelMapping.reset(); PROTO::globalShortcuts.reset(); PROTO::xdgDialog.reset(); PROTO::singlePixel.reset(); diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index 16465763..e6c026d6 100644 --- a/src/protocols/ForeignToplevel.cpp +++ b/src/protocols/ForeignToplevel.cpp @@ -6,6 +6,8 @@ CForeignToplevelHandle::CForeignToplevelHandle(SP r if UNLIKELY (!resource_->resource()) return; + resource->setData(this); + resource->setOnDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); resource->setDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); } @@ -168,3 +170,8 @@ void CForeignToplevelProtocol::destroyHandle(CForeignToplevelHandle* handle) { bool CForeignToplevelProtocol::windowValidForForeign(PHLWINDOW pWindow) { return validMapped(pWindow) && !pWindow->isX11OverrideRedirect(); } + +PHLWINDOW CForeignToplevelProtocol::windowFromHandleResource(wl_resource* res) { + auto data = (CForeignToplevelHandle*)(((CExtForeignToplevelHandleV1*)wl_resource_get_user_data(res))->data()); + return data ? data->window() : nullptr; +} diff --git a/src/protocols/ForeignToplevel.hpp b/src/protocols/ForeignToplevel.hpp index 712b32e0..2136748b 100644 --- a/src/protocols/ForeignToplevel.hpp +++ b/src/protocols/ForeignToplevel.hpp @@ -3,6 +3,7 @@ #include #include #include "WaylandProtocol.hpp" +#include "desktop/DesktopTypes.hpp" #include "ext-foreign-toplevel-list-v1.hpp" class CForeignToplevelHandle { @@ -18,6 +19,7 @@ class CForeignToplevelHandle { bool closed = false; friend class CForeignToplevelList; + friend class CForeignToplevelProtocol; }; class CForeignToplevelList { @@ -43,6 +45,7 @@ class CForeignToplevelList { class CForeignToplevelProtocol : public IWaylandProtocol { public: CForeignToplevelProtocol(const wl_interface* iface, const int& ver, const std::string& name); + PHLWINDOW windowFromHandleResource(wl_resource* res); virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index b4210bac..f1f32d7e 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -10,6 +10,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPresource()) return; + resource->setData(this); + resource->setOnDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); resource->setDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); @@ -420,14 +422,8 @@ void CForeignToplevelWlrProtocol::destroyHandle(CForeignToplevelHandleWlr* handl } PHLWINDOW CForeignToplevelWlrProtocol::windowFromHandleResource(wl_resource* res) { - for (auto const& h : m_vHandles) { - if (h->res() != res) - continue; - - return h->window(); - } - - return nullptr; + auto data = (CForeignToplevelHandleWlr*)(((CZwlrForeignToplevelHandleV1*)wl_resource_get_user_data(res))->data()); + return data ? data->window() : nullptr; } bool CForeignToplevelWlrProtocol::windowValidForForeign(PHLWINDOW pWindow) { diff --git a/src/protocols/ToplevelMapping.cpp b/src/protocols/ToplevelMapping.cpp new file mode 100644 index 00000000..e65695c8 --- /dev/null +++ b/src/protocols/ToplevelMapping.cpp @@ -0,0 +1,78 @@ +#include "ToplevelMapping.hpp" +#include "hyprland-toplevel-mapping-v1.hpp" +#include "ForeignToplevelWlr.hpp" +#include "ForeignToplevel.hpp" + +CToplevelWindowMappingHandle::CToplevelWindowMappingHandle(SP resource_) : resource(resource_) {} + +CToplevelMappingManager::CToplevelMappingManager(SP resource_) : resource(resource_) { + if UNLIKELY (!resource_->resource()) + return; + + resource->setOnDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); + resource->setDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); + + resource->setGetWindowForToplevel([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { + const auto NEWHANDLE = PROTO::toplevelMapping->m_vHandles.emplace_back( + makeShared(makeShared(resource->client(), resource->version(), handle))); + + if UNLIKELY (!NEWHANDLE->resource->resource()) { + LOGM(ERR, "Couldn't alloc mapping handle! (no memory)"); + resource->noMemory(); + return; + } + + NEWHANDLE->resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + + const auto WINDOW = PROTO::foreignToplevel->windowFromHandleResource(toplevel); + if (!WINDOW) + NEWHANDLE->resource->sendFailed(); + else + NEWHANDLE->resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); + }); + resource->setGetWindowForToplevelWlr([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { + const auto NEWHANDLE = PROTO::toplevelMapping->m_vHandles.emplace_back( + makeShared(makeShared(resource->client(), resource->version(), handle))); + + if UNLIKELY (!NEWHANDLE->resource->resource()) { + LOGM(ERR, "Couldn't alloc mapping handle! (no memory)"); + resource->noMemory(); + return; + } + + NEWHANDLE->resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + + const auto WINDOW = PROTO::foreignToplevelWlr->windowFromHandleResource(toplevel); + if (!WINDOW) + NEWHANDLE->resource->sendFailed(); + else + NEWHANDLE->resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); + }); +} + +bool CToplevelMappingManager::good() const { + return resource->resource(); +} + +CToplevelMappingProtocol::CToplevelMappingProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {} + +void CToplevelMappingProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { + const auto RESOURCE = m_vManagers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); + + if UNLIKELY (!RESOURCE->good()) { + LOGM(ERR, "Couldn't create a toplevel mapping manager"); + wl_client_post_no_memory(client); + m_vManagers.pop_back(); + return; + } +} + +void CToplevelMappingProtocol::onManagerResourceDestroy(CToplevelMappingManager* mgr) { + std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == mgr; }); +} + +void CToplevelMappingProtocol::destroyHandle(CHyprlandToplevelWindowMappingHandleV1* handle) { + std::erase_if(m_vHandles, [&](const auto& other) { return other->resource.get() == handle; }); +} \ No newline at end of file diff --git a/src/protocols/ToplevelMapping.hpp b/src/protocols/ToplevelMapping.hpp new file mode 100644 index 00000000..ffe94b14 --- /dev/null +++ b/src/protocols/ToplevelMapping.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include "WaylandProtocol.hpp" +#include "hyprland-toplevel-mapping-v1.hpp" + +class CToplevelWindowMappingHandle { + public: + CToplevelWindowMappingHandle(SP resource_); + + private: + SP resource; + + friend class CToplevelMappingManager; + friend class CToplevelMappingProtocol; +}; + +class CToplevelMappingManager { + public: + CToplevelMappingManager(SP resource_); + + bool good() const; + + private: + SP resource; +}; + +class CToplevelMappingProtocol : IWaylandProtocol { + public: + CToplevelMappingProtocol(const wl_interface* iface, const int& ver, const std::string& name); + + virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); + + private: + void onManagerResourceDestroy(CToplevelMappingManager* mgr); + void destroyHandle(CHyprlandToplevelWindowMappingHandleV1* handle); + + std::vector> m_vManagers; + std::vector> m_vHandles; + + friend class CToplevelMappingManager; +}; + +namespace PROTO { + inline UP toplevelMapping; +}; \ No newline at end of file diff --git a/subprojects/hyprland-protocols b/subprojects/hyprland-protocols index 755aef8d..3a5c2bda 160000 --- a/subprojects/hyprland-protocols +++ b/subprojects/hyprland-protocols @@ -1 +1 @@ -Subproject commit 755aef8dab49d0fc4663c715fa4ad221b2aedaed +Subproject commit 3a5c2bda1c1a4e55cc1330c782547695a93f05b2 From be6268a7ecea2ad50cdb78fb661884811a8a28e8 Mon Sep 17 00:00:00 2001 From: M Matthew Hydock Date: Thu, 24 Apr 2025 14:48:08 -0400 Subject: [PATCH 0101/1077] groupbar: Add options for setting group bar title font weight (and indicator gap) (#9617) --- src/config/ConfigDataValues.hpp | 46 +++++++++++++++++-- src/config/ConfigDescriptions.hpp | 18 ++++++++ src/config/ConfigManager.cpp | 25 ++++++++++ src/render/OpenGL.cpp | 6 +-- src/render/OpenGL.hpp | 42 ++++++++--------- .../decorations/CHyprGroupBarDecoration.cpp | 36 +++++++++------ .../decorations/CHyprGroupBarDecoration.hpp | 4 +- 7 files changed, 134 insertions(+), 43 deletions(-) diff --git a/src/config/ConfigDataValues.hpp b/src/config/ConfigDataValues.hpp index 270f6880..2fad9277 100644 --- a/src/config/ConfigDataValues.hpp +++ b/src/config/ConfigDataValues.hpp @@ -2,11 +2,13 @@ #include "../defines.hpp" #include "../helpers/varlist/VarList.hpp" #include +#include enum eConfigValueDataTypes : int8_t { - CVD_TYPE_INVALID = -1, - CVD_TYPE_GRADIENT = 0, - CVD_TYPE_CSS_VALUE = 1 + CVD_TYPE_INVALID = -1, + CVD_TYPE_GRADIENT = 0, + CVD_TYPE_CSS_VALUE = 1, + CVD_TYPE_FONT_WEIGHT = 2, }; class ICustomConfigValueData { @@ -136,3 +138,41 @@ class CCssGapData : public ICustomConfigValueData { return std::format("{} {} {} {}", m_top, m_right, m_bottom, m_left); } }; + +class CFontWeightConfigValueData : public ICustomConfigValueData { + public: + CFontWeightConfigValueData() = default; + CFontWeightConfigValueData(const char* weight) { + parseWeight(weight); + } + + int64_t m_value = 400; // default to normal weight + + virtual eConfigValueDataTypes getDataType() { + return CVD_TYPE_FONT_WEIGHT; + } + + virtual std::string toString() { + return std::format("{}", m_value); + } + + void parseWeight(const std::string& strWeight) { + auto lcWeight{strWeight}; + transform(strWeight.begin(), strWeight.end(), lcWeight.begin(), ::tolower); + + // values taken from Pango weight enums + const auto WEIGHTS = std::map{ + {"thin", 100}, {"ultralight", 200}, {"light", 300}, {"semilight", 350}, {"book", 380}, {"normal", 400}, + {"medium", 500}, {"semibold", 600}, {"bold", 700}, {"ultrabold", 800}, {"heavy", 900}, {"ultraheavy", 1000}, + }; + + auto weight = WEIGHTS.find(lcWeight); + if (weight != WEIGHTS.end()) + m_value = weight->second; + else { + int w_i = std::stoi(strWeight); + if (w_i < 100 || w_i > 1000) + m_value = 400; + } + } +}; diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 78b9f559..236f4d6e 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -897,6 +897,18 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_STRING_SHORT, .data = SConfigOptionDescription::SStringData{STRVAL_EMPTY}, //##TODO UNSET? }, + SConfigOptionDescription{ + .value = "group:groupbar:font_weight_active", + .description = "weight of the font used to display active groupbar titles", + .type = CONFIG_OPTION_STRING_SHORT, + .data = SConfigOptionDescription::SStringData{"normal"}, + }, + SConfigOptionDescription{ + .value = "group:groupbar:font_weight_inactive", + .description = "weight of the font used to display inactive groupbar titles", + .type = CONFIG_OPTION_STRING_SHORT, + .data = SConfigOptionDescription::SStringData{"normal"}, + }, SConfigOptionDescription{ .value = "group:groupbar:font_size", .description = "font size of groupbar title", @@ -915,6 +927,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_INT, .data = SConfigOptionDescription::SRangeData{14, 1, 64}, }, + SConfigOptionDescription{ + .value = "group:groupbar:indicator_gap", + .description = "height of the gap between the groupbar indicator and title", + .type = CONFIG_OPTION_INT, + .data = SConfigOptionDescription::SRangeData{0, 0, 64}, + }, SConfigOptionDescription{ .value = "group:groupbar:indicator_height", .description = "height of the groupbar indicator", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 4bd00c99..f609eeb4 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -147,6 +147,28 @@ static void configHandleGapDestroy(void** data) { delete reinterpret_cast(*data); } +static Hyprlang::CParseResult configHandleFontWeightSet(const char* VALUE, void** data) { + if (!*data) + *data = new CFontWeightConfigValueData(); + + const auto DATA = reinterpret_cast(*data); + Hyprlang::CParseResult result; + + try { + DATA->parseWeight(VALUE); + } catch (...) { + std::string parseError = std::format("{} is not a valid font weight", VALUE); + result.setError(parseError.c_str()); + } + + return result; +} + +static void configHandleFontWeightDestroy(void** data) { + if (*data) + delete reinterpret_cast(*data); +} + static Hyprlang::CParseResult handleExec(const char* c, const char* v) { const std::string VALUE = v; const std::string COMMAND = c; @@ -485,9 +507,12 @@ CConfigManager::CConfigManager() { registerConfigVar("group:group_on_movetoworkspace", Hyprlang::INT{0}); registerConfigVar("group:groupbar:enabled", Hyprlang::INT{1}); registerConfigVar("group:groupbar:font_family", {STRVAL_EMPTY}); + registerConfigVar("group:groupbar:font_weight_active", Hyprlang::CConfigCustomValueType{&configHandleFontWeightSet, configHandleFontWeightDestroy, "normal"}); + registerConfigVar("group:groupbar:font_weight_inactive", Hyprlang::CConfigCustomValueType{&configHandleFontWeightSet, configHandleFontWeightDestroy, "normal"}); registerConfigVar("group:groupbar:font_size", Hyprlang::INT{8}); registerConfigVar("group:groupbar:gradients", Hyprlang::INT{0}); registerConfigVar("group:groupbar:height", Hyprlang::INT{14}); + registerConfigVar("group:groupbar:indicator_gap", Hyprlang::INT{0}); registerConfigVar("group:groupbar:indicator_height", Hyprlang::INT{3}); registerConfigVar("group:groupbar:priority", Hyprlang::INT{3}); registerConfigVar("group:groupbar:render_titles", Hyprlang::INT{1}); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index d3ac7962..3e9348d6 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2714,7 +2714,7 @@ SP CHyprOpenGLImpl::loadAsset(const std::string& filename) { return tex; } -SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col, int pt, bool italic, const std::string& fontFamily, int maxWidth) { +SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col, int pt, bool italic, const std::string& fontFamily, int maxWidth, int weight) { SP tex = makeShared(); static auto FONT = CConfigValue("misc:font_family"); @@ -2732,7 +2732,7 @@ SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col pango_font_description_set_family_static(pangoFD, FONTFAMILY.c_str()); pango_font_description_set_absolute_size(pangoFD, FONTSIZE * PANGO_SCALE); pango_font_description_set_style(pangoFD, italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); - pango_font_description_set_weight(pangoFD, PANGO_WEIGHT_NORMAL); + pango_font_description_set_weight(pangoFD, static_cast(weight)); pango_layout_set_font_description(layoutText, pangoFD); cairo_set_source_rgba(CAIRO, COLOR.r, COLOR.g, COLOR.b, COLOR.a); @@ -2763,7 +2763,7 @@ SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col pango_font_description_set_family_static(pangoFD, FONTFAMILY.c_str()); pango_font_description_set_absolute_size(pangoFD, FONTSIZE * PANGO_SCALE); pango_font_description_set_style(pangoFD, italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); - pango_font_description_set_weight(pangoFD, PANGO_WEIGHT_NORMAL); + pango_font_description_set_weight(pangoFD, static_cast(weight)); pango_layout_set_font_description(layoutText, pangoFD); pango_layout_set_text(layoutText, text.c_str(), -1); diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 276d5268..414ba103 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -224,35 +224,35 @@ class CHyprOpenGLImpl { void renderOffToMain(CFramebuffer* off); void bindBackOnMain(); - SP loadAsset(const std::string& file); - SP renderText(const std::string& text, CHyprColor col, int pt, bool italic = false, const std::string& fontFamily = "", int maxWidth = 0); + SP loadAsset(const std::string& file); + SP renderText(const std::string& text, CHyprColor col, int pt, bool italic = false, const std::string& fontFamily = "", int maxWidth = 0, int weight = 400); - void setDamage(const CRegion& damage, std::optional finalDamage = {}); + void setDamage(const CRegion& damage, std::optional finalDamage = {}); - void ensureBackgroundTexturePresence(); + void ensureBackgroundTexturePresence(); - uint32_t getPreferredReadFormat(PHLMONITOR pMonitor); - std::vector getDRMFormats(); - EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); - SP createEGLSync(int fence = -1); + uint32_t getPreferredReadFormat(PHLMONITOR pMonitor); + std::vector getDRMFormats(); + EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); + SP createEGLSync(int fence = -1); - bool initShaders(); - bool m_bShadersInitialized = false; - SP m_shaders; + bool initShaders(); + bool m_bShadersInitialized = false; + SP m_shaders; - SCurrentRenderData m_RenderData; + SCurrentRenderData m_RenderData; - Hyprutils::OS::CFileDescriptor m_iGBMFD; - gbm_device* m_pGbmDevice = nullptr; - EGLContext m_pEglContext = nullptr; - EGLDisplay m_pEglDisplay = nullptr; - EGLDeviceEXT m_pEglDevice = nullptr; - uint failedAssetsNo = 0; + Hyprutils::OS::CFileDescriptor m_iGBMFD; + gbm_device* m_pGbmDevice = nullptr; + EGLContext m_pEglContext = nullptr; + EGLDisplay m_pEglDisplay = nullptr; + EGLDeviceEXT m_pEglDevice = nullptr; + uint failedAssetsNo = 0; - bool m_bReloadScreenShader = true; // at launch it can be set + bool m_bReloadScreenShader = true; // at launch it can be set - std::map m_mWindowFramebuffers; - std::map m_mLayerFramebuffers; + std::map m_mWindowFramebuffers; + std::map m_mLayerFramebuffers; std::map m_mMonitorRenderResources; std::map m_mMonitorBGFBs; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 50726514..7eca6d69 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -27,6 +27,7 @@ CHyprGroupBarDecoration::CHyprGroupBarDecoration(PHLWINDOW pWindow) : IHyprWindo SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { static auto PHEIGHT = CConfigValue("group:groupbar:height"); + static auto PINDICATORGAP = CConfigValue("group:groupbar:indicator_gap"); static auto PINDICATORHEIGHT = CConfigValue("group:groupbar:indicator_height"); static auto PENABLED = CConfigValue("group:groupbar:enabled"); static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); @@ -44,10 +45,10 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { if (*PENABLED && m_pWindow->m_sWindowData.decorate.valueOrDefault()) { if (*PSTACKED) { - const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); + const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + (*PKEEPUPPERGAP * *POUTERGAP)}, {0, 0}}; } else - info.desiredExtents = {{0, *POUTERGAP * (1 + *PKEEPUPPERGAP) + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}, {0, 0}}; + info.desiredExtents = {{0, *POUTERGAP * (1 + *PKEEPUPPERGAP) + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}, {0, 0}}; } else info.desiredExtents = {{0, 0}, {0, 0}}; return info; @@ -105,6 +106,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); static auto PTITLEFONTSIZE = CConfigValue("group:groupbar:font_size"); static auto PHEIGHT = CConfigValue("group:groupbar:height"); + static auto PINDICATORGAP = CConfigValue("group:groupbar:indicator_gap"); static auto PINDICATORHEIGHT = CConfigValue("group:groupbar:indicator_height"); static auto PGRADIENTS = CConfigValue("group:groupbar:gradients"); static auto PSTACKED = CConfigValue("group:groupbar:stacked"); @@ -127,7 +129,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { const auto ASSIGNEDBOX = assignedBoxGlobal(); - const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); + const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); m_fBarWidth = *PSTACKED ? ASSIGNEDBOX.w : (ASSIGNEDBOX.w - *PINNERGAP * (barsToDraw - 1)) / barsToDraw; m_fBarHeight = *PSTACKED ? ((ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP) - *POUTERGAP * (barsToDraw)) / barsToDraw : ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP; @@ -141,7 +143,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { for (int i = 0; i < barsToDraw; ++i) { const auto WINDOWINDEX = *PSTACKED ? m_dwGroupMembers.size() - i - 1 : i; - CBox rect = {ASSIGNEDBOX.x + floor(xoff) - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, + CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->vecPosition.y + m_pWindow->m_vFloatingOffset.y, m_fBarWidth, *PINDICATORHEIGHT}; @@ -185,7 +187,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); } - rect = {ASSIGNEDBOX.x + floor(xoff) - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, + rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->vecPosition.y + m_pWindow->m_vFloatingOffset.y, m_fBarWidth, (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}; rect.scale(pMonitor->scale); @@ -235,14 +237,16 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { .emplace_back(makeUnique(m_dwGroupMembers[WINDOWINDEX].lock(), Vector2D{m_fBarWidth * pMonitor->scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->scale}, pMonitor->scale)) .get(); - rect.y += std::ceil(((rect.height - pTitleTex->texSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->scale)); - rect.height = pTitleTex->texSize.y; - rect.width = pTitleTex->texSize.x; - rect.x += std::round(((m_fBarWidth * pMonitor->scale) / 2.0) - (pTitleTex->texSize.x / 2.0)); + + const auto titleTex = m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? pTitleTex->texActive : pTitleTex->texInactive; + rect.y += std::ceil(((rect.height - titleTex->m_vSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->scale)); + rect.height = titleTex->m_vSize.y; + rect.width = titleTex->m_vSize.x; + rect.x += std::round(((m_fBarWidth * pMonitor->scale) / 2.0) - (titleTex->m_vSize.x / 2.0)); rect.round(); CTexPassElement::SRenderData data; - data.tex = pTitleTex->tex; + data.tex = titleTex; data.box = rect; data.a = a; g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); @@ -278,13 +282,17 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float static auto PTITLEFONTSIZE = CConfigValue("group:groupbar:font_size"); static auto PTEXTCOLOR = CConfigValue("group:groupbar:text_color"); + static auto PTITLEFONTWEIGHTACTIVE = CConfigValue("group:groupbar:font_weight_active"); + static auto PTITLEFONTWEIGHTINACTIVE = CConfigValue("group:groupbar:font_weight_inactive"); + + const auto FONTWEIGHTACTIVE = (CFontWeightConfigValueData*)(PTITLEFONTWEIGHTACTIVE.ptr())->getData(); + const auto FONTWEIGHTINACTIVE = (CFontWeightConfigValueData*)(PTITLEFONTWEIGHTINACTIVE.ptr())->getData(); + const CHyprColor COLOR = CHyprColor(*PTEXTCOLOR); const auto FONTFAMILY = *PTITLEFONTFAMILY != STRVAL_EMPTY ? *PTITLEFONTFAMILY : *FALLBACKFONT; - tex = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2 /* some padding yk */); - - if (tex) - texSize = tex->m_vSize; + texActive = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTACTIVE->m_value); + texInactive = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTINACTIVE->m_value); } static void renderGradientTo(SP tex, CGradientValueData* grad) { diff --git a/src/render/decorations/CHyprGroupBarDecoration.hpp b/src/render/decorations/CHyprGroupBarDecoration.hpp index 0cdf8a6b..de087bce 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.hpp +++ b/src/render/decorations/CHyprGroupBarDecoration.hpp @@ -12,9 +12,9 @@ class CTitleTex { CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale); ~CTitleTex() = default; - SP tex; + SP texActive; + SP texInactive; std::string szContent; - Vector2D texSize; PHLWINDOWREF pWindowOwner; }; From 0e80ecc5342db04c8c1f807fa6db4c703fb89e3a Mon Sep 17 00:00:00 2001 From: davc0n Date: Thu, 24 Apr 2025 20:49:49 +0200 Subject: [PATCH 0102/1077] layers: refactor class member vars (#10149) * layers: refactor class member vars * popups: rename m_WLSurface to m_wlSurface --- src/Compositor.cpp | 28 +- src/config/ConfigManager.cpp | 24 +- src/debug/HyprCtl.cpp | 6 +- src/desktop/LayerRule.cpp | 42 +-- src/desktop/LayerRule.hpp | 8 +- src/desktop/LayerSurface.cpp | 404 ++++++++++++++-------------- src/desktop/LayerSurface.hpp | 57 ++-- src/desktop/Popup.cpp | 224 +++++++-------- src/desktop/Popup.hpp | 28 +- src/desktop/Subsurface.cpp | 6 +- src/desktop/WLSurface.cpp | 6 +- src/desktop/Window.cpp | 4 +- src/events/Windows.cpp | 2 +- src/helpers/Monitor.cpp | 4 +- src/managers/AnimationManager.cpp | 10 +- src/managers/SeatManager.cpp | 2 +- src/managers/input/InputManager.cpp | 16 +- src/managers/input/Swipe.cpp | 4 +- src/managers/input/Touch.cpp | 6 +- src/render/OpenGL.cpp | 6 +- src/render/Renderer.cpp | 84 +++--- 21 files changed, 487 insertions(+), 484 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8e50019e..9d8bb62e 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1019,7 +1019,7 @@ SP CCompositor::vectorWindowToSurface(const Vector2D& pos, P if (PPOPUP) { const auto OFF = PPOPUP->coordsRelativeToParent(); sl = pos - pWindow->m_vRealPosition->goal() - OFF; - return PPOPUP->m_pWLSurface->resource(); + return PPOPUP->m_wlSurface->resource(); } auto [surf, local] = pWindow->m_pWLSurface->resource()->at(pos - pWindow->m_vRealPosition->goal(), true); @@ -1270,15 +1270,15 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo SP CCompositor::vectorToLayerPopupSurface(const Vector2D& pos, PHLMONITOR monitor, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) { for (auto const& lsl : monitor->m_aLayerSurfaceLayers | std::views::reverse) { for (auto const& ls : lsl | std::views::reverse) { - if (!ls->mapped || ls->fadingOut || !ls->layerSurface || (ls->layerSurface && !ls->layerSurface->mapped) || ls->alpha->value() == 0.f) + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->mapped) || ls->m_alpha->value() == 0.f) continue; - auto SURFACEAT = ls->popupHead->at(pos, true); + auto SURFACEAT = ls->m_popupHead->at(pos, true); if (SURFACEAT) { *ppLayerSurfaceFound = ls.lock(); *sCoords = pos - SURFACEAT->coordsGlobal(); - return SURFACEAT->m_pWLSurface->resource(); + return SURFACEAT->m_wlSurface->resource(); } } } @@ -1288,10 +1288,10 @@ SP CCompositor::vectorToLayerPopupSurface(const Vector2D& po SP CCompositor::vectorToLayerSurface(const Vector2D& pos, std::vector* layerSurfaces, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) { for (auto const& ls : *layerSurfaces | std::views::reverse) { - if (!ls->mapped || ls->fadingOut || !ls->layerSurface || (ls->layerSurface && !ls->layerSurface->surface->mapped) || ls->alpha->value() == 0.f) + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->mapped) || ls->m_alpha->value() == 0.f) continue; - auto [surf, local] = ls->layerSurface->surface->at(pos - ls->geometry.pos(), true); + auto [surf, local] = ls->m_layerSurface->surface->at(pos - ls->m_geometry.pos(), true); if (surf) { if (surf->current.input.empty()) @@ -1463,14 +1463,14 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { continue; } - if (ls->monitorID() != monid && ls->monitor) + if (ls->monitorID() != monid && ls->m_monitor) continue; // mark blur for recalc - if (ls->layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || ls->layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) + if (ls->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || ls->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) g_pHyprOpenGL->markBlurDirtyForMonitor(getMonitorFromID(monid)); - if (ls->fadingOut && ls->readyToDelete && ls->isFadedOut()) { + if (ls->m_fadingOut && ls->m_readyToDelete && ls->isFadedOut()) { for (auto const& m : m_monitors) { for (auto& lsl : m->m_aLayerSurfaceLayers) { if (!lsl.empty() && std::ranges::find_if(lsl, [&](auto& other) { return other == ls; }) != lsl.end()) { @@ -2273,8 +2273,8 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { if (pWorkspace->m_iID == PMONITOR->activeWorkspaceID() || pWorkspace->m_iID == PMONITOR->activeSpecialWorkspaceID()) { for (auto const& ls : PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { - if (!ls->fadingOut) - *ls->alpha = FULLSCREEN && pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; + if (!ls->m_fadingOut) + *ls->m_alpha = FULLSCREEN && pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } } @@ -2554,13 +2554,13 @@ PHLLS CCompositor::getLayerSurfaceFromSurface(SP pSurface) { std::pair, bool> result = {pSurface, false}; for (auto const& ls : m_layers) { - if (ls->layerSurface && ls->layerSurface->surface == pSurface) + if (ls->m_layerSurface && ls->m_layerSurface->surface == pSurface) return ls; - if (!ls->layerSurface || !ls->mapped) + if (!ls->m_layerSurface || !ls->m_mapped) continue; - ls->layerSurface->surface->breadthfirst( + ls->m_layerSurface->surface->breadthfirst( [&result](SP surf, const Vector2D& offset, void* data) { if (surf == result.first) { result.second = true; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f609eeb4..3ead5c5b 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1530,22 +1530,22 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, std::vector> CConfigManager::getMatchingRules(PHLLS pLS) { std::vector> returns; - if (!pLS->layerSurface || pLS->fadingOut) + if (!pLS->m_layerSurface || pLS->m_fadingOut) return returns; for (auto const& lr : m_layerRules) { - if (lr->targetNamespace.starts_with("address:0x")) { - if (std::format("address:0x{:x}", (uintptr_t)pLS.get()) != lr->targetNamespace) + if (lr->m_targetNamespace.starts_with("address:0x")) { + if (std::format("address:0x{:x}", (uintptr_t)pLS.get()) != lr->m_targetNamespace) continue; - } else if (!lr->targetNamespaceRegex.passes(pLS->layerSurface->layerNamespace)) + } else if (!lr->m_targetNamespaceRegex.passes(pLS->m_layerSurface->layerNamespace)) continue; // hit returns.emplace_back(lr); } - if (shouldBlurLS(pLS->layerSurface->layerNamespace)) - returns.emplace_back(makeShared(pLS->layerSurface->layerNamespace, "blur")); + if (shouldBlurLS(pLS->m_layerSurface->layerNamespace)) + returns.emplace_back(makeShared(pLS->m_layerSurface->layerNamespace, "blur")); return returns; } @@ -2626,18 +2626,18 @@ std::optional CConfigManager::handleLayerRule(const std::string& co return "empty rule?"; if (RULE == "unset") { - std::erase_if(m_layerRules, [&](const auto& other) { return other->targetNamespace == VALUE; }); + std::erase_if(m_layerRules, [&](const auto& other) { return other->m_targetNamespace == VALUE; }); return {}; } auto rule = makeShared(RULE, VALUE); - if (rule->ruleType == CLayerRule::RULE_INVALID) { + if (rule->m_ruleType == CLayerRule::RULE_INVALID) { Debug::log(ERR, "Invalid rule found: {}", RULE); return "Invalid rule found: " + RULE; } - rule->targetNamespaceRegex = {VALUE}; + rule->m_targetNamespaceRegex = {VALUE}; m_layerRules.emplace_back(rule); @@ -2661,9 +2661,9 @@ void CConfigManager::updateBlurredLS(const std::string& name, const bool forceBl for (auto const& ls : lsl) { if (BYADDRESS) { if (std::format("0x{:x}", (uintptr_t)ls.get()) == matchName) - ls->forceBlur = forceBlur; - } else if (ls->szNamespace == matchName) - ls->forceBlur = forceBlur; + ls->m_forceBlur = forceBlur; + } else if (ls->m_namespace == matchName) + ls->m_forceBlur = forceBlur; } } } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 1c485c15..72dde67f 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -487,7 +487,7 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques "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->m_geometry.x, layer->m_geometry.y, layer->m_geometry.width, layer->m_geometry.height, escapeJSONStrings(layer->m_namespace), layer->getPID()); } @@ -519,8 +519,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: {}, pid: {}\n", (uintptr_t)layer.get(), layer->geometry.x, layer->geometry.y, - layer->geometry.width, layer->geometry.height, layer->szNamespace, layer->getPID()); + result += std::format("\t\tLayer {:x}: xywh: {} {} {} {}, namespace: {}, pid: {}\n", (uintptr_t)layer.get(), layer->m_geometry.x, layer->m_geometry.y, + layer->m_geometry.width, layer->m_geometry.height, layer->m_namespace, layer->getPID()); } layerLevel++; diff --git a/src/desktop/LayerRule.cpp b/src/desktop/LayerRule.cpp index 791a557e..c03d8968 100644 --- a/src/desktop/LayerRule.cpp +++ b/src/desktop/LayerRule.cpp @@ -7,32 +7,32 @@ static const auto RULES = std::unordered_set{"noanim", "blur", "blurpopups", "dimaround"}; static const auto RULES_PREFIX = std::unordered_set{"ignorealpha", "ignorezero", "xray", "animation", "order"}; -CLayerRule::CLayerRule(const std::string& rule_, const std::string& ns_) : targetNamespace(ns_), rule(rule_) { - const bool VALID = RULES.contains(rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule_](const auto& prefix) { return rule_.starts_with(prefix); }); +CLayerRule::CLayerRule(const std::string& rule_, const std::string& ns_) : m_targetNamespace(ns_), m_rule(rule_) { + const bool VALID = RULES.contains(m_rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule_](const auto& prefix) { return rule_.starts_with(prefix); }); if (!VALID) return; - if (rule == "noanim") - ruleType = RULE_NOANIM; - else if (rule == "blur") - ruleType = RULE_BLUR; - else if (rule == "blurpopups") - ruleType = RULE_BLURPOPUPS; - else if (rule == "dimaround") - ruleType = RULE_DIMAROUND; - else if (rule.starts_with("ignorealpha")) - ruleType = RULE_IGNOREALPHA; - else if (rule.starts_with("ignorezero")) - ruleType = RULE_IGNOREZERO; - else if (rule.starts_with("xray")) - ruleType = RULE_XRAY; - else if (rule.starts_with("animation")) - ruleType = RULE_ANIMATION; - else if (rule.starts_with("order")) - ruleType = RULE_ORDER; + if (m_rule == "noanim") + m_ruleType = RULE_NOANIM; + else if (m_rule == "blur") + m_ruleType = RULE_BLUR; + else if (m_rule == "blurpopups") + m_ruleType = RULE_BLURPOPUPS; + else if (m_rule == "dimaround") + m_ruleType = RULE_DIMAROUND; + else if (m_rule.starts_with("ignorealpha")) + m_ruleType = RULE_IGNOREALPHA; + else if (m_rule.starts_with("ignorezero")) + m_ruleType = RULE_IGNOREZERO; + else if (m_rule.starts_with("xray")) + m_ruleType = RULE_XRAY; + else if (m_rule.starts_with("animation")) + m_ruleType = RULE_ANIMATION; + else if (m_rule.starts_with("order")) + m_ruleType = RULE_ORDER; else { Debug::log(ERR, "CLayerRule: didn't match a rule that was found valid?!"); - ruleType = RULE_INVALID; + m_ruleType = RULE_INVALID; } } \ No newline at end of file diff --git a/src/desktop/LayerRule.hpp b/src/desktop/LayerRule.hpp index 8cdb332e..46f843a6 100644 --- a/src/desktop/LayerRule.hpp +++ b/src/desktop/LayerRule.hpp @@ -22,10 +22,10 @@ class CLayerRule { RULE_ZUMBA, }; - eRuleType ruleType = RULE_INVALID; + eRuleType m_ruleType = RULE_INVALID; - const std::string targetNamespace; - const std::string rule; + const std::string m_targetNamespace; + const std::string m_rule; - CRuleRegexContainer targetNamespaceRegex; + CRuleRegexContainer m_targetNamespaceRegex; }; \ No newline at end of file diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index c8081143..d8ba5f21 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -17,7 +17,7 @@ PHLLS CLayerSurface::create(SP resource) { auto pMonitor = resource->monitor.empty() ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromName(resource->monitor); - pLS->surface->assign(resource->surface.lock(), pLS); + pLS->m_surface->assign(resource->surface.lock(), pLS); if (!pMonitor) { Debug::log(ERR, "New LS has no monitor??"); @@ -27,54 +27,54 @@ PHLLS CLayerSurface::create(SP resource) { if (pMonitor->pMirrorOf) pMonitor = g_pCompositor->m_monitors.front(); - pLS->self = pLS; + pLS->m_self = pLS; - pLS->szNamespace = resource->layerNamespace; + pLS->m_namespace = resource->layerNamespace; - pLS->layer = resource->current.layer; - pLS->popupHead = CPopup::create(pLS); - pLS->monitor = pMonitor; + pLS->m_layer = resource->current.layer; + pLS->m_popupHead = CPopup::create(pLS); + pLS->m_monitor = pMonitor; pMonitor->m_aLayerSurfaceLayers[resource->current.layer].emplace_back(pLS); - pLS->forceBlur = g_pConfigManager->shouldBlurLS(pLS->szNamespace); + pLS->m_forceBlur = g_pConfigManager->shouldBlurLS(pLS->m_namespace); - g_pAnimationManager->createAnimation(0.f, pLS->alpha, g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"), pLS, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->realPosition, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->realSize, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pLS->m_alpha, g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"), pLS, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->m_realPosition, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->m_realSize, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE); pLS->registerCallbacks(); - pLS->alpha->setValueAndWarp(0.f); + pLS->m_alpha->setValueAndWarp(0.f); - Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->layer, pMonitor->szName); + Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->m_layer, pMonitor->szName); return pLS; } void CLayerSurface::registerCallbacks() { - alpha->setUpdateCallback([this](auto) { - if (dimAround) - g_pHyprRenderer->damageMonitor(monitor.lock()); + m_alpha->setUpdateCallback([this](auto) { + if (m_dimAround) + g_pHyprRenderer->damageMonitor(m_monitor.lock()); }); } -CLayerSurface::CLayerSurface(SP resource_) : layerSurface(resource_) { - listeners.commit = layerSurface->events.commit.registerListener([this](std::any d) { onCommit(); }); - listeners.map = layerSurface->events.map.registerListener([this](std::any d) { onMap(); }); - listeners.unmap = layerSurface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); - listeners.destroy = layerSurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); +CLayerSurface::CLayerSurface(SP resource_) : m_layerSurface(resource_) { + m_listeners.commit = m_layerSurface->events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.map = m_layerSurface->events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmap = m_layerSurface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.destroy = m_layerSurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); - surface = CWLSurface::create(); + m_surface = CWLSurface::create(); } CLayerSurface::~CLayerSurface() { if (!g_pHyprOpenGL) return; - if (surface) - surface->unassign(); + if (m_surface) + m_surface->unassign(); g_pHyprRenderer->makeEGLCurrent(); - std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == self.lock(); }); + std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == m_self.lock(); }); for (auto const& mon : g_pCompositor->m_realMonitors) { for (auto& lsl : mon->m_aLayerSurfaceLayers) { @@ -84,29 +84,29 @@ CLayerSurface::~CLayerSurface() { } void CLayerSurface::onDestroy() { - Debug::log(LOG, "LayerSurface {:x} destroyed", (uintptr_t)layerSurface.get()); + Debug::log(LOG, "LayerSurface {:x} destroyed", (uintptr_t)m_layerSurface.get()); - const auto PMONITOR = monitor.lock(); + const auto PMONITOR = m_monitor.lock(); if (!PMONITOR) Debug::log(WARN, "Layersurface destroyed on an invalid monitor (removed?)"); - if (!fadingOut) { - if (mapped) { + if (!m_fadingOut) { + if (m_mapped) { Debug::log(LOG, "Forcing an unmap of a LS that did a straight destroy!"); onUnmap(); } else { Debug::log(LOG, "Removing LayerSurface that wasn't mapped."); - if (alpha) - alpha->setValueAndWarp(0.f); - fadingOut = true; - g_pCompositor->addToFadingOutSafe(self.lock()); + if (m_alpha) + m_alpha->setValueAndWarp(0.f); + m_fadingOut = true; + g_pCompositor->addToFadingOutSafe(m_self.lock()); } } - popupHead.reset(); + m_popupHead.reset(); - noProcess = true; + m_noProcess = true; // rearrange to fix the reserved areas if (PMONITOR) { @@ -114,35 +114,35 @@ void CLayerSurface::onDestroy() { PMONITOR->scheduledRecalc = true; // and damage - CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); } - readyToDelete = true; - layerSurface.reset(); - if (surface) - surface->unassign(); + m_readyToDelete = true; + m_layerSurface.reset(); + if (m_surface) + m_surface->unassign(); - listeners.unmap.reset(); - listeners.destroy.reset(); - listeners.map.reset(); - listeners.commit.reset(); + m_listeners.unmap.reset(); + m_listeners.destroy.reset(); + m_listeners.map.reset(); + m_listeners.commit.reset(); } void CLayerSurface::onMap() { - Debug::log(LOG, "LayerSurface {:x} mapped", (uintptr_t)layerSurface.get()); + Debug::log(LOG, "LayerSurface {:x} mapped", (uintptr_t)m_layerSurface.get()); - mapped = true; - interactivity = layerSurface->current.interactivity; + m_mapped = true; + m_interactivity = m_layerSurface->current.interactivity; - layerSurface->surface->map(); + m_layerSurface->surface->map(); // this layer might be re-mapped. - fadingOut = false; - g_pCompositor->removeFromFadingOutSafe(self.lock()); + m_fadingOut = false; + g_pCompositor->removeFromFadingOutSafe(m_self.lock()); // fix if it changed its mon - const auto PMONITOR = monitor.lock(); + const auto PMONITOR = m_monitor.lock(); if (!PMONITOR) return; @@ -153,15 +153,15 @@ void CLayerSurface::onMap() { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); - surface->resource()->enter(PMONITOR->self.lock()); + m_surface->resource()->enter(PMONITOR->self.lock()); - const bool ISEXCLUSIVE = layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; + const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (ISEXCLUSIVE) - g_pInputManager->m_dExclusiveLSes.push_back(self); + g_pInputManager->m_dExclusiveLSes.push_back(m_self); const bool GRABSFOCUS = ISEXCLUSIVE || - (layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && + (m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && // don't focus if constrained (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained())); @@ -169,69 +169,69 @@ void CLayerSurface::onMap() { // TODO: use the new superb really very cool grab g_pSeatManager->setGrab(nullptr); g_pInputManager->releaseAllMouseButtons(); - g_pCompositor->focusSurface(surface->resource()); + g_pCompositor->focusSurface(m_surface->resource()); - const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y); - g_pSeatManager->setPointerFocus(surface->resource(), LOCAL); + const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y); + g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); g_pInputManager->m_bEmptyFocusCursorSet = false; } - position = Vector2D(geometry.x, geometry.y); + m_position = Vector2D(m_geometry.x, m_geometry.y); - CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); const bool FULLSCREEN = PMONITOR->activeWorkspace && PMONITOR->activeWorkspace->m_bHasFullscreenWindow && PMONITOR->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN; - startAnimation(!(layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP && FULLSCREEN && !GRABSFOCUS)); - readyToDelete = false; - fadingOut = false; + startAnimation(!(m_layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP && FULLSCREEN && !GRABSFOCUS)); + m_readyToDelete = false; + m_fadingOut = false; - g_pEventManager->postEvent(SHyprIPCEvent{"openlayer", szNamespace}); - EMIT_HOOK_EVENT("openLayer", self.lock()); + g_pEventManager->postEvent(SHyprIPCEvent{"openlayer", m_namespace}); + EMIT_HOOK_EVENT("openLayer", m_self.lock()); - g_pCompositor->setPreferredScaleForSurface(surface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(surface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->scale); + g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->transform); } void CLayerSurface::onUnmap() { - Debug::log(LOG, "LayerSurface {:x} unmapped", (uintptr_t)layerSurface.get()); + Debug::log(LOG, "LayerSurface {:x} unmapped", (uintptr_t)m_layerSurface.get()); - g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", layerSurface->layerNamespace}); - EMIT_HOOK_EVENT("closeLayer", self.lock()); + g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->layerNamespace}); + EMIT_HOOK_EVENT("closeLayer", m_self.lock()); - std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == self.lock(); }); + std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); - if (!monitor || g_pCompositor->m_unsafeState) { + if (!m_monitor || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Layersurface unmapping on invalid monitor (removed?) ignoring."); - g_pCompositor->addToFadingOutSafe(self.lock()); + g_pCompositor->addToFadingOutSafe(m_self.lock()); - mapped = false; - if (layerSurface && layerSurface->surface) - layerSurface->surface->unmap(); + m_mapped = false; + if (m_layerSurface && m_layerSurface->surface) + m_layerSurface->surface->unmap(); startAnimation(false); return; } // end any pending animations so that snapshot has right dimensions - realPosition->warp(); - realSize->warp(); + m_realPosition->warp(); + m_realSize->warp(); // make a snapshot and start fade - g_pHyprRenderer->makeLayerSnapshot(self.lock()); + g_pHyprRenderer->makeLayerSnapshot(m_self.lock()); startAnimation(false); - mapped = false; - if (layerSurface && layerSurface->surface) - layerSurface->surface->unmap(); + m_mapped = false; + if (m_layerSurface && m_layerSurface->surface) + m_layerSurface->surface->unmap(); - g_pCompositor->addToFadingOutSafe(self.lock()); + g_pCompositor->addToFadingOutSafe(m_self.lock()); - const auto PMONITOR = monitor.lock(); + const auto PMONITOR = m_monitor.lock(); - const bool WASLASTFOCUS = g_pSeatManager->state.keyboardFocus == surface->resource() || g_pSeatManager->state.pointerFocus == surface->resource(); + const bool WASLASTFOCUS = g_pSeatManager->state.keyboardFocus == m_surface->resource() || g_pSeatManager->state.pointerFocus == m_surface->resource(); if (!PMONITOR) return; @@ -241,14 +241,14 @@ void CLayerSurface::onUnmap() { if (WASLASTFOCUS || (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->hlSurface && !g_pCompositor->m_lastFocus->hlSurface->keyboardFocusable())) { if (!g_pInputManager->refocusLastWindow(PMONITOR)) g_pInputManager->refocus(); - } else if (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus != surface->resource()) + } else if (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus != m_surface->resource()) g_pSeatManager->setKeyboardFocus(g_pCompositor->m_lastFocus.lock()); - CBox geomFixed = {geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y, geometry.width, geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - geomFixed = {geometry.x + (int)PMONITOR->vecPosition.x, geometry.y + (int)PMONITOR->vecPosition.y, (int)layerSurface->surface->current.size.x, - (int)layerSurface->surface->current.size.y}; + geomFixed = {m_geometry.x + (int)PMONITOR->vecPosition.x, m_geometry.y + (int)PMONITOR->vecPosition.y, (int)m_layerSurface->surface->current.size.x, + (int)m_layerSurface->surface->current.size.y}; g_pHyprRenderer->damageBox(geomFixed); g_pInputManager->simulateMouseMovement(); @@ -257,47 +257,47 @@ void CLayerSurface::onUnmap() { } void CLayerSurface::onCommit() { - if (!layerSurface) + if (!m_layerSurface) return; - if (!mapped) { + if (!m_mapped) { // we're re-mapping if this is the case - if (layerSurface->surface && !layerSurface->surface->current.texture) { - fadingOut = false; - geometry = {}; + if (m_layerSurface->surface && !m_layerSurface->surface->current.texture) { + m_fadingOut = false; + m_geometry = {}; g_pHyprRenderer->arrangeLayersForMonitor(monitorID()); } return; } - const auto PMONITOR = monitor.lock(); + const auto PMONITOR = m_monitor.lock(); if (!PMONITOR) return; - if (layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) + if (m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) g_pHyprOpenGL->markBlurDirtyForMonitor(PMONITOR); // so that blur is recalc'd - CBox geomFixed = {geometry.x, geometry.y, geometry.width, geometry.height}; + CBox geomFixed = {m_geometry.x, m_geometry.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - if (layerSurface->current.committed != 0) { - if (layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_LAYER) { + if (m_layerSurface->current.committed != 0) { + if (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_LAYER) { - for (auto it = PMONITOR->m_aLayerSurfaceLayers[layer].begin(); it != PMONITOR->m_aLayerSurfaceLayers[layer].end(); it++) { - if (*it == self) { - if (layerSurface->current.layer == layer) + for (auto it = PMONITOR->m_aLayerSurfaceLayers[m_layer].begin(); it != PMONITOR->m_aLayerSurfaceLayers[m_layer].end(); it++) { + if (*it == m_self) { + if (m_layerSurface->current.layer == m_layer) break; - PMONITOR->m_aLayerSurfaceLayers[layerSurface->current.layer].emplace_back(*it); - PMONITOR->m_aLayerSurfaceLayers[layer].erase(it); + PMONITOR->m_aLayerSurfaceLayers[m_layerSurface->current.layer].emplace_back(*it); + PMONITOR->m_aLayerSurfaceLayers[m_layer].erase(it); break; } } - layer = layerSurface->current.layer; + m_layer = m_layerSurface->current.layer; - if (layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) + if (m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) g_pHyprOpenGL->markBlurDirtyForMonitor(PMONITOR); // so that blur is recalc'd } @@ -305,136 +305,136 @@ void CLayerSurface::onCommit() { PMONITOR->scheduledRecalc = true; } else { - position = Vector2D(geometry.x, geometry.y); + m_position = Vector2D(m_geometry.x, m_geometry.y); // update geom if it changed - if (layerSurface->surface->current.scale == 1 && PMONITOR->scale != 1.f && layerSurface->surface->current.viewport.hasDestination) { + if (m_layerSurface->surface->current.scale == 1 && PMONITOR->scale != 1.f && m_layerSurface->surface->current.viewport.hasDestination) { // fractional scaling. Dirty hack. - geometry = {geometry.pos(), layerSurface->surface->current.viewport.destination}; + m_geometry = {m_geometry.pos(), m_layerSurface->surface->current.viewport.destination}; } else { // this is because some apps like e.g. rofi-lbonn can't fucking use the protocol correctly. - geometry = {geometry.pos(), layerSurface->surface->current.size}; + m_geometry = {m_geometry.pos(), m_layerSurface->surface->current.size}; } } - if (realPosition->goal() != geometry.pos()) { - if (realPosition->isBeingAnimated()) - *realPosition = geometry.pos(); + if (m_realPosition->goal() != m_geometry.pos()) { + if (m_realPosition->isBeingAnimated()) + *m_realPosition = m_geometry.pos(); else - realPosition->setValueAndWarp(geometry.pos()); + m_realPosition->setValueAndWarp(m_geometry.pos()); } - if (realSize->goal() != geometry.size()) { - if (realSize->isBeingAnimated()) - *realSize = geometry.size(); + if (m_realSize->goal() != m_geometry.size()) { + if (m_realSize->isBeingAnimated()) + *m_realSize = m_geometry.size(); else - realSize->setValueAndWarp(geometry.size()); + m_realSize->setValueAndWarp(m_geometry.size()); } - if (mapped && (layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) { + if (m_mapped && (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) { bool WASLASTFOCUS = false; - layerSurface->surface->breadthfirst( + m_layerSurface->surface->breadthfirst( [&WASLASTFOCUS](SP surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->state.keyboardFocus == surf; }, nullptr); - if (!WASLASTFOCUS && popupHead) { - popupHead->breadthfirst( + if (!WASLASTFOCUS && m_popupHead) { + m_popupHead->breadthfirst( [&WASLASTFOCUS](WP popup, void* data) { - WASLASTFOCUS = WASLASTFOCUS || (popup->m_pWLSurface && g_pSeatManager->state.keyboardFocus == popup->m_pWLSurface->resource()); + WASLASTFOCUS = WASLASTFOCUS || (popup->m_wlSurface && g_pSeatManager->state.keyboardFocus == popup->m_wlSurface->resource()); }, nullptr); } - const bool WASEXCLUSIVE = interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; - const bool ISEXCLUSIVE = layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; + const bool WASEXCLUSIVE = m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; + const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (!WASEXCLUSIVE && ISEXCLUSIVE) - g_pInputManager->m_dExclusiveLSes.push_back(self); + g_pInputManager->m_dExclusiveLSes.push_back(m_self); else if (WASEXCLUSIVE && !ISEXCLUSIVE) - std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == self.lock(); }); + std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); // if the surface was focused and interactive but now isn't, refocus - if (WASLASTFOCUS && layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) { + if (WASLASTFOCUS && m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) { // moveMouseUnified won't focus non interactive layers but it won't unfocus them either, // so unfocus the surface here. g_pCompositor->focusSurface(nullptr); - g_pInputManager->refocusLastWindow(monitor.lock()); - } else if (WASLASTFOCUS && WASEXCLUSIVE && layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) { + g_pInputManager->refocusLastWindow(m_monitor.lock()); + } else if (WASLASTFOCUS && WASEXCLUSIVE && m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) { g_pInputManager->simulateMouseMovement(); } else if (!WASEXCLUSIVE && ISEXCLUSIVE) { // if now exclusive and not previously g_pSeatManager->setGrab(nullptr); g_pInputManager->releaseAllMouseButtons(); - g_pCompositor->focusSurface(surface->resource()); + g_pCompositor->focusSurface(m_surface->resource()); - const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(geometry.x + PMONITOR->vecPosition.x, geometry.y + PMONITOR->vecPosition.y); - g_pSeatManager->setPointerFocus(surface->resource(), LOCAL); + const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y); + g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); g_pInputManager->m_bEmptyFocusCursorSet = false; } } - interactivity = layerSurface->current.interactivity; + m_interactivity = m_layerSurface->current.interactivity; - g_pHyprRenderer->damageSurface(surface->resource(), position.x, position.y); + g_pHyprRenderer->damageSurface(m_surface->resource(), m_position.x, m_position.y); - g_pCompositor->setPreferredScaleForSurface(surface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(surface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->scale); + g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->transform); } void CLayerSurface::applyRules() { - noAnimations = false; - forceBlur = false; - ignoreAlpha = false; - ignoreAlphaValue = 0.f; - dimAround = false; - xray = -1; - animationStyle.reset(); + m_noAnimations = false; + m_forceBlur = false; + m_ignoreAlpha = false; + m_ignoreAlphaValue = 0.f; + m_dimAround = false; + m_xray = -1; + m_animationStyle.reset(); - for (auto const& rule : g_pConfigManager->getMatchingRules(self.lock())) { - switch (rule->ruleType) { + for (auto const& rule : g_pConfigManager->getMatchingRules(m_self.lock())) { + switch (rule->m_ruleType) { case CLayerRule::RULE_NOANIM: { - noAnimations = true; + m_noAnimations = true; break; } case CLayerRule::RULE_BLUR: { - forceBlur = true; + m_forceBlur = true; break; } case CLayerRule::RULE_BLURPOPUPS: { - forceBlurPopups = true; + m_forceBlurPopups = true; break; } case CLayerRule::RULE_IGNOREALPHA: case CLayerRule::RULE_IGNOREZERO: { - const auto FIRST_SPACE_POS = rule->rule.find_first_of(' '); + const auto FIRST_SPACE_POS = rule->m_rule.find_first_of(' '); std::string alphaValue = ""; if (FIRST_SPACE_POS != std::string::npos) - alphaValue = rule->rule.substr(FIRST_SPACE_POS + 1); + alphaValue = rule->m_rule.substr(FIRST_SPACE_POS + 1); try { - ignoreAlpha = true; + m_ignoreAlpha = true; if (!alphaValue.empty()) - ignoreAlphaValue = std::stof(alphaValue); + m_ignoreAlphaValue = std::stof(alphaValue); } catch (...) { Debug::log(ERR, "Invalid value passed to ignoreAlpha"); } break; } case CLayerRule::RULE_DIMAROUND: { - dimAround = true; + m_dimAround = true; break; } case CLayerRule::RULE_XRAY: { - CVarList vars{rule->rule, 0, ' '}; + CVarList vars{rule->m_rule, 0, ' '}; try { - xray = configStringToInt(vars[1]).value_or(false); + m_xray = configStringToInt(vars[1]).value_or(false); } catch (...) {} break; } case CLayerRule::RULE_ANIMATION: { - CVarList vars{rule->rule, 2, 's'}; - animationStyle = vars[1]; + CVarList vars{rule->m_rule, 2, 's'}; + m_animationStyle = vars[1]; break; } case CLayerRule::RULE_ORDER: { - CVarList vars{rule->rule, 2, 's'}; + CVarList vars{rule->m_rule, 2, 's'}; try { - order = std::stoi(vars[1]); + m_order = std::stoi(vars[1]); } catch (...) { Debug::log(ERR, "Invalid value passed to order"); } break; } @@ -445,19 +445,19 @@ void CLayerSurface::applyRules() { void CLayerSurface::startAnimation(bool in, bool instant) { if (in) { - realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn")); - realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn")); - alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn")); + m_realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn")); + m_realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn")); + m_alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn")); } else { - realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut")); - realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut")); - alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersOut")); + m_realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut")); + m_realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut")); + m_alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersOut")); } - const auto ANIMSTYLE = animationStyle.value_or(realPosition->getStyle()); + const auto ANIMSTYLE = m_animationStyle.value_or(m_realPosition->getStyle()); if (ANIMSTYLE.starts_with("slide")) { // get closest edge - const auto MIDDLE = geometry.middle(); + const auto MIDDLE = m_geometry.middle(); const auto PMONITOR = g_pCompositor->getMonitorFromVector(MIDDLE); @@ -495,38 +495,38 @@ void CLayerSurface::startAnimation(bool in, bool instant) { } } - realSize->setValueAndWarp(geometry.size()); - alpha->setValueAndWarp(in ? 0.f : 1.f); - *alpha = in ? 1.f : 0.f; + m_realSize->setValueAndWarp(m_geometry.size()); + m_alpha->setValueAndWarp(in ? 0.f : 1.f); + *m_alpha = in ? 1.f : 0.f; Vector2D prePos; switch (leader) { case 0: // TOP - prePos = {geometry.x, PMONITOR->vecPosition.y - geometry.h}; + prePos = {m_geometry.x, PMONITOR->vecPosition.y - m_geometry.h}; break; case 1: // BOTTOM - prePos = {geometry.x, PMONITOR->vecPosition.y + PMONITOR->vecSize.y}; + prePos = {m_geometry.x, PMONITOR->vecPosition.y + PMONITOR->vecSize.y}; break; case 2: // LEFT - prePos = {PMONITOR->vecPosition.x - geometry.w, geometry.y}; + prePos = {PMONITOR->vecPosition.x - m_geometry.w, m_geometry.y}; break; case 3: // RIGHT - prePos = {PMONITOR->vecPosition.x + PMONITOR->vecSize.x, geometry.y}; + prePos = {PMONITOR->vecPosition.x + PMONITOR->vecSize.x, m_geometry.y}; break; default: UNREACHABLE(); } if (in) { - realPosition->setValueAndWarp(prePos); - *realPosition = geometry.pos(); + m_realPosition->setValueAndWarp(prePos); + *m_realPosition = m_geometry.pos(); } else { - realPosition->setValueAndWarp(geometry.pos()); - *realPosition = prePos; + m_realPosition->setValueAndWarp(m_geometry.pos()); + *m_realPosition = prePos; } } else if (ANIMSTYLE.starts_with("popin")) { @@ -542,62 +542,62 @@ void CLayerSurface::startAnimation(bool in, bool instant) { minPerc *= 0.01; - const auto GOALSIZE = (geometry.size() * minPerc).clamp({5, 5}); - const auto GOALPOS = geometry.pos() + (geometry.size() - GOALSIZE) / 2.f; + const auto GOALSIZE = (m_geometry.size() * minPerc).clamp({5, 5}); + const auto GOALPOS = m_geometry.pos() + (m_geometry.size() - GOALSIZE) / 2.f; - alpha->setValueAndWarp(in ? 0.f : 1.f); - *alpha = in ? 1.f : 0.f; + m_alpha->setValueAndWarp(in ? 0.f : 1.f); + *m_alpha = in ? 1.f : 0.f; if (in) { - realSize->setValueAndWarp(GOALSIZE); - realPosition->setValueAndWarp(GOALPOS); - *realSize = geometry.size(); - *realPosition = geometry.pos(); + m_realSize->setValueAndWarp(GOALSIZE); + m_realPosition->setValueAndWarp(GOALPOS); + *m_realSize = m_geometry.size(); + *m_realPosition = m_geometry.pos(); } else { - realSize->setValueAndWarp(geometry.size()); - realPosition->setValueAndWarp(geometry.pos()); - *realSize = GOALSIZE; - *realPosition = GOALPOS; + m_realSize->setValueAndWarp(m_geometry.size()); + m_realPosition->setValueAndWarp(m_geometry.pos()); + *m_realSize = GOALSIZE; + *m_realPosition = GOALPOS; } } else { // fade - realPosition->setValueAndWarp(geometry.pos()); - realSize->setValueAndWarp(geometry.size()); - *alpha = in ? 1.f : 0.f; + m_realPosition->setValueAndWarp(m_geometry.pos()); + m_realSize->setValueAndWarp(m_geometry.size()); + *m_alpha = in ? 1.f : 0.f; } if (!in) - fadingOut = true; + m_fadingOut = true; } bool CLayerSurface::isFadedOut() { - if (!fadingOut) + if (!m_fadingOut) return false; - return !realPosition->isBeingAnimated() && !realSize->isBeingAnimated() && !alpha->isBeingAnimated(); + return !m_realPosition->isBeingAnimated() && !m_realSize->isBeingAnimated() && !m_alpha->isBeingAnimated(); } int CLayerSurface::popupsCount() { - if (!layerSurface || !mapped || fadingOut) + if (!m_layerSurface || !m_mapped || m_fadingOut) return 0; int no = -1; // we have one dummy - popupHead->breadthfirst([](WP p, void* data) { *(int*)data += 1; }, &no); + m_popupHead->breadthfirst([](WP p, void* data) { *(int*)data += 1; }, &no); return no; } MONITORID CLayerSurface::monitorID() { - return monitor ? monitor->ID : MONITOR_INVALID; + return m_monitor ? m_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) + if (!m_layerSurface || !m_layerSurface->surface || !m_layerSurface->surface->getResource() || !m_layerSurface->surface->getResource()->resource() || + !m_layerSurface->surface->getResource()->resource()->client) return -1; - wl_client_get_credentials(layerSurface->surface->getResource()->resource()->client, &PID, nullptr, nullptr); + wl_client_get_credentials(m_layerSurface->surface->getResource()->resource()->client, &PID, nullptr, nullptr); return PID; } diff --git a/src/desktop/LayerSurface.hpp b/src/desktop/LayerSurface.hpp index 6aba5591..6282d55f 100644 --- a/src/desktop/LayerSurface.hpp +++ b/src/desktop/LayerSurface.hpp @@ -22,44 +22,43 @@ class CLayerSurface { bool isFadedOut(); int popupsCount(); - PHLANIMVAR realPosition; - PHLANIMVAR realSize; - PHLANIMVAR alpha; + PHLANIMVAR m_realPosition; + PHLANIMVAR m_realSize; + PHLANIMVAR m_alpha; - WP layerSurface; - wl_list link; + WP m_layerSurface; // the header providing the enum type cannot be imported here - int interactivity = 0; + int m_interactivity = 0; - SP surface; + SP m_surface; - bool mapped = false; - uint32_t layer = 0; + bool m_mapped = false; + uint32_t m_layer = 0; - PHLMONITORREF monitor; + PHLMONITORREF m_monitor; - bool fadingOut = false; - bool readyToDelete = false; - bool noProcess = false; - bool noAnimations = false; + bool m_fadingOut = false; + bool m_readyToDelete = false; + bool m_noProcess = false; + bool m_noAnimations = false; - bool forceBlur = false; - bool forceBlurPopups = false; - int64_t xray = -1; - bool ignoreAlpha = false; - float ignoreAlphaValue = 0.f; - bool dimAround = false; - int64_t order = 0; + bool m_forceBlur = false; + bool m_forceBlurPopups = false; + int64_t m_xray = -1; + bool m_ignoreAlpha = false; + float m_ignoreAlphaValue = 0.f; + bool m_dimAround = false; + int64_t m_order = 0; - std::optional animationStyle; + std::optional m_animationStyle; - PHLLSREF self; + PHLLSREF m_self; - CBox geometry = {0, 0, 0, 0}; - Vector2D position; - std::string szNamespace = ""; - UP popupHead; + CBox m_geometry = {0, 0, 0, 0}; + Vector2D m_position; + std::string m_namespace = ""; + UP m_popupHead; pid_t getPID(); @@ -75,12 +74,12 @@ class CLayerSurface { CHyprSignalListener map; CHyprSignalListener unmap; CHyprSignalListener commit; - } listeners; + } m_listeners; void registerCallbacks(); // For the list lookup bool operator==(const CLayerSurface& rhs) const { - return layerSurface == rhs.layerSurface && monitor == rhs.monitor; + return m_layerSurface == rhs.m_layerSurface && m_monitor == rhs.m_monitor; } }; diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 912069e7..d67eec6c 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -13,32 +13,32 @@ #include UP CPopup::create(PHLWINDOW pOwner) { - auto popup = UP(new CPopup()); - popup->m_pWindowOwner = pOwner; - popup->m_pSelf = popup; + auto popup = UP(new CPopup()); + popup->m_windowOwner = pOwner; + popup->m_self = popup; popup->initAllSignals(); return popup; } UP CPopup::create(PHLLS pOwner) { - auto popup = UP(new CPopup()); - popup->m_pLayerOwner = pOwner; - popup->m_pSelf = popup; + auto popup = UP(new CPopup()); + popup->m_layerOwner = pOwner; + popup->m_self = popup; popup->initAllSignals(); return popup; } UP CPopup::create(SP resource, WP pOwner) { - auto popup = UP(new CPopup()); - popup->m_pResource = resource; - popup->m_pWindowOwner = pOwner->m_pWindowOwner; - popup->m_pLayerOwner = pOwner->m_pLayerOwner; - popup->m_pParent = pOwner; - popup->m_pSelf = popup; - popup->m_pWLSurface = CWLSurface::create(); - popup->m_pWLSurface->assign(resource->surface->surface.lock(), popup.get()); + auto popup = UP(new CPopup()); + popup->m_resource = resource; + popup->m_windowOwner = pOwner->m_windowOwner; + popup->m_layerOwner = pOwner->m_layerOwner; + popup->m_parent = pOwner; + popup->m_self = popup; + popup->m_wlSurface = CWLSurface::create(); + popup->m_wlSurface->assign(resource->surface->surface.lock(), popup.get()); - popup->m_vLastSize = resource->surface->current.geometry.size(); + popup->m_lastSize = resource->surface->current.geometry.size(); popup->reposition(); popup->initAllSignals(); @@ -46,104 +46,106 @@ UP CPopup::create(SP resource, WP pOwner) { } CPopup::~CPopup() { - if (m_pWLSurface) - m_pWLSurface->unassign(); + if (m_wlSurface) + m_wlSurface->unassign(); } void CPopup::initAllSignals() { - if (!m_pResource) { - if (!m_pWindowOwner.expired()) - listeners.newPopup = m_pWindowOwner->m_pXDGSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); - else if (!m_pLayerOwner.expired()) - listeners.newPopup = m_pLayerOwner->layerSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + if (!m_resource) { + if (!m_windowOwner.expired()) + m_listeners.newPopup = + m_windowOwner->m_pXDGSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + else if (!m_layerOwner.expired()) + m_listeners.newPopup = + m_layerOwner->m_layerSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); else ASSERT(false); return; } - listeners.reposition = m_pResource->events.reposition.registerListener([this](std::any d) { this->onReposition(); }); - listeners.map = m_pResource->surface->events.map.registerListener([this](std::any d) { this->onMap(); }); - listeners.unmap = m_pResource->surface->events.unmap.registerListener([this](std::any d) { this->onUnmap(); }); - listeners.dismissed = m_pResource->events.dismissed.registerListener([this](std::any d) { this->onUnmap(); }); - listeners.destroy = m_pResource->surface->events.destroy.registerListener([this](std::any d) { this->onDestroy(); }); - listeners.commit = m_pResource->surface->events.commit.registerListener([this](std::any d) { this->onCommit(); }); - listeners.newPopup = m_pResource->surface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + m_listeners.reposition = m_resource->events.reposition.registerListener([this](std::any d) { this->onReposition(); }); + m_listeners.map = m_resource->surface->events.map.registerListener([this](std::any d) { this->onMap(); }); + m_listeners.unmap = m_resource->surface->events.unmap.registerListener([this](std::any d) { this->onUnmap(); }); + m_listeners.dismissed = m_resource->events.dismissed.registerListener([this](std::any d) { this->onUnmap(); }); + m_listeners.destroy = m_resource->surface->events.destroy.registerListener([this](std::any d) { this->onDestroy(); }); + m_listeners.commit = m_resource->surface->events.commit.registerListener([this](std::any d) { this->onCommit(); }); + m_listeners.newPopup = m_resource->surface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); } void CPopup::onNewPopup(SP popup) { - const auto& POPUP = m_vChildren.emplace_back(CPopup::create(popup, m_pSelf)); - POPUP->m_pSelf = POPUP; + const auto& POPUP = m_children.emplace_back(CPopup::create(popup, m_self)); + POPUP->m_self = POPUP; Debug::log(LOG, "New popup at {:x}", (uintptr_t)POPUP); } void CPopup::onDestroy() { - m_bInert = true; + m_inert = true; - if (!m_pParent) + if (!m_parent) return; // head node - std::erase_if(m_pParent->m_vChildren, [this](const auto& other) { return other.get() == this; }); + std::erase_if(m_parent->m_children, [this](const auto& other) { return other.get() == this; }); } void CPopup::onMap() { - if (m_bMapped) + if (m_mapped) return; - m_bMapped = true; - m_vLastSize = m_pResource->surface->surface->current.size; + m_mapped = true; + m_lastSize = m_resource->surface->surface->current.size; const auto COORDS = coordsGlobal(); const auto PMONITOR = g_pCompositor->getMonitorFromVector(COORDS); - CBox box = m_pWLSurface->resource()->extends(); + CBox box = m_wlSurface->resource()->extends(); box.translate(COORDS).expand(4); g_pHyprRenderer->damageBox(box); - m_vLastPos = coordsRelativeToParent(); + m_lastPos = coordsRelativeToParent(); g_pInputManager->simulateMouseMovement(); - m_pSubsurfaceHead = CSubsurface::create(m_pSelf); + m_subsurfaceHead = CSubsurface::create(m_self); //unconstrain(); sendScale(); - m_pResource->surface->surface->enter(PMONITOR->self.lock()); + m_resource->surface->surface->enter(PMONITOR->self.lock()); - if (!m_pLayerOwner.expired() && m_pLayerOwner->layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) - g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_pLayerOwner->layer)); + if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) + g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_layerOwner->m_layer)); } void CPopup::onUnmap() { - if (!m_bMapped) + if (!m_mapped) return; - if (!m_pResource || !m_pResource->surface) { + if (!m_resource || !m_resource->surface) { Debug::log(ERR, "CPopup: orphaned (no surface/resource) and unmaps??"); onDestroy(); return; } - m_bMapped = false; + m_mapped = false; - m_vLastSize = m_pResource->surface->surface->current.size; + m_lastSize = m_resource->surface->surface->current.size; const auto COORDS = coordsGlobal(); - CBox box = m_pWLSurface->resource()->extends(); + CBox box = m_wlSurface->resource()->extends(); box.translate(COORDS).expand(4); g_pHyprRenderer->damageBox(box); - m_pSubsurfaceHead.reset(); + m_subsurfaceHead.reset(); - if (!m_pLayerOwner.expired() && m_pLayerOwner->layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) - g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_pLayerOwner->layer)); + if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) + g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_layerOwner->m_layer)); // damage all children breadthfirst( [](WP p, void* data) { - if (!p->m_pResource) + if (!p->m_resource) return; auto box = CBox{p->coordsGlobal(), p->size()}; @@ -159,59 +161,59 @@ void CPopup::onUnmap() { } void CPopup::onCommit(bool ignoreSiblings) { - if (!m_pResource || !m_pResource->surface) { + if (!m_resource || !m_resource->surface) { Debug::log(ERR, "CPopup: orphaned (no surface/resource) and commits??"); onDestroy(); return; } - if (m_pResource->surface->initialCommit) { - m_pResource->surface->scheduleConfigure(); + if (m_resource->surface->initialCommit) { + m_resource->surface->scheduleConfigure(); return; } - if (!m_pWindowOwner.expired() && (!m_pWindowOwner->m_bIsMapped || !m_pWindowOwner->m_pWorkspace->m_bVisible)) { - m_vLastSize = m_pResource->surface->surface->current.size; + if (!m_windowOwner.expired() && (!m_windowOwner->m_bIsMapped || !m_windowOwner->m_pWorkspace->m_bVisible)) { + m_lastSize = m_resource->surface->surface->current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) - Debug::log(LOG, "Refusing to commit damage from a subsurface of {} because it's invisible.", m_pWindowOwner.lock()); + Debug::log(LOG, "Refusing to commit damage from a subsurface of {} because it's invisible.", m_windowOwner.lock()); return; } - if (!m_pResource->surface->mapped) + if (!m_resource->surface->mapped) return; const auto COORDS = coordsGlobal(); const auto COORDSLOCAL = coordsRelativeToParent(); - if (m_vLastSize != m_pResource->surface->surface->current.size || m_bRequestedReposition || m_vLastPos != COORDSLOCAL) { - CBox box = {localToGlobal(m_vLastPos), m_vLastSize}; + if (m_lastSize != m_resource->surface->surface->current.size || m_requestedReposition || m_lastPos != COORDSLOCAL) { + CBox box = {localToGlobal(m_lastPos), m_lastSize}; g_pHyprRenderer->damageBox(box); - m_vLastSize = m_pResource->surface->surface->current.size; - box = {COORDS, m_vLastSize}; + m_lastSize = m_resource->surface->surface->current.size; + box = {COORDS, m_lastSize}; g_pHyprRenderer->damageBox(box); - m_vLastPos = COORDSLOCAL; + m_lastPos = COORDSLOCAL; } - if (!ignoreSiblings && m_pSubsurfaceHead) - m_pSubsurfaceHead->recheckDamageForSubsurfaces(); + if (!ignoreSiblings && m_subsurfaceHead) + m_subsurfaceHead->recheckDamageForSubsurfaces(); - g_pHyprRenderer->damageSurface(m_pWLSurface->resource(), COORDS.x, COORDS.y); + g_pHyprRenderer->damageSurface(m_wlSurface->resource(), COORDS.x, COORDS.y); - m_bRequestedReposition = false; + m_requestedReposition = false; - if (!m_pLayerOwner.expired() && m_pLayerOwner->layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) - g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_pLayerOwner->layer)); + if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) + g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_layerOwner->m_layer)); } void CPopup::onReposition() { Debug::log(LOG, "Popup {:x} requests reposition", (uintptr_t)this); - m_bRequestedReposition = true; + m_requestedReposition = true; - m_vLastPos = coordsRelativeToParent(); + m_lastPos = coordsRelativeToParent(); reposition(); } @@ -224,31 +226,31 @@ void CPopup::reposition() { return; CBox box = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; - m_pResource->applyPositioning(box, COORDS); + m_resource->applyPositioning(box, COORDS); } SP CPopup::getT1Owner() { - if (m_pWindowOwner) - return m_pWindowOwner->m_pWLSurface; + if (m_windowOwner) + return m_windowOwner->m_pWLSurface; else - return m_pLayerOwner->surface; + return m_layerOwner->m_surface; } Vector2D CPopup::coordsRelativeToParent() { Vector2D offset; - if (!m_pResource) + if (!m_resource) return {}; - WP current = m_pSelf; - offset -= current->m_pResource->surface->current.geometry.pos(); + WP current = m_self; + offset -= current->m_resource->surface->current.geometry.pos(); - while (current->m_pParent && current->m_pResource) { + while (current->m_parent && current->m_resource) { - offset += current->m_pWLSurface->resource()->current.offset; - offset += current->m_pResource->geometry.pos(); + offset += current->m_wlSurface->resource()->current.offset; + offset += current->m_resource->geometry.pos(); - current = current->m_pParent; + current = current->m_parent; } return offset; @@ -263,30 +265,30 @@ Vector2D CPopup::localToGlobal(const Vector2D& rel) { } Vector2D CPopup::t1ParentCoords() { - if (!m_pWindowOwner.expired()) - return m_pWindowOwner->m_vRealPosition->value(); - if (!m_pLayerOwner.expired()) - return m_pLayerOwner->realPosition->value(); + if (!m_windowOwner.expired()) + return m_windowOwner->m_vRealPosition->value(); + if (!m_layerOwner.expired()) + return m_layerOwner->m_realPosition->value(); ASSERT(false); return {}; } void CPopup::recheckTree() { - WP curr = m_pSelf; - while (curr->m_pParent) { - curr = curr->m_pParent; + WP curr = m_self; + while (curr->m_parent) { + curr = curr->m_parent; } curr->recheckChildrenRecursive(); } void CPopup::recheckChildrenRecursive() { - if (m_bInert || !m_pWLSurface) + if (m_inert || !m_wlSurface) return; std::vector> cpy; - std::ranges::for_each(m_vChildren, [&cpy](const auto& el) { cpy.emplace_back(el); }); + std::ranges::for_each(m_children, [&cpy](const auto& el) { cpy.emplace_back(el); }); for (auto const& c : cpy) { c->onCommit(true); c->recheckChildrenRecursive(); @@ -294,25 +296,25 @@ void CPopup::recheckChildrenRecursive() { } Vector2D CPopup::size() { - return m_vLastSize; + return m_lastSize; } void CPopup::sendScale() { - if (!m_pWindowOwner.expired()) - g_pCompositor->setPreferredScaleForSurface(m_pWLSurface->resource(), m_pWindowOwner->m_pWLSurface->m_fLastScale); - else if (!m_pLayerOwner.expired()) - g_pCompositor->setPreferredScaleForSurface(m_pWLSurface->resource(), m_pLayerOwner->surface->m_fLastScale); + if (!m_windowOwner.expired()) + g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_windowOwner->m_pWLSurface->m_fLastScale); + else if (!m_layerOwner.expired()) + g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_layerOwner->m_surface->m_fLastScale); else UNREACHABLE(); } bool CPopup::visible() { - if (!m_pWindowOwner.expired()) - return g_pHyprRenderer->shouldRenderWindow(m_pWindowOwner.lock()); - if (!m_pLayerOwner.expired()) + if (!m_windowOwner.expired()) + return g_pHyprRenderer->shouldRenderWindow(m_windowOwner.lock()); + if (!m_layerOwner.expired()) return true; - if (m_pParent) - return m_pParent->visible(); + if (m_parent) + return m_parent->visible(); return false; } @@ -326,8 +328,8 @@ void CPopup::bfHelper(std::vector> const& nodes, std::functionm_vChildren) { - nodes2.push_back(c->m_pSelf); + for (auto const& c : n->m_children) { + nodes2.push_back(c->m_self); } } @@ -337,7 +339,7 @@ void CPopup::bfHelper(std::vector> const& nodes, std::function, void*)> fn, void* data) { std::vector> popups; - popups.push_back(m_pSelf); + popups.push_back(m_self); bfHelper(popups, fn, data); } @@ -346,14 +348,14 @@ WP CPopup::at(const Vector2D& globalCoords, bool allowsInput) { breadthfirst([&popups](WP popup, void* data) { popups.push_back(popup); }, &popups); for (auto const& p : popups | std::views::reverse) { - if (!p->m_pResource || !p->m_bMapped) + if (!p->m_resource || !p->m_mapped) continue; if (!allowsInput) { - const bool HASSURFACE = p->m_pResource && p->m_pResource->surface; + const bool HASSURFACE = p->m_resource && p->m_resource->surface; - Vector2D offset = HASSURFACE ? p->m_pResource->surface->current.geometry.pos() : Vector2D{}; - Vector2D size = HASSURFACE ? p->m_pResource->surface->current.geometry.size() : p->size(); + Vector2D offset = HASSURFACE ? p->m_resource->surface->current.geometry.pos() : Vector2D{}; + Vector2D size = HASSURFACE ? p->m_resource->surface->current.geometry.size() : p->size(); if (size == Vector2D{}) size = p->size(); @@ -362,7 +364,7 @@ WP CPopup::at(const Vector2D& globalCoords, bool allowsInput) { if (BOX.containsPoint(globalCoords)) return p; } else { - const auto REGION = CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal()); + const auto REGION = CRegion{p->m_wlSurface->resource()->current.input}.intersect(CBox{{}, p->m_wlSurface->resource()->current.size}).translate(p->coordsGlobal()); if (REGION.containsPoint(globalCoords)) return p; } @@ -372,5 +374,5 @@ WP CPopup::at(const Vector2D& globalCoords, bool allowsInput) { } bool CPopup::inert() const { - return m_bInert; + return m_inert; } diff --git a/src/desktop/Popup.hpp b/src/desktop/Popup.hpp index f6ca65da..fdbce5a5 100644 --- a/src/desktop/Popup.hpp +++ b/src/desktop/Popup.hpp @@ -41,32 +41,32 @@ class CPopup { WP at(const Vector2D& globalCoords, bool allowsInput = false); // - SP m_pWLSurface; - WP m_pSelf; - bool m_bMapped = false; + SP m_wlSurface; + WP m_self; + bool m_mapped = false; private: CPopup() = default; // T1 owners, each popup has to have one of these - PHLWINDOWREF m_pWindowOwner; - PHLLSREF m_pLayerOwner; + PHLWINDOWREF m_windowOwner; + PHLLSREF m_layerOwner; // T2 owners - WP m_pParent; + WP m_parent; - WP m_pResource; + WP m_resource; - Vector2D m_vLastSize = {}; - Vector2D m_vLastPos = {}; + Vector2D m_lastSize = {}; + Vector2D m_lastPos = {}; - bool m_bRequestedReposition = false; + bool m_requestedReposition = false; - bool m_bInert = false; + bool m_inert = false; // - std::vector> m_vChildren; - UP m_pSubsurfaceHead; + std::vector> m_children; + UP m_subsurfaceHead; struct { CHyprSignalListener newPopup; @@ -76,7 +76,7 @@ class CPopup { CHyprSignalListener commit; CHyprSignalListener dismissed; CHyprSignalListener reposition; - } listeners; + } m_listeners; void initAllSignals(); void reposition(); diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index e4ac070c..d30692fe 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -22,7 +22,7 @@ UP CSubsurface::create(WP pOwner) { subsurface->m_pPopupParent = pOwner; subsurface->m_pSelf = subsurface; subsurface->initSignals(); - subsurface->initExistingSubsurfaces(pOwner->m_pWLSurface->resource()); + subsurface->initExistingSubsurfaces(pOwner->m_wlSurface->resource()); return subsurface; } @@ -63,7 +63,7 @@ void CSubsurface::initSignals() { listeners.newSubsurface = m_pWindowParent->m_pWLSurface->resource()->events.newSubsurface.registerListener( [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else if (m_pPopupParent) - listeners.newSubsurface = m_pPopupParent->m_pWLSurface->resource()->events.newSubsurface.registerListener( + listeners.newSubsurface = m_pPopupParent->m_wlSurface->resource()->events.newSubsurface.registerListener( [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else ASSERT(false); @@ -107,7 +107,7 @@ void CSubsurface::onCommit() { g_pHyprRenderer->damageSurface(m_pWLSurface->resource(), COORDS.x, COORDS.y); - if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_pWLSurface) + if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_wlSurface) m_pPopupParent->recheckTree(); if (!m_pWindowParent.expired()) // I hate you firefox why are you doing this m_pWindowParent->m_pPopupHead->recheckTree(); diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index 11da7b68..ef62bc7a 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -190,7 +190,7 @@ std::optional CWLSurface::getSurfaceBoxGlobal() const { if (!m_pWindowOwner.expired()) return m_pWindowOwner->getWindowMainSurfaceBox(); if (!m_pLayerOwner.expired()) - return m_pLayerOwner->geometry; + return m_pLayerOwner->m_geometry; if (m_pPopupOwner) return CBox{m_pPopupOwner->coordsGlobal(), m_pPopupOwner->size()}; if (m_pSubsurfaceOwner) @@ -228,7 +228,7 @@ SP CWLSurface::fromResource(SP pSurface) { bool CWLSurface::keyboardFocusable() const { if (m_pWindowOwner || m_pPopupOwner || m_pSubsurfaceOwner) return true; - if (m_pLayerOwner && m_pLayerOwner->layerSurface) - return m_pLayerOwner->layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; + if (m_pLayerOwner && m_pLayerOwner->m_layerSurface) + return m_pLayerOwner->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; return false; } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index a37424c8..b22de459 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -162,7 +162,7 @@ SBoxExtents CWindow::getFullWindowExtents() { // TODO: this could be better, perhaps make a getFullWindowRegion? m_pPopupHead->breadthfirst( [](WP popup, void* data) { - if (!popup->m_pWLSurface || !popup->m_pWLSurface->resource()) + if (!popup->m_wlSurface || !popup->m_wlSurface->resource()) return; CBox* pSurfaceExtents = (CBox*)data; @@ -870,7 +870,7 @@ bool CWindow::hasPopupAt(const Vector2D& pos) { auto popup = m_pPopupHead->at(pos); - return popup && popup->m_pWLSurface->resource(); + return popup && popup->m_wlSurface->resource(); } void CWindow::applyGroupRules() { diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 91f38d11..7d5cfd3f 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -581,7 +581,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // check LS focus grab const auto PFORCEFOCUS = g_pCompositor->getForceFocus(); const auto PLSFROMFOCUS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - if (PLSFROMFOCUS && PLSFROMFOCUS->layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) + if (PLSFROMFOCUS && PLSFROMFOCUS->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) PWINDOW->m_bNoInitialFocus = true; if (PWINDOW->m_pWorkspace->m_bHasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_bIsFloating) { diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index fc5a97c8..6397e8c3 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -339,8 +339,8 @@ void CMonitor::onDisconnect(bool destroy) { for (size_t i = 0; i < 4; ++i) { for (auto const& ls : m_aLayerSurfaceLayers[i]) { - if (ls->layerSurface && !ls->fadingOut) - ls->layerSurface->sendClosed(); + if (ls->m_layerSurface && !ls->m_fadingOut) + ls->m_layerSurface->sendClosed(); } m_aLayerSurfaceLayers[i].clear(); } diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index c3052796..2c8cf1f9 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -135,14 +135,14 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { } } else if (PLAYER) { // "some fucking layers miss 1 pixel???" -- vaxry - CBox expandBox = CBox{PLAYER->realPosition->value(), PLAYER->realSize->value()}; + CBox expandBox = CBox{PLAYER->m_realPosition->value(), PLAYER->m_realSize->value()}; expandBox.expand(5); g_pHyprRenderer->damageBox(expandBox); - PMONITOR = g_pCompositor->getMonitorFromVector(PLAYER->realPosition->goal() + PLAYER->realSize->goal() / 2.F); + PMONITOR = g_pCompositor->getMonitorFromVector(PLAYER->m_realPosition->goal() + PLAYER->m_realSize->goal() / 2.F); if (!PMONITOR) return; - animationsDisabled = animationsDisabled || PLAYER->noAnimations; + animationsDisabled = animationsDisabled || PLAYER->m_noAnimations; } const auto SPENT = av.getPercent(); @@ -174,11 +174,11 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { g_pHyprRenderer->damageWindow(w); } } else if (PLAYER) { - if (PLAYER->layer <= 1) + if (PLAYER->m_layer <= 1) g_pHyprOpenGL->markBlurDirtyForMonitor(PMONITOR); // some fucking layers miss 1 pixel??? - CBox expandBox = CBox{PLAYER->realPosition->value(), PLAYER->realSize->value()}; + CBox expandBox = CBox{PLAYER->m_realPosition->value(), PLAYER->m_realSize->value()}; expandBox.expand(5); g_pHyprRenderer->damageBox(expandBox); } diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 5fef7b5f..6ea441e8 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -618,7 +618,7 @@ void CSeatManager::setGrab(SP grab) { } if (!refocus && layer) - refocus = layer->interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; + refocus = layer->m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; if (refocus) { auto candidate = g_pCompositor->m_lastWindow.lock(); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index a1158f42..4aadff96 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -156,7 +156,7 @@ void CInputManager::sendMotionEventsToFocused() { const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition->goal() : (PLS ? Vector2D{PLS->geometry.x, PLS->geometry.y} : Vector2D{})); + const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition->goal() : (PLS ? Vector2D{PLS->m_geometry.x, PLS->m_geometry.y} : Vector2D{})); m_bEmptyFocusCursorSet = false; @@ -310,8 +310,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &g_pInputManager->m_dExclusiveLSes, &surfaceCoords, &pFoundLayerSurface); if (!foundSurface) { - foundSurface = (*g_pInputManager->m_dExclusiveLSes.begin())->surface->resource(); - surfacePos = (*g_pInputManager->m_dExclusiveLSes.begin())->realPosition->goal(); + foundSurface = (*g_pInputManager->m_dExclusiveLSes.begin())->m_surface->resource(); + surfacePos = (*g_pInputManager->m_dExclusiveLSes.begin())->m_realPosition->goal(); } } @@ -483,7 +483,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (!refocus && g_pCompositor->m_lastFocus) { const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - if (PLS && PLS->layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) + if (PLS && PLS->m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) allowKeyboardRefocus = false; } @@ -568,8 +568,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { unsetCursorImage(); } - if (pFoundLayerSurface && (pFoundLayerSurface->layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) && FOLLOWMOUSE != 3 && - (allowKeyboardRefocus || pFoundLayerSurface->layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE)) { + if (pFoundLayerSurface && (pFoundLayerSurface->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) && FOLLOWMOUSE != 3 && + (allowKeyboardRefocus || pFoundLayerSurface->m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE)) { g_pCompositor->focusSurface(foundSurface); } @@ -1456,14 +1456,14 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { if (!foundSurface) { foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &surfaceCoords, &pFoundLayerSurface); - if (pFoundLayerSurface && pFoundLayerSurface->interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) + if (pFoundLayerSurface && pFoundLayerSurface->m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) foundSurface = nullptr; } if (!foundSurface) { foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); - if (pFoundLayerSurface && pFoundLayerSurface->interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) + if (pFoundLayerSurface && pFoundLayerSurface->m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) foundSurface = nullptr; } diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index 24971c7c..76119aab 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -41,7 +41,7 @@ void CInputManager::beginWorkspaceSwipe() { if (PWORKSPACE->m_bHasFullscreenWindow) { for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { - *ls->alpha = 1.f; + *ls->m_alpha = 1.f; } } } @@ -187,7 +187,7 @@ void CInputManager::endWorkspaceSwipe() { // apply alpha for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { - *ls->alpha = pSwitchedTo->m_bHasFullscreenWindow && pSwitchedTo->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; + *ls->m_alpha = pSwitchedTo->m_bHasFullscreenWindow && pSwitchedTo->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 6ce1033b..5a030335 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -42,7 +42,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { if (m_sActiveSwipe.pWorkspaceBegin) { return; // TODO: Don't swipe if you touched a floating window. - } else if (*PSWIPETOUCH && (m_pFoundLSToFocus.expired() || m_pFoundLSToFocus->layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { + } else if (*PSWIPETOUCH && (m_pFoundLSToFocus.expired() || m_pFoundLSToFocus->m_layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { const auto PWORKSPACE = PMONITOR->activeWorkspace; const auto STYLE = PWORKSPACE->m_vRenderOffset->getStyle(); const bool VERTANIMS = STYLE == "slidevert" || STYLE.starts_with("slidefadevert"); @@ -88,7 +88,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } } else if (!m_sTouchData.touchFocusLS.expired()) { - local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusLS->geometry.pos(); + local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusLS->m_geometry.pos(); m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } else @@ -158,7 +158,7 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); } else if (!m_sTouchData.touchFocusLS.expired()) { - const auto PMONITOR = m_sTouchData.touchFocusLS->monitor.lock(); + const auto PMONITOR = m_sTouchData.touchFocusLS->m_monitor.lock(); g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 3e9348d6..0349cac1 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2098,7 +2098,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { for (auto const& m : g_pCompositor->m_monitors) { for (auto const& lsl : m->m_aLayerSurfaceLayers) { for (auto const& ls : lsl) { - if (!ls->layerSurface || ls->xray != 1) + if (!ls->m_layerSurface || ls->m_xray != 1) continue; // if (ls->layerSurface->surface->opaque && ls->alpha->value() >= 1.f) @@ -2173,13 +2173,13 @@ bool CHyprOpenGLImpl::shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWin if (pWindow && pWindow->m_sWindowData.xray.hasValue() && !pWindow->m_sWindowData.xray.valueOrDefault()) return false; - if (pLayer && pLayer->xray == 0) + if (pLayer && pLayer->m_xray == 0) return false; if ((*PBLURNEWOPTIMIZE && pWindow && !pWindow->m_bIsFloating && !pWindow->onSpecialWorkspace()) || *PBLURXRAY) return true; - if ((pLayer && pLayer->xray == 1) || (pWindow && pWindow->m_sWindowData.xray.valueOrDefault())) + if ((pLayer && pLayer->m_xray == 1) || (pWindow && pWindow->m_sWindowData.xray.valueOrDefault())) return true; return false; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index ffc4002e..bf93d072 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -650,13 +650,13 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T pWindow->m_pPopupHead->breadthfirst( [this, &renderdata](WP popup, void* data) { - if (!popup->m_pWLSurface || !popup->m_pWLSurface->resource() || !popup->m_bMapped) + if (!popup->m_wlSurface || !popup->m_wlSurface->resource() || !popup->m_mapped) return; const auto pos = popup->coordsRelativeToParent(); const Vector2D oldPos = renderdata.pos; renderdata.pos += pos; - popup->m_pWLSurface->resource()->breadthfirst( + popup->m_wlSurface->resource()->breadthfirst( [this, &renderdata](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; renderdata.texture = s->current.texture; @@ -696,14 +696,14 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s static auto PDIMAROUND = CConfigValue("decoration:dim_around"); - if (*PDIMAROUND && pLayer->dimAround && !m_bRenderingSnapshot && !popups) { + if (*PDIMAROUND && pLayer->m_dimAround && !m_bRenderingSnapshot && !popups) { CRectPassElement::SRectData data; data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.y}; - data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pLayer->alpha->value()); + data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pLayer->m_alpha->value()); m_sRenderPass.add(makeShared(data)); } - if (pLayer->fadingOut) { + if (pLayer->m_fadingOut) { if (!popups) renderSnapshot(pLayer); return; @@ -713,33 +713,33 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s TRACY_GPU_ZONE("RenderLayer"); - const auto REALPOS = pLayer->realPosition->value(); - const auto REALSIZ = pLayer->realSize->value(); + const auto REALPOS = pLayer->m_realPosition->value(); + const auto REALSIZ = pLayer->m_realSize->value(); CSurfacePassElement::SRenderData renderdata = {pMonitor, time, REALPOS}; - renderdata.fadeAlpha = pLayer->alpha->value(); - renderdata.blur = pLayer->forceBlur && *PBLUR; - renderdata.surface = pLayer->surface->resource(); + renderdata.fadeAlpha = pLayer->m_alpha->value(); + renderdata.blur = pLayer->m_forceBlur && *PBLUR; + renderdata.surface = pLayer->m_surface->resource(); renderdata.decorate = false; renderdata.w = REALSIZ.x; renderdata.h = REALSIZ.y; renderdata.pLS = pLayer; - renderdata.blockBlurOptimization = pLayer->layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM || pLayer->layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; + renderdata.blockBlurOptimization = pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM || pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; renderdata.clipBox = CBox{0, 0, pMonitor->vecSize.x, pMonitor->vecSize.y}.scale(pMonitor->scale); - if (renderdata.blur && pLayer->ignoreAlpha) { + if (renderdata.blur && pLayer->m_ignoreAlpha) { renderdata.discardMode |= DISCARD_ALPHA; - renderdata.discardOpacity = pLayer->ignoreAlphaValue; + renderdata.discardOpacity = pLayer->m_ignoreAlphaValue; } if (!popups) - pLayer->surface->resource()->breadthfirst( + pLayer->m_surface->resource()->breadthfirst( [this, &renderdata, &pLayer](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; renderdata.texture = s->current.texture; renderdata.surface = s; - renderdata.mainSurface = s == pLayer->surface->resource(); + renderdata.mainSurface = s == pLayer->m_surface->resource(); m_sRenderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, @@ -748,18 +748,18 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.squishOversized = false; // don't squish popups renderdata.dontRound = true; renderdata.popup = true; - renderdata.blur = pLayer->forceBlurPopups; + renderdata.blur = pLayer->m_forceBlurPopups; renderdata.surfaceCounter = 0; if (popups) { - pLayer->popupHead->breadthfirst( + pLayer->m_popupHead->breadthfirst( [this, &renderdata](WP popup, void* data) { - if (!popup->m_pWLSurface || !popup->m_pWLSurface->resource() || !popup->m_bMapped) + if (!popup->m_wlSurface || !popup->m_wlSurface->resource() || !popup->m_mapped) return; Vector2D pos = popup->coordsRelativeToParent(); renderdata.localPos = pos; - renderdata.texture = popup->m_pWLSurface->resource()->current.texture; - renderdata.surface = popup->m_pWLSurface->resource(); + renderdata.texture = popup->m_wlSurface->resource()->current.texture; + renderdata.surface = popup->m_wlSurface->resource(); renderdata.mainSurface = false; m_sRenderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; @@ -1603,10 +1603,10 @@ void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { for (auto const& ls : lsl) { - if (ls->fadingOut || !ls->surface->resource()) + if (ls->m_fadingOut || !ls->m_surface->resource()) continue; - ls->surface->resource()->breadthfirst([now](SP r, const Vector2D& offset, void* d) { r->frame(now); }, nullptr); + ls->m_surface->resource()->breadthfirst([now](SP r, const Vector2D& offset, void* d) { r->frame(now); }, nullptr); } } } @@ -1682,10 +1682,10 @@ void CHyprRenderer::arrangeLayerArray(PHLMONITOR pMonitor, const std::vectorvecPosition.x, pMonitor->vecPosition.y, pMonitor->vecSize.x, pMonitor->vecSize.y}; for (auto const& ls : layerSurfaces) { - if (!ls || ls->fadingOut || ls->readyToDelete || !ls->layerSurface || ls->noProcess) + if (!ls || ls->m_fadingOut || ls->m_readyToDelete || !ls->m_layerSurface || ls->m_noProcess) continue; - const auto PLAYER = ls->layerSurface; + const auto PLAYER = ls->m_layerSurface; const auto PSTATE = &PLAYER->current; if (exclusiveZone != (PSTATE->exclusive > 0)) continue; @@ -1696,7 +1696,7 @@ void CHyprRenderer::arrangeLayerArray(PHLMONITOR pMonitor, const std::vectorgeometry.width, ls->geometry.height}; + const Vector2D OLDSIZE = {ls->m_geometry.width, ls->m_geometry.height}; CBox box = {{}, PSTATE->desiredSize}; // Horizontal axis @@ -1753,15 +1753,15 @@ void CHyprRenderer::arrangeLayerArray(PHLMONITOR pMonitor, const std::vectorgeometry = box; + ls->m_geometry = box; applyExclusive(*usableArea, PSTATE->anchor, PSTATE->exclusive, PSTATE->exclusiveEdge, PSTATE->margin.top, PSTATE->margin.right, PSTATE->margin.bottom, PSTATE->margin.left); if (Vector2D{box.width, box.height} != OLDSIZE) - ls->layerSurface->configure(box.size()); + ls->m_layerSurface->configure(box.size()); - *ls->realPosition = box.pos(); - *ls->realSize = box.size(); + *ls->m_realPosition = box.pos(); + *ls->m_realSize = box.size(); } } @@ -1792,7 +1792,7 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) { } for (auto& la : PMONITOR->m_aLayerSurfaceLayers) { - std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->order > b->order; }); + std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->m_order > b->m_order; }); } for (auto const& la : PMONITOR->m_aLayerSurfaceLayers) @@ -2139,7 +2139,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { return; for (auto const& topls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { - if (topls->alpha->value() != 0.f) + if (topls->m_alpha->value() != 0.f) return; } @@ -2463,7 +2463,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { // we trust the window is valid. - const auto PMONITOR = pLayer->monitor.lock(); + const auto PMONITOR = pLayer->m_monitor.lock(); if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) return; @@ -2485,13 +2485,13 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - const auto BLURLSSTATUS = pLayer->forceBlur; - pLayer->forceBlur = false; + const auto BLURLSSTATUS = pLayer->m_forceBlur; + pLayer->m_forceBlur = false; // draw the layer renderLayer(pLayer, PMONITOR, Time::steadyNow()); - pLayer->forceBlur = BLURLSSTATUS; + pLayer->m_forceBlur = BLURLSSTATUS; endRender(); @@ -2556,18 +2556,20 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) { if (!FBDATA->getTexture()) return; - const auto PMONITOR = pLayer->monitor.lock(); + const auto PMONITOR = pLayer->m_monitor.lock(); CBox layerBox; // some mafs to figure out the correct box // the originalClosedPos is relative to the monitor's pos - Vector2D scaleXY = Vector2D((PMONITOR->scale * pLayer->realSize->value().x / (pLayer->geometry.w * PMONITOR->scale)), - (PMONITOR->scale * pLayer->realSize->value().y / (pLayer->geometry.h * PMONITOR->scale))); + Vector2D scaleXY = Vector2D((PMONITOR->scale * pLayer->m_realSize->value().x / (pLayer->m_geometry.w * PMONITOR->scale)), + (PMONITOR->scale * pLayer->m_realSize->value().y / (pLayer->m_geometry.h * PMONITOR->scale))); layerBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x; layerBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y; - layerBox.x = ((pLayer->realPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - (((pLayer->geometry.x - PMONITOR->vecPosition.x) * PMONITOR->scale) * scaleXY.x); - layerBox.y = ((pLayer->realPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - (((pLayer->geometry.y - PMONITOR->vecPosition.y) * PMONITOR->scale) * scaleXY.y); + layerBox.x = + ((pLayer->m_realPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - (((pLayer->m_geometry.x - PMONITOR->vecPosition.x) * PMONITOR->scale) * scaleXY.x); + layerBox.y = + ((pLayer->m_realPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - (((pLayer->m_geometry.y - PMONITOR->vecPosition.y) * PMONITOR->scale) * scaleXY.y); CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y}; @@ -2575,7 +2577,7 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) { data.flipEndFrame = true; data.tex = FBDATA->getTexture(); data.box = layerBox; - data.a = pLayer->alpha->value(); + data.a = pLayer->m_alpha->value(); data.damage = fakeDamage; m_sRenderPass.add(makeShared(data)); From 02d7badd15601e52547e2f3e1c594ceede0a0455 Mon Sep 17 00:00:00 2001 From: davc0n Date: Fri, 25 Apr 2025 02:37:12 +0200 Subject: [PATCH 0103/1077] workspaces: refactor class member vars (#10167) --- src/Compositor.cpp | 116 ++++----- src/config/ConfigManager.cpp | 6 +- src/debug/HyprCtl.cpp | 31 ++- src/desktop/LayerSurface.cpp | 2 +- src/desktop/Popup.cpp | 6 +- src/desktop/Rule.cpp | 10 +- src/desktop/Rule.hpp | 4 +- src/desktop/Subsurface.cpp | 156 ++++++------ src/desktop/Subsurface.hpp | 22 +- src/desktop/WLSurface.cpp | 154 ++++++------ src/desktop/WLSurface.hpp | 38 +-- src/desktop/Window.cpp | 28 +-- src/desktop/Workspace.cpp | 238 +++++++++--------- src/desktop/Workspace.hpp | 40 +-- src/events/Windows.cpp | 30 +-- src/helpers/MiscFunctions.cpp | 28 +-- src/helpers/Monitor.cpp | 62 ++--- src/layout/DwindleLayout.cpp | 14 +- src/layout/IHyprLayout.cpp | 8 +- src/layout/MasterLayout.cpp | 40 +-- src/managers/AnimationManager.cpp | 6 +- src/managers/KeybindManager.cpp | 56 ++--- src/managers/PointerManager.cpp | 2 +- src/managers/XWaylandManager.cpp | 2 +- src/managers/input/IdleInhibitor.cpp | 2 +- src/managers/input/InputManager.cpp | 6 +- src/managers/input/Swipe.cpp | 126 +++++----- src/managers/input/Touch.cpp | 4 +- src/protocols/AlphaModifier.cpp | 6 +- src/protocols/HyprlandSurface.cpp | 8 +- src/protocols/PointerConstraints.cpp | 4 +- src/render/OpenGL.cpp | 8 +- src/render/Renderer.cpp | 82 +++--- .../decorations/CHyprBorderDecoration.cpp | 6 +- .../decorations/CHyprDropShadowDecoration.cpp | 10 +- .../decorations/CHyprGroupBarDecoration.cpp | 2 +- src/render/pass/SurfacePassElement.cpp | 12 +- 37 files changed, 687 insertions(+), 688 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 9d8bb62e..d4e5bc43 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -952,7 +952,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper const WORKSPACEID WSPID = special ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); const auto PWORKSPACE = getWorkspaceByID(WSPID); - if (PWORKSPACE->m_bHasFullscreenWindow && !(properties & SKIP_FULLSCREEN_PRIORITY)) + if (PWORKSPACE->m_hasFullscreenWindow && !(properties & SKIP_FULLSCREEN_PRIORITY)) return PWORKSPACE->getFullscreenWindow(); auto found = floating(false); @@ -1145,10 +1145,10 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface if (!pWindow->m_pWorkspace || !pWindow->m_pWorkspace->isVisible()) { const auto PWORKSPACE = pWindow->m_pWorkspace; // This is to fix incorrect feedback on the focus history. - PWORKSPACE->m_pLastFocusedWindow = pWindow; + PWORKSPACE->m_lastFocusedWindow = pWindow; if (m_lastMonitor->activeWorkspace) PWORKSPACE->rememberPrevWorkspace(m_lastMonitor->activeWorkspace); - if (PWORKSPACE->m_bIsSpecialWorkspace) + if (PWORKSPACE->m_isSpecialWorkspace) m_lastMonitor->changeWorkspace(PWORKSPACE, false, true); // if special ws, open on current monitor else if (PMONITOR) PMONITOR->changeWorkspace(PWORKSPACE, false, true); @@ -1327,7 +1327,7 @@ PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) { PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) { for (auto const& w : m_workspaces) { - if (w->m_iID == id && !w->inert()) + if (w->m_id == id && !w->inert()) return w; } @@ -1340,7 +1340,7 @@ void CCompositor::sanityCheckWorkspaces() { const auto& WORKSPACE = *it; // If ref == 1, only the compositor holds a ref, which means it's inactive and has no mapped windows. - if (!WORKSPACE->m_bPersistent && WORKSPACE.strongRef() == 1) { + if (!WORKSPACE->m_persistent && WORKSPACE.strongRef() == 1) { it = m_workspaces.erase(it); continue; } @@ -1551,13 +1551,13 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks if (w == ignoreWindow || !w->m_pWorkspace || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) continue; - if (pWorkspace->m_pMonitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) + if (pWorkspace->m_monitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) continue; - if (pWorkspace->m_bHasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) + if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) continue; - if (!*PMONITORFALLBACK && pWorkspace->m_pMonitor != w->m_pMonitor) + if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_pMonitor) continue; const auto BWINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved(); @@ -1640,13 +1640,13 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks if (w == ignoreWindow || !w->m_bIsMapped || !w->m_pWorkspace || w->isHidden() || (!w->isFullscreen() && !w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) continue; - if (pWorkspace->m_pMonitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) + if (pWorkspace->m_monitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) continue; - if (pWorkspace->m_bHasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) + if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) continue; - if (!*PMONITORFALLBACK && pWorkspace->m_pMonitor != w->m_pMonitor) + if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_pMonitor) continue; const auto DIST = w->middle().distance(box.middle()); @@ -1662,7 +1662,7 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks } } - if (!leaderWindow && pWorkspace->m_bHasFullscreenWindow) + if (!leaderWindow && pWorkspace->m_hasFullscreenWindow) leaderWindow = pWorkspace->getFullscreenWindow(); } @@ -1722,8 +1722,8 @@ PHLWINDOW CCompositor::getWindowCycle(PHLWINDOW cur, bool focusableOnly, std::op WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() { WORKSPACEID lowest = -1337 + 1; for (auto const& w : m_workspaces) { - if (w->m_iID < -1 && w->m_iID < lowest) - lowest = w->m_iID; + if (w->m_id < -1 && w->m_id < lowest) + lowest = w->m_id; } return lowest - 1; @@ -1731,7 +1731,7 @@ WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() { PHLWORKSPACE CCompositor::getWorkspaceByName(const std::string& name) { for (auto const& w : m_workspaces) { - if (w->m_szName == name && !w->inert()) + if (w->m_name == name && !w->inert()) return w; } @@ -1956,7 +1956,7 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor const auto PWORKSPACEA = pMonitorA->activeWorkspace; const auto PWORKSPACEB = pMonitorB->activeWorkspace; - PWORKSPACEA->m_pMonitor = pMonitorB; + PWORKSPACEA->m_monitor = pMonitorB; PWORKSPACEA->moveToMonitor(pMonitorB->ID); for (auto const& w : m_windows) { @@ -1981,7 +1981,7 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor } } - PWORKSPACEB->m_pMonitor = pMonitorA; + PWORKSPACEB->m_monitor = pMonitorA; PWORKSPACEB->moveToMonitor(pMonitorA->ID); for (auto const& w : m_windows) { @@ -2024,17 +2024,17 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor (g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING))); const auto PNEWWORKSPACE = pMonitorA->ID == g_pCompositor->m_lastMonitor->ID ? PWORKSPACEB : PWORKSPACEA; - g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspace", .data = PNEWWORKSPACE->m_szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspacev2", .data = std::format("{},{}", PNEWWORKSPACE->m_iID, PNEWWORKSPACE->m_szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspace", .data = PNEWWORKSPACE->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspacev2", .data = std::format("{},{}", PNEWWORKSPACE->m_id, PNEWWORKSPACE->m_name)}); EMIT_HOOK_EVENT("workspace", PNEWWORKSPACE); } // event - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEA->m_szName + "," + pMonitorB->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEA->m_iID, PWORKSPACEA->m_szName, pMonitorB->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEA->m_name + "," + pMonitorB->szName}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEA->m_id, PWORKSPACEA->m_name, pMonitorB->szName)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{PWORKSPACEA, pMonitorB})); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEB->m_szName + "," + pMonitorA->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEB->m_iID, PWORKSPACEB->m_szName, pMonitorA->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEB->m_name + "," + pMonitorA->szName}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEB->m_id, PWORKSPACEB->m_name, pMonitorA->szName)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{PWORKSPACEB, pMonitorA})); } @@ -2119,23 +2119,23 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo if (!pWorkspace || !pMonitor) return; - if (pWorkspace->m_pMonitor == pMonitor) + if (pWorkspace->m_monitor == pMonitor) return; - Debug::log(LOG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_iID, pMonitor->ID); + Debug::log(LOG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_id, pMonitor->ID); - const auto POLDMON = pWorkspace->m_pMonitor.lock(); + const auto POLDMON = pWorkspace->m_monitor.lock(); const bool SWITCHINGISACTIVE = POLDMON ? POLDMON->activeWorkspace == pWorkspace : false; // fix old mon WORKSPACEID nextWorkspaceOnMonitorID = WORKSPACE_INVALID; if (!SWITCHINGISACTIVE) - nextWorkspaceOnMonitorID = pWorkspace->m_iID; + nextWorkspaceOnMonitorID = pWorkspace->m_id; else { for (auto const& w : m_workspaces) { - if (w->m_pMonitor == POLDMON && w->m_iID != pWorkspace->m_iID && !w->m_bIsSpecialWorkspace) { - nextWorkspaceOnMonitorID = w->m_iID; + if (w->m_monitor == POLDMON && w->m_id != pWorkspace->m_id && !w->m_isSpecialWorkspace) { + nextWorkspaceOnMonitorID = w->m_id; break; } } @@ -2161,7 +2161,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo } // move the workspace - pWorkspace->m_pMonitor = pMonitor; + pWorkspace->m_monitor = pMonitor; pWorkspace->moveToMonitor(pMonitor->ID); for (auto const& w : m_windows) { @@ -2195,10 +2195,10 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo } if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_lastMonitor) { // if it was active, preserve its' status. If it wasn't, don't. - Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_iID); + Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_id); if (valid(pMonitor->activeWorkspace)) { - pMonitor->activeWorkspace->m_bVisible = false; + pMonitor->activeWorkspace->m_visible = false; pMonitor->activeWorkspace->startAnim(false, false); } @@ -2210,7 +2210,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->ID); pWorkspace->startAnim(true, true, true); - pWorkspace->m_bVisible = true; + pWorkspace->m_visible = true; if (!noWarpCursor) g_pPointerManager->warpTo(pMonitor->vecPosition + pMonitor->vecTransformedSize / 2.F); @@ -2230,8 +2230,8 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo updateSuspendedStates(); // event - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = pWorkspace->m_szName + "," + pMonitor->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", pWorkspace->m_iID, pWorkspace->m_szName, pMonitor->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = pWorkspace->m_name + "," + pMonitor->szName}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", pWorkspace->m_id, pWorkspace->m_name, pMonitor->szName)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{pWorkspace, pMonitor})); } @@ -2240,10 +2240,10 @@ bool CCompositor::workspaceIDOutOfBounds(const WORKSPACEID& id) { WORKSPACEID highestID = INT64_MIN; for (auto const& w : m_workspaces) { - if (w->m_bIsSpecialWorkspace) + if (w->m_isSpecialWorkspace) continue; - lowestID = std::min(w->m_iID, lowestID); - highestID = std::max(w->m_iID, highestID); + lowestID = std::min(w->m_id, lowestID); + highestID = std::max(w->m_id, highestID); } return std::clamp(id, lowestID, highestID) != id; @@ -2254,7 +2254,7 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { if (!pWorkspace) return; - const auto FULLSCREEN = pWorkspace->m_bHasFullscreenWindow; + const auto FULLSCREEN = pWorkspace->m_hasFullscreenWindow; for (auto const& w : g_pCompositor->m_windows) { if (w->m_pWorkspace == pWorkspace) { @@ -2269,12 +2269,12 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { } } - const auto PMONITOR = pWorkspace->m_pMonitor.lock(); + const auto PMONITOR = pWorkspace->m_monitor.lock(); - if (pWorkspace->m_iID == PMONITOR->activeWorkspaceID() || pWorkspace->m_iID == PMONITOR->activeSpecialWorkspaceID()) { + if (pWorkspace->m_id == PMONITOR->activeWorkspaceID() || pWorkspace->m_id == PMONITOR->activeSpecialWorkspaceID()) { for (auto const& ls : PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { if (!ls->m_fadingOut) - *ls->m_alpha = FULLSCREEN && pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; + *ls->m_alpha = FULLSCREEN && pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } } @@ -2322,7 +2322,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS PWINDOW->m_bPinFullscreened = true; } - if (PWORKSPACE->m_bHasFullscreenWindow && !PWINDOW->isFullscreen()) + if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen()) setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); const bool CHANGEINTERNAL = !PWINDOW->m_bPinned && CURRENT_EFFECTIVE_MODE != EFFECTIVE_MODE; @@ -2349,8 +2349,8 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS g_pLayoutManager->getCurrentLayout()->fullscreenRequestForWindow(PWINDOW, CURRENT_EFFECTIVE_MODE, EFFECTIVE_MODE); PWINDOW->m_sFullscreenState.internal = state.internal; - PWORKSPACE->m_efFullscreenMode = EFFECTIVE_MODE; - PWORKSPACE->m_bHasFullscreenWindow = EFFECTIVE_MODE != FSMODE_NONE; + PWORKSPACE->m_fullscreenMode = EFFECTIVE_MODE; + PWORKSPACE->m_hasFullscreenWindow = EFFECTIVE_MODE != FSMODE_NONE; g_pEventManager->postEvent(SHyprIPCEvent{.event = "fullscreen", .data = std::to_string((int)EFFECTIVE_MODE != FSMODE_NONE)}); EMIT_HOOK_EVENT("fullscreen", PWINDOW); @@ -2644,7 +2644,7 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO const auto PWORKSPACE = m_workspaces.emplace_back(CWorkspace::create(id, PMONITOR, NAME, SPECIAL, isEmpty)); - PWORKSPACE->m_fAlpha->setValueAndWarp(0); + PWORKSPACE->m_alpha->setValueAndWarp(0); return PWORKSPACE; } @@ -2660,8 +2660,8 @@ void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) { const auto PWORKSPACE = pMonitor->activeWorkspace; - const auto WORKSPACE_ID = PWORKSPACE ? std::to_string(PWORKSPACE->m_iID) : std::to_string(WORKSPACE_INVALID); - const auto WORKSPACE_NAME = PWORKSPACE ? PWORKSPACE->m_szName : "?"; + const auto WORKSPACE_ID = PWORKSPACE ? std::to_string(PWORKSPACE->m_id) : std::to_string(WORKSPACE_INVALID); + const auto WORKSPACE_NAME = PWORKSPACE ? PWORKSPACE->m_name : "?"; g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmon", .data = pMonitor->szName + "," + WORKSPACE_NAME}); g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmonv2", .data = pMonitor->szName + "," + WORKSPACE_ID}); @@ -2677,8 +2677,8 @@ bool CCompositor::isWorkspaceSpecial(const WORKSPACEID& id) { WORKSPACEID CCompositor::getNewSpecialID() { WORKSPACEID highest = SPECIAL_WORKSPACE_START; for (auto const& ws : m_workspaces) { - if (ws->m_bIsSpecialWorkspace && ws->m_iID > highest) { - highest = ws->m_iID; + if (ws->m_isSpecialWorkspace && ws->m_id > highest) { + highest = ws->m_id; } } @@ -2717,7 +2717,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor if (!pWindow || !pWorkspace) return; - if (pWindow->m_bPinned && pWorkspace->m_bIsSpecialWorkspace) + if (pWindow->m_bPinned && pWorkspace->m_isSpecialWorkspace) return; if (pWindow->m_pWorkspace == pWorkspace) @@ -2733,13 +2733,13 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor const PHLWINDOW pFirstWindowOnWorkspace = pWorkspace->getFirstWindow(); const int visibleWindowsOnWorkspace = pWorkspace->getWindows(std::nullopt, true); const auto POSTOMON = pWindow->m_vRealPosition->goal() - (pWindow->m_pMonitor ? pWindow->m_pMonitor->vecPosition : Vector2D{}); - const auto PWORKSPACEMONITOR = pWorkspace->m_pMonitor.lock(); + const auto PWORKSPACEMONITOR = pWorkspace->m_monitor.lock(); if (!pWindow->m_bIsFloating) g_pLayoutManager->getCurrentLayout()->onWindowRemovedTiling(pWindow); pWindow->moveToWorkspace(pWorkspace); - pWindow->m_pMonitor = pWorkspace->m_pMonitor; + pWindow->m_pMonitor = pWorkspace->m_monitor; static auto PGROUPONMOVETOWORKSPACE = CConfigValue("group:group_on_movetoworkspace"); if (*PGROUPONMOVETOWORKSPACE && visibleWindowsOnWorkspace == 1 && pFirstWindowOnWorkspace && pFirstWindowOnWorkspace != pWindow && @@ -2950,8 +2950,8 @@ void CCompositor::setPreferredScaleForSurface(SP pSurface, d return; } - PSURFACE->m_fLastScale = scale; - PSURFACE->m_iLastScale = static_cast(std::ceil(scale)); + PSURFACE->m_lastScaleFloat = scale; + PSURFACE->m_lastScaleInt = static_cast(std::ceil(scale)); } void CCompositor::setPreferredTransformForSurface(SP pSurface, wl_output_transform transform) { @@ -2963,7 +2963,7 @@ void CCompositor::setPreferredTransformForSurface(SP pSurfac return; } - PSURFACE->m_eLastTransform = transform; + PSURFACE->m_lastTransform = transform; } void CCompositor::updateSuspendedStates() { @@ -3115,7 +3115,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorm_bPersistent = true; + PWORKSPACE->m_persistent = true; if (!PMONITOR) { Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve monitor for {}, skipping", rule.monitor); @@ -3123,7 +3123,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorm_pMonitor == PMONITOR) { + if (PWORKSPACE->m_monitor == PMONITOR) { Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->szName); continue; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 3ead5c5b..872456a6 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1452,7 +1452,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, continue; if (rule->szWorkspace.starts_with("name:")) { - if (PWORKSPACE->m_szName != rule->szWorkspace.substr(5)) + if (PWORKSPACE->m_name != rule->szWorkspace.substr(5)) continue; } else { // number @@ -1461,7 +1461,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, const int64_t ID = std::stoll(rule->szWorkspace); - if (PWORKSPACE->m_iID != ID) + if (PWORKSPACE->m_id != ID) continue; } } @@ -1713,7 +1713,7 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { if (!PWORKSPACE) return; // ??? - bool wantVRR = PWORKSPACE->m_bHasFullscreenWindow && (PWORKSPACE->m_efFullscreenMode & FSMODE_FULLSCREEN); + bool wantVRR = PWORKSPACE->m_hasFullscreenWindow && (PWORKSPACE->m_fullscreenMode & FSMODE_FULLSCREEN); if (wantVRR && USEVRR == 3) { const auto contentType = PWORKSPACE->getFullscreenWindow()->getContentType(); wantVRR = contentType == CONTENT_TYPE_GAME || contentType == CONTENT_TYPE_VIDEO; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 72dde67f..e66e4208 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -130,8 +130,8 @@ std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer m->ID, escapeJSONStrings(m->szName), escapeJSONStrings(m->szShortDescription), escapeJSONStrings(m->output->make), escapeJSONStrings(m->output->model), escapeJSONStrings(m->output->serial), (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, - m->activeWorkspaceID(), (!m->activeWorkspace ? "" : escapeJSONStrings(m->activeWorkspace->m_szName)), m->activeSpecialWorkspaceID(), - escapeJSONStrings(m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_szName : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, + m->activeWorkspaceID(), (!m->activeWorkspace ? "" : escapeJSONStrings(m->activeWorkspace->m_name)), m->activeSpecialWorkspaceID(), + escapeJSONStrings(m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_name : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m == g_pCompositor->m_lastMonitor ? "true" : "false"), (m->dpmsStatus ? "true" : "false"), (m->output->state->state().adaptiveSync ? "true" : "false"), (uint64_t)m->solitaryClient.get(), (m->tearingState.activelyTearing ? "true" : "false"), (uint64_t)m->lastScanout.get(), (m->m_bEnabled ? "false" : "true"), @@ -143,8 +143,8 @@ std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer "dpmsStatus: {}\n\tvrr: {}\n\tsolitary: {:x}\n\tactivelyTearing: {}\n\tdirectScanoutTo: {:x}\n\tdisabled: {}\n\tcurrentFormat: {}\n\tmirrorOf: " "{}\n\tavailableModes: {}\n\n", m->szName, m->ID, (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, m->szShortDescription, - m->output->make, m->output->model, m->output->serial, m->activeWorkspaceID(), (!m->activeWorkspace ? "" : m->activeWorkspace->m_szName), - m->activeSpecialWorkspaceID(), (m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_szName : ""), (int)m->vecReservedTopLeft.x, + m->output->make, m->output->model, m->output->serial, m->activeWorkspaceID(), (!m->activeWorkspace ? "" : m->activeWorkspace->m_name), + m->activeSpecialWorkspaceID(), (m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_name : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m == g_pCompositor->m_lastMonitor ? "yes" : "no"), (int)m->dpmsStatus, m->output->state->state().adaptiveSync, (uint64_t)m->solitaryClient.get(), m->tearingState.activelyTearing, (uint64_t)m->lastScanout.get(), !m->m_bEnabled, formatToString(m->output->state->state().drmFormat), @@ -264,7 +264,7 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { }},)#", (uintptr_t)w.get(), (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, - escapeJSONStrings(!w->m_pWorkspace ? "" : w->m_pWorkspace->m_szName), ((int)w->m_bIsFloating == 1 ? "true" : "false"), (w->m_bIsPseudotiled ? "true" : "false"), + escapeJSONStrings(!w->m_pWorkspace ? "" : w->m_pWorkspace->m_name), ((int)w->m_bIsFloating == 1 ? "true" : "false"), (w->m_bIsPseudotiled ? "true" : "false"), (int64_t)w->monitorID(), escapeJSONStrings(w->m_szClass), escapeJSONStrings(w->m_szTitle), escapeJSONStrings(w->m_szInitialClass), escapeJSONStrings(w->m_szInitialTitle), w->getPID(), ((int)w->m_bIsX11 == 1 ? "true" : "false"), (w->m_bPinned ? "true" : "false"), (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_pSwallowed.get(), @@ -278,11 +278,10 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { "{}\n\tfullscreen: {}\n\tfullscreenClient: {}\n\tgrouped: {}\n\ttags: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\tinhibitingIdle: {}\n\txdgTag: " "{}\n\txdgDescription: {}\n\n", (uintptr_t)w.get(), w->m_szTitle, (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, - (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, - (!w->m_pWorkspace ? "" : w->m_pWorkspace->m_szName), (int)w->m_bIsFloating, (int)w->m_bIsPseudotiled, (int64_t)w->monitorID(), w->m_szClass, w->m_szTitle, - w->m_szInitialClass, w->m_szInitialTitle, w->getPID(), (int)w->m_bIsX11, (int)w->m_bPinned, (uint8_t)w->m_sFullscreenState.internal, - (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_pSwallowed.get(), getFocusHistoryID(w), - (int)g_pInputManager->isWindowInhibiting(w, false), w->xdgTag().value_or(""), w->xdgDescription().value_or("")); + (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, (!w->m_pWorkspace ? "" : w->m_pWorkspace->m_name), + (int)w->m_bIsFloating, (int)w->m_bIsPseudotiled, (int64_t)w->monitorID(), w->m_szClass, w->m_szTitle, w->m_szInitialClass, w->m_szInitialTitle, w->getPID(), + (int)w->m_bIsX11, (int)w->m_bPinned, (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), + (uintptr_t)w->m_pSwallowed.get(), getFocusHistoryID(w), (int)g_pInputManager->isWindowInhibiting(w, false), w->xdgTag().value_or(""), w->xdgDescription().value_or("")); } } @@ -314,7 +313,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque std::string CHyprCtl::getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat format) { const auto PLASTW = w->getLastFocusedWindow(); - const auto PMONITOR = w->m_pMonitor.lock(); + const auto PMONITOR = w->m_monitor.lock(); if (format == eHyprCtlOutputFormat::FORMAT_JSON) { return std::format(R"#({{ "id": {}, @@ -327,14 +326,14 @@ std::string CHyprCtl::getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat form "lastwindowtitle": "{}", "ispersistent": {} }})#", - w->m_iID, escapeJSONStrings(w->m_szName), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"), - escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), w->getWindows(), w->m_bHasFullscreenWindow ? "true" : "false", - (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_szTitle) : "", w->m_bPersistent ? "true" : "false"); + w->m_id, escapeJSONStrings(w->m_name), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"), + escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), w->getWindows(), w->m_hasFullscreenWindow ? "true" : "false", + (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_szTitle) : "", w->m_persistent ? "true" : "false"); } else { return std::format( "workspace ID {} ({}) on monitor {}:\n\tmonitorID: {}\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\tispersistent: {}\n\n", - w->m_iID, w->m_szName, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", w->getWindows(), (int)w->m_bHasFullscreenWindow, - (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_szTitle : "", (int)w->m_bPersistent); + w->m_id, w->m_name, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", w->getWindows(), (int)w->m_hasFullscreenWindow, + (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_szTitle : "", (int)w->m_persistent); } } diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index d8ba5f21..b44f652b 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -180,7 +180,7 @@ void CLayerSurface::onMap() { CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - const bool FULLSCREEN = PMONITOR->activeWorkspace && PMONITOR->activeWorkspace->m_bHasFullscreenWindow && PMONITOR->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN; + const bool FULLSCREEN = PMONITOR->activeWorkspace && PMONITOR->activeWorkspace->m_hasFullscreenWindow && PMONITOR->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN; startAnimation(!(m_layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP && FULLSCREEN && !GRABSFOCUS)); m_readyToDelete = false; diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index d67eec6c..8043bc31 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -172,7 +172,7 @@ void CPopup::onCommit(bool ignoreSiblings) { return; } - if (!m_windowOwner.expired() && (!m_windowOwner->m_bIsMapped || !m_windowOwner->m_pWorkspace->m_bVisible)) { + if (!m_windowOwner.expired() && (!m_windowOwner->m_bIsMapped || !m_windowOwner->m_pWorkspace->m_visible)) { m_lastSize = m_resource->surface->surface->current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); @@ -301,9 +301,9 @@ Vector2D CPopup::size() { void CPopup::sendScale() { if (!m_windowOwner.expired()) - g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_windowOwner->m_pWLSurface->m_fLastScale); + g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_windowOwner->m_pWLSurface->m_lastScaleFloat); else if (!m_layerOwner.expired()) - g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_layerOwner->m_surface->m_fLastScale); + g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_layerOwner->m_surface->m_lastScaleFloat); else UNREACHABLE(); } diff --git a/src/desktop/Rule.cpp b/src/desktop/Rule.cpp index aa87a483..93f38de0 100644 --- a/src/desktop/Rule.cpp +++ b/src/desktop/Rule.cpp @@ -6,17 +6,17 @@ CRuleRegexContainer::CRuleRegexContainer(const std::string& regex_) { const bool NEGATIVE = regex_.starts_with("negative:"); - negative = NEGATIVE; - regex = makeUnique(NEGATIVE ? regex_.substr(9) : regex_); + m_negative = NEGATIVE; + m_regex = makeUnique(NEGATIVE ? regex_.substr(9) : regex_); // TODO: maybe pop an error? - if (!regex->ok()) + if (!m_regex->ok()) Debug::log(ERR, "RuleRegexContainer: regex {} failed to parse!", regex_); } bool CRuleRegexContainer::passes(const std::string& str) const { - if (!regex) + if (!m_regex) return false; - return RE2::FullMatch(str, *regex) != negative; + return RE2::FullMatch(str, *m_regex) != m_negative; } \ No newline at end of file diff --git a/src/desktop/Rule.hpp b/src/desktop/Rule.hpp index 858b4ded..9d3de70e 100644 --- a/src/desktop/Rule.hpp +++ b/src/desktop/Rule.hpp @@ -16,6 +16,6 @@ class CRuleRegexContainer { bool passes(const std::string& str) const; private: - Hyprutils::Memory::CUniquePointer regex; - bool negative = false; + Hyprutils::Memory::CUniquePointer m_regex; + bool m_negative = false; }; \ No newline at end of file diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index d30692fe..60032ead 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -8,9 +8,9 @@ #include "../managers/input/InputManager.hpp" UP CSubsurface::create(PHLWINDOW pOwner) { - auto subsurface = UP(new CSubsurface()); - subsurface->m_pWindowParent = pOwner; - subsurface->m_pSelf = subsurface; + auto subsurface = UP(new CSubsurface()); + subsurface->m_windowParent = pOwner; + subsurface->m_self = subsurface; subsurface->initSignals(); subsurface->initExistingSubsurfaces(pOwner->m_pWLSurface->resource()); @@ -18,155 +18,155 @@ UP CSubsurface::create(PHLWINDOW pOwner) { } UP CSubsurface::create(WP pOwner) { - auto subsurface = UP(new CSubsurface()); - subsurface->m_pPopupParent = pOwner; - subsurface->m_pSelf = subsurface; + auto subsurface = UP(new CSubsurface()); + subsurface->m_popupParent = pOwner; + subsurface->m_self = subsurface; subsurface->initSignals(); subsurface->initExistingSubsurfaces(pOwner->m_wlSurface->resource()); return subsurface; } UP CSubsurface::create(SP pSubsurface, PHLWINDOW pOwner) { - auto subsurface = UP(new CSubsurface()); - subsurface->m_pWindowParent = pOwner; - subsurface->m_pSubsurface = pSubsurface; - subsurface->m_pSelf = subsurface; - subsurface->m_pWLSurface = CWLSurface::create(); - subsurface->m_pWLSurface->assign(pSubsurface->surface.lock(), subsurface.get()); + auto subsurface = UP(new CSubsurface()); + subsurface->m_windowParent = pOwner; + subsurface->m_subsurface = pSubsurface; + subsurface->m_self = subsurface; + subsurface->m_wlSurface = CWLSurface::create(); + subsurface->m_wlSurface->assign(pSubsurface->surface.lock(), subsurface.get()); subsurface->initSignals(); subsurface->initExistingSubsurfaces(pSubsurface->surface.lock()); return subsurface; } UP CSubsurface::create(SP pSubsurface, WP pOwner) { - auto subsurface = UP(new CSubsurface()); - subsurface->m_pPopupParent = pOwner; - subsurface->m_pSubsurface = pSubsurface; - subsurface->m_pSelf = subsurface; - subsurface->m_pWLSurface = CWLSurface::create(); - subsurface->m_pWLSurface->assign(pSubsurface->surface.lock(), subsurface.get()); + auto subsurface = UP(new CSubsurface()); + subsurface->m_popupParent = pOwner; + subsurface->m_subsurface = pSubsurface; + subsurface->m_self = subsurface; + subsurface->m_wlSurface = CWLSurface::create(); + subsurface->m_wlSurface->assign(pSubsurface->surface.lock(), subsurface.get()); subsurface->initSignals(); subsurface->initExistingSubsurfaces(pSubsurface->surface.lock()); return subsurface; } void CSubsurface::initSignals() { - if (m_pSubsurface) { - listeners.commitSubsurface = m_pSubsurface->surface->events.commit.registerListener([this](std::any d) { onCommit(); }); - listeners.destroySubsurface = m_pSubsurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); - listeners.mapSubsurface = m_pSubsurface->surface->events.map.registerListener([this](std::any d) { onMap(); }); - listeners.unmapSubsurface = m_pSubsurface->surface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); - listeners.newSubsurface = - m_pSubsurface->surface->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); + if (m_subsurface) { + m_listeners.commitSubsurface = m_subsurface->surface->events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.destroySubsurface = m_subsurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); + m_listeners.mapSubsurface = m_subsurface->surface->events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmapSubsurface = m_subsurface->surface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.newSubsurface = + m_subsurface->surface->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); } else { - if (m_pWindowParent) - listeners.newSubsurface = m_pWindowParent->m_pWLSurface->resource()->events.newSubsurface.registerListener( - [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); - else if (m_pPopupParent) - listeners.newSubsurface = m_pPopupParent->m_wlSurface->resource()->events.newSubsurface.registerListener( + if (m_windowParent) + m_listeners.newSubsurface = m_windowParent->m_pWLSurface->resource()->events.newSubsurface.registerListener( [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); + else if (m_popupParent) + m_listeners.newSubsurface = + m_popupParent->m_wlSurface->resource()->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else ASSERT(false); } } void CSubsurface::checkSiblingDamage() { - if (!m_pParent) + if (!m_parent) return; // ?????????? - const double SCALE = m_pWindowParent.lock() && m_pWindowParent->m_bIsX11 ? 1.0 / m_pWindowParent->m_fX11SurfaceScaledBy : 1.0; + const double SCALE = m_windowParent.lock() && m_windowParent->m_bIsX11 ? 1.0 / m_windowParent->m_fX11SurfaceScaledBy : 1.0; - for (auto const& n : m_pParent->m_vChildren) { + for (auto const& n : m_parent->m_children) { if (n.get() == this) continue; const auto COORDS = n->coordsGlobal(); - g_pHyprRenderer->damageSurface(n->m_pWLSurface->resource(), COORDS.x, COORDS.y, SCALE); + g_pHyprRenderer->damageSurface(n->m_wlSurface->resource(), COORDS.x, COORDS.y, SCALE); } } void CSubsurface::recheckDamageForSubsurfaces() { - for (auto const& n : m_vChildren) { + for (auto const& n : m_children) { const auto COORDS = n->coordsGlobal(); - g_pHyprRenderer->damageSurface(n->m_pWLSurface->resource(), COORDS.x, COORDS.y); + g_pHyprRenderer->damageSurface(n->m_wlSurface->resource(), COORDS.x, COORDS.y); } } void CSubsurface::onCommit() { // no damaging if it's not visible - if (!m_pWindowParent.expired() && (!m_pWindowParent->m_bIsMapped || !m_pWindowParent->m_pWorkspace->m_bVisible)) { - m_vLastSize = m_pWLSurface->resource()->current.size; + if (!m_windowParent.expired() && (!m_windowParent->m_bIsMapped || !m_windowParent->m_pWorkspace->m_visible)) { + m_lastSize = m_wlSurface->resource()->current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) - Debug::log(LOG, "Refusing to commit damage from a subsurface of {} because it's invisible.", m_pWindowParent.lock()); + Debug::log(LOG, "Refusing to commit damage from a subsurface of {} because it's invisible.", m_windowParent.lock()); return; } const auto COORDS = coordsGlobal(); - g_pHyprRenderer->damageSurface(m_pWLSurface->resource(), COORDS.x, COORDS.y); + g_pHyprRenderer->damageSurface(m_wlSurface->resource(), COORDS.x, COORDS.y); - if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_wlSurface) - m_pPopupParent->recheckTree(); - if (!m_pWindowParent.expired()) // I hate you firefox why are you doing this - m_pWindowParent->m_pPopupHead->recheckTree(); + if (m_popupParent && !m_popupParent->inert() && m_popupParent->m_wlSurface) + m_popupParent->recheckTree(); + if (!m_windowParent.expired()) // I hate you firefox why are you doing this + m_windowParent->m_pPopupHead->recheckTree(); // I do not think this is correct, but it solves a lot of issues with some apps (e.g. firefox) checkSiblingDamage(); - if (m_vLastSize != m_pWLSurface->resource()->current.size || m_vLastPosition != m_pSubsurface->position) { + if (m_lastSize != m_wlSurface->resource()->current.size || m_lastPosition != m_subsurface->position) { damageLastArea(); - m_vLastSize = m_pWLSurface->resource()->current.size; - m_vLastPosition = m_pSubsurface->position; + m_lastSize = m_wlSurface->resource()->current.size; + m_lastPosition = m_subsurface->position; } } void CSubsurface::onDestroy() { // destroy children - m_vChildren.clear(); + m_children.clear(); - m_bInert = true; + m_inert = true; - if (!m_pSubsurface) + if (!m_subsurface) return; // dummy node, nothing to do, it's the parent dying // kill ourselves - std::erase_if(m_pParent->m_vChildren, [this](const auto& other) { return other.get() == this; }); + std::erase_if(m_parent->m_children, [this](const auto& other) { return other.get() == this; }); } void CSubsurface::onNewSubsurface(SP pSubsurface) { WP PSUBSURFACE; - if (!m_pWindowParent.expired()) - PSUBSURFACE = m_vChildren.emplace_back(CSubsurface::create(pSubsurface, m_pWindowParent.lock())); - else if (m_pPopupParent) - PSUBSURFACE = m_vChildren.emplace_back(CSubsurface::create(pSubsurface, m_pPopupParent)); + if (!m_windowParent.expired()) + PSUBSURFACE = m_children.emplace_back(CSubsurface::create(pSubsurface, m_windowParent.lock())); + else if (m_popupParent) + PSUBSURFACE = m_children.emplace_back(CSubsurface::create(pSubsurface, m_popupParent)); - PSUBSURFACE->m_pSelf = PSUBSURFACE; + PSUBSURFACE->m_self = PSUBSURFACE; ASSERT(PSUBSURFACE); - PSUBSURFACE->m_pParent = m_pSelf; + PSUBSURFACE->m_parent = m_self; } void CSubsurface::onMap() { - m_vLastSize = m_pWLSurface->resource()->current.size; - m_vLastPosition = m_pSubsurface->position; + m_lastSize = m_wlSurface->resource()->current.size; + m_lastPosition = m_subsurface->position; const auto COORDS = coordsGlobal(); - CBox box{COORDS, m_vLastSize}; + CBox box{COORDS, m_lastSize}; box.expand(4); g_pHyprRenderer->damageBox(box); - if (!m_pWindowParent.expired()) - m_pWindowParent->updateSurfaceScaleTransformDetails(); + if (!m_windowParent.expired()) + m_windowParent->updateSurfaceScaleTransformDetails(); } void CSubsurface::onUnmap() { damageLastArea(); - if (m_pWLSurface->resource() == g_pCompositor->m_lastFocus) + if (m_wlSurface->resource() == g_pCompositor->m_lastFocus) g_pInputManager->releaseAllMouseButtons(); g_pInputManager->simulateMouseMovement(); @@ -175,25 +175,25 @@ void CSubsurface::onUnmap() { } void CSubsurface::damageLastArea() { - const auto COORDS = coordsGlobal() + m_vLastPosition - m_pSubsurface->position; - CBox box{COORDS, m_vLastSize}; + const auto COORDS = coordsGlobal() + m_lastPosition - m_subsurface->position; + CBox box{COORDS, m_lastSize}; box.expand(4); g_pHyprRenderer->damageBox(box); } Vector2D CSubsurface::coordsRelativeToParent() { - if (!m_pSubsurface) + if (!m_subsurface) return {}; - return m_pSubsurface->posRelativeToParent(); + return m_subsurface->posRelativeToParent(); } Vector2D CSubsurface::coordsGlobal() { Vector2D coords = coordsRelativeToParent(); - if (!m_pWindowParent.expired()) - coords += m_pWindowParent->m_vRealPosition->value(); - else if (m_pPopupParent) - coords += m_pPopupParent->coordsGlobal(); + if (!m_windowParent.expired()) + coords += m_windowParent->m_vRealPosition->value(); + else if (m_popupParent) + coords += m_popupParent->coordsGlobal(); return coords; } @@ -207,16 +207,16 @@ void CSubsurface::initExistingSubsurfaces(SP pSurface) { } Vector2D CSubsurface::size() { - return m_pWLSurface->resource()->current.size; + return m_wlSurface->resource()->current.size; } bool CSubsurface::visible() { - if (!m_pWindowParent.expired()) - return g_pHyprRenderer->shouldRenderWindow(m_pWindowParent.lock()); - if (m_pPopupParent) - return m_pPopupParent->visible(); - if (m_pParent) - return m_pParent->visible(); + if (!m_windowParent.expired()) + return g_pHyprRenderer->shouldRenderWindow(m_windowParent.lock()); + if (m_popupParent) + return m_popupParent->visible(); + if (m_parent) + return m_parent->visible(); return false; } diff --git a/src/desktop/Subsurface.hpp b/src/desktop/Subsurface.hpp index 7b596337..7c42dad9 100644 --- a/src/desktop/Subsurface.hpp +++ b/src/desktop/Subsurface.hpp @@ -34,7 +34,7 @@ class CSubsurface { void recheckDamageForSubsurfaces(); - WP m_pSelf; + WP m_self; private: CSubsurface() = default; @@ -45,22 +45,22 @@ class CSubsurface { CHyprSignalListener mapSubsurface; CHyprSignalListener unmapSubsurface; CHyprSignalListener newSubsurface; - } listeners; + } m_listeners; - WP m_pSubsurface; - SP m_pWLSurface; - Vector2D m_vLastSize = {}; - Vector2D m_vLastPosition = {}; + WP m_subsurface; + SP m_wlSurface; + Vector2D m_lastSize = {}; + Vector2D m_lastPosition = {}; // if nullptr, means it's a dummy node - WP m_pParent; + WP m_parent; - PHLWINDOWREF m_pWindowParent; - WP m_pPopupParent; + PHLWINDOWREF m_windowParent; + WP m_popupParent; - std::vector> m_vChildren; + std::vector> m_children; - bool m_bInert = false; + bool m_inert = false; void initSignals(); void initExistingSubsurfaces(SP pSurface); diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index ef62bc7a..5d0a32de 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -6,37 +6,37 @@ #include "../render/Renderer.hpp" void CWLSurface::assign(SP pSurface) { - m_pResource = pSurface; + m_resource = pSurface; init(); - m_bInert = false; + m_inert = false; } void CWLSurface::assign(SP pSurface, PHLWINDOW pOwner) { - m_pWindowOwner = pOwner; - m_pResource = pSurface; + m_windowOwner = pOwner; + m_resource = pSurface; init(); - m_bInert = false; + m_inert = false; } void CWLSurface::assign(SP pSurface, PHLLS pOwner) { - m_pLayerOwner = pOwner; - m_pResource = pSurface; + m_layerOwner = pOwner; + m_resource = pSurface; init(); - m_bInert = false; + m_inert = false; } void CWLSurface::assign(SP pSurface, CSubsurface* pOwner) { - m_pSubsurfaceOwner = pOwner; - m_pResource = pSurface; + m_subsurfaceOwner = pOwner; + m_resource = pSurface; init(); - m_bInert = false; + m_inert = false; } void CWLSurface::assign(SP pSurface, CPopup* pOwner) { - m_pPopupOwner = pOwner; - m_pResource = pSurface; + m_popupOwner = pOwner; + m_resource = pSurface; init(); - m_bInert = false; + m_inert = false; } void CWLSurface::unassign() { @@ -48,66 +48,66 @@ CWLSurface::~CWLSurface() { } bool CWLSurface::exists() const { - return m_pResource; + return m_resource; } SP CWLSurface::resource() const { - return m_pResource.lock(); + return m_resource.lock(); } bool CWLSurface::small() const { - if (!validMapped(m_pWindowOwner) || !exists()) + if (!validMapped(m_windowOwner) || !exists()) return false; - if (!m_pResource->current.texture) + if (!m_resource->current.texture) return false; - const auto O = m_pWindowOwner.lock(); + const auto O = m_windowOwner.lock(); - return O->m_vReportedSize.x > m_pResource->current.size.x + 1 || O->m_vReportedSize.y > m_pResource->current.size.y + 1; + return O->m_vReportedSize.x > m_resource->current.size.x + 1 || O->m_vReportedSize.y > m_resource->current.size.y + 1; } Vector2D CWLSurface::correctSmallVec() const { - if (!validMapped(m_pWindowOwner) || !exists() || !small() || m_bFillIgnoreSmall) + if (!validMapped(m_windowOwner) || !exists() || !small() || m_fillIgnoreSmall) return {}; const auto SIZE = getViewporterCorrectedSize(); - const auto O = m_pWindowOwner.lock(); + const auto O = m_windowOwner.lock(); return Vector2D{(O->m_vReportedSize.x - SIZE.x) / 2, (O->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) * (O->m_vRealSize->value() / O->m_vReportedSize); } Vector2D CWLSurface::correctSmallVecBuf() const { - if (!exists() || !small() || m_bFillIgnoreSmall || !m_pResource->current.texture) + if (!exists() || !small() || m_fillIgnoreSmall || !m_resource->current.texture) return {}; const auto SIZE = getViewporterCorrectedSize(); - const auto BS = m_pResource->current.bufferSize; + const auto BS = m_resource->current.bufferSize; return Vector2D{(BS.x - SIZE.x) / 2, (BS.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}); } Vector2D CWLSurface::getViewporterCorrectedSize() const { - if (!exists() || !m_pResource->current.texture) + if (!exists() || !m_resource->current.texture) return {}; - return m_pResource->current.viewport.hasDestination ? m_pResource->current.viewport.destination : m_pResource->current.bufferSize; + return m_resource->current.viewport.hasDestination ? m_resource->current.viewport.destination : m_resource->current.bufferSize; } CRegion CWLSurface::computeDamage() const { - if (!m_pResource->current.texture) + if (!m_resource->current.texture) return {}; - CRegion damage = m_pResource->current.accumulateBufferDamage(); - damage.transform(wlTransformToHyprutils(m_pResource->current.transform), m_pResource->current.bufferSize.x, m_pResource->current.bufferSize.y); + CRegion damage = m_resource->current.accumulateBufferDamage(); + damage.transform(wlTransformToHyprutils(m_resource->current.transform), m_resource->current.bufferSize.x, m_resource->current.bufferSize.y); - const auto BUFSIZE = m_pResource->current.bufferSize; + const auto BUFSIZE = m_resource->current.bufferSize; const auto CORRECTVEC = correctSmallVecBuf(); - if (m_pResource->current.viewport.hasSource) - damage.intersect(m_pResource->current.viewport.source); + if (m_resource->current.viewport.hasSource) + damage.intersect(m_resource->current.viewport.source); - const auto SCALEDSRCSIZE = m_pResource->current.viewport.hasSource ? m_pResource->current.viewport.source.size() * m_pResource->current.scale : m_pResource->current.bufferSize; + const auto SCALEDSRCSIZE = m_resource->current.viewport.hasSource ? m_resource->current.viewport.source.size() * m_resource->current.scale : m_resource->current.bufferSize; damage.scale({BUFSIZE.x / SCALEDSRCSIZE.x, BUFSIZE.y / SCALEDSRCSIZE.y}); damage.translate(CORRECTVEC); @@ -115,107 +115,107 @@ CRegion CWLSurface::computeDamage() const { // go from buffer coords in the damage to hl logical const auto BOX = getSurfaceBoxGlobal(); - const Vector2D SCALE = BOX.has_value() ? BOX->size() / m_pResource->current.bufferSize : - Vector2D{1.0 / m_pResource->current.scale, 1.0 / m_pResource->current.scale /* Wrong... but we can't really do better */}; + const Vector2D SCALE = BOX.has_value() ? BOX->size() / m_resource->current.bufferSize : + Vector2D{1.0 / m_resource->current.scale, 1.0 / m_resource->current.scale /* Wrong... but we can't really do better */}; damage.scale(SCALE); - if (m_pWindowOwner) - damage.scale(m_pWindowOwner->m_fX11SurfaceScaledBy); // fix xwayland:force_zero_scaling stuff that will be fucked by the above a bit + if (m_windowOwner) + damage.scale(m_windowOwner->m_fX11SurfaceScaledBy); // fix xwayland:force_zero_scaling stuff that will be fucked by the above a bit return damage; } void CWLSurface::destroy() { - if (!m_pResource) + if (!m_resource) return; - events.destroy.emit(); + m_events.destroy.emit(); - m_pConstraint.reset(); + m_constraint.reset(); - listeners.destroy.reset(); - m_pResource->hlSurface.reset(); - m_pWindowOwner.reset(); - m_pLayerOwner.reset(); - m_pPopupOwner = nullptr; - m_pSubsurfaceOwner = nullptr; - m_bInert = true; + m_listeners.destroy.reset(); + m_resource->hlSurface.reset(); + m_windowOwner.reset(); + m_layerOwner.reset(); + m_popupOwner = nullptr; + m_subsurfaceOwner = nullptr; + m_inert = true; if (g_pHyprRenderer && g_pHyprRenderer->m_sLastCursorData.surf && g_pHyprRenderer->m_sLastCursorData.surf->get() == this) g_pHyprRenderer->m_sLastCursorData.surf.reset(); - m_pResource.reset(); + m_resource.reset(); Debug::log(LOG, "CWLSurface {:x} called destroy()", (uintptr_t)this); } void CWLSurface::init() { - if (!m_pResource) + if (!m_resource) return; - RASSERT(!m_pResource->hlSurface, "Attempted to duplicate CWLSurface ownership!"); + RASSERT(!m_resource->hlSurface, "Attempted to duplicate CWLSurface ownership!"); - m_pResource->hlSurface = self.lock(); + m_resource->hlSurface = m_self.lock(); - listeners.destroy = m_pResource->events.destroy.registerListener([this](std::any d) { destroy(); }); + m_listeners.destroy = m_resource->events.destroy.registerListener([this](std::any d) { destroy(); }); Debug::log(LOG, "CWLSurface {:x} called init()", (uintptr_t)this); } PHLWINDOW CWLSurface::getWindow() const { - return m_pWindowOwner.lock(); + return m_windowOwner.lock(); } PHLLS CWLSurface::getLayer() const { - return m_pLayerOwner.lock(); + return m_layerOwner.lock(); } CPopup* CWLSurface::getPopup() const { - return m_pPopupOwner; + return m_popupOwner; } CSubsurface* CWLSurface::getSubsurface() const { - return m_pSubsurfaceOwner; + return m_subsurfaceOwner; } bool CWLSurface::desktopComponent() const { - return !m_pLayerOwner.expired() || !m_pWindowOwner.expired() || m_pSubsurfaceOwner || m_pPopupOwner; + return !m_layerOwner.expired() || !m_windowOwner.expired() || m_subsurfaceOwner || m_popupOwner; } std::optional CWLSurface::getSurfaceBoxGlobal() const { if (!desktopComponent()) return {}; - if (!m_pWindowOwner.expired()) - return m_pWindowOwner->getWindowMainSurfaceBox(); - if (!m_pLayerOwner.expired()) - return m_pLayerOwner->m_geometry; - if (m_pPopupOwner) - return CBox{m_pPopupOwner->coordsGlobal(), m_pPopupOwner->size()}; - if (m_pSubsurfaceOwner) - return CBox{m_pSubsurfaceOwner->coordsGlobal(), m_pSubsurfaceOwner->size()}; + if (!m_windowOwner.expired()) + return m_windowOwner->getWindowMainSurfaceBox(); + if (!m_layerOwner.expired()) + return m_layerOwner->m_geometry; + if (m_popupOwner) + return CBox{m_popupOwner->coordsGlobal(), m_popupOwner->size()}; + if (m_subsurfaceOwner) + return CBox{m_subsurfaceOwner->coordsGlobal(), m_subsurfaceOwner->size()}; return {}; } void CWLSurface::appendConstraint(WP constraint) { - m_pConstraint = constraint; + m_constraint = constraint; } SP CWLSurface::constraint() const { - return m_pConstraint.lock(); + return m_constraint.lock(); } bool CWLSurface::visible() { - if (!m_pWindowOwner.expired()) - return g_pHyprRenderer->shouldRenderWindow(m_pWindowOwner.lock()); - if (!m_pLayerOwner.expired()) + if (!m_windowOwner.expired()) + return g_pHyprRenderer->shouldRenderWindow(m_windowOwner.lock()); + if (!m_layerOwner.expired()) return true; - if (m_pPopupOwner) - return m_pPopupOwner->visible(); - if (m_pSubsurfaceOwner) - return m_pSubsurfaceOwner->visible(); + if (m_popupOwner) + return m_popupOwner->visible(); + if (m_subsurfaceOwner) + return m_subsurfaceOwner->visible(); return true; // non-desktop, we don't know much. } @@ -226,9 +226,9 @@ SP CWLSurface::fromResource(SP pSurface) { } bool CWLSurface::keyboardFocusable() const { - if (m_pWindowOwner || m_pPopupOwner || m_pSubsurfaceOwner) + if (m_windowOwner || m_popupOwner || m_subsurfaceOwner) return true; - if (m_pLayerOwner && m_pLayerOwner->m_layerSurface) - return m_pLayerOwner->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; + if (m_layerOwner && m_layerOwner->m_layerSurface) + return m_layerOwner->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; return false; } diff --git a/src/desktop/WLSurface.hpp b/src/desktop/WLSurface.hpp index 5f8da715..d0da546c 100644 --- a/src/desktop/WLSurface.hpp +++ b/src/desktop/WLSurface.hpp @@ -12,8 +12,8 @@ class CWLSurfaceResource; class CWLSurface { public: static SP create() { - auto p = SP(new CWLSurface); - p->self = p; + auto p = SP(new CWLSurface); + p->m_self = p; return p; } ~CWLSurface(); @@ -53,17 +53,17 @@ class CWLSurface { SP constraint() const; // allow stretching. Useful for plugins. - bool m_bFillIgnoreSmall = false; + bool m_fillIgnoreSmall = false; // track surface data and avoid dupes - float m_fLastScale = 0; - int m_iLastScale = 0; - wl_output_transform m_eLastTransform = (wl_output_transform)-1; + float m_lastScaleFloat = 0; + int m_lastScaleInt = 0; + wl_output_transform m_lastTransform = (wl_output_transform)-1; // CWLSurface& operator=(SP pSurface) { destroy(); - m_pResource = pSurface; + m_resource = pSurface; init(); return *this; @@ -84,32 +84,32 @@ class CWLSurface { static SP fromResource(SP pSurface); // used by the alpha-modifier protocol - float m_fAlphaModifier = 1.F; + float m_alphaModifier = 1.F; // used by the hyprland-surface protocol - float m_fOverallOpacity = 1.F; + float m_overallOpacity = 1.F; CRegion m_visibleRegion; struct { CSignal destroy; - } events; + } m_events; - WP self; + WP m_self; private: CWLSurface() = default; - bool m_bInert = true; + bool m_inert = true; - WP m_pResource; + WP m_resource; - PHLWINDOWREF m_pWindowOwner; - PHLLSREF m_pLayerOwner; - CPopup* m_pPopupOwner = nullptr; - CSubsurface* m_pSubsurfaceOwner = nullptr; + PHLWINDOWREF m_windowOwner; + PHLLSREF m_layerOwner; + CPopup* m_popupOwner = nullptr; + CSubsurface* m_subsurfaceOwner = nullptr; // - WP m_pConstraint; + WP m_constraint; void destroy(); void init(); @@ -117,7 +117,7 @@ class CWLSurface { struct { CHyprSignalListener destroy; - } listeners; + } m_listeners; friend class CPointerConstraint; friend class CXxColorManagerV4; diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index b22de459..5472b444 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -396,7 +396,7 @@ void CWindow::updateSurfaceScaleTransformDetails(bool force) { m_pWLSurface->resource()->breadthfirst( [PMONITOR](SP s, const Vector2D& offset, void* d) { const auto PSURFACE = CWLSurface::fromResource(s); - if (PSURFACE && PSURFACE->m_fLastScale == PMONITOR->scale) + if (PSURFACE && PSURFACE->m_lastScaleFloat == PMONITOR->scale) return; PROTO::fractional->sendScale(s, PMONITOR->scale); @@ -452,8 +452,8 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { g_pCompositor->updateAllWindowsAnimatedDecorationValues(); if (valid(pWorkspace)) { - g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_szName)}); - g_pEventManager->postEvent(SHyprIPCEvent{"movewindowv2", std::format("{:x},{},{}", (uintptr_t)this, pWorkspace->m_iID, pWorkspace->m_szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_name)}); + g_pEventManager->postEvent(SHyprIPCEvent{"movewindowv2", std::format("{:x},{},{}", (uintptr_t)this, pWorkspace->m_id, pWorkspace->m_name)}); EMIT_HOOK_EVENT("moveWindow", (std::vector{m_pSelf.lock(), pWorkspace})); } @@ -464,8 +464,8 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { } } - if (OLDWORKSPACE && g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE->m_iID) && OLDWORKSPACE->getWindows() == 0 && *PCLOSEONLASTSPECIAL) { - if (const auto PMONITOR = OLDWORKSPACE->m_pMonitor.lock(); PMONITOR) + if (OLDWORKSPACE && g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE->m_id) && OLDWORKSPACE->getWindows() == 0 && *PCLOSEONLASTSPECIAL) { + if (const auto PMONITOR = OLDWORKSPACE->m_monitor.lock(); PMONITOR) PMONITOR->setSpecialWorkspace(nullptr); } } @@ -514,7 +514,7 @@ void CWindow::onUnmap() { } } - m_iLastWorkspace = m_pWorkspace->m_iID; + m_iLastWorkspace = m_pWorkspace->m_id; std::erase_if(g_pCompositor->m_windowFocusHistory, [this](const auto& other) { return other.expired() || other == m_pSelf; }); @@ -1153,10 +1153,10 @@ bool CWindow::opaque() { const auto PWORKSPACE = m_pWorkspace; - if (m_pWLSurface->small() && !m_pWLSurface->m_bFillIgnoreSmall) + if (m_pWLSurface->small() && !m_pWLSurface->m_fillIgnoreSmall) return false; - if (PWORKSPACE->m_fAlpha->value() != 1.f) + if (PWORKSPACE->m_alpha->value() != 1.f) return false; if (m_bIsX11 && m_pXWaylandSurface && m_pXWaylandSurface->surface && m_pXWaylandSurface->surface->current.texture) @@ -1273,16 +1273,16 @@ void CWindow::onWorkspaceAnimUpdate() { return; const auto WINBB = getFullWindowBoundingBox(); - if (PWORKSPACE->m_vRenderOffset->value().x != 0) { - const auto PROGRESS = PWORKSPACE->m_vRenderOffset->value().x / PWSMON->vecSize.x; + if (PWORKSPACE->m_renderOffset->value().x != 0) { + const auto PROGRESS = PWORKSPACE->m_renderOffset->value().x / PWSMON->vecSize.x; if (WINBB.x < PWSMON->vecPosition.x) offset.x += (PWSMON->vecPosition.x - WINBB.x) * PROGRESS; if (WINBB.x + WINBB.width > PWSMON->vecPosition.x + PWSMON->vecSize.x) offset.x += (WINBB.x + WINBB.width - PWSMON->vecPosition.x - PWSMON->vecSize.x) * PROGRESS; - } else if (PWORKSPACE->m_vRenderOffset->value().y != 0) { - const auto PROGRESS = PWORKSPACE->m_vRenderOffset->value().y / PWSMON->vecSize.y; + } else if (PWORKSPACE->m_renderOffset->value().y != 0) { + const auto PROGRESS = PWORKSPACE->m_renderOffset->value().y / PWSMON->vecSize.y; if (WINBB.y < PWSMON->vecPosition.y) offset.y += (PWSMON->vecPosition.y - WINBB.y) * PROGRESS; @@ -1338,7 +1338,7 @@ bool CWindow::isEffectiveInternalFSMode(const eFullscreenMode MODE) { } WORKSPACEID CWindow::workspaceID() { - return m_pWorkspace ? m_pWorkspace->m_iID : m_iLastWorkspace; + return m_pWorkspace ? m_pWorkspace->m_id : m_iLastWorkspace; } MONITORID CWindow::monitorID() { @@ -1346,7 +1346,7 @@ MONITORID CWindow::monitorID() { } bool CWindow::onSpecialWorkspace() { - return m_pWorkspace ? m_pWorkspace->m_bIsSpecialWorkspace : g_pCompositor->isWorkspaceSpecial(m_iLastWorkspace); + return m_pWorkspace ? m_pWorkspace->m_isSpecialWorkspace : g_pCompositor->isWorkspaceSpecial(m_iLastWorkspace); } std::unordered_map CWindow::getEnv() { diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 5907c970..18322799 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -17,76 +17,76 @@ PHLWORKSPACE CWorkspace::create(WORKSPACEID id, PHLMONITOR monitor, std::string } CWorkspace::CWorkspace(WORKSPACEID id, PHLMONITOR monitor, std::string name, bool special, bool isEmpty) : - m_iID(id), m_szName(name), m_pMonitor(monitor), m_bIsSpecialWorkspace(special), m_bWasCreatedEmpty(isEmpty) { + m_id(id), m_name(name), m_monitor(monitor), m_isSpecialWorkspace(special), m_wasCreatedEmpty(isEmpty) { ; } void CWorkspace::init(PHLWORKSPACE self) { - m_pSelf = self; + m_self = self; - g_pAnimationManager->createAnimation(Vector2D(0, 0), m_vRenderOffset, - g_pConfigManager->getAnimationPropertyConfig(m_bIsSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), self, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(1.f, m_fAlpha, g_pConfigManager->getAnimationPropertyConfig(m_bIsSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), self, + g_pAnimationManager->createAnimation(Vector2D(0, 0), m_renderOffset, g_pConfigManager->getAnimationPropertyConfig(m_isSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), + self, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(1.f, m_alpha, g_pConfigManager->getAnimationPropertyConfig(m_isSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), self, AVARDAMAGE_ENTIRE); const auto RULEFORTHIS = g_pConfigManager->getWorkspaceRuleFor(self); if (RULEFORTHIS.defaultName.has_value()) - m_szName = RULEFORTHIS.defaultName.value(); + m_name = RULEFORTHIS.defaultName.value(); - m_pFocusedWindowHook = g_pHookSystem->hookDynamic("closeWindow", [this](void* self, SCallbackInfo& info, std::any param) { + m_focusedWindowHook = g_pHookSystem->hookDynamic("closeWindow", [this](void* self, SCallbackInfo& info, std::any param) { const auto PWINDOW = std::any_cast(param); - if (PWINDOW == m_pLastFocusedWindow.lock()) - m_pLastFocusedWindow.reset(); + if (PWINDOW == m_lastFocusedWindow.lock()) + m_lastFocusedWindow.reset(); }); - m_bInert = false; + m_inert = false; const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(self); - m_bPersistent = WORKSPACERULE.isPersistent; + m_persistent = WORKSPACERULE.isPersistent; - if (self->m_bWasCreatedEmpty) + if (self->m_wasCreatedEmpty) if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) g_pKeybindManager->spawnWithRules(*cmd, self); - g_pEventManager->postEvent({"createworkspace", m_szName}); - g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_iID, m_szName)}); + g_pEventManager->postEvent({"createworkspace", m_name}); + g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_id, m_name)}); EMIT_HOOK_EVENT("createWorkspace", this); } SWorkspaceIDName CWorkspace::getPrevWorkspaceIDName() const { - return m_sPrevWorkspace; + return m_prevWorkspace; } CWorkspace::~CWorkspace() { - Debug::log(LOG, "Destroying workspace ID {}", m_iID); + Debug::log(LOG, "Destroying workspace ID {}", m_id); // check if g_pHookSystem and g_pEventManager exist, they might be destroyed as in when the compositor is closing. if (g_pHookSystem) - g_pHookSystem->unhook(m_pFocusedWindowHook); + g_pHookSystem->unhook(m_focusedWindowHook); if (g_pEventManager) { - g_pEventManager->postEvent({"destroyworkspace", m_szName}); - g_pEventManager->postEvent({"destroyworkspacev2", std::format("{},{}", m_iID, m_szName)}); + g_pEventManager->postEvent({"destroyworkspace", m_name}); + g_pEventManager->postEvent({"destroyworkspacev2", std::format("{},{}", m_id, m_name)}); EMIT_HOOK_EVENT("destroyWorkspace", this); } } void CWorkspace::startAnim(bool in, bool left, bool instant) { if (!instant) { - const std::string ANIMNAME = std::format("{}{}", m_bIsSpecialWorkspace ? "specialWorkspace" : "workspaces", in ? "In" : "Out"); + const std::string ANIMNAME = std::format("{}{}", m_isSpecialWorkspace ? "specialWorkspace" : "workspaces", in ? "In" : "Out"); - m_fAlpha->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME)); - m_vRenderOffset->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME)); + m_alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME)); + m_renderOffset->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME)); } - const auto ANIMSTYLE = m_fAlpha->getStyle(); + const auto ANIMSTYLE = m_alpha->getStyle(); static auto PWORKSPACEGAP = CConfigValue("general:gaps_workspaces"); // set floating windows offset callbacks - m_vRenderOffset->setUpdateCallback([&](auto) { + m_renderOffset->setUpdateCallback([&](auto) { for (auto const& w : g_pCompositor->m_windows) { - if (!validMapped(w) || w->workspaceID() != m_iID) + if (!validMapped(w) || w->workspaceID() != m_id) continue; w->onWorkspaceAnimUpdate(); @@ -94,7 +94,7 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { }); if (ANIMSTYLE.starts_with("slidefade")) { - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); float movePerc = 100.f; if (ANIMSTYLE.find('%') != std::string::npos) { @@ -104,84 +104,84 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { } catch (std::exception& e) { Debug::log(ERR, "Error in startAnim: invalid percentage"); } } - m_fAlpha->setValueAndWarp(1.f); - m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); + m_alpha->setValueAndWarp(1.f); + m_renderOffset->setValueAndWarp(Vector2D(0, 0)); if (ANIMSTYLE.starts_with("slidefadevert")) { if (in) { - m_fAlpha->setValueAndWarp(0.f); - m_vRenderOffset->setValueAndWarp(Vector2D(0.0, (left ? PMONITOR->vecSize.y : -PMONITOR->vecSize.y) * (movePerc / 100.f))); - *m_fAlpha = 1.f; - *m_vRenderOffset = Vector2D(0, 0); + m_alpha->setValueAndWarp(0.f); + m_renderOffset->setValueAndWarp(Vector2D(0.0, (left ? PMONITOR->vecSize.y : -PMONITOR->vecSize.y) * (movePerc / 100.f))); + *m_alpha = 1.f; + *m_renderOffset = Vector2D(0, 0); } else { - m_fAlpha->setValueAndWarp(1.f); - *m_fAlpha = 0.f; - *m_vRenderOffset = Vector2D(0.0, (left ? -PMONITOR->vecSize.y : PMONITOR->vecSize.y) * (movePerc / 100.f)); + m_alpha->setValueAndWarp(1.f); + *m_alpha = 0.f; + *m_renderOffset = Vector2D(0.0, (left ? -PMONITOR->vecSize.y : PMONITOR->vecSize.y) * (movePerc / 100.f)); } } else { if (in) { - m_fAlpha->setValueAndWarp(0.f); - m_vRenderOffset->setValueAndWarp(Vector2D((left ? PMONITOR->vecSize.x : -PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0)); - *m_fAlpha = 1.f; - *m_vRenderOffset = Vector2D(0, 0); + m_alpha->setValueAndWarp(0.f); + m_renderOffset->setValueAndWarp(Vector2D((left ? PMONITOR->vecSize.x : -PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0)); + *m_alpha = 1.f; + *m_renderOffset = Vector2D(0, 0); } else { - m_fAlpha->setValueAndWarp(1.f); - *m_fAlpha = 0.f; - *m_vRenderOffset = Vector2D((left ? -PMONITOR->vecSize.x : PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0); + m_alpha->setValueAndWarp(1.f); + *m_alpha = 0.f; + *m_renderOffset = Vector2D((left ? -PMONITOR->vecSize.x : PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0); } } } else if (ANIMSTYLE == "fade") { - m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); // fix a bug, if switching from slide -> fade. + m_renderOffset->setValueAndWarp(Vector2D(0, 0)); // fix a bug, if switching from slide -> fade. if (in) { - m_fAlpha->setValueAndWarp(0.f); - *m_fAlpha = 1.f; + m_alpha->setValueAndWarp(0.f); + *m_alpha = 1.f; } else { - m_fAlpha->setValueAndWarp(1.f); - *m_fAlpha = 0.f; + m_alpha->setValueAndWarp(1.f); + *m_alpha = 0.f; } } else if (ANIMSTYLE == "slidevert") { // fallback is slide - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); const auto YDISTANCE = PMONITOR->vecSize.y + *PWORKSPACEGAP; - m_fAlpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. + m_alpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. if (in) { - m_vRenderOffset->setValueAndWarp(Vector2D(0.0, left ? YDISTANCE : -YDISTANCE)); - *m_vRenderOffset = Vector2D(0, 0); + m_renderOffset->setValueAndWarp(Vector2D(0.0, left ? YDISTANCE : -YDISTANCE)); + *m_renderOffset = Vector2D(0, 0); } else { - *m_vRenderOffset = Vector2D(0.0, left ? -YDISTANCE : YDISTANCE); + *m_renderOffset = Vector2D(0.0, left ? -YDISTANCE : YDISTANCE); } } else { // fallback is slide - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); const auto XDISTANCE = PMONITOR->vecSize.x + *PWORKSPACEGAP; - m_fAlpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. + m_alpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. if (in) { - m_vRenderOffset->setValueAndWarp(Vector2D(left ? XDISTANCE : -XDISTANCE, 0.0)); - *m_vRenderOffset = Vector2D(0, 0); + m_renderOffset->setValueAndWarp(Vector2D(left ? XDISTANCE : -XDISTANCE, 0.0)); + *m_renderOffset = Vector2D(0, 0); } else { - *m_vRenderOffset = Vector2D(left ? -XDISTANCE : XDISTANCE, 0.0); + *m_renderOffset = Vector2D(left ? -XDISTANCE : XDISTANCE, 0.0); } } - if (m_bIsSpecialWorkspace) { + if (m_isSpecialWorkspace) { // required for open/close animations if (in) { - m_fAlpha->setValueAndWarp(0.f); - *m_fAlpha = 1.f; + m_alpha->setValueAndWarp(0.f); + *m_alpha = 1.f; } else { - m_fAlpha->setValueAndWarp(1.f); - *m_fAlpha = 0.f; + m_alpha->setValueAndWarp(1.f); + *m_alpha = 0.f; } } if (instant) { - m_vRenderOffset->warp(); - m_fAlpha->warp(); + m_renderOffset->warp(); + m_alpha->warp(); } } @@ -194,39 +194,39 @@ void CWorkspace::moveToMonitor(const MONITORID& id) { } PHLWINDOW CWorkspace::getLastFocusedWindow() { - if (!validMapped(m_pLastFocusedWindow) || m_pLastFocusedWindow->workspaceID() != m_iID) + if (!validMapped(m_lastFocusedWindow) || m_lastFocusedWindow->workspaceID() != m_id) return nullptr; - return m_pLastFocusedWindow.lock(); + return m_lastFocusedWindow.lock(); } void CWorkspace::rememberPrevWorkspace(const PHLWORKSPACE& prev) { if (!prev) { - m_sPrevWorkspace.id = -1; - m_sPrevWorkspace.name = ""; + m_prevWorkspace.id = -1; + m_prevWorkspace.name = ""; return; } - if (prev->m_iID == m_iID) { + if (prev->m_id == m_id) { Debug::log(LOG, "Tried to set prev workspace to the same as current one"); return; } - m_sPrevWorkspace.id = prev->m_iID; - m_sPrevWorkspace.name = prev->m_szName; + m_prevWorkspace.id = prev->m_id; + m_prevWorkspace.name = prev->m_name; - prev->m_pMonitor->addPrevWorkspaceID(prev->m_iID); + prev->m_monitor->addPrevWorkspaceID(prev->m_id); } std::string CWorkspace::getConfigName() { - if (m_bIsSpecialWorkspace) { - return m_szName; + if (m_isSpecialWorkspace) { + return m_name; } - if (m_iID > 0) - return std::to_string(m_iID); + if (m_id > 0) + return std::to_string(m_id); - return "name:" + m_szName; + return "name:" + m_name; } bool CWorkspace::matchesStaticSelector(const std::string& selector_) { @@ -241,12 +241,12 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { if (wsid == WORKSPACE_INVALID) return false; - return wsid == m_iID; + return wsid == m_id; } else if (selector.starts_with("name:")) { - return m_szName == selector.substr(5); + return m_name == selector.substr(5); } else if (selector.starts_with("special")) { - return m_szName == selector; + return m_name == selector; } else { // parse selector @@ -306,7 +306,7 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { return false; } - if (std::clamp(m_iID, from, to) != m_iID) + if (std::clamp(m_id, from, to) != m_id) return false; continue; } @@ -321,7 +321,7 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { const auto SHOULDBESPECIAL = configStringToInt(prop); - if (SHOULDBESPECIAL && (bool)*SHOULDBESPECIAL != m_bIsSpecialWorkspace) + if (SHOULDBESPECIAL && (bool)*SHOULDBESPECIAL != m_isSpecialWorkspace) return false; continue; } @@ -336,7 +336,7 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { const auto PMONITOR = g_pCompositor->getMonitorFromString(prop); - if (!(PMONITOR ? PMONITOR == m_pMonitor : false)) + if (!(PMONITOR ? PMONITOR == m_monitor : false)) return false; continue; } @@ -349,14 +349,14 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { prop = prop.substr(2, prop.length() - 3); - if (prop.starts_with("s:") && !m_szName.starts_with(prop.substr(2))) + if (prop.starts_with("s:") && !m_name.starts_with(prop.substr(2))) return false; - if (prop.starts_with("e:") && !m_szName.ends_with(prop.substr(2))) + if (prop.starts_with("e:") && !m_name.ends_with(prop.substr(2))) return false; const auto WANTSNAMED = configStringToInt(prop); - if (WANTSNAMED && *WANTSNAMED != (m_iID <= -1337)) + if (WANTSNAMED && *WANTSNAMED != (m_id <= -1337)) return false; continue; } @@ -481,15 +481,15 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { switch (FSSTATE) { case -1: // no fullscreen - if (m_bHasFullscreenWindow) + if (m_hasFullscreenWindow) return false; break; case 0: // fullscreen full - if (!m_bHasFullscreenWindow || m_efFullscreenMode != FSMODE_FULLSCREEN) + if (!m_hasFullscreenWindow || m_fullscreenMode != FSMODE_FULLSCREEN) return false; break; case 1: // maximized - if (!m_bHasFullscreenWindow || m_efFullscreenMode != FSMODE_MAXIMIZED) + if (!m_hasFullscreenWindow || m_fullscreenMode != FSMODE_MAXIMIZED) return false; break; default: break; @@ -509,23 +509,23 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { } void CWorkspace::markInert() { - m_bInert = true; - m_iID = WORKSPACE_INVALID; - m_bVisible = false; - m_pMonitor.reset(); + m_inert = true; + m_id = WORKSPACE_INVALID; + m_visible = false; + m_monitor.reset(); } bool CWorkspace::inert() { - return m_bInert; + return m_inert; } MONITORID CWorkspace::monitorID() { - return m_pMonitor ? m_pMonitor->ID : MONITOR_INVALID; + return m_monitor ? m_monitor->ID : MONITOR_INVALID; } PHLWINDOW CWorkspace::getFullscreenWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_pSelf && w->isFullscreen()) + if (w->m_pWorkspace == m_self && w->isFullscreen()) return w; } @@ -533,21 +533,21 @@ PHLWINDOW CWorkspace::getFullscreenWindow() { } bool CWorkspace::isVisible() { - return m_bVisible; + return m_visible; } bool CWorkspace::isVisibleNotCovered() { - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); if (PMONITOR->activeSpecialWorkspace) - return PMONITOR->activeSpecialWorkspace->m_iID == m_iID; + return PMONITOR->activeSpecialWorkspace->m_id == m_id; - return PMONITOR->activeWorkspace->m_iID == m_iID; + return PMONITOR->activeWorkspace->m_id == m_id; } int CWorkspace::getWindows(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; for (auto const& w : g_pCompositor->m_windows) { - if (w->workspaceID() != m_iID || !w->m_bIsMapped) + if (w->workspaceID() != m_id || !w->m_bIsMapped) continue; if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value()) continue; @@ -564,7 +564,7 @@ int CWorkspace::getWindows(std::optional onlyTiled, std::optional on int CWorkspace::getGroups(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; for (auto const& w : g_pCompositor->m_windows) { - if (w->workspaceID() != m_iID || !w->m_bIsMapped) + if (w->workspaceID() != m_id || !w->m_bIsMapped) continue; if (!w->m_sGroupData.head) continue; @@ -581,7 +581,7 @@ int CWorkspace::getGroups(std::optional onlyTiled, std::optional onl PHLWINDOW CWorkspace::getFirstWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && !w->isHidden()) + if (w->m_pWorkspace == m_self && w->m_bIsMapped && !w->isHidden()) return w; } @@ -589,10 +589,10 @@ PHLWINDOW CWorkspace::getFirstWindow() { } PHLWINDOW CWorkspace::getTopLeftWindow() { - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden()) + if (w->m_pWorkspace != m_self || !w->m_bIsMapped || w->isHidden()) continue; const auto WINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved(); @@ -605,7 +605,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { bool CWorkspace::hasUrgentWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_pSelf && w->m_bIsMapped && w->m_bIsUrgent) + if (w->m_pWorkspace == m_self && w->m_bIsMapped && w->m_bIsUrgent) return true; } @@ -614,7 +614,7 @@ bool CWorkspace::hasUrgentWindow() { void CWorkspace::updateWindowDecos() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_pSelf) + if (w->m_pWorkspace != m_self) continue; w->updateWindowDecos(); @@ -622,10 +622,10 @@ void CWorkspace::updateWindowDecos() { } void CWorkspace::updateWindowData() { - const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_pSelf.lock()); + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_self.lock()); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_pSelf) + if (w->m_pWorkspace != m_self) continue; w->updateWindowData(WORKSPACERULE); @@ -634,7 +634,7 @@ void CWorkspace::updateWindowData() { void CWorkspace::forceReportSizesToWindows() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden()) + if (w->m_pWorkspace != m_self || !w->m_bIsMapped || w->isHidden()) continue; w->sendWindowSize(true); @@ -642,26 +642,26 @@ void CWorkspace::forceReportSizesToWindows() { } void CWorkspace::rename(const std::string& name) { - if (g_pCompositor->isWorkspaceSpecial(m_iID)) + if (g_pCompositor->isWorkspaceSpecial(m_id)) return; - Debug::log(LOG, "CWorkspace::rename: Renaming workspace {} to '{}'", m_iID, name); - m_szName = name; + Debug::log(LOG, "CWorkspace::rename: Renaming workspace {} to '{}'", m_id, name); + m_name = name; - const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_pSelf.lock()); - m_bPersistent = WORKSPACERULE.isPersistent; + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_self.lock()); + m_persistent = WORKSPACERULE.isPersistent; if (WORKSPACERULE.isPersistent) - g_pCompositor->ensurePersistentWorkspacesPresent(std::vector{WORKSPACERULE}, m_pSelf.lock()); + g_pCompositor->ensurePersistentWorkspacesPresent(std::vector{WORKSPACERULE}, m_self.lock()); - g_pEventManager->postEvent({"renameworkspace", std::to_string(m_iID) + "," + m_szName}); + g_pEventManager->postEvent({"renameworkspace", std::to_string(m_id) + "," + m_name}); } void CWorkspace::updateWindows() { - m_bHasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_bIsMapped && w->m_pWorkspace == m_pSelf && w->isFullscreen(); }); + m_hasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_bIsMapped && w->m_pWorkspace == m_self && w->isFullscreen(); }); for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || w->m_pWorkspace != m_pSelf) + if (!w->m_bIsMapped || w->m_pWorkspace != m_self) continue; w->updateDynamicRules(); diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp index 12dbe328..a3fe21e8 100644 --- a/src/desktop/Workspace.hpp +++ b/src/desktop/Workspace.hpp @@ -24,39 +24,39 @@ class CWorkspace { // Workspaces ID-based have IDs > 0 // and workspaces name-based have IDs starting with -1337 - WORKSPACEID m_iID = WORKSPACE_INVALID; - std::string m_szName = ""; - PHLMONITORREF m_pMonitor; + WORKSPACEID m_id = WORKSPACE_INVALID; + std::string m_name = ""; + PHLMONITORREF m_monitor; - bool m_bHasFullscreenWindow = false; - eFullscreenMode m_efFullscreenMode = FSMODE_NONE; + bool m_hasFullscreenWindow = false; + eFullscreenMode m_fullscreenMode = FSMODE_NONE; wl_array m_wlrCoordinateArr; // for animations - PHLANIMVAR m_vRenderOffset; - PHLANIMVAR m_fAlpha; - bool m_bForceRendering = false; + PHLANIMVAR m_renderOffset; + PHLANIMVAR m_alpha; + bool m_forceRendering = false; // allows damage to propagate. - bool m_bVisible = false; + bool m_visible = false; // "scratchpad" - bool m_bIsSpecialWorkspace = false; + bool m_isSpecialWorkspace = false; // last window - PHLWINDOWREF m_pLastFocusedWindow; + PHLWINDOWREF m_lastFocusedWindow; // user-set - bool m_bDefaultFloating = false; - bool m_bDefaultPseudo = false; + bool m_defaultFloating = false; + bool m_defaultPseudo = false; // last monitor (used on reconnect) - std::string m_szLastMonitor = ""; + std::string m_lastMonitor = ""; - bool m_bWasCreatedEmpty = true; + bool m_wasCreatedEmpty = true; - bool m_bPersistent = false; + bool m_persistent = false; // Inert: destroyed and invalid. If this is true, release the ptr you have. bool inert(); @@ -88,11 +88,11 @@ class CWorkspace { void init(PHLWORKSPACE self); // Previous workspace ID and name is stored during a workspace change, allowing travel // to the previous workspace. - SWorkspaceIDName m_sPrevWorkspace; + SWorkspaceIDName m_prevWorkspace; - SP m_pFocusedWindowHook; - bool m_bInert = true; - WP m_pSelf; + SP m_focusedWindowHook; + bool m_inert = true; + WP m_self; }; inline bool valid(const PHLWORKSPACE& ref) { diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 7d5cfd3f..7b0fbd34 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -190,7 +190,7 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto JUSTWORKSPACE = WORKSPACERQ.contains(' ') ? WORKSPACERQ.substr(0, WORKSPACERQ.find_first_of(' ')) : WORKSPACERQ; - if (JUSTWORKSPACE == PWORKSPACE->m_szName || JUSTWORKSPACE == "name:" + PWORKSPACE->m_szName) + if (JUSTWORKSPACE == PWORKSPACE->m_name || JUSTWORKSPACE == "name:" + PWORKSPACE->m_name) requestedWorkspace = ""; Debug::log(LOG, "Rule workspace matched by {}, {} applied.", PWINDOW, r->szValue); @@ -342,14 +342,14 @@ void Events::listener_mapWindow(void* owner, void* data) { PWORKSPACE = pWorkspace; PWINDOW->m_pWorkspace = pWorkspace; - PWINDOW->m_pMonitor = pWorkspace->m_pMonitor; + PWINDOW->m_pMonitor = pWorkspace->m_monitor; - if (PWINDOW->m_pMonitor.lock()->activeSpecialWorkspace && !pWorkspace->m_bIsSpecialWorkspace) + if (PWINDOW->m_pMonitor.lock()->activeSpecialWorkspace && !pWorkspace->m_isSpecialWorkspace) workspaceSilent = true; if (!workspaceSilent) { - if (pWorkspace->m_bIsSpecialWorkspace) - pWorkspace->m_pMonitor->setSpecialWorkspace(pWorkspace); + if (pWorkspace->m_isSpecialWorkspace) + pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace); else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_bNoInitialFocus) g_pKeybindManager->m_mDispatchers["workspace"](requestedWorkspaceName); @@ -379,10 +379,10 @@ void Events::listener_mapWindow(void* owner, void* data) { Debug::log(LOG, "Requested monitor, applying to {:mw}", PWINDOW); } - if (PWORKSPACE->m_bDefaultFloating) + if (PWORKSPACE->m_defaultFloating) PWINDOW->m_bIsFloating = true; - if (PWORKSPACE->m_bDefaultPseudo) { + if (PWORKSPACE->m_defaultPseudo) { PWINDOW->m_bIsPseudotiled = true; CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(PWINDOW); PWINDOW->m_vPseudoSize = Vector2D(desiredGeometry.width, desiredGeometry.height); @@ -584,11 +584,11 @@ void Events::listener_mapWindow(void* owner, void* data) { if (PLSFROMFOCUS && PLSFROMFOCUS->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) PWINDOW->m_bNoInitialFocus = true; - if (PWINDOW->m_pWorkspace->m_bHasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_bIsFloating) { + if (PWINDOW->m_pWorkspace->m_hasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_bIsFloating) { if (*PNEWTAKESOVERFS == 0) PWINDOW->m_bNoInitialFocus = true; else if (*PNEWTAKESOVERFS == 1) - requestedInternalFSMode = PWINDOW->m_pWorkspace->m_efFullscreenMode; + requestedInternalFSMode = PWINDOW->m_pWorkspace->m_fullscreenMode; else if (*PNEWTAKESOVERFS == 2) g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE); } @@ -611,7 +611,7 @@ void Events::listener_mapWindow(void* owner, void* data) { if (!PWINDOW->m_bNoInitialFocus && (requestedInternalFSMode.has_value() || requestedClientFSMode.has_value() || requestedFSState.has_value())) { // fix fullscreen on requested (basically do a switcheroo) - if (PWINDOW->m_pWorkspace->m_bHasFullscreenWindow) + if (PWINDOW->m_pWorkspace->m_hasFullscreenWindow) g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE); PWINDOW->m_vRealPosition->warp(); @@ -652,7 +652,7 @@ void Events::listener_mapWindow(void* owner, void* data) { Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_vRealPosition->goal(), PWINDOW->m_vRealSize->goal()); - auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_szName; + auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name; g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, PWINDOW->m_szClass, PWINDOW->m_szTitle)}); EMIT_HOOK_EVENT("openWindow", PWINDOW); @@ -672,7 +672,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // recalc the values for this window g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); // avoid this window being visible - if (PWORKSPACE->m_bHasFullscreenWindow && !PWINDOW->isFullscreen() && !PWINDOW->m_bIsFloating) + if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen() && !PWINDOW->m_bIsFloating) PWINDOW->m_fAlpha->setValueAndWarp(0.f); g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_pWLSurface->resource(), PMONITOR->scale); @@ -764,8 +764,8 @@ void Events::listener_unmapWindow(void* owner, void* data) { // remove the fullscreen window status from workspace if we closed it const auto PWORKSPACE = PWINDOW->m_pWorkspace; - if (PWORKSPACE->m_bHasFullscreenWindow && PWINDOW->isFullscreen()) - PWORKSPACE->m_bHasFullscreenWindow = false; + if (PWORKSPACE->m_hasFullscreenWindow && PWINDOW->isFullscreen()) + PWORKSPACE->m_hasFullscreenWindow = false; g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW); @@ -853,7 +853,7 @@ void Events::listener_commitWindow(void* owner, void* data) { g_pHyprRenderer->damageWindow(PWINDOW); } - if (!PWINDOW->m_pWorkspace->m_bVisible) + if (!PWINDOW->m_pWorkspace->m_visible) return; const auto PMONITOR = PWINDOW->m_pMonitor.lock(); diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 6f97c3bf..e2d3c907 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -122,7 +122,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { const auto NAME = in.substr(8); const auto WS = g_pCompositor->getWorkspaceByName("special:" + NAME); - return {WS ? WS->m_iID : g_pCompositor->getNewSpecialID(), "special:" + NAME}; + return {WS ? WS->m_id : g_pCompositor->getNewSpecialID(), "special:" + NAME}; } result.id = SPECIAL_WORKSPACE_START; @@ -133,7 +133,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (!WORKSPACE) { result.id = g_pCompositor->getNextAvailableNamedWorkspace(); } else { - result.id = WORKSPACE->m_iID; + result.id = WORKSPACE->m_id; } result.name = WORKSPACENAME; } else if (in.starts_with("empty")) { @@ -175,7 +175,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (!PLASTWORKSPACE) return {WORKSPACE_INVALID}; - return {PLASTWORKSPACE->m_iID, PLASTWORKSPACE->m_szName}; + return {PLASTWORKSPACE->m_id, PLASTWORKSPACE->m_name}; } else { if (in[0] == 'r' && (in[1] == '-' || in[1] == '+' || in[1] == '~') && isNumber(in.substr(2))) { bool absolute = in[1] == '~'; @@ -197,9 +197,9 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { // Collect all the workspaces we can't jump to. for (auto const& ws : g_pCompositor->m_workspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor)) { + if (ws->m_isSpecialWorkspace || (ws->m_monitor != g_pCompositor->m_lastMonitor)) { // Can't jump to this workspace - invalidWSes.insert(ws->m_iID); + invalidWSes.insert(ws->m_id); } } for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) { @@ -215,10 +215,10 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { // Prepare all named workspaces in case when we need them std::vector namedWSes; for (auto const& ws : g_pCompositor->m_workspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor) || ws->m_iID >= 0) + if (ws->m_isSpecialWorkspace || (ws->m_monitor != g_pCompositor->m_lastMonitor) || ws->m_id >= 0) continue; - namedWSes.push_back(ws->m_iID); + namedWSes.push_back(ws->m_id); } std::sort(namedWSes.begin(), namedWSes.end()); @@ -242,7 +242,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } else { // Just take a blind guess at where we'll probably end up - WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_iID : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_id : 1; WORKSPACEID predictedWSID = activeWSID + remains; int remainingWSes = 0; char walkDir = in[1]; @@ -333,7 +333,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(result.id); if (PWORKSPACE) - result.name = g_pCompositor->getWorkspaceByID(result.id)->m_szName; + result.name = g_pCompositor->getWorkspaceByID(result.id)->m_name; else result.name = std::to_string(result.id); @@ -359,10 +359,10 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { std::vector validWSes; for (auto const& ws : g_pCompositor->m_workspaces) { - if (ws->m_bIsSpecialWorkspace || (ws->m_pMonitor != g_pCompositor->m_lastMonitor && !onAllMonitors)) + if (ws->m_isSpecialWorkspace || (ws->m_monitor != g_pCompositor->m_lastMonitor && !onAllMonitors)) continue; - validWSes.push_back(ws->m_iID); + validWSes.push_back(ws->m_id); } std::sort(validWSes.begin(), validWSes.end()); @@ -384,7 +384,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { remains = remains < 0 ? -((-remains) % validWSes.size()) : remains % validWSes.size(); // get the current item - WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_iID : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_id : 1; for (ssize_t i = 0; i < (ssize_t)validWSes.size(); i++) { if (validWSes[i] == activeWSID) { currentItem = i; @@ -404,7 +404,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } result.id = validWSes[currentItem]; - result.name = g_pCompositor->getWorkspaceByID(validWSes[currentItem])->m_szName; + result.name = g_pCompositor->getWorkspaceByID(validWSes[currentItem])->m_name; } else { if (in[0] == '+' || in[0] == '-') { if (g_pCompositor->m_lastMonitor) { @@ -423,7 +423,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { // maybe name const auto PWORKSPACE = g_pCompositor->getWorkspaceByName(in); if (PWORKSPACE) - result.id = PWORKSPACE->m_iID; + result.id = PWORKSPACE->m_id; } result.name = std::to_string(result.id); diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 6397e8c3..d5c4e2d1 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -212,10 +212,10 @@ void CMonitor::onConnect(bool noRule) { if (!valid(ws)) continue; - if (ws->m_szLastMonitor == szName || g_pCompositor->m_monitors.size() == 1 /* avoid lost workspaces on recover */) { + if (ws->m_lastMonitor == szName || g_pCompositor->m_monitors.size() == 1 /* avoid lost workspaces on recover */) { g_pCompositor->moveWorkspaceToMonitor(ws, self.lock()); ws->startAnim(true, true, true); - ws->m_szLastMonitor = ""; + ws->m_lastMonitor = ""; } } @@ -302,8 +302,8 @@ void CMonitor::onDisconnect(bool destroy) { // record what workspace this monitor was on if (activeWorkspace) { - Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", szName, activeWorkspace->m_iID); - g_pCompositor->m_seenMonitorWorkspaceMap[szName] = activeWorkspace->m_iID; + Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", szName, activeWorkspace->m_id); + g_pCompositor->m_seenMonitorWorkspaceMap[szName] = activeWorkspace->m_id; } // Cleanup everything. Move windows back, snap cursor, shit. @@ -362,12 +362,12 @@ void CMonitor::onDisconnect(bool destroy) { // move workspaces std::vector wspToMove; for (auto const& w : g_pCompositor->m_workspaces) { - if (w->m_pMonitor == self || !w->m_pMonitor) + if (w->m_monitor == self || !w->m_monitor) wspToMove.push_back(w); } for (auto const& w : wspToMove) { - w->m_szLastMonitor = szName; + w->m_lastMonitor = szName; g_pCompositor->moveWorkspaceToMonitor(w, BACKUPMON); w->startAnim(true, true, true); } @@ -378,7 +378,7 @@ void CMonitor::onDisconnect(bool destroy) { } if (activeWorkspace) - activeWorkspace->m_bVisible = false; + activeWorkspace->m_visible = false; activeWorkspace.reset(); output->state->resetExplicitFences(); @@ -894,7 +894,7 @@ bool CMonitor::shouldSkipScheduleFrameOnMouseEvent() { static auto PMINRR = CConfigValue("cursor:min_refresh_rate"); // skip scheduling extra frames for fullsreen apps with vrr - const bool shouldSkip = activeWorkspace && activeWorkspace->m_bHasFullscreenWindow && activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN && + const bool shouldSkip = activeWorkspace && activeWorkspace->m_hasFullscreenWindow && activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && (*PNOBREAK == 1 || (*PNOBREAK == 2 && activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && output->state->state().adaptiveSync; // keep requested minimum refresh rate @@ -976,8 +976,8 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { activeWorkspace = PNEWWORKSPACE; PNEWWORKSPACE->setActive(true); - PNEWWORKSPACE->m_bVisible = true; - PNEWWORKSPACE->m_szLastMonitor = ""; + PNEWWORKSPACE->m_visible = true; + PNEWWORKSPACE->m_lastMonitor = ""; } void CMonitor::setMirror(const std::string& mirrorOf) { @@ -1046,7 +1046,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { // move all the WS std::vector wspToMove; for (auto const& w : g_pCompositor->m_workspaces) { - if (w->m_pMonitor == self || !w->m_pMonitor) + if (w->m_monitor == self || !w->m_monitor) wspToMove.push_back(w); } @@ -1101,9 +1101,9 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo if (!pWorkspace) return; - if (pWorkspace->m_bIsSpecialWorkspace) { + if (pWorkspace->m_isSpecialWorkspace) { if (activeSpecialWorkspace != pWorkspace) { - Debug::log(LOG, "changeworkspace on special, togglespecialworkspace to id {}", pWorkspace->m_iID); + Debug::log(LOG, "changeworkspace on special, togglespecialworkspace to id {}", pWorkspace->m_id); setSpecialWorkspace(pWorkspace); } return; @@ -1114,13 +1114,13 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo const auto POLDWORKSPACE = activeWorkspace; if (POLDWORKSPACE) - POLDWORKSPACE->m_bVisible = false; - pWorkspace->m_bVisible = true; + POLDWORKSPACE->m_visible = false; + pWorkspace->m_visible = true; activeWorkspace = pWorkspace; if (!internal) { - const auto ANIMTOLEFT = POLDWORKSPACE && pWorkspace->m_iID > POLDWORKSPACE->m_iID; + const auto ANIMTOLEFT = POLDWORKSPACE && pWorkspace->m_id > POLDWORKSPACE->m_id; if (POLDWORKSPACE) POLDWORKSPACE->startAnim(false, ANIMTOLEFT); pWorkspace->startAnim(true, ANIMTOLEFT); @@ -1134,7 +1134,7 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo if (!noFocus && !g_pCompositor->m_lastMonitor->activeSpecialWorkspace && !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); - auto pWindow = pWorkspace->m_bHasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow(); + auto pWindow = pWorkspace->m_hasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow(); if (!pWindow) { if (*PFOLLOWMOUSE == 1) @@ -1155,8 +1155,8 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); - g_pEventManager->postEvent(SHyprIPCEvent{"workspace", pWorkspace->m_szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"workspacev2", std::format("{},{}", pWorkspace->m_iID, pWorkspace->m_szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{"workspace", pWorkspace->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"workspacev2", std::format("{},{}", pWorkspace->m_id, pWorkspace->m_name)}); EMIT_HOOK_EVENT("workspace", pWorkspace); } @@ -1185,7 +1185,7 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { if (!pWorkspace) { // remove special if exists if (activeSpecialWorkspace) { - activeSpecialWorkspace->m_bVisible = false; + activeSpecialWorkspace->m_visible = false; activeSpecialWorkspace->startAnim(false, false); g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + szName}); g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", ",," + szName}); @@ -1211,14 +1211,14 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { } if (activeSpecialWorkspace) { - activeSpecialWorkspace->m_bVisible = false; + activeSpecialWorkspace->m_visible = false; activeSpecialWorkspace->startAnim(false, false); } bool animate = true; //close if open elsewhere - const auto PMONITORWORKSPACEOWNER = pWorkspace->m_pMonitor.lock(); - if (const auto PMWSOWNER = pWorkspace->m_pMonitor.lock(); PMWSOWNER && PMWSOWNER->activeSpecialWorkspace == pWorkspace) { + const auto PMONITORWORKSPACEOWNER = pWorkspace->m_monitor.lock(); + if (const auto PMWSOWNER = pWorkspace->m_monitor.lock(); PMWSOWNER && PMWSOWNER->activeSpecialWorkspace == pWorkspace) { PMWSOWNER->activeSpecialWorkspace.reset(); g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMWSOWNER->ID); g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + PMWSOWNER->szName}); @@ -1231,9 +1231,9 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { } // open special - pWorkspace->m_pMonitor = self; - activeSpecialWorkspace = pWorkspace; - activeSpecialWorkspace->m_bVisible = true; + pWorkspace->m_monitor = self; + activeSpecialWorkspace = pWorkspace; + activeSpecialWorkspace->m_visible = true; if (animate) pWorkspace->startAnim(true, true); @@ -1270,8 +1270,8 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { g_pInputManager->refocus(); } - g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", pWorkspace->m_szName + "," + szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", std::to_string(pWorkspace->m_iID) + "," + pWorkspace->m_szName + "," + szName}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", pWorkspace->m_name + "," + szName}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", std::to_string(pWorkspace->m_id) + "," + pWorkspace->m_name + "," + szName}); g_pHyprRenderer->damageMonitor(self.lock()); @@ -1300,7 +1300,7 @@ SWorkspaceIDName CMonitor::getPrevWorkspaceIDName(const WORKSPACEID id) { // recheck if previous workspace's was moved to another monitor const auto ws = g_pCompositor->getWorkspaceByID(PREVID); if (ws && ws->monitorID() == ID) - return {.id = PREVID, .name = ws->m_szName}; + return {.id = PREVID, .name = ws->m_name}; } return {.id = WORKSPACE_INVALID}; @@ -1324,11 +1324,11 @@ void CMonitor::updateMatrix() { } WORKSPACEID CMonitor::activeWorkspaceID() { - return activeWorkspace ? activeWorkspace->m_iID : 0; + return activeWorkspace ? activeWorkspace->m_id : 0; } WORKSPACEID CMonitor::activeSpecialWorkspaceID() { - return activeSpecialWorkspace ? activeSpecialWorkspace->m_iID : 0; + return activeSpecialWorkspace ? activeSpecialWorkspace->m_id : 0; } CBox CMonitor::logicalBox() { diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 7e823f88..0c9f0803 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -107,7 +107,7 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for } } } else if (const auto WS = g_pCompositor->getWorkspaceByID(pNode->workspaceID); WS) - PMONITOR = WS->m_pMonitor.lock(); + PMONITOR = WS->m_monitor.lock(); if (!PMONITOR) { Debug::log(ERR, "Orphaned Node {}!!", pNode); @@ -499,23 +499,23 @@ void CHyprDwindleLayout::recalculateMonitor(const MONITORID& monid) { } void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { - const auto PMONITOR = pWorkspace->m_pMonitor.lock(); + const auto PMONITOR = pWorkspace->m_monitor.lock(); if (!PMONITOR) return; - if (pWorkspace->m_bHasFullscreenWindow) { + if (pWorkspace->m_hasFullscreenWindow) { // massive hack from the fullscreen func const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); - if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { + if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { *PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition; *PFULLWINDOW->m_vRealSize = PMONITOR->vecSize; - } else if (pWorkspace->m_efFullscreenMode == FSMODE_MAXIMIZED) { + } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SDwindleNodeData fakeNode; fakeNode.pWindow = PFULLWINDOW; fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; - fakeNode.workspaceID = pWorkspace->m_iID; + fakeNode.workspaceID = pWorkspace->m_id; PFULLWINDOW->m_vPosition = fakeNode.box.pos(); PFULLWINDOW->m_vSize = fakeNode.box.size(); fakeNode.ignoreFullscreenChecks = true; @@ -527,7 +527,7 @@ void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { return; } - const auto TOPNODE = getMasterNodeOnWorkspace(pWorkspace->m_iID); + const auto TOPNODE = getMasterNodeOnWorkspace(pWorkspace->m_id); if (TOPNODE) { TOPNODE->box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 963639e5..cf036131 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -404,7 +404,7 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA if (*SNAPWINDOWGAP) { const double GAPSIZE = *SNAPWINDOWGAP; const auto WSID = DRAGGINGWINDOW->workspaceID(); - const bool HASFULLSCREEN = DRAGGINGWINDOW->m_pWorkspace && DRAGGINGWINDOW->m_pWorkspace->m_bHasFullscreenWindow; + const bool HASFULLSCREEN = DRAGGINGWINDOW->m_pWorkspace && DRAGGINGWINDOW->m_pWorkspace->m_hasFullscreenWindow; for (auto& other : g_pCompositor->m_windows) { if ((HASFULLSCREEN && !other->m_bCreatedOverFullscreen) || other == DRAGGINGWINDOW || other->workspaceID() != WSID || !other->m_bIsMapped || other->m_bFadingOut || @@ -724,7 +724,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { const auto PWORKSPACE = PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace; - if (PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_hasFullscreenWindow) g_pCompositor->setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); // save real pos cuz the func applies the default 5,5 mid @@ -814,7 +814,7 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { const auto PWORKSPACE = pWindow->m_pWorkspace; // first of all, if this is a fullscreen workspace, - if (PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_hasFullscreenWindow) return PWORKSPACE->getFullscreenWindow(); if (pWindow->m_bIsFloating) { @@ -956,7 +956,7 @@ bool IHyprLayout::updateDragWindow() { const auto PWORKSPACE = DRAGGINGWINDOW->m_pWorkspace; - if (PWORKSPACE->m_bHasFullscreenWindow && (!DRAGGINGWINDOW->m_bCreatedOverFullscreen || !DRAGGINGWINDOW->m_bIsFloating)) { + if (PWORKSPACE->m_hasFullscreenWindow && (!DRAGGINGWINDOW->m_bCreatedOverFullscreen || !DRAGGINGWINDOW->m_bIsFloating)) { Debug::log(LOG, "Rejecting drag on a fullscreen workspace. (window under fullscreen)"); g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); return true; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 555d660f..052a6ed9 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -296,24 +296,24 @@ void CHyprMasterLayout::recalculateMonitor(const MONITORID& monid) { } void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { - const auto PMONITOR = pWorkspace->m_pMonitor.lock(); + const auto PMONITOR = pWorkspace->m_monitor.lock(); if (!PMONITOR) return; - if (pWorkspace->m_bHasFullscreenWindow) { + if (pWorkspace->m_hasFullscreenWindow) { // massive hack from the fullscreen func const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); - if (pWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { + if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { *PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition; *PFULLWINDOW->m_vRealSize = PMONITOR->vecSize; - } else if (pWorkspace->m_efFullscreenMode == FSMODE_MAXIMIZED) { + } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SMasterNodeData fakeNode; fakeNode.pWindow = PFULLWINDOW; fakeNode.position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; fakeNode.size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; - fakeNode.workspaceID = pWorkspace->m_iID; + fakeNode.workspaceID = pWorkspace->m_id; PFULLWINDOW->m_vPosition = fakeNode.position; PFULLWINDOW->m_vSize = fakeNode.size; fakeNode.ignoreFullscreenChecks = true; @@ -325,7 +325,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { return; } - const auto PMASTERNODE = getMasterNodeOnWorkspace(pWorkspace->m_iID); + const auto PMASTERNODE = getMasterNodeOnWorkspace(pWorkspace->m_id); if (!PMASTERNODE) return; @@ -337,8 +337,8 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { static auto PIGNORERESERVED = CConfigValue("master:center_ignores_reserved"); static auto PSMARTRESIZING = CConfigValue("master:smart_resizing"); - const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_iID); - const auto WINDOWS = getNodesOnWorkspace(pWorkspace->m_iID); + const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_id); + const auto WINDOWS = getNodesOnWorkspace(pWorkspace->m_id); const auto STACKWINDOWS = WINDOWS - MASTERS; const auto WSSIZE = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; const auto WSPOS = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; @@ -364,7 +364,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { // check the total width and height so that later // if larger/smaller than screen size them down/up for (auto const& nd : m_lMasterNodesData) { - if (nd.workspaceID == pWorkspace->m_iID) { + if (nd.workspaceID == pWorkspace->m_id) { if (nd.isMaster) masterAccumulatedSize += totalSize / MASTERS * nd.percSize; else @@ -405,7 +405,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextY = WSSIZE.y - HEIGHT; for (auto& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || !nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || !nd.isMaster) continue; float WIDTH = mastersLeft > 1 ? widthLeft / mastersLeft * nd.percSize : widthLeft; @@ -442,7 +442,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { } for (auto& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || !nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || !nd.isMaster) continue; float HEIGHT = mastersLeft > 1 ? heightLeft / mastersLeft * nd.percSize : heightLeft; @@ -479,7 +479,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextY = PMASTERNODE->size.y; for (auto& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; float WIDTH = slavesLeft > 1 ? widthLeft / slavesLeft * nd.percSize : widthLeft; @@ -509,7 +509,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextX = PMASTERNODE->size.x; for (auto& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; float HEIGHT = slavesLeft > 1 ? heightLeft / slavesLeft * nd.percSize : heightLeft; @@ -554,7 +554,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (*PSMARTRESIZING) { for (auto const& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; if (onRight) { @@ -569,7 +569,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { } for (auto& nd : m_lMasterNodesData) { - if (nd.workspaceID != pWorkspace->m_iID || nd.isMaster) + if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; if (onRight) { @@ -628,7 +628,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { } } } else - PMONITOR = g_pCompositor->getWorkspaceByID(pNode->workspaceID)->m_pMonitor.lock(); + PMONITOR = g_pCompositor->getWorkspaceByID(pNode->workspaceID)->m_monitor.lock(); if (!PMONITOR) { Debug::log(ERR, "Orphaned Node {}!!", pNode); @@ -1411,7 +1411,7 @@ eOrientation CHyprMasterLayout::getDynamicOrientation(PHLWORKSPACE pWorkspace) { if (WORKSPACERULE.layoutopts.contains("orientation")) orientationString = WORKSPACERULE.layoutopts.at("orientation"); - eOrientation orientation = getMasterWorkspaceData(pWorkspace->m_iID)->orientation; + eOrientation orientation = getMasterWorkspaceData(pWorkspace->m_id)->orientation; // override if workspace rule is set if (!orientationString.empty()) { if (orientationString == "top") @@ -1446,19 +1446,19 @@ Vector2D CHyprMasterLayout::predictSizeForNewWindowTiled() { if (!g_pCompositor->m_lastMonitor) return {}; - const int NODES = getNodesOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); + const int NODES = getNodesOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); if (NODES <= 0) return g_pCompositor->m_lastMonitor->vecSize; - const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); + const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); if (!MASTER) // wtf return {}; if (*PNEWSTATUS == "master") { return MASTER->size; } else { - const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_iID); + const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); // TODO: make this better return {g_pCompositor->m_lastMonitor->vecSize.x - MASTER->size.x, g_pCompositor->m_lastMonitor->vecSize.y / (SLAVES + 1)}; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 2c8cf1f9..0db60e58 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -100,12 +100,12 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { animationsDisabled = PWINDOW->m_sWindowData.noAnim.valueOr(animationsDisabled); } else if (PWORKSPACE) { - PMONITOR = PWORKSPACE->m_pMonitor.lock(); + PMONITOR = PWORKSPACE->m_monitor.lock(); if (!PMONITOR) return; // dont damage the whole monitor on workspace change, unless it's a special workspace, because dim/blur etc - if (PWORKSPACE->m_bIsSpecialWorkspace) + if (PWORKSPACE->m_isSpecialWorkspace) g_pHyprRenderer->damageMonitor(PMONITOR); // TODO: just make this into a damn callback already vax... @@ -122,7 +122,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { g_pHyprRenderer->damageWindow(w, true); } - if (PWORKSPACE->m_bIsSpecialWorkspace) + if (PWORKSPACE->m_isSpecialWorkspace) g_pHyprRenderer->damageWindow(w, true); // hack for special too because it can cross multiple monitors } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 9d7163f6..84f3a6d1 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -391,7 +391,7 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF if (PLASTWINDOW && PLASTWINDOW->m_pWorkspace == PWINDOWTOCHANGETO->m_pWorkspace && PLASTWINDOW->isFullscreen()) { const auto PWORKSPACE = PLASTWINDOW->m_pWorkspace; - const auto MODE = PWORKSPACE->m_efFullscreenMode; + const auto MODE = PWORKSPACE->m_fullscreenMode; if (!PWINDOWTOCHANGETO->m_bPinned) g_pCompositor->setWindowFullscreenInternal(PLASTWINDOW, FSMODE_NONE); @@ -1223,15 +1223,15 @@ static SWorkspaceIDName getWorkspaceToChangeFromArgs(std::string args, PHLWORKSP } const bool PER_MON = args.contains("_per_monitor"); - const SWorkspaceIDName PPREVWS = PER_MON ? PMONITOR->getPrevWorkspaceIDName(PCURRENTWORKSPACE->m_iID) : PCURRENTWORKSPACE->getPrevWorkspaceIDName(); + const SWorkspaceIDName PPREVWS = PER_MON ? PMONITOR->getPrevWorkspaceIDName(PCURRENTWORKSPACE->m_id) : PCURRENTWORKSPACE->getPrevWorkspaceIDName(); // Do nothing if there's no previous workspace, otherwise switch to it. - if (PPREVWS.id == -1 || PPREVWS.id == PCURRENTWORKSPACE->m_iID) { + if (PPREVWS.id == -1 || PPREVWS.id == PCURRENTWORKSPACE->m_id) { Debug::log(LOG, "No previous workspace to change to"); return {.id = WORKSPACE_NOT_CHANGED}; } if (const auto PWORKSPACETOCHANGETO = g_pCompositor->getWorkspaceByID(PPREVWS.id); PWORKSPACETOCHANGETO) { - return {.id = PWORKSPACETOCHANGETO->m_iID, .name = PWORKSPACETOCHANGETO->m_szName}; + return {.id = PWORKSPACETOCHANGETO->m_id, .name = PWORKSPACETOCHANGETO->m_name}; } return {.id = PPREVWS.id, .name = PPREVWS.name.empty() ? std::to_string(PPREVWS.id) : PPREVWS.name}; @@ -1262,9 +1262,9 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { if (workspaceToChangeTo == WORKSPACE_NOT_CHANGED) return {}; - const SWorkspaceIDName PPREVWS = args.contains("_per_monitor") ? PMONITOR->getPrevWorkspaceIDName(PCURRENTWORKSPACE->m_iID) : PCURRENTWORKSPACE->getPrevWorkspaceIDName(); + const SWorkspaceIDName PPREVWS = args.contains("_per_monitor") ? PMONITOR->getPrevWorkspaceIDName(PCURRENTWORKSPACE->m_id) : PCURRENTWORKSPACE->getPrevWorkspaceIDName(); - const bool BISWORKSPACECURRENT = workspaceToChangeTo == PCURRENTWORKSPACE->m_iID; + const bool BISWORKSPACECURRENT = workspaceToChangeTo == PCURRENTWORKSPACE->m_id; if (BISWORKSPACECURRENT && (!(*PBACKANDFORTH || EXPLICITPREVIOUS) || PPREVWS.id == -1)) { if (*PHIDESPECIALONWORKSPACECHANGE) PMONITOR->setSpecialWorkspace(nullptr); @@ -1280,7 +1280,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { pWorkspaceToChangeTo = g_pCompositor->createNewWorkspace(BISWORKSPACECURRENT ? PPREVWS.id : workspaceToChangeTo, PMONITOR->ID, BISWORKSPACECURRENT ? PPREVWS.name : workspaceName); - if (!BISWORKSPACECURRENT && pWorkspaceToChangeTo->m_bIsSpecialWorkspace) { + if (!BISWORKSPACECURRENT && pWorkspaceToChangeTo->m_isSpecialWorkspace) { PMONITOR->setSpecialWorkspace(pWorkspaceToChangeTo); g_pInputManager->simulateMouseMovement(); return {}; @@ -1288,7 +1288,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { g_pInputManager->releaseAllMouseButtons(); - const auto PMONITORWORKSPACEOWNER = PMONITOR == pWorkspaceToChangeTo->m_pMonitor ? PMONITOR : pWorkspaceToChangeTo->m_pMonitor.lock(); + const auto PMONITORWORKSPACEOWNER = PMONITOR == pWorkspaceToChangeTo->m_monitor ? PMONITOR : pWorkspaceToChangeTo->m_monitor.lock(); if (!PMONITORWORKSPACEOWNER) return {.success = false, .error = "Workspace to switch to has no monitor"}; @@ -1425,20 +1425,20 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { if (pWorkspace) { g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace); - pMonitor = pWorkspace->m_pMonitor.lock(); + pMonitor = pWorkspace->m_monitor.lock(); g_pCompositor->setActiveMonitor(pMonitor); } else { pWorkspace = g_pCompositor->createNewWorkspace(WORKSPACEID, PWINDOW->monitorID(), workspaceName, false); - pMonitor = pWorkspace->m_pMonitor.lock(); + pMonitor = pWorkspace->m_monitor.lock(); g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace); } - POLDWS->m_pLastFocusedWindow = POLDWS->getFirstWindow(); + POLDWS->m_lastFocusedWindow = POLDWS->getFirstWindow(); - if (pWorkspace->m_bIsSpecialWorkspace) + if (pWorkspace->m_isSpecialWorkspace) pMonitor->setSpecialWorkspace(pWorkspace); - else if (POLDWS->m_bIsSpecialWorkspace) - POLDWS->m_pMonitor.lock()->setSpecialWorkspace(nullptr); + else if (POLDWS->m_isSpecialWorkspace) + POLDWS->m_monitor.lock()->setSpecialWorkspace(nullptr); if (*PALLOWWORKSPACECYCLES) pWorkspace->rememberPrevWorkspace(POLDWS); @@ -1782,7 +1782,7 @@ SDispatchResult CKeybindManager::toggleSplit(std::string args) { const auto PWORKSPACE = header.pWindow->m_pWorkspace; - if (PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_hasFullscreenWindow) return {.success = false, .error = "Can't split windows that already split"}; g_pLayoutManager->getCurrentLayout()->layoutMessage(header, "togglesplit"); @@ -1799,7 +1799,7 @@ SDispatchResult CKeybindManager::swapSplit(std::string args) { const auto PWORKSPACE = header.pWindow->m_pWorkspace; - if (PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_hasFullscreenWindow) return {.success = false, .error = "Can't split windows that already split"}; g_pLayoutManager->getCurrentLayout()->layoutMessage(header, "swapsplit"); @@ -1919,17 +1919,17 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { return {.success = false, .error = "Workspace not found"}; // ???? if (args == "allpseudo") { - PWORKSPACE->m_bDefaultPseudo = !PWORKSPACE->m_bDefaultPseudo; + PWORKSPACE->m_defaultPseudo = !PWORKSPACE->m_defaultPseudo; // apply for (auto const& w : g_pCompositor->m_windows) { if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE) continue; - w->m_bIsPseudotiled = PWORKSPACE->m_bDefaultPseudo; + w->m_bIsPseudotiled = PWORKSPACE->m_defaultPseudo; } } else if (args == "allfloat") { - PWORKSPACE->m_bDefaultFloating = !PWORKSPACE->m_bDefaultFloating; + PWORKSPACE->m_defaultFloating = !PWORKSPACE->m_defaultFloating; // apply // we make a copy because changeWindowFloatingMode might invalidate the iterator @@ -1939,14 +1939,14 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE || w->isHidden()) continue; - if (!w->m_bRequestsFloat && w->m_bIsFloating != PWORKSPACE->m_bDefaultFloating) { + if (!w->m_bRequestsFloat && w->m_bIsFloating != PWORKSPACE->m_defaultFloating) { const auto SAVEDPOS = w->m_vRealPosition->goal(); const auto SAVEDSIZE = w->m_vRealSize->goal(); - w->m_bIsFloating = PWORKSPACE->m_bDefaultFloating; + w->m_bIsFloating = PWORKSPACE->m_defaultFloating; g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(w); - if (PWORKSPACE->m_bDefaultFloating) { + if (PWORKSPACE->m_defaultFloating) { w->m_vRealPosition->setValueAndWarp(SAVEDPOS); w->m_vRealSize->setValueAndWarp(SAVEDSIZE); *w->m_vRealSize = w->m_vRealSize->value() + Vector2D(4, 4); @@ -2082,11 +2082,11 @@ SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args if (!pWorkspace) pWorkspace = g_pCompositor->createNewWorkspace(PREVWS.id, PCURRMONITOR->ID, PREVWS.name); - workspaceID = pWorkspace->m_iID; + workspaceID = pWorkspace->m_id; } - if (pWorkspace->m_pMonitor != PCURRMONITOR) { - const auto POLDMONITOR = pWorkspace->m_pMonitor.lock(); + if (pWorkspace->m_monitor != PCURRMONITOR) { + const auto POLDMONITOR = pWorkspace->m_monitor.lock(); if (!POLDMONITOR) { // wat Debug::log(ERR, "focusWorkspaceOnCurrentMonitor old monitor doesn't exist!"); return {.success = false, .error = "focusWorkspaceOnCurrentMonitor old monitor doesn't exist!"}; @@ -2319,9 +2319,9 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { changeworkspace(PWORKSPACE->getConfigName()); } - if (PWORKSPACE->m_bHasFullscreenWindow) { + if (PWORKSPACE->m_hasFullscreenWindow) { const auto FSWINDOW = PWORKSPACE->getFullscreenWindow(); - const auto FSMODE = PWORKSPACE->m_efFullscreenMode; + const auto FSMODE = PWORKSPACE->m_fullscreenMode; if (PWINDOW->m_bIsFloating) { // don't make floating implicitly fs @@ -2775,7 +2775,7 @@ SDispatchResult CKeybindManager::pinActive(std::string args) { const auto PWORKSPACE = PWINDOW->m_pWorkspace; - PWORKSPACE->m_pLastFocusedWindow = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS); + PWORKSPACE->m_lastFocusedWindow = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS); g_pEventManager->postEvent(SHyprIPCEvent{"pin", std::format("{:x},{}", (uintptr_t)PWINDOW.get(), (int)PWINDOW->m_bPinned)}); EMIT_HOOK_EVENT("pin", PWINDOW); diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index d9e5c9f3..6a53001b 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -149,7 +149,7 @@ void CPointerManager::setCursorSurface(SP surf, const Vector2D& hots surf->resource()->map(); - currentCursorImage.destroySurface = surf->events.destroy.registerListener([this](std::any data) { resetCursorImage(); }); + currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); }); currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) { damageIfSoftware(); currentCursorImage.size = currentCursorImage.surface->resource()->current.texture ? currentCursorImage.surface->resource()->current.bufferSize : Vector2D{}; diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index e33621c9..61820fe5 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -74,7 +74,7 @@ void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) { } if (!pWindow->m_bPinned) - pWindow->m_pWorkspace->m_pLastFocusedWindow = pWindow; + pWindow->m_pWorkspace->m_lastFocusedWindow = pWindow; } CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index 4481002a..f0050381 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -24,7 +24,7 @@ void CInputManager::newIdleInhibitor(std::any inhibitor) { return; } - PINHIBIT->surfaceDestroyListener = WLSurface->events.destroy.registerListener( + PINHIBIT->surfaceDestroyListener = WLSurface->m_events.destroy.registerListener( [this, PINHIBIT](std::any data) { std::erase_if(m_vIdleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); }); recheckIdleInhibitorStatus(); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 4aadff96..c51b8e1c 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -338,12 +338,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // then, we check if the workspace doesnt have a fullscreen window const auto PWORKSPACE = PMONITOR->activeWorkspace; const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); - if (PWORKSPACE->m_bHasFullscreenWindow && !foundSurface && PWORKSPACE->m_efFullscreenMode == FSMODE_FULLSCREEN) { + if (PWORKSPACE->m_hasFullscreenWindow && !foundSurface && PWORKSPACE->m_fullscreenMode == FSMODE_FULLSCREEN) { pFoundWindow = PWORKSPACE->getFullscreenWindow(); if (!pFoundWindow) { // what the fuck, somehow happens occasionally?? - PWORKSPACE->m_bHasFullscreenWindow = false; + PWORKSPACE->m_hasFullscreenWindow = false; return; } @@ -363,7 +363,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // then windows if (!foundSurface) { - if (PWORKSPACE->m_bHasFullscreenWindow && PWORKSPACE->m_efFullscreenMode == FSMODE_MAXIMIZED) { + if (PWORKSPACE->m_hasFullscreenWindow && PWORKSPACE->m_fullscreenMode == FSMODE_MAXIMIZED) { if (!foundSurface) { if (PMONITOR->activeSpecialWorkspace) { if (pFoundWindow != PWINDOWIDEAL) diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index 76119aab..c6916ee0 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -18,7 +18,7 @@ void CInputManager::onSwipeBegin(IPointer::SSwipeBeginEvent e) { int onMonitor = 0; for (auto const& w : g_pCompositor->m_workspaces) { - if (w->m_pMonitor == g_pCompositor->m_lastMonitor && !g_pCompositor->isWorkspaceSpecial(w->m_iID)) + if (w->m_monitor == g_pCompositor->m_lastMonitor && !g_pCompositor->isWorkspaceSpecial(w->m_id)) onMonitor++; } @@ -31,7 +31,7 @@ void CInputManager::onSwipeBegin(IPointer::SSwipeBeginEvent e) { void CInputManager::beginWorkspaceSwipe() { const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; - Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_szName); + Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_name); m_sActiveSwipe.pWorkspaceBegin = PWORKSPACE; m_sActiveSwipe.delta = 0; @@ -39,7 +39,7 @@ void CInputManager::beginWorkspaceSwipe() { m_sActiveSwipe.avgSpeed = 0; m_sActiveSwipe.speedPoints = 0; - if (PWORKSPACE->m_bHasFullscreenWindow) { + if (PWORKSPACE->m_hasFullscreenWindow) { for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { *ls->m_alpha = 1.f; } @@ -61,7 +61,7 @@ void CInputManager::endWorkspaceSwipe() { static auto PSWIPENEW = CConfigValue("gestures:workspace_swipe_create_new"); static auto PSWIPEUSER = CConfigValue("gestures:workspace_swipe_use_r"); static auto PWORKSPACEGAP = CConfigValue("general:gaps_workspaces"); - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->getStyle(); + const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); // commit @@ -71,14 +71,14 @@ void CInputManager::endWorkspaceSwipe() { // If we've been swiping off the right end with PSWIPENEW enabled, there is // no workspace there yet, and we need to choose an ID for a new one now. - if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID && *PSWIPENEW) { + if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_id && *PSWIPENEW) { workspaceIDRight = getWorkspaceIDNameFromString("r+1").id; } auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER - const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->value(); + const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->value(); const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + *PWORKSPACEGAP; const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + *PWORKSPACEGAP; @@ -89,35 +89,35 @@ void CInputManager::endWorkspaceSwipe() { // revert if (abs(m_sActiveSwipe.delta) < 2) { if (PWORKSPACEL) - PWORKSPACEL->m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); + PWORKSPACEL->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); if (PWORKSPACER) - PWORKSPACER->m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); + PWORKSPACER->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); } else { if (m_sActiveSwipe.delta < 0) { // to left if (PWORKSPACEL) { if (VERTANIMS) - *PWORKSPACEL->m_vRenderOffset = Vector2D{0.0, -YDISTANCE}; + *PWORKSPACEL->m_renderOffset = Vector2D{0.0, -YDISTANCE}; else - *PWORKSPACEL->m_vRenderOffset = Vector2D{-XDISTANCE, 0.0}; + *PWORKSPACEL->m_renderOffset = Vector2D{-XDISTANCE, 0.0}; } } else if (PWORKSPACER) { // to right if (VERTANIMS) - *PWORKSPACER->m_vRenderOffset = Vector2D{0.0, YDISTANCE}; + *PWORKSPACER->m_renderOffset = Vector2D{0.0, YDISTANCE}; else - *PWORKSPACER->m_vRenderOffset = Vector2D{XDISTANCE, 0.0}; + *PWORKSPACER->m_renderOffset = Vector2D{XDISTANCE, 0.0}; } - *m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(); + *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(); } pSwitchedTo = m_sActiveSwipe.pWorkspaceBegin; } else if (m_sActiveSwipe.delta < 0) { // switch to left - const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_vRenderOffset->value() : Vector2D(); + const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_renderOffset->value() : Vector2D(); if (PWORKSPACEL) m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft); @@ -127,15 +127,15 @@ void CInputManager::endWorkspaceSwipe() { PWORKSPACEL->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } - PWORKSPACEL->m_vRenderOffset->setValue(RENDEROFFSET); - PWORKSPACEL->m_fAlpha->setValueAndWarp(1.f); + PWORKSPACEL->m_renderOffset->setValue(RENDEROFFSET); + PWORKSPACEL->m_alpha->setValueAndWarp(1.f); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValue(RENDEROFFSETMIDDLE); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); if (VERTANIMS) - *m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(0.0, YDISTANCE); + *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, YDISTANCE); else - *m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(XDISTANCE, 0.0); - m_sActiveSwipe.pWorkspaceBegin->m_fAlpha->setValueAndWarp(1.f); + *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(XDISTANCE, 0.0); + m_sActiveSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); g_pInputManager->unconstrainMouse(); @@ -144,7 +144,7 @@ void CInputManager::endWorkspaceSwipe() { pSwitchedTo = PWORKSPACEL; } else { // switch to right - const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_vRenderOffset->value() : Vector2D(); + const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_renderOffset->value() : Vector2D(); if (PWORKSPACER) m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight); @@ -154,15 +154,15 @@ void CInputManager::endWorkspaceSwipe() { PWORKSPACER->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } - PWORKSPACER->m_vRenderOffset->setValue(RENDEROFFSET); - PWORKSPACER->m_fAlpha->setValueAndWarp(1.f); + PWORKSPACER->m_renderOffset->setValue(RENDEROFFSET); + PWORKSPACER->m_alpha->setValueAndWarp(1.f); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValue(RENDEROFFSETMIDDLE); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); if (VERTANIMS) - *m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(0.0, -YDISTANCE); + *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, -YDISTANCE); else - *m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(-XDISTANCE, 0.0); - m_sActiveSwipe.pWorkspaceBegin->m_fAlpha->setValueAndWarp(1.f); + *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(-XDISTANCE, 0.0); + m_sActiveSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); g_pInputManager->unconstrainMouse(); @@ -175,10 +175,10 @@ void CInputManager::endWorkspaceSwipe() { g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); if (PWORKSPACEL) - PWORKSPACEL->m_bForceRendering = false; + PWORKSPACEL->m_forceRendering = false; if (PWORKSPACER) - PWORKSPACER->m_bForceRendering = false; - m_sActiveSwipe.pWorkspaceBegin->m_bForceRendering = false; + PWORKSPACER->m_forceRendering = false; + m_sActiveSwipe.pWorkspaceBegin->m_forceRendering = false; m_sActiveSwipe.pWorkspaceBegin = nullptr; m_sActiveSwipe.initialDirection = 0; @@ -187,7 +187,7 @@ void CInputManager::endWorkspaceSwipe() { // apply alpha for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { - *ls->m_alpha = pSwitchedTo->m_bHasFullscreenWindow && pSwitchedTo->m_efFullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; + *ls->m_alpha = pSwitchedTo->m_hasFullscreenWindow && pSwitchedTo->m_fullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } @@ -197,7 +197,7 @@ void CInputManager::onSwipeUpdate(IPointer::SSwipeUpdateEvent e) { if (!m_sActiveSwipe.pWorkspaceBegin) return; static auto PSWIPEINVR = CConfigValue("gestures:workspace_swipe_invert"); - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->getStyle(); + const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); const double delta = m_sActiveSwipe.delta + (VERTANIMS ? (*PSWIPEINVR ? -e.delta.y : e.delta.y) : (*PSWIPEINVR ? -e.delta.x : e.delta.x)); @@ -216,7 +216,7 @@ void CInputManager::updateWorkspaceSwipe(double delta) { const auto SWIPEDISTANCE = std::clamp(*PSWIPEDIST, (int64_t)1LL, (int64_t)UINT32_MAX); const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + *PWORKSPACEGAP; const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + *PWORKSPACEGAP; - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->getStyle(); + const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); const double d = m_sActiveSwipe.delta - delta; m_sActiveSwipe.delta = delta; @@ -227,18 +227,18 @@ void CInputManager::updateWorkspaceSwipe(double delta) { auto workspaceIDLeft = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r-1" : "m-1")).id; auto workspaceIDRight = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r+1" : "m+1")).id; - if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_sActiveSwipe.pWorkspaceBegin->m_iID) && !*PSWIPENEW) { + if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_sActiveSwipe.pWorkspaceBegin->m_id) && !*PSWIPENEW) { m_sActiveSwipe.pWorkspaceBegin = nullptr; // invalidate the swipe return; } - m_sActiveSwipe.pWorkspaceBegin->m_bForceRendering = true; + m_sActiveSwipe.pWorkspaceBegin->m_forceRendering = true; m_sActiveSwipe.delta = std::clamp(m_sActiveSwipe.delta, (double)-SWIPEDISTANCE, (double)SWIPEDISTANCE); - if ((m_sActiveSwipe.pWorkspaceBegin->m_iID == workspaceIDLeft && *PSWIPENEW && (m_sActiveSwipe.delta < 0)) || - (m_sActiveSwipe.delta > 0 && m_sActiveSwipe.pWorkspaceBegin->getWindows() == 0 && workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID) || - (m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_iID <= workspaceIDLeft)) { + if ((m_sActiveSwipe.pWorkspaceBegin->m_id == workspaceIDLeft && *PSWIPENEW && (m_sActiveSwipe.delta < 0)) || + (m_sActiveSwipe.delta > 0 && m_sActiveSwipe.pWorkspaceBegin->getWindows() == 0 && workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_id) || + (m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_id <= workspaceIDLeft)) { m_sActiveSwipe.delta = 0; return; @@ -254,14 +254,14 @@ void CInputManager::updateWorkspaceSwipe(double delta) { if (m_sActiveSwipe.delta < 0) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDLeft); - if (workspaceIDLeft > m_sActiveSwipe.pWorkspaceBegin->m_iID || !PWORKSPACE) { + if (workspaceIDLeft > m_sActiveSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { if (*PSWIPENEW) { g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); if (VERTANIMS) - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); else - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos(); return; @@ -270,38 +270,38 @@ void CInputManager::updateWorkspaceSwipe(double delta) { return; } - PWORKSPACE->m_bForceRendering = true; - PWORKSPACE->m_fAlpha->setValueAndWarp(1.f); + PWORKSPACE->m_forceRendering = true; + PWORKSPACE->m_alpha->setValueAndWarp(1.f); - if (workspaceIDLeft != workspaceIDRight && workspaceIDRight != m_sActiveSwipe.pWorkspaceBegin->m_iID) { + if (workspaceIDLeft != workspaceIDRight && workspaceIDRight != m_sActiveSwipe.pWorkspaceBegin->m_id) { const auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); if (PWORKSPACER) { - PWORKSPACER->m_bForceRendering = false; - PWORKSPACER->m_fAlpha->setValueAndWarp(0.f); + PWORKSPACER->m_forceRendering = false; + PWORKSPACER->m_alpha->setValueAndWarp(0.f); } } if (VERTANIMS) { - PWORKSPACE->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE - YDISTANCE)); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE - YDISTANCE)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); } else { - PWORKSPACE->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE - XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE - XDISTANCE, 0.0)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); } PWORKSPACE->updateWindowDecos(); } else { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight); - if (workspaceIDRight < m_sActiveSwipe.pWorkspaceBegin->m_iID || !PWORKSPACE) { + if (workspaceIDRight < m_sActiveSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { if (*PSWIPENEW) { g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); if (VERTANIMS) - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); else - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos(); return; @@ -310,24 +310,24 @@ void CInputManager::updateWorkspaceSwipe(double delta) { return; } - PWORKSPACE->m_bForceRendering = true; - PWORKSPACE->m_fAlpha->setValueAndWarp(1.f); + PWORKSPACE->m_forceRendering = true; + PWORKSPACE->m_alpha->setValueAndWarp(1.f); - if (workspaceIDLeft != workspaceIDRight && workspaceIDLeft != m_sActiveSwipe.pWorkspaceBegin->m_iID) { + if (workspaceIDLeft != workspaceIDRight && workspaceIDLeft != m_sActiveSwipe.pWorkspaceBegin->m_id) { const auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); if (PWORKSPACEL) { - PWORKSPACEL->m_bForceRendering = false; - PWORKSPACEL->m_fAlpha->setValueAndWarp(0.f); + PWORKSPACEL->m_forceRendering = false; + PWORKSPACEL->m_alpha->setValueAndWarp(0.f); } } if (VERTANIMS) { - PWORKSPACE->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE + YDISTANCE)); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE + YDISTANCE)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); } else { - PWORKSPACE->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE + XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE + XDISTANCE, 0.0)); + m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); } PWORKSPACE->updateWindowDecos(); diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 5a030335..a5d53029 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -44,7 +44,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { // TODO: Don't swipe if you touched a floating window. } else if (*PSWIPETOUCH && (m_pFoundLSToFocus.expired() || m_pFoundLSToFocus->m_layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { const auto PWORKSPACE = PMONITOR->activeWorkspace; - const auto STYLE = PWORKSPACE->m_vRenderOffset->getStyle(); + const auto STYLE = PWORKSPACE->m_renderOffset->getStyle(); const bool VERTANIMS = STYLE == "slidevert" || STYLE.starts_with("slidefadevert"); const double TARGETLEFT = ((VERTANIMS ? gapsOut.m_top : gapsOut.m_left) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x); const double TARGETRIGHT = 1 - (((VERTANIMS ? gapsOut.m_bottom : gapsOut.m_right) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x)); @@ -121,7 +121,7 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { if (e.touchID != m_sActiveSwipe.touch_id) return; - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset->getStyle(); + const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); static auto PSWIPEINVR = CConfigValue("gestures:workspace_swipe_touch_invert"); static auto PSWIPEDIST = CConfigValue("gestures:workspace_swipe_distance"); diff --git a/src/protocols/AlphaModifier.cpp b/src/protocols/AlphaModifier.cpp index 60037632..3fea51fe 100644 --- a/src/protocols/AlphaModifier.cpp +++ b/src/protocols/AlphaModifier.cpp @@ -33,9 +33,9 @@ void CAlphaModifier::setResource(SP resource) { listeners.surfaceCommitted = m_pSurface->events.commit.registerListener([this](std::any data) { auto surface = CWLSurface::fromResource(m_pSurface.lock()); - if (surface && surface->m_fAlphaModifier != m_fAlpha) { - surface->m_fAlphaModifier = m_fAlpha; - auto box = surface->getSurfaceBoxGlobal(); + if (surface && surface->m_alphaModifier != m_fAlpha) { + surface->m_alphaModifier = m_fAlpha; + auto box = surface->getSurfaceBoxGlobal(); if (box.has_value()) g_pHyprRenderer->damageBox(*box); diff --git a/src/protocols/HyprlandSurface.cpp b/src/protocols/HyprlandSurface.cpp index 8b65f0fa..cdf6d722 100644 --- a/src/protocols/HyprlandSurface.cpp +++ b/src/protocols/HyprlandSurface.cpp @@ -54,10 +54,10 @@ void CHyprlandSurface::setResource(SP resource) { listeners.surfaceCommitted = m_pSurface->events.commit.registerListener([this](std::any data) { auto surface = CWLSurface::fromResource(m_pSurface.lock()); - if (surface && (surface->m_fOverallOpacity != m_fOpacity || m_bVisibleRegionChanged)) { - surface->m_fOverallOpacity = m_fOpacity; - surface->m_visibleRegion = m_visibleRegion; - auto box = surface->getSurfaceBoxGlobal(); + if (surface && (surface->m_overallOpacity != m_fOpacity || m_bVisibleRegionChanged)) { + surface->m_overallOpacity = m_fOpacity; + surface->m_visibleRegion = m_visibleRegion; + auto box = surface->getSurfaceBoxGlobal(); if (box.has_value()) g_pHyprRenderer->damageBox(*box); diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index b4868b56..c25dfdee 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -75,12 +75,12 @@ CPointerConstraint::~CPointerConstraint() { }); if (pHLSurface) - pHLSurface->m_pConstraint.reset(); + pHLSurface->m_constraint.reset(); } void CPointerConstraint::sharedConstructions() { if (pHLSurface) { - listeners.destroySurface = pHLSurface->events.destroy.registerListener([this](std::any d) { + listeners.destroySurface = pHLSurface->m_events.destroy.registerListener([this](std::any d) { pHLSurface.reset(); if (active) deactivate(); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 0349cac1..bc606c8d 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1558,8 +1558,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ || (imageDescription == m_RenderData.pMonitor->imageDescription) /* Source and target have the same image description */ || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->activeWorkspace && - m_RenderData.pMonitor->activeWorkspace->m_bHasFullscreenWindow && - m_RenderData.pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; + m_RenderData.pMonitor->activeWorkspace->m_hasFullscreenWindow && + m_RenderData.pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) shader = &m_shaders->m_shCM; @@ -2057,13 +2057,13 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { if (pWindow->m_sWindowData.noBlur.valueOrDefault()) return false; - if (pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_bFillIgnoreSmall) + if (pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall) return true; const auto PSURFACE = pWindow->m_pWLSurface->resource(); const auto PWORKSPACE = pWindow->m_pWorkspace; - const float A = pWindow->m_fAlpha->value() * pWindow->m_fActiveInactiveAlpha->value() * PWORKSPACE->m_fAlpha->value(); + const float A = pWindow->m_fAlpha->value() * pWindow->m_fActiveInactiveAlpha->value() * PWORKSPACE->m_alpha->value(); if (A >= 1.f) { // if (PSURFACE->opaque) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index bf93d072..364f7fde 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -188,16 +188,16 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { return true; const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_pMonitor == pMonitor) { - if (PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated() || PWINDOWWORKSPACE->m_fAlpha->isBeingAnimated() || PWINDOWWORKSPACE->m_bForceRendering) + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_monitor == pMonitor) { + if (PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() || PWINDOWWORKSPACE->m_alpha->isBeingAnimated() || PWINDOWWORKSPACE->m_forceRendering) return true; // if hidden behind fullscreen - if (PWINDOWWORKSPACE->m_bHasFullscreenWindow && !pWindow->isFullscreen() && (!pWindow->m_bIsFloating || !pWindow->m_bCreatedOverFullscreen) && + if (PWINDOWWORKSPACE->m_hasFullscreenWindow && !pWindow->isFullscreen() && (!pWindow->m_bIsFloating || !pWindow->m_bCreatedOverFullscreen) && pWindow->m_fAlpha->value() == 0) return false; - if (!PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated() && !PWINDOWWORKSPACE->m_fAlpha->isBeingAnimated() && !PWINDOWWORKSPACE->isVisible()) + if (!PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOWWORKSPACE->m_alpha->isBeingAnimated() && !PWINDOWWORKSPACE->isVisible()) return false; } @@ -219,13 +219,13 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { return false; if (pWindow->m_vRealPosition->isBeingAnimated()) { - if (PWINDOWWORKSPACE && !PWINDOWWORKSPACE->m_bIsSpecialWorkspace && PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated()) + if (PWINDOWWORKSPACE && !PWINDOWWORKSPACE->m_isSpecialWorkspace && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated()) return false; // render window if window and monitor intersect // (when moving out of or through a monitor) CBox windowBox = pWindow->getFullWindowBoundingBox(); - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated()) - windowBox.translate(PWINDOWWORKSPACE->m_vRenderOffset->value()); + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated()) + windowBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); windowBox.translate(pWindow->m_vFloatingOffset); const CBox monitorBox = {pMonitor->vecPosition, pMonitor->vecSize}; @@ -246,14 +246,14 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) { if (!pWindow->m_pWorkspace) return false; - if (pWindow->m_bPinned || PWORKSPACE->m_bForceRendering) + if (pWindow->m_bPinned || PWORKSPACE->m_forceRendering) return true; if (PWORKSPACE && PWORKSPACE->isVisible()) return true; for (auto const& m : g_pCompositor->m_monitors) { - if (PWORKSPACE && PWORKSPACE->m_pMonitor == m && (PWORKSPACE->m_vRenderOffset->isBeingAnimated() || PWORKSPACE->m_fAlpha->isBeingAnimated())) + if (PWORKSPACE && PWORKSPACE->m_monitor == m && (PWORKSPACE->m_renderOffset->isBeingAnimated() || PWORKSPACE->m_alpha->isBeingAnimated())) return true; if (m->activeSpecialWorkspace && pWindow->onSpecialWorkspace()) @@ -279,7 +279,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (w->isFullscreen() || w->m_bIsFloating) continue; - if (pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL); @@ -296,10 +296,10 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (w->isFullscreen() || !w->m_bIsFloating) continue; - if (w->m_pMonitor == pWorkspace->m_pMonitor && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_bIsSpecialWorkspace && w->m_pMonitor != pWorkspace->m_pMonitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL); @@ -310,7 +310,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR const auto PWORKSPACE = w->m_pWorkspace; if (w->m_pWorkspace != pWorkspace || !w->isFullscreen()) { - if (!(PWORKSPACE && (PWORKSPACE->m_vRenderOffset->isBeingAnimated() || PWORKSPACE->m_fAlpha->isBeingAnimated() || PWORKSPACE->m_bForceRendering))) + if (!(PWORKSPACE && (PWORKSPACE->m_renderOffset->isBeingAnimated() || PWORKSPACE->m_alpha->isBeingAnimated() || PWORKSPACE->m_forceRendering))) continue; if (w->m_pMonitor != pMonitor) @@ -320,11 +320,11 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (!w->isFullscreen()) continue; - if (w->m_pMonitor == pWorkspace->m_pMonitor && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; if (shouldRenderWindow(w, pMonitor)) - renderWindow(w, pMonitor, time, pWorkspace->m_efFullscreenMode != FSMODE_FULLSCREEN, RENDER_PASS_ALL); + renderWindow(w, pMonitor, time, pWorkspace->m_fullscreenMode != FSMODE_FULLSCREEN, RENDER_PASS_ALL); if (w->m_pWorkspace != pWorkspace) continue; @@ -334,7 +334,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (!pWorkspaceWindow) { // ?? happens sometimes... - pWorkspace->m_bHasFullscreenWindow = false; + pWorkspace->m_hasFullscreenWindow = false; return; // this will produce one blank frame. Oh well. } @@ -344,10 +344,10 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR w->isFullscreen()) continue; - if (w->m_pMonitor == pWorkspace->m_pMonitor && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_bIsSpecialWorkspace && w->m_pMonitor != pWorkspace->m_pMonitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL); @@ -380,7 +380,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo // some things may force us to ignore the special/not special disparity const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); - if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; // render active window after all others of this pass @@ -422,7 +422,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo // some things may force us to ignore the special/not special disparity const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); - if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; // render the bad boy @@ -441,10 +441,10 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo // some things may force us to ignore the special/not special disparity const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); - if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace()) + if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_bIsSpecialWorkspace && w->m_pMonitor != pWorkspace->m_pMonitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass // render the bad boy @@ -468,7 +468,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T TRACY_GPU_ZONE("RenderWindow"); const auto PWORKSPACE = pWindow->m_pWorkspace; - const auto REALPOS = pWindow->m_vRealPosition->value() + (pWindow->m_bPinned ? Vector2D{} : PWORKSPACE->m_vRenderOffset->value()); + const auto REALPOS = pWindow->m_vRealPosition->value() + (pWindow->m_bPinned ? Vector2D{} : PWORKSPACE->m_renderOffset->value()); static auto PDIMAROUND = CConfigValue("decoration:dim_around"); static auto PBLUR = CConfigValue("decoration:blur:enabled"); @@ -500,7 +500,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.surface = pWindow->m_pWLSurface->resource(); renderdata.dontRound = pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN) || pWindow->m_sWindowData.noRounding.valueOrDefault(); - renderdata.fadeAlpha = pWindow->m_fAlpha->value() * (pWindow->m_bPinned || USE_WORKSPACE_FADE_ALPHA ? 1.f : PWORKSPACE->m_fAlpha->value()) * + renderdata.fadeAlpha = pWindow->m_fAlpha->value() * (pWindow->m_bPinned || USE_WORKSPACE_FADE_ALPHA ? 1.f : PWORKSPACE->m_alpha->value()) * (USE_WORKSPACE_FADE_ALPHA ? pWindow->m_fMovingToWorkspaceAlpha->value() : 1.F) * pWindow->m_fMovingFromWorkspaceAlpha->value(); renderdata.alpha = pWindow->m_fActiveInactiveAlpha->value(); renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN); @@ -534,9 +534,9 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.pos.y += pWindow->m_vFloatingOffset.y; // if window is floating and we have a slide animation, clip it to its full bb - if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->isFullscreen() && PWORKSPACE->m_vRenderOffset->isBeingAnimated() && !pWindow->m_bPinned) { + if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->isFullscreen() && PWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_bPinned) { CRegion rg = - pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_vRenderOffset->value() + pWindow->m_vFloatingOffset).scale(pMonitor->scale); + pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_renderOffset->value() + pWindow->m_vFloatingOffset).scale(pMonitor->scale); renderdata.clipBox = rg.getExtents(); } @@ -573,7 +573,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if ((pWindow->m_bIsX11 && *PXWLUSENN) || pWindow->m_sWindowData.nearestNeighbor.valueOrDefault()) renderdata.useNearestNeighbor = true; - if (!pWindow->m_sWindowData.noBlur.valueOrDefault() && pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_bFillIgnoreSmall && renderdata.blur && *PBLUR) { + if (!pWindow->m_sWindowData.noBlur.valueOrDefault() && pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall && renderdata.blur && *PBLUR) { CBox wb = {renderdata.pos.x - pMonitor->vecPosition.x, renderdata.pos.y - pMonitor->vecPosition.y, renderdata.w, renderdata.h}; wb.scale(pMonitor->scale).round(); CRectPassElement::SRectData data; @@ -901,15 +901,15 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA // pre window pass g_pHyprOpenGL->preWindowPass(); - if (pWorkspace->m_bHasFullscreenWindow) + if (pWorkspace->m_hasFullscreenWindow) renderWorkspaceWindowsFullscreen(pMonitor, pWorkspace, time); else renderWorkspaceWindows(pMonitor, pWorkspace, time); // and then special for (auto const& ws : g_pCompositor->m_workspaces) { - if (ws->m_pMonitor == pMonitor && ws->m_fAlpha->value() > 0.f && ws->m_bIsSpecialWorkspace) { - const auto SPECIALANIMPROGRS = ws->m_vRenderOffset->isBeingAnimated() ? ws->m_vRenderOffset->getCurveValue() : ws->m_fAlpha->getCurveValue(); + if (ws->m_monitor == pMonitor && ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) { + const auto SPECIALANIMPROGRS = ws->m_renderOffset->isBeingAnimated() ? ws->m_renderOffset->getCurveValue() : ws->m_alpha->getCurveValue(); const bool ANIMOUT = !pMonitor->activeSpecialWorkspace; if (*PDIMSPECIAL != 0.f) { @@ -936,8 +936,8 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA // special for (auto const& ws : g_pCompositor->m_workspaces) { - if (ws->m_fAlpha->value() > 0.f && ws->m_bIsSpecialWorkspace) { - if (ws->m_bHasFullscreenWindow) + if (ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) { + if (ws->m_hasFullscreenWindow) renderWorkspaceWindowsFullscreen(pMonitor, ws, time); else renderWorkspaceWindows(pMonitor, ws, time); @@ -1107,7 +1107,7 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_pWLSurface->small() && !pWindow->m_pWLSurface->m_bFillIgnoreSmall) + if (pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall) maxSize = pWindow->m_pWLSurface->getViewporterCorrectedSize(); if (geom.width > maxSize.x) @@ -1225,8 +1225,8 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { pMonitor->tearingState.activelyTearing = shouldTear; if ((*PDIRECTSCANOUT == 1 || - (*PDIRECTSCANOUT == 2 && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_bHasFullscreenWindow && - pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN && pMonitor->activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && + (*PDIRECTSCANOUT == 2 && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && + pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && pMonitor->activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && !shouldTear) { if (pMonitor->attemptDirectScanout()) { return; @@ -1481,7 +1481,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { bool wantHDR = PHDR; bool hdrIsHandled = false; - if (*PPASS && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_bHasFullscreenWindow && pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { + if (*PPASS && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); const auto ROOT_SURF = WINDOW->m_pWLSurface->resource(); const auto SURF = @@ -1525,7 +1525,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { } } - if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_bHasFullscreenWindow && pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { + if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); pMonitor->output->state->setContentType(NContentType::toDRM(WINDOW->getContentType())); } else @@ -1870,8 +1870,8 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { CBox windowBox = pWindow->getFullWindowBoundingBox(); const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated() && !pWindow->m_bPinned) - windowBox.translate(PWINDOWWORKSPACE->m_vRenderOffset->value()); + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_bPinned) + windowBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); windowBox.translate(pWindow->m_vFloatingOffset); for (auto const& m : g_pCompositor->m_monitors) { @@ -2119,8 +2119,8 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { const auto PWORKSPACE = pMonitor->activeWorkspace; - if (!PWORKSPACE || !PWORKSPACE->m_bHasFullscreenWindow || PROTO::data->dndActive() || pMonitor->activeSpecialWorkspace || PWORKSPACE->m_fAlpha->value() != 1.f || - PWORKSPACE->m_vRenderOffset->value() != Vector2D{}) + if (!PWORKSPACE || !PWORKSPACE->m_hasFullscreenWindow || PROTO::data->dndActive() || pMonitor->activeSpecialWorkspace || PWORKSPACE->m_alpha->value() != 1.f || + PWORKSPACE->m_renderOffset->value() != Vector2D{}) return; const auto PCANDIDATE = PWORKSPACE->getFullscreenWindow(); diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 4af6e449..229736de 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -41,7 +41,7 @@ CBox CHyprBorderDecoration::assignedBoxGlobal() { if (!PWORKSPACE) return box; - const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset->value() : Vector2D(); + const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); return box.translate(WORKSPACEOFFSET); } @@ -120,8 +120,8 @@ void CHyprBorderDecoration::damageEntire() { const auto BORDERSIZE = m_pWindow->getRealBorderSize() + 1; const auto PWINDOWWORKSPACE = m_pWindow->m_pWorkspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_vRenderOffset->isBeingAnimated() && !m_pWindow->m_bPinned) - surfaceBox.translate(PWINDOWWORKSPACE->m_vRenderOffset->value()); + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !m_pWindow->m_bPinned) + surfaceBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); surfaceBox.translate(m_pWindow->m_vFloatingOffset); CBox surfaceBoxExpandedBorder = surfaceBox; diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index a9593c1f..8a3e9334 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -48,8 +48,8 @@ void CHyprDropShadowDecoration::damageEntire() { PWINDOW->m_vRealSize->value().y + m_seExtents.topLeft.y + m_seExtents.bottomRight.y}; const auto PWORKSPACE = PWINDOW->m_pWorkspace; - if (PWORKSPACE && PWORKSPACE->m_vRenderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) - shadowBox.translate(PWORKSPACE->m_vRenderOffset->value()); + if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) + shadowBox.translate(PWORKSPACE->m_renderOffset->value()); shadowBox.translate(PWINDOW->m_vFloatingOffset); static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow:ignore_window"); @@ -59,8 +59,8 @@ void CHyprDropShadowDecoration::damageEntire() { CRegion shadowRegion(shadowBox); if (*PSHADOWIGNOREWINDOW) { CBox surfaceBox = PWINDOW->getWindowMainSurfaceBox(); - if (PWORKSPACE && PWORKSPACE->m_vRenderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) - surfaceBox.translate(PWORKSPACE->m_vRenderOffset->value()); + if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) + surfaceBox.translate(PWORKSPACE->m_renderOffset->value()); surfaceBox.translate(PWINDOW->m_vFloatingOffset); surfaceBox.expand(-ROUNDINGSIZE); shadowRegion.subtract(CRegion(surfaceBox)); @@ -121,7 +121,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { const auto ROUNDINGPOWER = PWINDOW->roundingPower(); const auto ROUNDING = ROUNDINGBASE > 0 ? ROUNDINGBASE + PWINDOW->getRealBorderSize() : 0; const auto PWORKSPACE = PWINDOW->m_pWorkspace; - const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_bPinned ? PWORKSPACE->m_vRenderOffset->value() : Vector2D(); + const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_bPinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); // draw the shadow CBox fullBox = m_bLastWindowBoxWithDecos; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 7eca6d69..c09ca991 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -582,7 +582,7 @@ CBox CHyprGroupBarDecoration::assignedBoxGlobal() { const auto PWORKSPACE = m_pWindow->m_pWorkspace; if (PWORKSPACE && !m_pWindow->m_bPinned) - box.translate(PWORKSPACE->m_vRenderOffset->value()); + box.translate(PWORKSPACE->m_renderOffset->value()); return box.round(); } diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index 813ab8ea..252c0924 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -56,8 +56,8 @@ void CSurfacePassElement::draw(const CRegion& damage) { auto PSURFACE = CWLSurface::fromResource(data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_fAlphaModifier : 1.F); - const float OVERALL_ALPHA = PSURFACE ? PSURFACE->m_fOverallOpacity : 1.F; + const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier : 1.F); + const float OVERALL_ALPHA = PSURFACE ? PSURFACE->m_overallOpacity : 1.F; const bool BLUR = data.blur && (!TEXTURE->m_bOpaque || ALPHA < 1.F || OVERALL_ALPHA < 1.F); auto windowBox = getTexBox(); @@ -146,7 +146,7 @@ CBox CSurfacePassElement::getTexBox() { const auto PWINDOW = PSURFACE ? PSURFACE->getWindow() : nullptr; // center the surface if it's smaller than the viewport we assign it - if (PSURFACE && !PSURFACE->m_bFillIgnoreSmall && PSURFACE->small() /* guarantees PWINDOW */) { + if (PSURFACE && !PSURFACE->m_fillIgnoreSmall && PSURFACE->small() /* guarantees PWINDOW */) { const auto CORRECT = PSURFACE->correctSmallVec(); const auto SIZE = PSURFACE->getViewporterCorrectedSize(); @@ -184,7 +184,7 @@ CBox CSurfacePassElement::getTexBox() { bool CSurfacePassElement::needsLiveBlur() { auto PSURFACE = CWLSurface::fromResource(data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_fAlphaModifier * PSURFACE->m_fOverallOpacity : 1.F); + const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); const bool BLUR = data.blur && (!data.texture || !data.texture->m_bOpaque || ALPHA < 1.F); if (!data.pLS && !data.pWindow) @@ -198,7 +198,7 @@ bool CSurfacePassElement::needsLiveBlur() { bool CSurfacePassElement::needsPrecomputeBlur() { auto PSURFACE = CWLSurface::fromResource(data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_fAlphaModifier * PSURFACE->m_fOverallOpacity : 1.F); + const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); const bool BLUR = data.blur && (!data.texture || !data.texture->m_bOpaque || ALPHA < 1.F); if (!data.pLS && !data.pWindow) @@ -216,7 +216,7 @@ std::optional CSurfacePassElement::boundingBox() { CRegion CSurfacePassElement::opaqueRegion() { auto PSURFACE = CWLSurface::fromResource(data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_fAlphaModifier * PSURFACE->m_fOverallOpacity : 1.F); + const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); if (ALPHA < 1.F) return {}; From 41f5f67f6c8675ec48d893007ca93f8bf6c0049a Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 24 Apr 2025 20:37:49 -0400 Subject: [PATCH 0104/1077] window: Fix order of urgency flag and event emission (#10163) --- src/desktop/Window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 5472b444..4843c491 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1397,11 +1397,11 @@ void CWindow::activate(bool force) { static auto PFOCUSONACTIVATE = CConfigValue("misc:focus_on_activate"); + m_bIsUrgent = true; + g_pEventManager->postEvent(SHyprIPCEvent{"urgent", std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("urgent", m_pSelf.lock()); - m_bIsUrgent = true; - if (!force && (!m_sWindowData.focusOnActivate.valueOr(*PFOCUSONACTIVATE) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE))) return; From 4cf62c114e8fd2cc4fa47d07459e00c52f6dc1d3 Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:38:31 +0200 Subject: [PATCH 0105/1077] layerrules: add abovelock to render above lockscreen (#9793) --- src/Compositor.cpp | 7 +++++-- src/Compositor.hpp | 2 +- src/desktop/LayerRule.cpp | 6 ++++-- src/desktop/LayerRule.hpp | 3 ++- src/desktop/LayerSurface.cpp | 13 ++++++++++--- src/desktop/LayerSurface.hpp | 16 +++++++++------- src/managers/input/InputManager.cpp | 27 +++++++++++++++++++++------ src/render/Renderer.cpp | 19 ++++++++++++++++++- src/render/Renderer.hpp | 2 +- 9 files changed, 71 insertions(+), 24 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index d4e5bc43..a32ba056 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1286,9 +1286,12 @@ SP CCompositor::vectorToLayerPopupSurface(const Vector2D& po return nullptr; } -SP CCompositor::vectorToLayerSurface(const Vector2D& pos, std::vector* layerSurfaces, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) { +SP CCompositor::vectorToLayerSurface(const Vector2D& pos, std::vector* layerSurfaces, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound, + bool aboveLockscreen) { + for (auto const& ls : *layerSurfaces | std::views::reverse) { - if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->mapped) || ls->m_alpha->value() == 0.f) + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->mapped) || ls->m_alpha->value() == 0.f || + (aboveLockscreen && (!ls->m_aboveLockscreen || !ls->m_aboveLockscreenInteractable))) continue; auto [surf, local] = ls->m_layerSurface->surface->at(pos - ls->m_geometry.pos(), true); diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 32e65286..7c81c777 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -85,7 +85,7 @@ class CCompositor { void focusSurface(SP, PHLWINDOW pWindowOwner = nullptr); bool monitorExists(PHLMONITOR); PHLWINDOW vectorToWindowUnified(const Vector2D&, uint8_t properties, PHLWINDOW pIgnoreWindow = nullptr); - SP vectorToLayerSurface(const Vector2D&, std::vector*, Vector2D*, PHLLS*); + SP vectorToLayerSurface(const Vector2D&, std::vector*, Vector2D*, PHLLS*, bool aboveLockscreen = false); SP vectorToLayerPopupSurface(const Vector2D&, PHLMONITOR monitor, Vector2D*, PHLLS*); SP vectorWindowToSurface(const Vector2D&, PHLWINDOW, Vector2D& sl); Vector2D vectorToSurfaceLocal(const Vector2D&, PHLWINDOW, SP); diff --git a/src/desktop/LayerRule.cpp b/src/desktop/LayerRule.cpp index c03d8968..9b5f9da2 100644 --- a/src/desktop/LayerRule.cpp +++ b/src/desktop/LayerRule.cpp @@ -5,7 +5,7 @@ #include "../debug/Log.hpp" static const auto RULES = std::unordered_set{"noanim", "blur", "blurpopups", "dimaround"}; -static const auto RULES_PREFIX = std::unordered_set{"ignorealpha", "ignorezero", "xray", "animation", "order"}; +static const auto RULES_PREFIX = std::unordered_set{"ignorealpha", "ignorezero", "xray", "animation", "order", "abovelock"}; CLayerRule::CLayerRule(const std::string& rule_, const std::string& ns_) : m_targetNamespace(ns_), m_rule(rule_) { const bool VALID = RULES.contains(m_rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule_](const auto& prefix) { return rule_.starts_with(prefix); }); @@ -31,8 +31,10 @@ CLayerRule::CLayerRule(const std::string& rule_, const std::string& ns_) : m_tar m_ruleType = RULE_ANIMATION; else if (m_rule.starts_with("order")) m_ruleType = RULE_ORDER; + else if (m_rule.starts_with("abovelock")) + m_ruleType = RULE_ABOVELOCK; else { Debug::log(ERR, "CLayerRule: didn't match a rule that was found valid?!"); m_ruleType = RULE_INVALID; } -} \ No newline at end of file +} diff --git a/src/desktop/LayerRule.hpp b/src/desktop/LayerRule.hpp index 46f843a6..0463196e 100644 --- a/src/desktop/LayerRule.hpp +++ b/src/desktop/LayerRule.hpp @@ -14,6 +14,7 @@ class CLayerRule { RULE_BLUR, RULE_BLURPOPUPS, RULE_DIMAROUND, + RULE_ABOVELOCK, RULE_IGNOREALPHA, RULE_IGNOREZERO, RULE_XRAY, @@ -28,4 +29,4 @@ class CLayerRule { const std::string m_rule; CRuleRegexContainer m_targetNamespaceRegex; -}; \ No newline at end of file +}; diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index b44f652b..96c6200e 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -421,9 +421,8 @@ void CLayerSurface::applyRules() { } case CLayerRule::RULE_XRAY: { CVarList vars{rule->m_rule, 0, ' '}; - try { - m_xray = configStringToInt(vars[1]).value_or(false); - } catch (...) {} + m_xray = configStringToInt(vars[1]).value_or(false); + break; } case CLayerRule::RULE_ANIMATION: { @@ -438,6 +437,14 @@ void CLayerSurface::applyRules() { } catch (...) { Debug::log(ERR, "Invalid value passed to order"); } break; } + case CLayerRule::RULE_ABOVELOCK: { + m_aboveLockscreen = true; + + CVarList vars{rule->m_rule, 0, ' '}; + m_aboveLockscreenInteractable = configStringToInt(vars[1]).value_or(false); + + break; + } default: break; } } diff --git a/src/desktop/LayerSurface.hpp b/src/desktop/LayerSurface.hpp index 6282d55f..b80d88de 100644 --- a/src/desktop/LayerSurface.hpp +++ b/src/desktop/LayerSurface.hpp @@ -43,13 +43,15 @@ class CLayerSurface { bool m_noProcess = false; bool m_noAnimations = false; - bool m_forceBlur = false; - bool m_forceBlurPopups = false; - int64_t m_xray = -1; - bool m_ignoreAlpha = false; - float m_ignoreAlphaValue = 0.f; - bool m_dimAround = false; - int64_t m_order = 0; + bool m_forceBlur = false; + bool m_forceBlurPopups = false; + int64_t m_xray = -1; + bool m_ignoreAlpha = false; + float m_ignoreAlphaValue = 0.f; + bool m_dimAround = false; + int64_t m_order = 0; + bool m_aboveLockscreen = false; + bool m_aboveLockscreenInteractable = false; std::optional m_animationStyle; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index c51b8e1c..58ae6e93 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -2,6 +2,7 @@ #include "../../Compositor.hpp" #include #include +#include #include #include "../../config/ConfigValue.hpp" #include "../../config/ConfigManager.hpp" @@ -249,15 +250,29 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pCompositor->setActiveMonitor(PMONITOR); if (g_pSessionLockManager->isSessionLocked()) { + + // set keyboard focus on session lock surface regardless of layers const auto PSESSIONLOCKSURFACE = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->ID); - surfacePos = PMONITOR->vecPosition; + const auto foundLockSurface = PSESSIONLOCKSURFACE ? PSESSIONLOCKSURFACE->surface->surface() : nullptr; - foundSurface = PSESSIONLOCKSURFACE ? PSESSIONLOCKSURFACE->surface->surface() : nullptr; - g_pCompositor->focusSurface(foundSurface); + g_pCompositor->focusSurface(foundLockSurface); + + // search for interactable abovelock surfaces for pointer focus, or use session lock surface if not found + for (auto& lsl : PMONITOR->m_aLayerSurfaceLayers | std::views::reverse) { + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &lsl, &surfaceCoords, &pFoundLayerSurface, true); + + if (foundSurface) + break; + } + + if (!foundSurface) { + surfaceCoords = mouseCoords - PMONITOR->vecPosition; + foundSurface = foundLockSurface; + } + + g_pSeatManager->setPointerFocus(foundSurface, surfaceCoords); + g_pSeatManager->sendPointerMotion(time, surfaceCoords); - const auto SURFACELOCAL = mouseCoords - surfacePos; - g_pSeatManager->setPointerFocus(foundSurface, SURFACELOCAL); - g_pSeatManager->sendPointerMotion(time, SURFACELOCAL); return; } diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 364f7fde..fd231027 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -690,10 +690,14 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T g_pHyprOpenGL->m_RenderData.currentWindow.reset(); } -void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups) { +void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups, bool lockscreen) { if (!pLayer) return; + // skip rendering based on abovelock rule and make sure to not render abovelock layers twice + if ((pLayer->m_aboveLockscreen && !lockscreen && g_pSessionLockManager->isSessionLocked()) || (lockscreen && !pLayer->m_aboveLockscreen)) + return; + static auto PDIMAROUND = CConfigValue("decoration:dim_around"); if (*PDIMAROUND && pLayer->m_dimAround && !m_bRenderingSnapshot && !popups) { @@ -998,6 +1002,19 @@ void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp& renderSessionLockMissing(pMonitor); } else { renderSessionLockSurface(PSLS, pMonitor, now); + + // render layers and then their popups for abovelock rule + for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& ls : lsl) { + renderLayer(ls.lock(), pMonitor, now, false, true); + } + } + for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& ls : lsl) { + renderLayer(ls.lock(), pMonitor, now, true, true); + } + } + g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->ID); } } diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 1d0df2a5..553965a4 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -120,7 +120,7 @@ class CHyprRenderer { void renderWorkspaceWindowsFullscreen(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) void renderWorkspaceWindows(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) void renderWindow(PHLWINDOW, PHLMONITOR, const Time::steady_tp&, bool, eRenderPassMode, bool ignorePosition = false, bool standalone = false); - void renderLayer(PHLLS, PHLMONITOR, const Time::steady_tp&, bool popups = false); + void renderLayer(PHLLS, PHLMONITOR, const Time::steady_tp&, bool popups = false, bool lockscreen = false); void renderSessionLockSurface(WP, PHLMONITOR, const Time::steady_tp&); void renderDragIcon(PHLMONITOR, const Time::steady_tp&); void renderIMEPopup(CInputPopup*, PHLMONITOR, const Time::steady_tp&); From 742bce016cb848d222fbfcfcf8d3894ea3fdaeff Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 25 Apr 2025 16:09:11 +0100 Subject: [PATCH 0106/1077] decorationPositioner: update posinfo on window update fixes #10175 --- src/render/decorations/DecorationPositioner.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp index 9dbb12a6..b2d32ad0 100644 --- a/src/render/decorations/DecorationPositioner.cpp +++ b/src/render/decorations/DecorationPositioner.cpp @@ -137,6 +137,10 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { ) return; + for (auto const& wd : datas) { + wd->positioningInfo = wd->pDecoration->getPositioningInfo(); + } + WINDOWDATA->lastWindowSize = pWindow->m_vRealSize->value(); WINDOWDATA->needsRecalc = false; const bool EPHEMERAL = pWindow->m_vRealSize->isBeingAnimated(); From 94c55fe9091078f56acfcff00c4287226b710511 Mon Sep 17 00:00:00 2001 From: nyx Date: Sat, 26 Apr 2025 17:52:07 -0400 Subject: [PATCH 0107/1077] helpers: properly support next/prev for workspace switching (#10074) --- src/helpers/MiscFunctions.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index e2d3c907..bb5510b6 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -170,12 +170,35 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (!valid(PWORKSPACE)) return {WORKSPACE_INVALID}; - const auto PLASTWORKSPACE = g_pCompositor->getWorkspaceByID(PWORKSPACE->getPrevWorkspaceIDName().id); + const auto PREVWORKSPACEIDNAME = PWORKSPACE->getPrevWorkspaceIDName(); - if (!PLASTWORKSPACE) + if (PREVWORKSPACEIDNAME.id == -1) return {WORKSPACE_INVALID}; + const auto PLASTWORKSPACE = g_pCompositor->getWorkspaceByID(PREVWORKSPACEIDNAME.id); + + if (!PLASTWORKSPACE) { + Debug::log(LOG, "previous workspace {} doesn't exist yet", PREVWORKSPACEIDNAME.id); + return {PREVWORKSPACEIDNAME.id, PREVWORKSPACEIDNAME.name}; + } + return {PLASTWORKSPACE->m_id, PLASTWORKSPACE->m_name}; + } else if (in == "next") { + if (!g_pCompositor->m_lastMonitor || !g_pCompositor->m_lastMonitor->activeWorkspace) { + Debug::log(ERR, "no active monitor or workspace for 'next'"); + return {WORKSPACE_INVALID}; + } + + auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + + WORKSPACEID nextId = PCURRENTWORKSPACE->m_id + 1; + + if (nextId <= 0) + return {WORKSPACE_INVALID}; + + result.id = nextId; + result.name = std::to_string(nextId); + return result; } else { if (in[0] == 'r' && (in[1] == '-' || in[1] == '+' || in[1] == '~') && isNumber(in.substr(2))) { bool absolute = in[1] == '~'; From 4f868a1f3c1edfc1f5998f7d21e46e7c23aeb02f Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 27 Apr 2025 00:07:00 +0200 Subject: [PATCH 0108/1077] SECURITY: init security policy fixes #9921 --- SECURITY.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..187165ce --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,32 @@ +# Hyprland Development Security Policy + +If you have a bug that affects the security of your system, you may +want to privately disclose it instead of making it immediately public. + +## Supported versions + +_Only_ the most recent release on Github is supported. There are no LTS releases. + +## What is not a security issue + +Some examples of issues that should not be reported as security issues: + +- An app can execute a command when ran outside of a sandbox +- An app can write / read hyprland sockets when ran outside of a sandbox +- Crashes +- Things that are protected via permissions when the permission system is disabled + +## What is a security issue + +Some examples of issues that should be reported as security issues: + +- Sandboxed application executing arbitrary code via Hyprland +- Application being able to modify Hyprland's code on the fly +- Application being able to keylog / track user's activity beyond what the wayland protocols allow + +## How to report security issues + +Please report your security issues via either of these channels: +- Mail: `vaxry [at] vaxry [dot] net` +- Matrix: `@vaxry:matrix.vaxry.net` +- Discord: `@vaxry` From 0302bfdc2207f9b5482fb07aa6052e7f6cb237ca Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 27 Apr 2025 00:03:32 +0100 Subject: [PATCH 0109/1077] async: add Promise and use it for AsyncDialogBox --- src/config/ConfigManager.cpp | 2 + src/helpers/AsyncDialogBox.cpp | 17 +-- src/helpers/AsyncDialogBox.hpp | 34 ++--- src/helpers/defer/Promise.hpp | 119 ++++++++++++++++++ src/managers/ANRManager.cpp | 9 +- .../permissions/DynamicPermissionManager.cpp | 36 +++++- .../permissions/DynamicPermissionManager.hpp | 27 ++-- 7 files changed, 208 insertions(+), 36 deletions(-) create mode 100644 src/helpers/defer/Promise.hpp diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 872456a6..9d177798 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2906,6 +2906,8 @@ std::optional CConfigManager::handlePermission(const std::string& c if (data[1] == "screencopy") type = PERMISSION_TYPE_SCREENCOPY; + else if (data[1] == "plugin") + type = PERMISSION_TYPE_PLUGIN; if (data[2] == "ask") mode = PERMISSION_RULE_ALLOW_MODE_ASK; diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 73bae8f6..86eb9e1f 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -59,8 +59,7 @@ void CAsyncDialogBox::onWrite(int fd, uint32_t mask) { if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) { Debug::log(LOG, "CAsyncDialogBox: dialog {:x} hung up, closed."); - if (m_onResolution) - m_onResolution(m_stdout); + m_promiseResolver->resolve(m_stdout); wl_event_source_remove(m_readEventSource); m_selfReference.reset(); @@ -68,9 +67,7 @@ void CAsyncDialogBox::onWrite(int fd, uint32_t mask) { } } -void CAsyncDialogBox::open(std::function onResolution) { - m_onResolution = onResolution; - +SP> CAsyncDialogBox::open() { std::string buttonsString = ""; for (auto& b : m_buttons) { buttonsString += b + ";"; @@ -83,7 +80,7 @@ void CAsyncDialogBox::open(std::function onResolution) { int outPipe[2]; if (pipe(outPipe)) { Debug::log(ERR, "CAsyncDialogBox::open: failed to pipe()"); - return; + return nullptr; } m_pipeReadFd = CFileDescriptor(outPipe[0]); @@ -94,7 +91,7 @@ void CAsyncDialogBox::open(std::function onResolution) { if (!m_readEventSource) { Debug::log(ERR, "CAsyncDialogBox::open: failed to add read fd to loop"); - return; + return nullptr; } m_selfReference = m_selfWeakReference.lock(); @@ -102,13 +99,17 @@ void CAsyncDialogBox::open(std::function onResolution) { if (!proc.runAsync()) { Debug::log(ERR, "CAsyncDialogBox::open: failed to run async"); wl_event_source_remove(m_readEventSource); - return; + return nullptr; } m_dialogPid = proc.pid(); // close the write fd, only the dialog owns it now close(outPipe[1]); + + auto promise = CPromise::make([this](SP> r) { m_promiseResolver = r; }); + + return promise; } void CAsyncDialogBox::kill() { diff --git a/src/helpers/AsyncDialogBox.hpp b/src/helpers/AsyncDialogBox.hpp index d3cc242c..0cb95846 100644 --- a/src/helpers/AsyncDialogBox.hpp +++ b/src/helpers/AsyncDialogBox.hpp @@ -2,6 +2,7 @@ #include "../macros.hpp" #include "./memory/Memory.hpp" +#include "./defer/Promise.hpp" #include #include @@ -15,29 +16,30 @@ class CAsyncDialogBox { public: static SP create(const std::string& title, const std::string& description, std::vector buttons); - CAsyncDialogBox(const CAsyncDialogBox&) = delete; - CAsyncDialogBox(CAsyncDialogBox&&) = delete; - CAsyncDialogBox& operator=(const CAsyncDialogBox&) = delete; - CAsyncDialogBox& operator=(CAsyncDialogBox&&) = delete; + CAsyncDialogBox(const CAsyncDialogBox&) = delete; + CAsyncDialogBox(CAsyncDialogBox&&) = delete; + CAsyncDialogBox& operator=(const CAsyncDialogBox&) = delete; + CAsyncDialogBox& operator=(CAsyncDialogBox&&) = delete; - void open(std::function onResolution); - void kill(); - bool isRunning() const; + SP> open(); + void kill(); + bool isRunning() const; - void onWrite(int fd, uint32_t mask); + void onWrite(int fd, uint32_t mask); private: CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons); - pid_t m_dialogPid = 0; - wl_event_source* m_readEventSource = nullptr; - std::function m_onResolution; - Hyprutils::OS::CFileDescriptor m_pipeReadFd; - std::string m_stdout = ""; + pid_t m_dialogPid = 0; + wl_event_source* m_readEventSource = nullptr; + Hyprutils::OS::CFileDescriptor m_pipeReadFd; + std::string m_stdout = ""; - const std::string m_title; - const std::string m_description; - const std::vector m_buttons; + const std::string m_title; + const std::string m_description; + const std::vector m_buttons; + + SP> m_promiseResolver; // WARNING: cyclic reference. This will be removed once the event source is removed to avoid dangling pointers SP m_selfReference; diff --git a/src/helpers/defer/Promise.hpp b/src/helpers/defer/Promise.hpp new file mode 100644 index 00000000..53399bc2 --- /dev/null +++ b/src/helpers/defer/Promise.hpp @@ -0,0 +1,119 @@ +#pragma once + +#include +#include +#include "../memory/Memory.hpp" + +// TODO: move into hyprutils + +template +class CPromise; +template +class CPromiseResult; + +template +class CPromiseResolver { + public: + CPromiseResolver(const CPromiseResolver&) = delete; + CPromiseResolver(CPromiseResolver&&) = delete; + CPromiseResolver& operator=(const CPromiseResolver&) = delete; + CPromiseResolver& operator=(CPromiseResolver&&) = delete; + + void resolve(T value) { + if (m_promise->m_result) + return; + + m_promise->m_result = CPromiseResult::result(value); + + if (!m_promise->m_then) + return; + + m_promise->m_then(m_promise->m_result); + } + + void reject(const std::string& reason) { + if (m_promise->m_result) + return; + + m_promise->m_result = CPromiseResult::err(reason); + + if (!m_promise->m_then) + return; + + m_promise->m_then(m_promise->m_result); + } + + private: + CPromiseResolver(SP> promise) : m_promise(promise) {} + + SP> m_promise; + + friend class CPromise; +}; + +template +class CPromiseResult { + public: + bool hasError() { + return m_hasError; + } + + T result() { + return m_result; + } + + std::string error() { + return m_error; + } + + private: + static SP> result(T result) { + auto p = SP>(new CPromiseResult()); + p->m_result = result; + return p; + } + + static SP> err(std::string reason) { + auto p = SP>(new CPromiseResult()); + p->m_error = reason; + p->m_hasError = true; + return p; + } + + T m_result = {}; + std::string m_error = {}; + bool m_hasError = false; + + friend class CPromiseResolver; +}; + +template +class CPromise { + public: + CPromise(const CPromise&) = delete; + CPromise(CPromise&&) = delete; + CPromise& operator=(const CPromise&) = delete; + CPromise& operator=(CPromise&&) = delete; + + static SP make(const std::function>)>& fn) { + auto sp = SP>(new CPromise()); + fn(SP>(new CPromiseResolver(sp))); + return sp; + } + + void then(std::function>)>&& fn) { + m_then = std::move(fn); + if (m_result) + m_then(m_result); + } + + private: + CPromise() = default; + + const std::function>)> m_fn; + std::function>)> m_then; + SP> m_result; + + friend class CPromiseResult; + friend class CPromiseResolver; +}; \ No newline at end of file diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index 69d127a7..48b9a6db 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -169,7 +169,14 @@ void CANRManager::SANRData::runDialog(const std::string& title, const std::strin appClass.empty() ? "unknown" : appClass), std::vector{"Terminate", "Wait"}); - dialogBox->open([dialogWmPID, this](std::string result) { + dialogBox->open()->then([dialogWmPID, this](SP> r) { + if (r->hasError()) { + Debug::log(ERR, "CANRManager::SANRData::runDialog: error spawning dialog"); + return; + } + + const auto& result = r->result(); + if (result.starts_with("Terminate")) ::kill(dialogWmPID, SIGKILL); else if (result.starts_with("Wait")) diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp index cf1fd1a0..c23f1fdb 100644 --- a/src/managers/permissions/DynamicPermissionManager.cpp +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -48,6 +48,7 @@ static const char* permissionToString(eDynamicPermissionType type) { switch (type) { case PERMISSION_TYPE_UNKNOWN: return "PERMISSION_TYPE_UNKNOWN"; case PERMISSION_TYPE_SCREENCOPY: return "PERMISSION_TYPE_SCREENCOPY"; + case PERMISSION_TYPE_PLUGIN: return "PERMISSION_TYPE_PLUGIN"; } return "error"; @@ -57,6 +58,7 @@ static const char* permissionToHumanString(eDynamicPermissionType type) { switch (type) { case PERMISSION_TYPE_UNKNOWN: return "requesting an unknown permission"; case PERMISSION_TYPE_SCREENCOPY: return "trying to capture your screen"; + case PERMISSION_TYPE_PLUGIN: return "trying to load a plugin"; } return "error"; @@ -210,10 +212,22 @@ void CDynamicPermissionManager::askForPermission(wl_client* client, const std::s return; } - rule->m_dialogBox->open([r = WP(rule), binaryPath](std::string result) { + rule->m_promise = rule->m_dialogBox->open(); + rule->m_promise->then([r = WP(rule), binaryPath](SP> pr) { if (!r) return; + if (pr->hasError()) { + // not reachable for now + Debug::log(TRACE, "CDynamicPermissionRule: error spawning dialog box"); + if (r->m_promiseResolverForExternal) + r->m_promiseResolverForExternal->reject("error spawning dialog box"); + r->m_promiseResolverForExternal.reset(); + return; + } + + const std::string& result = pr->result(); + Debug::log(TRACE, "CDynamicPermissionRule: user returned {}", result); if (result.starts_with("Allow once")) @@ -226,9 +240,29 @@ void CDynamicPermissionManager::askForPermission(wl_client* client, const std::s r->m_binaryPath = binaryPath; } else if (result.starts_with("Allow")) r->m_allowMode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + + if (r->m_promiseResolverForExternal) + r->m_promiseResolverForExternal->resolve(r->m_allowMode); + + r->m_promise.reset(); + r->m_promiseResolverForExternal.reset(); }); } +SP> CDynamicPermissionManager::promiseFor(wl_client* client, eDynamicPermissionType permission) { + auto rule = std::ranges::find_if(m_rules, [client, permission](const auto& e) { return e->m_client == client && e->m_type == permission; }); + if (rule == m_rules.end()) + return nullptr; + + if (!(*rule)->m_promise) + return nullptr; + + if ((*rule)->m_promiseResolverForExternal) + return nullptr; + + return CPromise::make([rule](SP> r) { (*rule)->m_promiseResolverForExternal = r; }); +} + void CDynamicPermissionManager::removeRulesForClient(wl_client* client) { std::erase_if(m_rules, [client](const auto& e) { return e->m_client == client; }); } diff --git a/src/managers/permissions/DynamicPermissionManager.hpp b/src/managers/permissions/DynamicPermissionManager.hpp index 681cbc1c..79dc56a6 100644 --- a/src/managers/permissions/DynamicPermissionManager.hpp +++ b/src/managers/permissions/DynamicPermissionManager.hpp @@ -5,7 +5,7 @@ #include "../../helpers/AsyncDialogBox.hpp" #include #include -#include +#include "../../helpers/defer/Promise.hpp" // NOLINTNEXTLINE namespace re2 { @@ -15,6 +15,7 @@ namespace re2 { enum eDynamicPermissionType : uint8_t { PERMISSION_TYPE_UNKNOWN = 0, PERMISSION_TYPE_SCREENCOPY, + PERMISSION_TYPE_PLUGIN, }; enum eDynamicPermissionRuleSource : uint8_t { @@ -50,16 +51,18 @@ class CDynamicPermissionRule { // user rule CDynamicPermissionRule(wl_client* const client, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode = PERMISSION_RULE_ALLOW_MODE_ASK); - const eDynamicPermissionType m_type = PERMISSION_TYPE_UNKNOWN; - const eDynamicPermissionRuleSource m_source = PERMISSION_RULE_SOURCE_UNKNOWN; - wl_client* const m_client = nullptr; - std::string m_binaryPath = ""; - UP m_binaryRegex; + const eDynamicPermissionType m_type = PERMISSION_TYPE_UNKNOWN; + const eDynamicPermissionRuleSource m_source = PERMISSION_RULE_SOURCE_UNKNOWN; + wl_client* const m_client = nullptr; + std::string m_binaryPath = ""; + UP m_binaryRegex; - eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; - SP m_dialogBox; // for pending + eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; + SP m_dialogBox; // for pending + SP> m_promise; // for pending + SP> m_promiseResolverForExternal; // for external promise - SDynamicPermissionRuleDestroyWrapper m_destroyWrapper; + SDynamicPermissionRuleDestroyWrapper m_destroyWrapper; friend class CDynamicPermissionManager; }; @@ -73,7 +76,11 @@ class CDynamicPermissionManager { // (will continue returning false if the user does not agree, of course.) eDynamicPermissionAllowMode clientPermissionMode(wl_client* client, eDynamicPermissionType permission); - void removeRulesForClient(wl_client* client); + // get a promise for the result. Returns null if there already was one requested for the client. + // Returns null if state is not pending + SP> promiseFor(wl_client* client, eDynamicPermissionType permission); + + void removeRulesForClient(wl_client* client); private: void askForPermission(wl_client* client, const std::string& binaryName, eDynamicPermissionType type); From f5c5cfa960c157c8df50b496f621290234ac4505 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 28 Apr 2025 00:18:51 +0100 Subject: [PATCH 0110/1077] keybindmgr: fixup bindn regression fixes #10195 --- src/managers/KeybindManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 84f3a6d1..44d90748 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -777,8 +777,6 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP else if (SPECIALDISPATCHER && pressed) m_vPressedSpecialBinds.emplace_back(k); - found = true; - // Should never happen, as we check in the ConfigManager, but oh well if (DISPATCHER == m_mDispatchers.end()) { Debug::log(ERR, "Invalid handler in a keybind! (handler {} does not exist)", k->handler); @@ -796,8 +794,10 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP m_iPassPressed = -1; - if (k->handler == "submap") + if (k->handler == "submap") { + found = true; // don't process keybinds on submap change. break; + } } if (k->repeat) { From c505eb55ff967f2a0474e88a50803412ba550a61 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 28 Apr 2025 20:18:02 +0100 Subject: [PATCH 0111/1077] screencopy: support hw cursors while sharing with cursor --- src/managers/PointerManager.cpp | 4 ++-- src/managers/PointerManager.hpp | 3 ++- src/protocols/Screencopy.cpp | 31 ++++++------------------------- src/protocols/Screencopy.hpp | 3 --- 4 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 6a53001b..e8d71e1a 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -591,13 +591,13 @@ SP CPointerManager::renderHWCursorBuffer(SP overridePos) { +void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos, bool forceRender) { if (!hasCursor()) return; auto state = stateFor(pMonitor); - if ((!state->hardwareFailed && state->softwareLocks == 0)) { + if (!state->hardwareFailed && state->softwareLocks == 0 && !forceRender) { if (currentCursorImage.surface) currentCursorImage.surface->resource()->frame(now); return; diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index 10726bc6..3569b218 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -49,7 +49,8 @@ class CPointerManager { void unlockSoftwareAll(); bool softwareLockedFor(PHLMONITOR pMonitor); - void renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage /* logical */, std::optional overridePos = {} /* monitor-local */); + void renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage /* logical */, std::optional overridePos = {} /* monitor-local */, + bool forceRender = false); // this is needed e.g. during screensharing where // the software cursors aren't locked during the cursor move, but they diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 8480e692..6b60abfd 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -2,6 +2,7 @@ #include "../Compositor.hpp" #include "../managers/eventLoop/EventLoopManager.hpp" #include "../managers/PointerManager.hpp" +#include "../managers/input/InputManager.hpp" #include "../managers/EventManager.hpp" #include "../managers/permissions/DynamicPermissionManager.hpp" #include "../render/Renderer.hpp" @@ -146,18 +147,6 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ PROTO::screencopy->m_vFramesAwaitingWrite.emplace_back(self); g_pHyprRenderer->m_bDirectScanoutBlocked = true; - if (overlayCursor && !lockedSWCursors) { - lockedSWCursors = true; - // TODO: make it per-monitor - if (!PROTO::screencopy->m_bTimerArmed) { - for (auto const& m : g_pCompositor->m_monitors) { - g_pPointerManager->lockSoftwareForMonitor(m); - } - PROTO::screencopy->m_bTimerArmed = true; - LOGM(LOG, "Locking sw cursors due to screensharing"); - } - PROTO::screencopy->m_pSoftwareCursorTimer->updateTimeout(std::chrono::seconds(1)); - } if (!withDamage) g_pHyprRenderer->damageMonitor(pMonitor.lock()); @@ -219,6 +208,8 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); + g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), + true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { @@ -272,6 +263,8 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); + g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), + true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { @@ -398,19 +391,7 @@ bool CScreencopyClient::good() { } CScreencopyProtocol::CScreencopyProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { - m_pSoftwareCursorTimer = makeShared( - std::nullopt, - [this](SP self, void* data) { - // TODO: make it per-monitor - for (auto const& m : g_pCompositor->m_monitors) { - g_pPointerManager->unlockSoftwareForMonitor(m); - } - m_bTimerArmed = false; - - LOGM(LOG, "Releasing software cursor lock"); - }, - nullptr); - g_pEventLoopManager->addTimer(m_pSoftwareCursorTimer); + ; } void CScreencopyProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { diff --git a/src/protocols/Screencopy.hpp b/src/protocols/Screencopy.hpp index 2d3ccab0..a69fce3a 100644 --- a/src/protocols/Screencopy.hpp +++ b/src/protocols/Screencopy.hpp @@ -96,9 +96,6 @@ class CScreencopyProtocol : public IWaylandProtocol { std::vector> m_vFramesAwaitingWrite; std::vector> m_vClients; - SP m_pSoftwareCursorTimer; - bool m_bTimerArmed = false; - void shareAllFrames(PHLMONITOR pMonitor); void shareFrame(CScreencopyFrame* frame); void sendFrameDamage(CScreencopyFrame* frame); From 21184404885cf61f7c10d2eb749478ef6b035dd2 Mon Sep 17 00:00:00 2001 From: davc0n Date: Mon, 28 Apr 2025 22:25:22 +0200 Subject: [PATCH 0112/1077] windows: refactor class member vars (#10168) --- src/Compositor.cpp | 379 +++--- src/config/ConfigManager.cpp | 170 +-- src/config/ConfigManager.hpp | 2 +- src/debug/HyprCtl.cpp | 43 +- src/desktop/Popup.cpp | 11 +- src/desktop/Subsurface.cpp | 12 +- src/desktop/WLSurface.cpp | 6 +- src/desktop/Window.cpp | 1038 ++++++++--------- src/desktop/Window.hpp | 249 ++-- src/desktop/WindowRule.cpp | 66 +- src/desktop/WindowRule.hpp | 50 +- src/desktop/Workspace.cpp | 32 +- src/events/Windows.cpp | 462 ++++---- src/helpers/Monitor.cpp | 24 +- src/layout/DwindleLayout.cpp | 164 +-- src/layout/IHyprLayout.cpp | 293 +++-- src/layout/MasterLayout.cpp | 126 +- src/managers/ANRManager.cpp | 25 +- src/managers/AnimationManager.cpp | 88 +- src/managers/KeybindManager.cpp | 334 +++--- src/managers/XWaylandManager.cpp | 86 +- src/managers/input/IdleInhibitor.cpp | 8 +- src/managers/input/InputManager.cpp | 52 +- src/managers/input/Tablets.cpp | 10 +- src/managers/input/Touch.cpp | 12 +- src/plugins/PluginAPI.cpp | 2 +- src/protocols/ForeignToplevel.cpp | 8 +- src/protocols/ForeignToplevelWlr.cpp | 36 +- src/protocols/LinuxDMABUF.cpp | 2 +- src/protocols/PointerConstraints.cpp | 4 +- src/protocols/ShortcutsInhibit.cpp | 2 +- src/protocols/TearingControl.cpp | 4 +- src/protocols/ToplevelExport.cpp | 20 +- src/render/OpenGL.cpp | 28 +- src/render/Renderer.cpp | 222 ++-- .../decorations/CHyprBorderDecoration.cpp | 28 +- .../decorations/CHyprDropShadowDecoration.cpp | 42 +- .../decorations/CHyprGroupBarDecoration.cpp | 82 +- .../decorations/DecorationPositioner.cpp | 14 +- src/render/pass/Pass.cpp | 2 +- src/render/pass/SurfacePassElement.cpp | 14 +- src/xwayland/XWM.cpp | 4 +- src/xwayland/XWayland.cpp | 2 +- 43 files changed, 2124 insertions(+), 2134 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index a32ba056..be03edac 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -851,7 +851,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { } void CCompositor::removeWindowFromVectorSafe(PHLWINDOW pWindow) { - if (!pWindow->m_bFadingOut) { + if (!pWindow->m_fadingOut) { EMIT_HOOK_EVENT("destroyWindow", pWindow); std::erase_if(m_windows, [&](SP& el) { return el == pWindow; }); @@ -874,14 +874,13 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper // pinned windows on top of floating regardless if (properties & ALLOW_FLOATING) { for (auto const& w : m_windows | std::views::reverse) { - if (w->m_bIsFloating && w->m_bIsMapped && !w->isHidden() && !w->m_bX11ShouldntFocus && w->m_bPinned && !w->m_sWindowData.noFocus.valueOrDefault() && - w != pIgnoreWindow) { + if (w->m_isFloating && w->m_isMapped && !w->isHidden() && !w->m_X11ShouldntFocus && w->m_pinned && !w->m_windowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { const auto BB = w->getWindowBoxUnified(properties); CBox box = BB.copy().expand(!w->isX11OverrideRedirect() ? BORDER_GRAB_AREA : 0); if (box.containsPoint(g_pPointerManager->position())) return w; - if (!w->m_bIsX11) { + if (!w->m_isX11) { if (w->hasPopupAt(pos)) return w; } @@ -896,13 +895,13 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (special && !w->onSpecialWorkspace()) // because special floating may creep up into regular continue; - if (!w->m_pWorkspace) + if (!w->m_workspace) continue; - const auto PWINDOWMONITOR = w->m_pMonitor.lock(); + const auto PWINDOWMONITOR = w->m_monitor.lock(); // to avoid focusing windows behind special workspaces from other monitors - if (!*PSPECIALFALLTHRU && PWINDOWMONITOR && PWINDOWMONITOR->activeSpecialWorkspace && w->m_pWorkspace != PWINDOWMONITOR->activeSpecialWorkspace) { + if (!*PSPECIALFALLTHRU && PWINDOWMONITOR && PWINDOWMONITOR->activeSpecialWorkspace && w->m_workspace != PWINDOWMONITOR->activeSpecialWorkspace) { const auto BB = w->getWindowBoxUnified(properties); if (BB.x >= PWINDOWMONITOR->vecPosition.x && BB.y >= PWINDOWMONITOR->vecPosition.y && BB.x + BB.width <= PWINDOWMONITOR->vecPosition.x + PWINDOWMONITOR->vecSize.x && @@ -910,17 +909,17 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper continue; } - if (w->m_bIsFloating && w->m_bIsMapped && w->m_pWorkspace->isVisible() && !w->isHidden() && !w->m_bPinned && !w->m_sWindowData.noFocus.valueOrDefault() && - w != pIgnoreWindow && (!aboveFullscreen || w->m_bCreatedOverFullscreen)) { + if (w->m_isFloating && w->m_isMapped && w->m_workspace->isVisible() && !w->isHidden() && !w->m_pinned && !w->m_windowData.noFocus.valueOrDefault() && + w != pIgnoreWindow && (!aboveFullscreen || w->m_createdOverFullscreen)) { // OR windows should add focus to parent - if (w->m_bX11ShouldntFocus && !w->isX11OverrideRedirect()) + if (w->m_X11ShouldntFocus && !w->isX11OverrideRedirect()) continue; const auto BB = w->getWindowBoxUnified(properties); CBox box = BB.copy().expand(!w->isX11OverrideRedirect() ? BORDER_GRAB_AREA : 0); if (box.containsPoint(g_pPointerManager->position())) { - if (w->m_bIsX11 && w->isX11OverrideRedirect() && !w->m_pXWaylandSurface->wantsFocus()) { + if (w->m_isX11 && w->isX11OverrideRedirect() && !w->m_xwaylandSurface->wantsFocus()) { // Override Redirect return g_pCompositor->m_lastWindow.lock(); // we kinda trick everything here. // TODO: this is wrong, we should focus the parent, but idk how to get it considering it's nullptr in most cases. @@ -929,7 +928,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper return w; } - if (!w->m_bIsX11) { + if (!w->m_isX11) { if (w->hasPopupAt(pos)) return w; } @@ -964,11 +963,11 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (special != w->onSpecialWorkspace()) continue; - if (!w->m_pWorkspace) + if (!w->m_workspace) continue; - if (!w->m_bIsX11 && !w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus && - !w->m_sWindowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { + if (!w->m_isX11 && !w->m_isFloating && w->m_isMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_X11ShouldntFocus && + !w->m_windowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { if (w->hasPopupAt(pos)) return w; } @@ -978,12 +977,12 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (special != w->onSpecialWorkspace()) continue; - if (!w->m_pWorkspace) + if (!w->m_workspace) continue; - if (!w->m_bIsFloating && w->m_bIsMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_bX11ShouldntFocus && !w->m_sWindowData.noFocus.valueOrDefault() && + if (!w->m_isFloating && w->m_isMapped && w->workspaceID() == WSPID && !w->isHidden() && !w->m_X11ShouldntFocus && !w->m_windowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { - CBox box = (properties & USE_PROP_TILED) ? w->getWindowBoxUnified(properties) : CBox{w->m_vPosition, w->m_vSize}; + CBox box = (properties & USE_PROP_TILED) ? w->getWindowBoxUnified(properties) : CBox{w->m_position, w->m_size}; if (box.containsPoint(pos)) return w; } @@ -1011,18 +1010,18 @@ SP CCompositor::vectorWindowToSurface(const Vector2D& pos, P if (!validMapped(pWindow)) return nullptr; - RASSERT(!pWindow->m_bIsX11, "Cannot call vectorWindowToSurface on an X11 window!"); + RASSERT(!pWindow->m_isX11, "Cannot call vectorWindowToSurface on an X11 window!"); // try popups first - const auto PPOPUP = pWindow->m_pPopupHead->at(pos); + const auto PPOPUP = pWindow->m_popupHead->at(pos); if (PPOPUP) { const auto OFF = PPOPUP->coordsRelativeToParent(); - sl = pos - pWindow->m_vRealPosition->goal() - OFF; + sl = pos - pWindow->m_realPosition->goal() - OFF; return PPOPUP->m_wlSurface->resource(); } - auto [surf, local] = pWindow->m_pWLSurface->resource()->at(pos - pWindow->m_vRealPosition->goal(), true); + auto [surf, local] = pWindow->m_wlSurface->resource()->at(pos - pWindow->m_realPosition->goal(), true); if (surf) { sl = local; return surf; @@ -1035,16 +1034,16 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo if (!validMapped(pWindow)) return {}; - if (pWindow->m_bIsX11) - return vec - pWindow->m_vRealPosition->goal(); + if (pWindow->m_isX11) + return vec - pWindow->m_realPosition->goal(); - const auto PPOPUP = pWindow->m_pPopupHead->at(vec); + const auto PPOPUP = pWindow->m_popupHead->at(vec); if (PPOPUP) return vec - PPOPUP->coordsGlobal(); std::tuple, Vector2D> iterData = {pSurface, {-1337, -1337}}; - pWindow->m_pWLSurface->resource()->breadthfirst( + pWindow->m_wlSurface->resource()->breadthfirst( [](SP surf, const Vector2D& offset, void* data) { const auto PDATA = (std::tuple, Vector2D>*)data; if (surf == std::get<0>(*PDATA)) @@ -1052,12 +1051,12 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo }, &iterData); - CBox geom = pWindow->m_pXDGSurface->current.geometry; + CBox geom = pWindow->m_xdgSurface->current.geometry; if (std::get<1>(iterData) == Vector2D{-1337, -1337}) - return vec - pWindow->m_vRealPosition->goal(); + return vec - pWindow->m_realPosition->goal(); - return vec - pWindow->m_vRealPosition->goal() - std::get<1>(iterData) + Vector2D{geom.x, geom.y}; + return vec - pWindow->m_realPosition->goal() - std::get<1>(iterData) + Vector2D{geom.x, geom.y}; } PHLMONITOR CCompositor::getMonitorFromOutput(SP out) { @@ -1095,7 +1094,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; } - if (pWindow && pWindow->m_bIsX11 && pWindow->isX11OverrideRedirect() && !pWindow->m_pXWaylandSurface->wantsFocus()) + if (pWindow && pWindow->m_isX11 && pWindow->isX11OverrideRedirect() && !pWindow->m_xwaylandSurface->wantsFocus()) return; g_pLayoutManager->getCurrentLayout()->bringWindowToTop(pWindow); @@ -1108,7 +1107,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface const auto PLASTWINDOW = m_lastWindow.lock(); m_lastWindow.reset(); - if (PLASTWINDOW && PLASTWINDOW->m_bIsMapped) { + if (PLASTWINDOW && PLASTWINDOW->m_isMapped) { updateWindowAnimatedDecorationValues(PLASTWINDOW); g_pXWaylandManager->activateWindow(PLASTWINDOW, false); @@ -1129,7 +1128,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; } - if (pWindow->m_sWindowData.noFocus.valueOrDefault()) { + if (pWindow->m_windowData.noFocus.valueOrDefault()) { Debug::log(LOG, "Ignoring focus to nofocus window!"); return; } @@ -1137,13 +1136,13 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface if (m_lastWindow.lock() == pWindow && g_pSeatManager->state.keyboardFocus == pSurface && g_pSeatManager->state.keyboardFocus) return; - if (pWindow->m_bPinned) - pWindow->m_pWorkspace = m_lastMonitor->activeWorkspace; + if (pWindow->m_pinned) + pWindow->m_workspace = m_lastMonitor->activeWorkspace; - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); - if (!pWindow->m_pWorkspace || !pWindow->m_pWorkspace->isVisible()) { - const auto PWORKSPACE = pWindow->m_pWorkspace; + if (!pWindow->m_workspace || !pWindow->m_workspace->isVisible()) { + const auto PWORKSPACE = pWindow->m_workspace; // This is to fix incorrect feedback on the focus history. PWORKSPACE->m_lastFocusedWindow = pWindow; if (m_lastMonitor->activeWorkspace) @@ -1161,22 +1160,22 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface /* If special fallthrough is enabled, this behavior will be disabled, as I have no better idea of nicely tracking which window focuses are "via keybinds" and which ones aren't. */ - if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace != pWindow->m_pWorkspace && !pWindow->m_bPinned && !*PSPECIALFALLTHROUGH) + if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace != pWindow->m_workspace && !pWindow->m_pinned && !*PSPECIALFALLTHROUGH) PMONITOR->setSpecialWorkspace(nullptr); // we need to make the PLASTWINDOW not equal to m_pLastWindow so that RENDERDATA is correct for an unfocused window - if (PLASTWINDOW && PLASTWINDOW->m_bIsMapped) { + if (PLASTWINDOW && PLASTWINDOW->m_isMapped) { PLASTWINDOW->updateDynamicRules(); updateWindowAnimatedDecorationValues(PLASTWINDOW); - if (!pWindow->m_bIsX11 || !pWindow->isX11OverrideRedirect()) + if (!pWindow->m_isX11 || !pWindow->isX11OverrideRedirect()) g_pXWaylandManager->activateWindow(PLASTWINDOW, false); } m_lastWindow = PLASTWINDOW; - const auto PWINDOWSURFACE = pSurface ? pSurface : pWindow->m_pWLSurface->resource(); + const auto PWINDOWSURFACE = pSurface ? pSurface : pWindow->m_wlSurface->resource(); focusSurface(PWINDOWSURFACE, pWindow); @@ -1187,11 +1186,11 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface updateWindowAnimatedDecorationValues(pWindow); - if (pWindow->m_bIsUrgent) - pWindow->m_bIsUrgent = false; + if (pWindow->m_isUrgent) + pWindow->m_isUrgent = false; // Send an event - g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindow", .data = pWindow->m_szClass + "," + pWindow->m_szTitle}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindow", .data = pWindow->m_class + "," + pWindow->m_title}); g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindowv2", .data = std::format("{:x}", (uintptr_t)pWindow.get())}); EMIT_HOOK_EVENT("activeWindow", pWindow); @@ -1212,13 +1211,13 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface if (*PFOLLOWMOUSE == 0) g_pInputManager->sendMotionEventsToFocused(); - if (pWindow->m_sGroupData.pNextWindow) + if (pWindow->m_groupData.pNextWindow) pWindow->deactivateGroupMembers(); } void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindowOwner) { - if (g_pSeatManager->state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->state.keyboardFocus == pWindowOwner->m_pWLSurface->resource())) + if (g_pSeatManager->state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->state.keyboardFocus == pWindowOwner->m_wlSurface->resource())) return; // Don't focus when already focused on this. if (g_pSessionLockManager->isSessionLocked() && pSurface && !g_pSessionLockManager->isSurfaceSessionLock(pSurface)) @@ -1354,7 +1353,7 @@ void CCompositor::sanityCheckWorkspaces() { PHLWINDOW CCompositor::getUrgentWindow() { for (auto const& w : m_windows) { - if (w->m_bIsMapped && w->m_bIsUrgent) + if (w->m_isMapped && w->m_isUrgent) return w; } @@ -1365,10 +1364,10 @@ bool CCompositor::isWindowActive(PHLWINDOW pWindow) { if (m_lastWindow.expired() && !m_lastFocus) return false; - if (!pWindow->m_bIsMapped) + if (!pWindow->m_isMapped) return false; - const auto PSURFACE = pWindow->m_pWLSurface->resource(); + const auto PSURFACE = pWindow->m_wlSurface->resource(); return PSURFACE == m_lastFocus || pWindow == m_lastWindow.lock(); } @@ -1378,7 +1377,7 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { return; if (top) - pWindow->m_bCreatedOverFullscreen = true; + pWindow->m_createdOverFullscreen = true; if (pWindow == (top ? m_windows.back() : m_windows.front())) return; @@ -1400,11 +1399,11 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { } } - if (pw->m_bIsMapped) - g_pHyprRenderer->damageMonitor(pw->m_pMonitor.lock()); + if (pw->m_isMapped) + g_pHyprRenderer->damageMonitor(pw->m_monitor.lock()); }; - if (!pWindow->m_bIsX11) + if (!pWindow->m_isX11) moveToZ(pWindow, top); else { // move X11 window stack @@ -1418,7 +1417,7 @@ void CCompositor::changeWindowZOrder(PHLWINDOW pWindow, bool top) { toMove.insert(toMove.begin(), pw); for (auto const& w : m_windows) { - if (w->m_bIsMapped && !w->isHidden() && w->m_bIsX11 && w->x11TransientFor() == pw && w != pw && std::ranges::find(toMove, w) == toMove.end()) { + if (w->m_isMapped && !w->isHidden() && w->m_isX11 && w->x11TransientFor() == pw && w != pw && std::ranges::find(toMove, w) == toMove.end()) { x11Stack(w, top, x11Stack); } } @@ -1436,14 +1435,14 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { auto w = ww.lock(); - if (w->monitorID() != monid && w->m_pMonitor) + if (w->monitorID() != monid && w->m_monitor) continue; - if (!w->m_bFadingOut || w->m_fAlpha->value() == 0.f) { + if (!w->m_fadingOut || w->m_alpha->value() == 0.f) { - w->m_bFadingOut = false; + w->m_fadingOut = false; - if (!w->m_bReadyToDelete) + if (!w->m_readyToDelete) continue; removeWindowFromVectorSafe(w); @@ -1524,15 +1523,15 @@ PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) { if (!isDirection(dir)) return nullptr; - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); if (!PMONITOR) return nullptr; // ?? const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{PMONITOR->vecPosition, PMONITOR->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PWORKSPACE = pWindow->m_workspace; - return getWindowInDirection(WINDOWIDEALBB, PWORKSPACE, dir, pWindow, pWindow->m_bIsFloating); + return getWindowInDirection(WINDOWIDEALBB, PWORKSPACE, dir, pWindow, pWindow->m_isFloating); } PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorkspace, char dir, PHLWINDOW ignoreWindow, bool useVectorAngles) { @@ -1551,16 +1550,16 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks if (!useVectorAngles) { for (auto const& w : m_windows) { - if (w == ignoreWindow || !w->m_pWorkspace || !w->m_bIsMapped || w->isHidden() || (!w->isFullscreen() && w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) + if (w == ignoreWindow || !w->m_workspace || !w->m_isMapped || w->isHidden() || (!w->isFullscreen() && w->m_isFloating) || !w->m_workspace->isVisible()) continue; - if (pWorkspace->m_monitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) + if (pWorkspace->m_monitor == w->m_monitor && pWorkspace != w->m_workspace) continue; - if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) + if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_createdOverFullscreen) continue; - if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_pMonitor) + if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_monitor) continue; const auto BWINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved(); @@ -1640,16 +1639,16 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks constexpr float THRESHOLD = 0.3 * M_PI; for (auto const& w : m_windows) { - if (w == ignoreWindow || !w->m_bIsMapped || !w->m_pWorkspace || w->isHidden() || (!w->isFullscreen() && !w->m_bIsFloating) || !w->m_pWorkspace->isVisible()) + if (w == ignoreWindow || !w->m_isMapped || !w->m_workspace || w->isHidden() || (!w->isFullscreen() && !w->m_isFloating) || !w->m_workspace->isVisible()) continue; - if (pWorkspace->m_monitor == w->m_pMonitor && pWorkspace != w->m_pWorkspace) + if (pWorkspace->m_monitor == w->m_monitor && pWorkspace != w->m_workspace) continue; - if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_bCreatedOverFullscreen) + if (pWorkspace->m_hasFullscreenWindow && !w->isFullscreen() && !w->m_createdOverFullscreen) continue; - if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_pMonitor) + if (!*PMONITORFALLBACK && pWorkspace->m_monitor != w->m_monitor) continue; const auto DIST = w->middle().distance(box.middle()); @@ -1677,18 +1676,18 @@ PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPACE pWorks template static bool isWorkspaceMatches(WINDOWPTR pWindow, const WINDOWPTR w, bool anyWorkspace) { - return anyWorkspace ? w->m_pWorkspace && w->m_pWorkspace->isVisible() : w->m_pWorkspace == pWindow->m_pWorkspace; + return anyWorkspace ? w->m_workspace && w->m_workspace->isVisible() : w->m_workspace == pWindow->m_workspace; } template static bool isFloatingMatches(WINDOWPTR w, std::optional floating) { - return !floating.has_value() || w->m_bIsFloating == floating.value(); + return !floating.has_value() || w->m_isFloating == floating.value(); } template static bool isWindowAvailableForCycle(WINDOWPTR pWindow, WINDOWPTR w, bool focusableOnly, std::optional floating, bool anyWorkspace = false) { return isFloatingMatches(w, floating) && - (w != pWindow && isWorkspaceMatches(pWindow, w, anyWorkspace) && w->m_bIsMapped && !w->isHidden() && (!focusableOnly || !w->m_sWindowData.noFocus.valueOrDefault())); + (w != pWindow && isWorkspaceMatches(pWindow, w, anyWorkspace) && w->m_isMapped && !w->isHidden() && (!focusableOnly || !w->m_windowData.noFocus.valueOrDefault())); } template @@ -1837,7 +1836,7 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c void CCompositor::updateAllWindowsAnimatedDecorationValues() { for (auto const& w : m_windows) { - if (!w->m_bIsMapped) + if (!w->m_isMapped) continue; updateWindowAnimatedDecorationValues(w); @@ -1872,48 +1871,48 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { auto* const GROUPINACTIVELOCKEDCOL = (CGradientValueData*)(PGROUPINACTIVELOCKEDCOL.ptr())->getData(); auto setBorderColor = [&](CGradientValueData grad) -> void { - if (grad == pWindow->m_cRealBorderColor) + if (grad == pWindow->m_realBorderColor) return; - pWindow->m_cRealBorderColorPrevious = pWindow->m_cRealBorderColor; - pWindow->m_cRealBorderColor = grad; - pWindow->m_fBorderFadeAnimationProgress->setValueAndWarp(0.f); - *pWindow->m_fBorderFadeAnimationProgress = 1.f; + pWindow->m_realBorderColorPrevious = pWindow->m_realBorderColor; + pWindow->m_realBorderColor = grad; + pWindow->m_borderFadeAnimationProgress->setValueAndWarp(0.f); + *pWindow->m_borderFadeAnimationProgress = 1.f; }; - const bool IS_SHADOWED_BY_MODAL = pWindow->m_pXDGSurface && pWindow->m_pXDGSurface->toplevel && pWindow->m_pXDGSurface->toplevel->anyChildModal(); + const bool IS_SHADOWED_BY_MODAL = pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel && pWindow->m_xdgSurface->toplevel->anyChildModal(); // border const auto RENDERDATA = g_pLayoutManager->getCurrentLayout()->requestRenderHints(pWindow); if (RENDERDATA.isBorderGradient) setBorderColor(*RENDERDATA.borderGradient); else { - const bool GROUPLOCKED = pWindow->m_sGroupData.pNextWindow.lock() ? pWindow->getGroupHead()->m_sGroupData.locked : false; + const bool GROUPLOCKED = pWindow->m_groupData.pNextWindow.lock() ? pWindow->getGroupHead()->m_groupData.locked : false; if (pWindow == m_lastWindow) { const auto* const ACTIVECOLOR = - !pWindow->m_sGroupData.pNextWindow.lock() ? (!pWindow->m_sGroupData.deny ? ACTIVECOL : NOGROUPACTIVECOL) : (GROUPLOCKED ? GROUPACTIVELOCKEDCOL : GROUPACTIVECOL); - setBorderColor(pWindow->m_sWindowData.activeBorderColor.valueOr(*ACTIVECOLOR)); + !pWindow->m_groupData.pNextWindow.lock() ? (!pWindow->m_groupData.deny ? ACTIVECOL : NOGROUPACTIVECOL) : (GROUPLOCKED ? GROUPACTIVELOCKEDCOL : GROUPACTIVECOL); + setBorderColor(pWindow->m_windowData.activeBorderColor.valueOr(*ACTIVECOLOR)); } else { - const auto* const INACTIVECOLOR = !pWindow->m_sGroupData.pNextWindow.lock() ? (!pWindow->m_sGroupData.deny ? INACTIVECOL : NOGROUPINACTIVECOL) : - (GROUPLOCKED ? GROUPINACTIVELOCKEDCOL : GROUPINACTIVECOL); - setBorderColor(pWindow->m_sWindowData.inactiveBorderColor.valueOr(*INACTIVECOLOR)); + const auto* const INACTIVECOLOR = !pWindow->m_groupData.pNextWindow.lock() ? (!pWindow->m_groupData.deny ? INACTIVECOL : NOGROUPINACTIVECOL) : + (GROUPLOCKED ? GROUPINACTIVELOCKEDCOL : GROUPINACTIVECOL); + setBorderColor(pWindow->m_windowData.inactiveBorderColor.valueOr(*INACTIVECOLOR)); } } // opacity - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PWORKSPACE = pWindow->m_workspace; if (pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN)) { - *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alphaFullscreen.valueOrDefault().applyAlpha(*PFULLSCREENALPHA); + *pWindow->m_activeInactiveAlpha = pWindow->m_windowData.alphaFullscreen.valueOrDefault().applyAlpha(*PFULLSCREENALPHA); } else { if (pWindow == m_lastWindow) - *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alpha.valueOrDefault().applyAlpha(*PACTIVEALPHA); + *pWindow->m_activeInactiveAlpha = pWindow->m_windowData.alpha.valueOrDefault().applyAlpha(*PACTIVEALPHA); else - *pWindow->m_fActiveInactiveAlpha = pWindow->m_sWindowData.alphaInactive.valueOrDefault().applyAlpha(*PINACTIVEALPHA); + *pWindow->m_activeInactiveAlpha = pWindow->m_windowData.alphaInactive.valueOrDefault().applyAlpha(*PINACTIVEALPHA); } // dim float goalDim = 1.F; - if (pWindow == m_lastWindow.lock() || pWindow->m_sWindowData.noDim.valueOrDefault() || !*PDIMENABLED) + if (pWindow == m_lastWindow.lock() || pWindow->m_windowData.noDim.valueOrDefault() || !*PDIMENABLED) goalDim = 0; else goalDim = *PDIMSTRENGTH; @@ -1921,16 +1920,16 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { if (IS_SHADOWED_BY_MODAL) goalDim += (1.F - goalDim) / 2.F; - *pWindow->m_fDimPercent = goalDim; + *pWindow->m_dimPercent = goalDim; // shadow - if (!pWindow->isX11OverrideRedirect() && !pWindow->m_bX11DoesntWantBorders) { + if (!pWindow->isX11OverrideRedirect() && !pWindow->m_X11DoesntWantBorders) { if (pWindow == m_lastWindow) - *pWindow->m_cRealShadowColor = CHyprColor(*PSHADOWCOL); + *pWindow->m_realShadowColor = CHyprColor(*PSHADOWCOL); else - *pWindow->m_cRealShadowColor = CHyprColor(*PSHADOWCOLINACTIVE != INT64_MAX ? *PSHADOWCOLINACTIVE : *PSHADOWCOL); + *pWindow->m_realShadowColor = CHyprColor(*PSHADOWCOLINACTIVE != INT64_MAX ? *PSHADOWCOLINACTIVE : *PSHADOWCOL); } else { - pWindow->m_cRealShadowColor->setValueAndWarp(CHyprColor(0, 0, 0, 0)); // no shadow + pWindow->m_realShadowColor->setValueAndWarp(CHyprColor(0, 0, 0, 0)); // no shadow } pWindow->updateWindowDecos(); @@ -1963,21 +1962,21 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor PWORKSPACEA->moveToMonitor(pMonitorB->ID); for (auto const& w : m_windows) { - if (w->m_pWorkspace == PWORKSPACEA) { - if (w->m_bPinned) { - w->m_pWorkspace = PWORKSPACEB; + if (w->m_workspace == PWORKSPACEA) { + if (w->m_pinned) { + w->m_workspace = PWORKSPACEB; continue; } - w->m_pMonitor = pMonitorB; + w->m_monitor = pMonitorB; // additionally, move floating and fs windows manually - if (w->m_bIsFloating) - *w->m_vRealPosition = w->m_vRealPosition->goal() - pMonitorA->vecPosition + pMonitorB->vecPosition; + if (w->m_isFloating) + *w->m_realPosition = w->m_realPosition->goal() - pMonitorA->vecPosition + pMonitorB->vecPosition; if (w->isFullscreen()) { - *w->m_vRealPosition = pMonitorB->vecPosition; - *w->m_vRealSize = pMonitorB->vecSize; + *w->m_realPosition = pMonitorB->vecPosition; + *w->m_realSize = pMonitorB->vecSize; } w->updateToplevel(); @@ -1988,21 +1987,21 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor PWORKSPACEB->moveToMonitor(pMonitorA->ID); for (auto const& w : m_windows) { - if (w->m_pWorkspace == PWORKSPACEB) { - if (w->m_bPinned) { - w->m_pWorkspace = PWORKSPACEA; + if (w->m_workspace == PWORKSPACEB) { + if (w->m_pinned) { + w->m_workspace = PWORKSPACEA; continue; } - w->m_pMonitor = pMonitorA; + w->m_monitor = pMonitorA; // additionally, move floating and fs windows manually - if (w->m_bIsFloating) - *w->m_vRealPosition = w->m_vRealPosition->goal() - pMonitorB->vecPosition + pMonitorA->vecPosition; + if (w->m_isFloating) + *w->m_realPosition = w->m_realPosition->goal() - pMonitorB->vecPosition + pMonitorA->vecPosition; if (w->isFullscreen()) { - *w->m_vRealPosition = pMonitorA->vecPosition; - *w->m_vRealSize = pMonitorA->vecSize; + *w->m_realPosition = pMonitorA->vecPosition; + *w->m_realSize = pMonitorA->vecSize; } w->updateToplevel(); @@ -2168,28 +2167,28 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo pWorkspace->moveToMonitor(pMonitor->ID); for (auto const& w : m_windows) { - if (w->m_pWorkspace == pWorkspace) { - if (w->m_bPinned) { - w->m_pWorkspace = g_pCompositor->getWorkspaceByID(nextWorkspaceOnMonitorID); + if (w->m_workspace == pWorkspace) { + if (w->m_pinned) { + w->m_workspace = g_pCompositor->getWorkspaceByID(nextWorkspaceOnMonitorID); continue; } - w->m_pMonitor = pMonitor; + w->m_monitor = pMonitor; // additionally, move floating and fs windows manually - if (w->m_bIsMapped && !w->isHidden()) { + if (w->m_isMapped && !w->isHidden()) { if (POLDMON) { - if (w->m_bIsFloating) - *w->m_vRealPosition = w->m_vRealPosition->goal() - POLDMON->vecPosition + pMonitor->vecPosition; + if (w->m_isFloating) + *w->m_realPosition = w->m_realPosition->goal() - POLDMON->vecPosition + pMonitor->vecPosition; if (w->isFullscreen()) { - *w->m_vRealPosition = pMonitor->vecPosition; - *w->m_vRealSize = pMonitor->vecSize; + *w->m_realPosition = pMonitor->vecPosition; + *w->m_realSize = pMonitor->vecSize; } } else - *w->m_vRealPosition = Vector2D{ - (pMonitor->vecSize.x != 0) ? (int)w->m_vRealPosition->goal().x % (int)pMonitor->vecSize.x : 0, - (pMonitor->vecSize.y != 0) ? (int)w->m_vRealPosition->goal().y % (int)pMonitor->vecSize.y : 0, + *w->m_realPosition = Vector2D{ + (pMonitor->vecSize.x != 0) ? (int)w->m_realPosition->goal().x % (int)pMonitor->vecSize.x : 0, + (pMonitor->vecSize.y != 0) ? (int)w->m_realPosition->goal().y % (int)pMonitor->vecSize.y : 0, }; } @@ -2260,15 +2259,15 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { const auto FULLSCREEN = pWorkspace->m_hasFullscreenWindow; for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == pWorkspace) { + if (w->m_workspace == pWorkspace) { - if (w->m_bFadingOut || w->m_bPinned || w->isFullscreen()) + if (w->m_fadingOut || w->m_pinned || w->isFullscreen()) continue; if (!FULLSCREEN) - *w->m_fAlpha = 1.f; + *w->m_alpha = 1.f; else if (!w->isFullscreen()) - *w->m_fAlpha = !w->m_bCreatedOverFullscreen ? 0.f : 1.f; + *w->m_alpha = !w->m_createdOverFullscreen ? 0.f : 1.f; } } @@ -2284,21 +2283,21 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { void CCompositor::changeWindowFullscreenModeClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool ON) { setWindowFullscreenClient(PWINDOW, - (eFullscreenMode)(ON ? (uint8_t)PWINDOW->m_sFullscreenState.client | (uint8_t)MODE : ((uint8_t)PWINDOW->m_sFullscreenState.client & (uint8_t)~MODE))); + (eFullscreenMode)(ON ? (uint8_t)PWINDOW->m_fullscreenState.client | (uint8_t)MODE : ((uint8_t)PWINDOW->m_fullscreenState.client & (uint8_t)~MODE))); } void CCompositor::setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE) { - if (PWINDOW->m_sWindowData.syncFullscreen.valueOrDefault()) + if (PWINDOW->m_windowData.syncFullscreen.valueOrDefault()) setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = MODE}); else - setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = PWINDOW->m_sFullscreenState.client}); + setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = PWINDOW->m_fullscreenState.client}); } void CCompositor::setWindowFullscreenClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE) { - if (PWINDOW->m_sWindowData.syncFullscreen.valueOrDefault()) + if (PWINDOW->m_windowData.syncFullscreen.valueOrDefault()) setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = MODE}); else - setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_sFullscreenState.internal, .client = MODE}); + setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_fullscreenState.internal, .client = MODE}); } void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenState state) { @@ -2311,35 +2310,35 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS state.internal = std::clamp(state.internal, (eFullscreenMode)0, FSMODE_MAX); state.client = std::clamp(state.client, (eFullscreenMode)0, FSMODE_MAX); - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); - const auto PWORKSPACE = PWINDOW->m_pWorkspace; + const auto PMONITOR = PWINDOW->m_monitor.lock(); + const auto PWORKSPACE = PWINDOW->m_workspace; - const eFullscreenMode CURRENT_EFFECTIVE_MODE = (eFullscreenMode)std::bit_floor((uint8_t)PWINDOW->m_sFullscreenState.internal); + const eFullscreenMode CURRENT_EFFECTIVE_MODE = (eFullscreenMode)std::bit_floor((uint8_t)PWINDOW->m_fullscreenState.internal); const eFullscreenMode EFFECTIVE_MODE = (eFullscreenMode)std::bit_floor((uint8_t)state.internal); - if (PWINDOW->m_bIsFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE && EFFECTIVE_MODE != FSMODE_NONE) + if (PWINDOW->m_isFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE && EFFECTIVE_MODE != FSMODE_NONE) g_pHyprRenderer->damageWindow(PWINDOW); - if (*PALLOWPINFULLSCREEN && !PWINDOW->m_bPinFullscreened && !PWINDOW->isFullscreen() && PWINDOW->m_bPinned) { - PWINDOW->m_bPinned = false; - PWINDOW->m_bPinFullscreened = true; + if (*PALLOWPINFULLSCREEN && !PWINDOW->m_pinFullscreened && !PWINDOW->isFullscreen() && PWINDOW->m_pinned) { + PWINDOW->m_pinned = false; + PWINDOW->m_pinFullscreened = true; } if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen()) setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); - const bool CHANGEINTERNAL = !PWINDOW->m_bPinned && CURRENT_EFFECTIVE_MODE != EFFECTIVE_MODE; + const bool CHANGEINTERNAL = !PWINDOW->m_pinned && CURRENT_EFFECTIVE_MODE != EFFECTIVE_MODE; - if (*PALLOWPINFULLSCREEN && PWINDOW->m_bPinFullscreened && PWINDOW->isFullscreen() && !PWINDOW->m_bPinned && state.internal == FSMODE_NONE) { - PWINDOW->m_bPinned = true; - PWINDOW->m_bPinFullscreened = false; + if (*PALLOWPINFULLSCREEN && PWINDOW->m_pinFullscreened && PWINDOW->isFullscreen() && !PWINDOW->m_pinned && state.internal == FSMODE_NONE) { + PWINDOW->m_pinned = true; + PWINDOW->m_pinFullscreened = false; } // TODO: update the state on syncFullscreen changes - if (!CHANGEINTERNAL && PWINDOW->m_sWindowData.syncFullscreen.valueOrDefault()) + if (!CHANGEINTERNAL && PWINDOW->m_windowData.syncFullscreen.valueOrDefault()) return; - PWINDOW->m_sFullscreenState.client = state.client; + PWINDOW->m_fullscreenState.client = state.client; g_pXWaylandManager->setWindowFullscreen(PWINDOW, state.client & FSMODE_FULLSCREEN); if (!CHANGEINTERNAL) { @@ -2351,9 +2350,9 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS g_pLayoutManager->getCurrentLayout()->fullscreenRequestForWindow(PWINDOW, CURRENT_EFFECTIVE_MODE, EFFECTIVE_MODE); - PWINDOW->m_sFullscreenState.internal = state.internal; - PWORKSPACE->m_fullscreenMode = EFFECTIVE_MODE; - PWORKSPACE->m_hasFullscreenWindow = EFFECTIVE_MODE != FSMODE_NONE; + PWINDOW->m_fullscreenState.internal = state.internal; + PWORKSPACE->m_fullscreenMode = EFFECTIVE_MODE; + PWORKSPACE->m_hasFullscreenWindow = EFFECTIVE_MODE != FSMODE_NONE; g_pEventManager->postEvent(SHyprIPCEvent{.event = "fullscreen", .data = std::to_string((int)EFFECTIVE_MODE != FSMODE_NONE)}); EMIT_HOOK_EVENT("fullscreen", PWINDOW); @@ -2364,8 +2363,8 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS // make all windows on the same workspace under the fullscreen window for (auto const& w : m_windows) { - if (w->m_pWorkspace == PWORKSPACE && !w->isFullscreen() && !w->m_bFadingOut && !w->m_bPinned) - w->m_bCreatedOverFullscreen = false; + if (w->m_workspace == PWORKSPACE && !w->isFullscreen() && !w->m_fadingOut && !w->m_pinned) + w->m_createdOverFullscreen = false; } updateFullscreenFadeOnWorkspace(PWORKSPACE); @@ -2383,20 +2382,20 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS // send a scanout tranche if we are entering fullscreen, and send a regular one if we aren't. // ignore if DS is disabled. if (*PDIRECTSCANOUT == 1 || (*PDIRECTSCANOUT == 2 && PWINDOW->getContentType() == CONTENT_TYPE_GAME)) - g_pHyprRenderer->setSurfaceScanoutMode(PWINDOW->m_pWLSurface->resource(), EFFECTIVE_MODE != FSMODE_NONE ? PMONITOR->self.lock() : nullptr); + g_pHyprRenderer->setSurfaceScanoutMode(PWINDOW->m_wlSurface->resource(), EFFECTIVE_MODE != FSMODE_NONE ? PMONITOR->self.lock() : nullptr); g_pConfigManager->ensureVRR(PMONITOR); } PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) { - if (!pWindow->m_bIsX11) + if (!pWindow->m_isX11) return nullptr; for (auto const& w : m_windows) { - if (!w->m_bIsX11) + if (!w->m_isX11) continue; - if (w->m_pXWaylandSurface == pWindow->m_pXWaylandSurface->parent) + if (w->m_xwaylandSurface == pWindow->m_xwaylandSurface->parent) return w; } @@ -2429,7 +2428,7 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { const bool FLOAT = regexp.starts_with("floating"); for (auto const& w : m_windows) { - if (!w->m_bIsMapped || w->m_bIsFloating != FLOAT || w->m_pWorkspace != m_lastWindow->m_pWorkspace || w->isHidden()) + if (!w->m_isMapped || w->m_isFloating != FLOAT || w->m_workspace != m_lastWindow->m_workspace || w->isHidden()) continue; return w; @@ -2465,30 +2464,30 @@ PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { } for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || (w->isHidden() && !g_pLayoutManager->getCurrentLayout()->isWindowReachable(w))) + if (!w->m_isMapped || (w->isHidden() && !g_pLayoutManager->getCurrentLayout()->isWindowReachable(w))) continue; switch (mode) { case MODE_CLASS_REGEX: { - const auto windowClass = w->m_szClass; + const auto windowClass = w->m_class; if (!RE2::FullMatch(windowClass, regexCheck)) continue; break; } case MODE_INITIAL_CLASS_REGEX: { - const auto initialWindowClass = w->m_szInitialClass; + const auto initialWindowClass = w->m_initialClass; if (!RE2::FullMatch(initialWindowClass, regexCheck)) continue; break; } case MODE_TITLE_REGEX: { - const auto windowTitle = w->m_szTitle; + const auto windowTitle = w->m_title; if (!RE2::FullMatch(windowTitle, regexCheck)) continue; break; } case MODE_INITIAL_TITLE_REGEX: { - const auto initialWindowTitle = w->m_szInitialTitle; + const auto initialWindowTitle = w->m_initialTitle; if (!RE2::FullMatch(initialWindowTitle, regexCheck)) continue; break; @@ -2720,40 +2719,40 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor if (!pWindow || !pWorkspace) return; - if (pWindow->m_bPinned && pWorkspace->m_isSpecialWorkspace) + if (pWindow->m_pinned && pWorkspace->m_isSpecialWorkspace) return; - if (pWindow->m_pWorkspace == pWorkspace) + if (pWindow->m_workspace == pWorkspace) return; const bool FULLSCREEN = pWindow->isFullscreen(); - const auto FULLSCREENMODE = pWindow->m_sFullscreenState.internal; - const bool WASVISIBLE = pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible(); + const auto FULLSCREENMODE = pWindow->m_fullscreenState.internal; + const bool WASVISIBLE = pWindow->m_workspace && pWindow->m_workspace->isVisible(); if (FULLSCREEN) setWindowFullscreenInternal(pWindow, FSMODE_NONE); const PHLWINDOW pFirstWindowOnWorkspace = pWorkspace->getFirstWindow(); const int visibleWindowsOnWorkspace = pWorkspace->getWindows(std::nullopt, true); - const auto POSTOMON = pWindow->m_vRealPosition->goal() - (pWindow->m_pMonitor ? pWindow->m_pMonitor->vecPosition : Vector2D{}); + const auto POSTOMON = pWindow->m_realPosition->goal() - (pWindow->m_monitor ? pWindow->m_monitor->vecPosition : Vector2D{}); const auto PWORKSPACEMONITOR = pWorkspace->m_monitor.lock(); - if (!pWindow->m_bIsFloating) + if (!pWindow->m_isFloating) g_pLayoutManager->getCurrentLayout()->onWindowRemovedTiling(pWindow); pWindow->moveToWorkspace(pWorkspace); - pWindow->m_pMonitor = pWorkspace->m_monitor; + pWindow->m_monitor = pWorkspace->m_monitor; static auto PGROUPONMOVETOWORKSPACE = CConfigValue("group:group_on_movetoworkspace"); if (*PGROUPONMOVETOWORKSPACE && visibleWindowsOnWorkspace == 1 && pFirstWindowOnWorkspace && pFirstWindowOnWorkspace != pWindow && - pFirstWindowOnWorkspace->m_sGroupData.pNextWindow.lock() && pWindow->canBeGroupedInto(pFirstWindowOnWorkspace)) { + pFirstWindowOnWorkspace->m_groupData.pNextWindow.lock() && pWindow->canBeGroupedInto(pFirstWindowOnWorkspace)) { - pWindow->m_bIsFloating = pFirstWindowOnWorkspace->m_bIsFloating; // match the floating state. Needed to group tiled into floated and vice versa. - if (!pWindow->m_sGroupData.pNextWindow.expired()) { - PHLWINDOW next = pWindow->m_sGroupData.pNextWindow.lock(); + pWindow->m_isFloating = pFirstWindowOnWorkspace->m_isFloating; // match the floating state. Needed to group tiled into floated and vice versa. + if (!pWindow->m_groupData.pNextWindow.expired()) { + PHLWINDOW next = pWindow->m_groupData.pNextWindow.lock(); while (next != pWindow) { - next->m_bIsFloating = pFirstWindowOnWorkspace->m_bIsFloating; // match the floating state of group members - next = next->m_sGroupData.pNextWindow.lock(); + next->m_isFloating = pFirstWindowOnWorkspace->m_isFloating; // match the floating state of group members + next = next->m_groupData.pNextWindow.lock(); } } @@ -2768,11 +2767,11 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor pWindow->addWindowDeco(makeUnique(pWindow)); } else { - if (!pWindow->m_bIsFloating) + if (!pWindow->m_isFloating) g_pLayoutManager->getCurrentLayout()->onWindowCreatedTiling(pWindow); - if (pWindow->m_bIsFloating) - *pWindow->m_vRealPosition = POSTOMON + PWORKSPACEMONITOR->vecPosition; + if (pWindow->m_isFloating) + *pWindow->m_realPosition = POSTOMON + PWORKSPACEMONITOR->vecPosition; } pWindow->updateToplevel(); @@ -2780,11 +2779,11 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor pWindow->uncacheWindowDecos(); pWindow->updateGroupOutputs(); - if (!pWindow->m_sGroupData.pNextWindow.expired()) { - PHLWINDOW next = pWindow->m_sGroupData.pNextWindow.lock(); + if (!pWindow->m_groupData.pNextWindow.expired()) { + PHLWINDOW next = pWindow->m_groupData.pNextWindow.lock(); while (next != pWindow) { next->updateToplevel(); - next = next->m_sGroupData.pNextWindow.lock(); + next = next->m_groupData.pNextWindow.lock(); } } @@ -2792,22 +2791,22 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor setWindowFullscreenInternal(pWindow, FULLSCREENMODE); pWorkspace->updateWindows(); - if (pWindow->m_pWorkspace) - pWindow->m_pWorkspace->updateWindows(); + if (pWindow->m_workspace) + pWindow->m_workspace->updateWindows(); g_pCompositor->updateSuspendedStates(); - if (!WASVISIBLE && pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible()) { - pWindow->m_fMovingFromWorkspaceAlpha->setValueAndWarp(0.F); - *pWindow->m_fMovingFromWorkspaceAlpha = 1.F; + if (!WASVISIBLE && pWindow->m_workspace && pWindow->m_workspace->isVisible()) { + pWindow->m_movingFromWorkspaceAlpha->setValueAndWarp(0.F); + *pWindow->m_movingFromWorkspaceAlpha = 1.F; } } PHLWINDOW CCompositor::getForceFocus() { for (auto const& w : m_windows) { - if (!w->m_bIsMapped || w->isHidden() || !w->m_pWorkspace || !w->m_pWorkspace->isVisible()) + if (!w->m_isMapped || w->isHidden() || !w->m_workspace || !w->m_workspace->isVisible()) continue; - if (!w->m_bStayFocused) + if (!w->m_stayFocused) continue; return w; @@ -2971,10 +2970,10 @@ void CCompositor::setPreferredTransformForSurface(SP pSurfac void CCompositor::updateSuspendedStates() { for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped) + if (!w->m_isMapped) continue; - w->setSuspended(w->isHidden() || !w->m_pWorkspace || !w->m_pWorkspace->isVisible()); + w->setSuspended(w->isHidden() || !w->m_workspace || !w->m_workspace->isVisible()); } } @@ -3047,8 +3046,8 @@ void CCompositor::onNewMonitor(SP output) { checkDefaultCursorWarp(PNEWMONITOR); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pMonitor == PNEWMONITOR) { - w->m_iLastSurfaceMonitorID = MONITOR_INVALID; + if (w->m_monitor == PNEWMONITOR) { + w->m_lastSurfaceMonitorID = MONITOR_INVALID; w->updateSurfaceScaleTransformDetails(); } } diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 9d177798..26b14dda 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1343,14 +1343,14 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, return std::vector>(); // if the window is unmapped, don't process exec rules yet. - shadowExec = shadowExec || !pWindow->m_bIsMapped; + shadowExec = shadowExec || !pWindow->m_isMapped; std::vector> returns; - Debug::log(LOG, "Searching for matching rules for {} (title: {})", pWindow->m_szClass, pWindow->m_szTitle); + Debug::log(LOG, "Searching for matching rules for {} (title: {})", pWindow->m_class, pWindow->m_title); // since some rules will be applied later, we need to store some flags - bool hasFloating = pWindow->m_bIsFloating; + bool hasFloating = pWindow->m_isFloating; bool hasFullscreen = pWindow->isFullscreen(); // local tags for dynamic tag rule match @@ -1358,50 +1358,50 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, for (auto const& rule : m_windowRules) { // check if we have a matching rule - if (!rule->v2) { + if (!rule->m_v2) { try { - if (rule->szValue.starts_with("tag:") && !tags.isTagged(rule->szValue.substr(4))) + if (rule->m_value.starts_with("tag:") && !tags.isTagged(rule->m_value.substr(4))) continue; - if (rule->szValue.starts_with("title:") && !rule->rV1Regex.passes(pWindow->m_szTitle)) + if (rule->m_value.starts_with("title:") && !rule->m_v1Regex.passes(pWindow->m_title)) continue; - if (!rule->rV1Regex.passes(pWindow->m_szClass)) + if (!rule->m_v1Regex.passes(pWindow->m_class)) continue; } catch (...) { - Debug::log(ERR, "Regex error at {}", rule->szValue); + Debug::log(ERR, "Regex error at {}", rule->m_value); continue; } } else { try { - if (rule->bX11 != -1) { - if (pWindow->m_bIsX11 != rule->bX11) + if (rule->m_X11 != -1) { + if (pWindow->m_isX11 != rule->m_X11) continue; } - if (rule->bFloating != -1) { - if (hasFloating != rule->bFloating) + if (rule->m_floating != -1) { + if (hasFloating != rule->m_floating) continue; } - if (rule->bFullscreen != -1) { - if (hasFullscreen != rule->bFullscreen) + if (rule->m_fullscreen != -1) { + if (hasFullscreen != rule->m_fullscreen) continue; } - if (rule->bPinned != -1) { - if (pWindow->m_bPinned != rule->bPinned) + if (rule->m_pinned != -1) { + if (pWindow->m_pinned != rule->m_pinned) continue; } - if (rule->bFocus != -1) { - if (rule->bFocus != (g_pCompositor->m_lastWindow.lock() == pWindow)) + if (rule->m_focus != -1) { + if (rule->m_focus != (g_pCompositor->m_lastWindow.lock() == pWindow)) continue; } - if (!rule->szFullscreenState.empty()) { - const auto ARGS = CVarList(rule->szFullscreenState, 2, ' '); + if (!rule->m_fullscreenState.empty()) { + const auto ARGS = CVarList(rule->m_fullscreenState, 2, ' '); // std::optional internalMode, clientMode; @@ -1419,82 +1419,82 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, else throw std::runtime_error("szFullscreenState client mode not valid"); - if (internalMode.has_value() && pWindow->m_sFullscreenState.internal != internalMode) + if (internalMode.has_value() && pWindow->m_fullscreenState.internal != internalMode) continue; - if (clientMode.has_value() && pWindow->m_sFullscreenState.client != clientMode) + if (clientMode.has_value() && pWindow->m_fullscreenState.client != clientMode) continue; } - if (!rule->szOnWorkspace.empty()) { - const auto PWORKSPACE = pWindow->m_pWorkspace; - if (!PWORKSPACE || !PWORKSPACE->matchesStaticSelector(rule->szOnWorkspace)) + if (!rule->m_onWorkspace.empty()) { + const auto PWORKSPACE = pWindow->m_workspace; + if (!PWORKSPACE || !PWORKSPACE->matchesStaticSelector(rule->m_onWorkspace)) continue; } - if (!rule->szContentType.empty()) { + if (!rule->m_contentType.empty()) { try { - const auto contentType = NContentType::fromString(rule->szContentType); + const auto contentType = NContentType::fromString(rule->m_contentType); if (pWindow->getContentType() != contentType) continue; - } catch (std::exception& e) { Debug::log(ERR, "Rule \"content:{}\" failed with: {}", rule->szContentType, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "Rule \"content:{}\" failed with: {}", rule->m_contentType, e.what()); } } - if (!rule->szXdgTag.empty()) { - if (pWindow->xdgTag().value_or("") != rule->szXdgTag) + if (!rule->m_xdgTag.empty()) { + if (pWindow->xdgTag().value_or("") != rule->m_xdgTag) continue; } - if (!rule->szWorkspace.empty()) { - const auto PWORKSPACE = pWindow->m_pWorkspace; + if (!rule->m_workspace.empty()) { + const auto PWORKSPACE = pWindow->m_workspace; if (!PWORKSPACE) continue; - if (rule->szWorkspace.starts_with("name:")) { - if (PWORKSPACE->m_name != rule->szWorkspace.substr(5)) + if (rule->m_workspace.starts_with("name:")) { + if (PWORKSPACE->m_name != rule->m_workspace.substr(5)) continue; } else { // number - if (!isNumber(rule->szWorkspace)) + if (!isNumber(rule->m_workspace)) throw std::runtime_error("szWorkspace not name: or number"); - const int64_t ID = std::stoll(rule->szWorkspace); + const int64_t ID = std::stoll(rule->m_workspace); if (PWORKSPACE->m_id != ID) continue; } } - if (!rule->szTag.empty() && !tags.isTagged(rule->szTag)) + if (!rule->m_tag.empty() && !tags.isTagged(rule->m_tag)) continue; - if (!rule->szClass.empty() && !rule->rClass.passes(pWindow->m_szClass)) + if (!rule->m_class.empty() && !rule->m_classRegex.passes(pWindow->m_class)) continue; - if (!rule->szTitle.empty() && !rule->rTitle.passes(pWindow->m_szTitle)) + if (!rule->m_title.empty() && !rule->m_titleRegex.passes(pWindow->m_title)) continue; - if (!rule->szInitialTitle.empty() && !rule->rInitialTitle.passes(pWindow->m_szInitialTitle)) + if (!rule->m_initialTitle.empty() && !rule->m_initialTitleRegex.passes(pWindow->m_initialTitle)) continue; - if (!rule->szInitialClass.empty() && !rule->rInitialClass.passes(pWindow->m_szInitialClass)) + if (!rule->m_initialClass.empty() && !rule->m_initialClassRegex.passes(pWindow->m_initialClass)) continue; } catch (std::exception& e) { - Debug::log(ERR, "Regex error at {} ({})", rule->szValue, e.what()); + Debug::log(ERR, "Regex error at {} ({})", rule->m_value, e.what()); continue; } } // applies. Read the rule and behave accordingly - Debug::log(LOG, "Window rule {} -> {} matched {}", rule->szRule, rule->szValue, pWindow); + Debug::log(LOG, "Window rule {} -> {} matched {}", rule->m_rule, rule->m_value, pWindow); returns.emplace_back(rule); // apply tag with local tags - if (rule->ruleType == CWindowRule::RULE_TAG) { - CVarList vars{rule->szRule, 0, 's', true}; + if (rule->m_ruleType == CWindowRule::RULE_TAG) { + CVarList vars{rule->m_rule, 0, 's', true}; if (vars.size() == 2 && vars[0] == "tag") tags.applyTag(vars[1], true); } @@ -1502,9 +1502,9 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, if (dynamic) continue; - if (rule->szRule == "float") + if (rule->m_rule == "float") hasFloating = true; - else if (rule->szRule == "fullscreen") + else if (rule->m_rule == "fullscreen") hasFullscreen = true; } @@ -2418,7 +2418,7 @@ std::optional CConfigManager::handleWindowRule(const std::string& c auto rule = makeShared(RULE, VALUE, true); - if (rule->ruleType == CWindowRule::RULE_INVALID && RULE != "unset") { + if (rule->m_ruleType == CWindowRule::RULE_INVALID && RULE != "unset") { Debug::log(ERR, "Invalid rulev2 found: {}", RULE); return "Invalid rulev2 found: " + RULE; } @@ -2504,103 +2504,103 @@ std::optional CConfigManager::handleWindowRule(const std::string& c }; if (TAGPOS != std::string::npos) - rule->szTag = extract(TAGPOS + 4); + rule->m_tag = extract(TAGPOS + 4); if (CLASSPOS != std::string::npos) { - rule->szClass = extract(CLASSPOS + 6); - rule->rClass = {rule->szClass}; + rule->m_class = extract(CLASSPOS + 6); + rule->m_classRegex = {rule->m_class}; } if (TITLEPOS != std::string::npos) { - rule->szTitle = extract(TITLEPOS + 6); - rule->rTitle = {rule->szTitle}; + rule->m_title = extract(TITLEPOS + 6); + rule->m_titleRegex = {rule->m_title}; } if (INITIALCLASSPOS != std::string::npos) { - rule->szInitialClass = extract(INITIALCLASSPOS + 13); - rule->rInitialClass = {rule->szInitialClass}; + rule->m_initialClass = extract(INITIALCLASSPOS + 13); + rule->m_initialClassRegex = {rule->m_initialClass}; } if (INITIALTITLEPOS != std::string::npos) { - rule->szInitialTitle = extract(INITIALTITLEPOS + 13); - rule->rInitialTitle = {rule->szInitialTitle}; + rule->m_initialTitle = extract(INITIALTITLEPOS + 13); + rule->m_initialTitleRegex = {rule->m_initialTitle}; } if (X11POS != std::string::npos) - rule->bX11 = extract(X11POS + 9) == "1" ? 1 : 0; + rule->m_X11 = extract(X11POS + 9) == "1" ? 1 : 0; if (FLOATPOS != std::string::npos) - rule->bFloating = extract(FLOATPOS + 9) == "1" ? 1 : 0; + rule->m_floating = extract(FLOATPOS + 9) == "1" ? 1 : 0; if (FULLSCREENPOS != std::string::npos) - rule->bFullscreen = extract(FULLSCREENPOS + 11) == "1" ? 1 : 0; + rule->m_fullscreen = extract(FULLSCREENPOS + 11) == "1" ? 1 : 0; if (PINNEDPOS != std::string::npos) - rule->bPinned = extract(PINNEDPOS + 7) == "1" ? 1 : 0; + rule->m_pinned = extract(PINNEDPOS + 7) == "1" ? 1 : 0; if (FULLSCREENSTATEPOS != std::string::npos) - rule->szFullscreenState = extract(FULLSCREENSTATEPOS + 16); + rule->m_fullscreenState = extract(FULLSCREENSTATEPOS + 16); if (WORKSPACEPOS != std::string::npos) - rule->szWorkspace = extract(WORKSPACEPOS + 10); + rule->m_workspace = extract(WORKSPACEPOS + 10); if (FOCUSPOS != std::string::npos) - rule->bFocus = extract(FOCUSPOS + 6) == "1" ? 1 : 0; + rule->m_focus = extract(FOCUSPOS + 6) == "1" ? 1 : 0; if (ONWORKSPACEPOS != std::string::npos) - rule->szOnWorkspace = extract(ONWORKSPACEPOS + 12); + rule->m_onWorkspace = extract(ONWORKSPACEPOS + 12); if (CONTENTTYPEPOS != std::string::npos) - rule->szContentType = extract(CONTENTTYPEPOS + 8); + rule->m_contentType = extract(CONTENTTYPEPOS + 8); if (XDGTAGPOS != std::string::npos) - rule->szXdgTag = extract(XDGTAGPOS + 8); + rule->m_xdgTag = extract(XDGTAGPOS + 8); if (RULE == "unset") { std::erase_if(m_windowRules, [&](const auto& other) { - if (!other->v2) - return other->szClass == rule->szClass && !rule->szClass.empty(); + if (!other->m_v2) + return other->m_class == rule->m_class && !rule->m_class.empty(); else { - if (!rule->szTag.empty() && rule->szTag != other->szTag) + if (!rule->m_tag.empty() && rule->m_tag != other->m_tag) return false; - if (!rule->szClass.empty() && rule->szClass != other->szClass) + if (!rule->m_class.empty() && rule->m_class != other->m_class) return false; - if (!rule->szTitle.empty() && rule->szTitle != other->szTitle) + if (!rule->m_title.empty() && rule->m_title != other->m_title) return false; - if (!rule->szInitialClass.empty() && rule->szInitialClass != other->szInitialClass) + if (!rule->m_initialClass.empty() && rule->m_initialClass != other->m_initialClass) return false; - if (!rule->szInitialTitle.empty() && rule->szInitialTitle != other->szInitialTitle) + if (!rule->m_initialTitle.empty() && rule->m_initialTitle != other->m_initialTitle) return false; - if (rule->bX11 != -1 && rule->bX11 != other->bX11) + if (rule->m_X11 != -1 && rule->m_X11 != other->m_X11) return false; - if (rule->bFloating != -1 && rule->bFloating != other->bFloating) + if (rule->m_floating != -1 && rule->m_floating != other->m_floating) return false; - if (rule->bFullscreen != -1 && rule->bFullscreen != other->bFullscreen) + if (rule->m_fullscreen != -1 && rule->m_fullscreen != other->m_fullscreen) return false; - if (rule->bPinned != -1 && rule->bPinned != other->bPinned) + if (rule->m_pinned != -1 && rule->m_pinned != other->m_pinned) return false; - if (!rule->szFullscreenState.empty() && rule->szFullscreenState != other->szFullscreenState) + if (!rule->m_fullscreenState.empty() && rule->m_fullscreenState != other->m_fullscreenState) return false; - if (!rule->szWorkspace.empty() && rule->szWorkspace != other->szWorkspace) + if (!rule->m_workspace.empty() && rule->m_workspace != other->m_workspace) return false; - if (rule->bFocus != -1 && rule->bFocus != other->bFocus) + if (rule->m_focus != -1 && rule->m_focus != other->m_focus) return false; - if (!rule->szOnWorkspace.empty() && rule->szOnWorkspace != other->szOnWorkspace) + if (!rule->m_onWorkspace.empty() && rule->m_onWorkspace != other->m_onWorkspace) return false; - if (!rule->szContentType.empty() && rule->szContentType != other->szContentType) + if (!rule->m_contentType.empty() && rule->m_contentType != other->m_contentType) return false; return true; @@ -3051,7 +3051,7 @@ void CConfigManager::ensurePersistentWorkspacesPresent() { } void CConfigManager::storeFloatingSize(PHLWINDOW window, const Vector2D& size) { - Debug::log(LOG, "storing floating size {}x{} for window {}::{}", size.x, size.y, window->m_szClass, window->m_szTitle); + Debug::log(LOG, "storing floating size {}x{} for window {}::{}", size.x, size.y, window->m_class, window->m_title); SFloatCache id{window}; m_mStoredFloatingSizes[id] = size; } @@ -3059,7 +3059,7 @@ void CConfigManager::storeFloatingSize(PHLWINDOW window, const Vector2D& size) { std::optional CConfigManager::getStoredFloatingSize(PHLWINDOW window) { SFloatCache id{window}; if (m_mStoredFloatingSizes.contains(id)) { - Debug::log(LOG, "got stored size {}x{} for window {}::{}", m_mStoredFloatingSizes[id].x, m_mStoredFloatingSizes[id].y, window->m_szClass, window->m_szTitle); + Debug::log(LOG, "got stored size {}x{} for window {}::{}", m_mStoredFloatingSizes[id].x, m_mStoredFloatingSizes[id].y, window->m_class, window->m_title); return m_mStoredFloatingSizes[id]; } return std::nullopt; diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index 574d861d..eca2bb28 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -142,7 +142,7 @@ struct SFloatCache { size_t hash; SFloatCache(PHLWINDOW window) { - hash = std::hash{}(window->m_szClass) ^ (std::hash{}(window->m_szTitle) << 1); + hash = std::hash{}(window->m_class) ^ (std::hash{}(window->m_title) << 1); } bool operator==(const SFloatCache& other) const { diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index e66e4208..762f5d84 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -199,7 +199,7 @@ static std::string getTagsData(PHLWINDOW w, eHyprCtlOutputFormat format) { static std::string getGroupedData(PHLWINDOW w, eHyprCtlOutputFormat format) { const bool isJson = format == eHyprCtlOutputFormat::FORMAT_JSON; - if (w->m_sGroupData.pNextWindow.expired()) + if (w->m_groupData.pNextWindow.expired()) return isJson ? "" : "0"; std::ostringstream result; @@ -211,7 +211,7 @@ static std::string getGroupedData(PHLWINDOW w, eHyprCtlOutputFormat format) { result << std::format("\"0x{:x}\"", (uintptr_t)curr.get()); else result << std::format("{:x}", (uintptr_t)curr.get()); - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); // We've wrapped around to the start, break out without trailing comma if (curr == head) break; @@ -262,14 +262,13 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { "xdgTag": "{}", "xdgDescription": "{}" }},)#", - (uintptr_t)w.get(), (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, - (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, - escapeJSONStrings(!w->m_pWorkspace ? "" : w->m_pWorkspace->m_name), ((int)w->m_bIsFloating == 1 ? "true" : "false"), (w->m_bIsPseudotiled ? "true" : "false"), - (int64_t)w->monitorID(), escapeJSONStrings(w->m_szClass), escapeJSONStrings(w->m_szTitle), escapeJSONStrings(w->m_szInitialClass), - escapeJSONStrings(w->m_szInitialTitle), w->getPID(), ((int)w->m_bIsX11 == 1 ? "true" : "false"), (w->m_bPinned ? "true" : "false"), - (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_pSwallowed.get(), - getFocusHistoryID(w), (g_pInputManager->isWindowInhibiting(w, false) ? "true" : "false"), escapeJSONStrings(w->xdgTag().value_or("")), - escapeJSONStrings(w->xdgDescription().value_or(""))); + (uintptr_t)w.get(), (w->m_isMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_realPosition->goal().x, (int)w->m_realPosition->goal().y, + (int)w->m_realSize->goal().x, (int)w->m_realSize->goal().y, w->m_workspace ? w->workspaceID() : WORKSPACE_INVALID, + escapeJSONStrings(!w->m_workspace ? "" : w->m_workspace->m_name), ((int)w->m_isFloating == 1 ? "true" : "false"), (w->m_isPseudotiled ? "true" : "false"), + (int64_t)w->monitorID(), escapeJSONStrings(w->m_class), escapeJSONStrings(w->m_title), escapeJSONStrings(w->m_initialClass), escapeJSONStrings(w->m_initialTitle), + w->getPID(), ((int)w->m_isX11 == 1 ? "true" : "false"), (w->m_pinned ? "true" : "false"), (uint8_t)w->m_fullscreenState.internal, (uint8_t)w->m_fullscreenState.client, + getGroupedData(w, format), getTagsData(w, format), (uintptr_t)w->m_swallowed.get(), getFocusHistoryID(w), + (g_pInputManager->isWindowInhibiting(w, false) ? "true" : "false"), escapeJSONStrings(w->xdgTag().value_or("")), escapeJSONStrings(w->xdgDescription().value_or(""))); } else { return std::format( "Window {:x} -> {}:\n\tmapped: {}\n\thidden: {}\n\tat: {},{}\n\tsize: {},{}\n\tworkspace: {} ({})\n\tfloating: {}\n\tpseudo: {}\n\tmonitor: {}\n\tclass: {}\n\ttitle: " @@ -277,11 +276,11 @@ std::string CHyprCtl::getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format) { "{}\n\txwayland: {}\n\tpinned: " "{}\n\tfullscreen: {}\n\tfullscreenClient: {}\n\tgrouped: {}\n\ttags: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\tinhibitingIdle: {}\n\txdgTag: " "{}\n\txdgDescription: {}\n\n", - (uintptr_t)w.get(), w->m_szTitle, (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition->goal().x, (int)w->m_vRealPosition->goal().y, - (int)w->m_vRealSize->goal().x, (int)w->m_vRealSize->goal().y, w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID, (!w->m_pWorkspace ? "" : w->m_pWorkspace->m_name), - (int)w->m_bIsFloating, (int)w->m_bIsPseudotiled, (int64_t)w->monitorID(), w->m_szClass, w->m_szTitle, w->m_szInitialClass, w->m_szInitialTitle, w->getPID(), - (int)w->m_bIsX11, (int)w->m_bPinned, (uint8_t)w->m_sFullscreenState.internal, (uint8_t)w->m_sFullscreenState.client, getGroupedData(w, format), getTagsData(w, format), - (uintptr_t)w->m_pSwallowed.get(), getFocusHistoryID(w), (int)g_pInputManager->isWindowInhibiting(w, false), w->xdgTag().value_or(""), w->xdgDescription().value_or("")); + (uintptr_t)w.get(), w->m_title, (int)w->m_isMapped, (int)w->isHidden(), (int)w->m_realPosition->goal().x, (int)w->m_realPosition->goal().y, + (int)w->m_realSize->goal().x, (int)w->m_realSize->goal().y, w->m_workspace ? w->workspaceID() : WORKSPACE_INVALID, (!w->m_workspace ? "" : w->m_workspace->m_name), + (int)w->m_isFloating, (int)w->m_isPseudotiled, (int64_t)w->monitorID(), w->m_class, w->m_title, w->m_initialClass, w->m_initialTitle, w->getPID(), (int)w->m_isX11, + (int)w->m_pinned, (uint8_t)w->m_fullscreenState.internal, (uint8_t)w->m_fullscreenState.client, getGroupedData(w, format), getTagsData(w, format), + (uintptr_t)w->m_swallowed.get(), getFocusHistoryID(w), (int)g_pInputManager->isWindowInhibiting(w, false), w->xdgTag().value_or(""), w->xdgDescription().value_or("")); } } @@ -291,7 +290,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque result += "["; for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) + if (!w->m_isMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; result += CHyprCtl::getWindowData(w, format); @@ -302,7 +301,7 @@ static std::string clientsRequest(eHyprCtlOutputFormat format, std::string reque result += "]"; } else { for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped && !g_pHyprCtl->m_currentRequestParams.all) + if (!w->m_isMapped && !g_pHyprCtl->m_currentRequestParams.all) continue; result += CHyprCtl::getWindowData(w, format); @@ -328,12 +327,12 @@ std::string CHyprCtl::getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat form }})#", w->m_id, escapeJSONStrings(w->m_name), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"), escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), w->getWindows(), w->m_hasFullscreenWindow ? "true" : "false", - (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_szTitle) : "", w->m_persistent ? "true" : "false"); + (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_title) : "", w->m_persistent ? "true" : "false"); } else { return std::format( "workspace ID {} ({}) on monitor {}:\n\tmonitorID: {}\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\tispersistent: {}\n\n", w->m_id, w->m_name, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", w->getWindows(), (int)w->m_hasFullscreenWindow, - (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_szTitle : "", (int)w->m_persistent); + (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_title : "", (int)w->m_persistent); } } @@ -1397,7 +1396,7 @@ static std::string decorationRequest(eHyprCtlOutputFormat format, std::string re std::string result = ""; if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - for (auto const& wd : PWINDOW->m_dWindowDecorations) { + for (auto const& wd : PWINDOW->m_windowDecorations) { result += "{\n\"decorationName\": \"" + wd->getDisplayName() + "\",\n\"priority\": " + std::to_string(wd->getPositioningInfo().priority) + "\n},"; } @@ -1405,7 +1404,7 @@ static std::string decorationRequest(eHyprCtlOutputFormat format, std::string re result += "]"; } else { result = +"Decoration\tPriority\n"; - for (auto const& wd : PWINDOW->m_dWindowDecorations) { + for (auto const& wd : PWINDOW->m_windowDecorations) { result += wd->getDisplayName() + "\t" + std::to_string(wd->getPositioningInfo().priority) + "\n"; } } @@ -1794,7 +1793,7 @@ std::string CHyprCtl::getReply(std::string request) { } for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || !w->m_pWorkspace || !w->m_pWorkspace->isVisible()) + if (!w->m_isMapped || !w->m_workspace || !w->m_workspace->isVisible()) continue; w->updateDynamicRules(); diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 8043bc31..049db245 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -54,8 +54,7 @@ void CPopup::initAllSignals() { if (!m_resource) { if (!m_windowOwner.expired()) - m_listeners.newPopup = - m_windowOwner->m_pXDGSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + m_listeners.newPopup = m_windowOwner->m_xdgSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); else if (!m_layerOwner.expired()) m_listeners.newPopup = m_layerOwner->m_layerSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); @@ -172,7 +171,7 @@ void CPopup::onCommit(bool ignoreSiblings) { return; } - if (!m_windowOwner.expired() && (!m_windowOwner->m_bIsMapped || !m_windowOwner->m_pWorkspace->m_visible)) { + if (!m_windowOwner.expired() && (!m_windowOwner->m_isMapped || !m_windowOwner->m_workspace->m_visible)) { m_lastSize = m_resource->surface->surface->current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); @@ -231,7 +230,7 @@ void CPopup::reposition() { SP CPopup::getT1Owner() { if (m_windowOwner) - return m_windowOwner->m_pWLSurface; + return m_windowOwner->m_wlSurface; else return m_layerOwner->m_surface; } @@ -266,7 +265,7 @@ Vector2D CPopup::localToGlobal(const Vector2D& rel) { Vector2D CPopup::t1ParentCoords() { if (!m_windowOwner.expired()) - return m_windowOwner->m_vRealPosition->value(); + return m_windowOwner->m_realPosition->value(); if (!m_layerOwner.expired()) return m_layerOwner->m_realPosition->value(); @@ -301,7 +300,7 @@ Vector2D CPopup::size() { void CPopup::sendScale() { if (!m_windowOwner.expired()) - g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_windowOwner->m_pWLSurface->m_lastScaleFloat); + g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_windowOwner->m_wlSurface->m_lastScaleFloat); else if (!m_layerOwner.expired()) g_pCompositor->setPreferredScaleForSurface(m_wlSurface->resource(), m_layerOwner->m_surface->m_lastScaleFloat); else diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index 60032ead..419c7e31 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -13,7 +13,7 @@ UP CSubsurface::create(PHLWINDOW pOwner) { subsurface->m_self = subsurface; subsurface->initSignals(); - subsurface->initExistingSubsurfaces(pOwner->m_pWLSurface->resource()); + subsurface->initExistingSubsurfaces(pOwner->m_wlSurface->resource()); return subsurface; } @@ -60,7 +60,7 @@ void CSubsurface::initSignals() { m_subsurface->surface->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); } else { if (m_windowParent) - m_listeners.newSubsurface = m_windowParent->m_pWLSurface->resource()->events.newSubsurface.registerListener( + m_listeners.newSubsurface = m_windowParent->m_wlSurface->resource()->events.newSubsurface.registerListener( [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else if (m_popupParent) m_listeners.newSubsurface = @@ -74,7 +74,7 @@ void CSubsurface::checkSiblingDamage() { if (!m_parent) return; // ?????????? - const double SCALE = m_windowParent.lock() && m_windowParent->m_bIsX11 ? 1.0 / m_windowParent->m_fX11SurfaceScaledBy : 1.0; + const double SCALE = m_windowParent.lock() && m_windowParent->m_isX11 ? 1.0 / m_windowParent->m_X11SurfaceScaledBy : 1.0; for (auto const& n : m_parent->m_children) { if (n.get() == this) @@ -94,7 +94,7 @@ void CSubsurface::recheckDamageForSubsurfaces() { void CSubsurface::onCommit() { // no damaging if it's not visible - if (!m_windowParent.expired() && (!m_windowParent->m_bIsMapped || !m_windowParent->m_pWorkspace->m_visible)) { + if (!m_windowParent.expired() && (!m_windowParent->m_isMapped || !m_windowParent->m_workspace->m_visible)) { m_lastSize = m_wlSurface->resource()->current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); @@ -110,7 +110,7 @@ void CSubsurface::onCommit() { if (m_popupParent && !m_popupParent->inert() && m_popupParent->m_wlSurface) m_popupParent->recheckTree(); if (!m_windowParent.expired()) // I hate you firefox why are you doing this - m_windowParent->m_pPopupHead->recheckTree(); + m_windowParent->m_popupHead->recheckTree(); // I do not think this is correct, but it solves a lot of issues with some apps (e.g. firefox) checkSiblingDamage(); @@ -191,7 +191,7 @@ Vector2D CSubsurface::coordsGlobal() { Vector2D coords = coordsRelativeToParent(); if (!m_windowParent.expired()) - coords += m_windowParent->m_vRealPosition->value(); + coords += m_windowParent->m_realPosition->value(); else if (m_popupParent) coords += m_popupParent->coordsGlobal(); diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index 5d0a32de..d5e35be1 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -64,7 +64,7 @@ bool CWLSurface::small() const { const auto O = m_windowOwner.lock(); - return O->m_vReportedSize.x > m_resource->current.size.x + 1 || O->m_vReportedSize.y > m_resource->current.size.y + 1; + return O->m_reportedSize.x > m_resource->current.size.x + 1 || O->m_reportedSize.y > m_resource->current.size.y + 1; } Vector2D CWLSurface::correctSmallVec() const { @@ -74,7 +74,7 @@ Vector2D CWLSurface::correctSmallVec() const { const auto SIZE = getViewporterCorrectedSize(); const auto O = m_windowOwner.lock(); - return Vector2D{(O->m_vReportedSize.x - SIZE.x) / 2, (O->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) * (O->m_vRealSize->value() / O->m_vReportedSize); + return Vector2D{(O->m_reportedSize.x - SIZE.x) / 2, (O->m_reportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) * (O->m_realSize->value() / O->m_reportedSize); } Vector2D CWLSurface::correctSmallVecBuf() const { @@ -121,7 +121,7 @@ CRegion CWLSurface::computeDamage() const { damage.scale(SCALE); if (m_windowOwner) - damage.scale(m_windowOwner->m_fX11SurfaceScaledBy); // fix xwayland:force_zero_scaling stuff that will be fucked by the above a bit + damage.scale(m_windowOwner->m_X11SurfaceScaledBy); // fix xwayland:force_zero_scaling stuff that will be fucked by the above a bit return damage; } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 4843c491..899c260a 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -38,19 +38,19 @@ using enum NContentType::eContentType; PHLWINDOW CWindow::create(SP surface) { PHLWINDOW pWindow = SP(new CWindow(surface)); - pWindow->m_pSelf = pWindow; - pWindow->m_bIsX11 = true; + pWindow->m_self = pWindow; + pWindow->m_isX11 = true; - g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER); - g_pAnimationManager->createAnimation(1.f, pWindow->m_fAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(1.f, pWindow->m_fActiveInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_cRealShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fDimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_borderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER); + g_pAnimationManager->createAnimation(0.f, pWindow->m_borderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER); + g_pAnimationManager->createAnimation(1.f, pWindow->m_alpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(1.f, pWindow->m_activeInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_realShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW); + g_pAnimationManager->createAnimation(0.f, pWindow->m_dimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_movingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_movingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); g_pAnimationManager->createAnimation(0.f, pWindow->m_notRespondingTint, g_pConfigManager->getAnimationPropertyConfig("fade"), pWindow, AVARDAMAGE_ENTIRE); pWindow->addWindowDeco(makeUnique(pWindow)); @@ -62,65 +62,65 @@ PHLWINDOW CWindow::create(SP surface) { PHLWINDOW CWindow::create(SP resource) { PHLWINDOW pWindow = SP(new CWindow(resource)); - pWindow->m_pSelf = pWindow; + pWindow->m_self = pWindow; resource->toplevel->window = pWindow; - g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER); - g_pAnimationManager->createAnimation(1.f, pWindow->m_fAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(1.f, pWindow->m_fActiveInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_cRealShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fDimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE); - g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_borderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER); + g_pAnimationManager->createAnimation(0.f, pWindow->m_borderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER); + g_pAnimationManager->createAnimation(1.f, pWindow->m_alpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(1.f, pWindow->m_activeInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_realShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW); + g_pAnimationManager->createAnimation(0.f, pWindow->m_dimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_movingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE); + g_pAnimationManager->createAnimation(0.f, pWindow->m_movingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE); g_pAnimationManager->createAnimation(0.f, pWindow->m_notRespondingTint, g_pConfigManager->getAnimationPropertyConfig("fade"), pWindow, AVARDAMAGE_ENTIRE); pWindow->addWindowDeco(makeUnique(pWindow)); pWindow->addWindowDeco(makeUnique(pWindow)); - pWindow->m_pWLSurface->assign(pWindow->m_pXDGSurface->surface.lock(), pWindow); + pWindow->m_wlSurface->assign(pWindow->m_xdgSurface->surface.lock(), pWindow); return pWindow; } -CWindow::CWindow(SP resource) : m_pXDGSurface(resource) { - m_pWLSurface = CWLSurface::create(); +CWindow::CWindow(SP resource) : m_xdgSurface(resource) { + m_wlSurface = CWLSurface::create(); - listeners.map = m_pXDGSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); - listeners.ack = m_pXDGSurface->events.ack.registerListener([this](std::any d) { onAck(std::any_cast(d)); }); - listeners.unmap = m_pXDGSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); - listeners.destroy = m_pXDGSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); - listeners.commit = m_pXDGSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); - listeners.updateState = m_pXDGSurface->toplevel->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); - listeners.updateMetadata = m_pXDGSurface->toplevel->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); + m_listeners.map = m_xdgSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); + m_listeners.ack = m_xdgSurface->events.ack.registerListener([this](std::any d) { onAck(std::any_cast(d)); }); + m_listeners.unmap = m_xdgSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); + m_listeners.destroy = m_xdgSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); + m_listeners.commit = m_xdgSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); + m_listeners.updateState = m_xdgSurface->toplevel->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); + m_listeners.updateMetadata = m_xdgSurface->toplevel->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); } -CWindow::CWindow(SP surface) : m_pXWaylandSurface(surface) { - m_pWLSurface = CWLSurface::create(); +CWindow::CWindow(SP surface) : m_xwaylandSurface(surface) { + m_wlSurface = CWLSurface::create(); - listeners.map = m_pXWaylandSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); - listeners.unmap = m_pXWaylandSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); - listeners.destroy = m_pXWaylandSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); - listeners.commit = m_pXWaylandSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); - listeners.configureRequest = m_pXWaylandSurface->events.configureRequest.registerListener([this](std::any d) { onX11ConfigureRequest(std::any_cast(d)); }); - listeners.updateState = m_pXWaylandSurface->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); - listeners.updateMetadata = m_pXWaylandSurface->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); - listeners.resourceChange = m_pXWaylandSurface->events.resourceChange.registerListener([this](std::any d) { onResourceChangeX11(); }); - listeners.activate = m_pXWaylandSurface->events.activate.registerListener([this](std::any d) { Events::listener_activateX11(this, nullptr); }); + m_listeners.map = m_xwaylandSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); + m_listeners.unmap = m_xwaylandSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); + m_listeners.destroy = m_xwaylandSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); + m_listeners.commit = m_xwaylandSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); + m_listeners.configureRequest = m_xwaylandSurface->events.configureRequest.registerListener([this](std::any d) { onX11ConfigureRequest(std::any_cast(d)); }); + m_listeners.updateState = m_xwaylandSurface->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); + m_listeners.updateMetadata = m_xwaylandSurface->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); + m_listeners.resourceChange = m_xwaylandSurface->events.resourceChange.registerListener([this](std::any d) { onResourceChangeX11(); }); + m_listeners.activate = m_xwaylandSurface->events.activate.registerListener([this](std::any d) { Events::listener_activateX11(this, nullptr); }); - if (m_pXWaylandSurface->overrideRedirect) - listeners.setGeometry = m_pXWaylandSurface->events.setGeometry.registerListener([this](std::any d) { Events::listener_unmanagedSetGeometry(this, nullptr); }); + if (m_xwaylandSurface->overrideRedirect) + m_listeners.setGeometry = m_xwaylandSurface->events.setGeometry.registerListener([this](std::any d) { Events::listener_unmanagedSetGeometry(this, nullptr); }); } CWindow::~CWindow() { - if (g_pCompositor->m_lastWindow == m_pSelf) { + if (g_pCompositor->m_lastWindow == m_self) { g_pCompositor->m_lastFocus.reset(); g_pCompositor->m_lastWindow.reset(); } - events.destroy.emit(); + m_events.destroy.emit(); if (!g_pHyprOpenGL) return; @@ -130,20 +130,20 @@ CWindow::~CWindow() { } SBoxExtents CWindow::getFullWindowExtents() { - if (m_bFadingOut) - return m_eOriginalClosedExtents; + if (m_fadingOut) + return m_originalClosedExtents; const int BORDERSIZE = getRealBorderSize(); - if (m_sWindowData.dimAround.valueOrDefault()) { - if (const auto PMONITOR = m_pMonitor.lock(); PMONITOR) - return {{m_vRealPosition->value().x - PMONITOR->vecPosition.x, m_vRealPosition->value().y - PMONITOR->vecPosition.y}, - {PMONITOR->vecSize.x - (m_vRealPosition->value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_vRealPosition->value().y - PMONITOR->vecPosition.y)}}; + if (m_windowData.dimAround.valueOrDefault()) { + if (const auto PMONITOR = m_monitor.lock(); PMONITOR) + return {{m_realPosition->value().x - PMONITOR->vecPosition.x, m_realPosition->value().y - PMONITOR->vecPosition.y}, + {PMONITOR->vecSize.x - (m_realPosition->value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_realPosition->value().y - PMONITOR->vecPosition.y)}}; } SBoxExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}}; - const auto EXTENTS = g_pDecorationPositioner->getWindowDecorationExtents(m_pSelf.lock()); + const auto EXTENTS = g_pDecorationPositioner->getWindowDecorationExtents(m_self.lock()); if (EXTENTS.topLeft.x > maxExtents.topLeft.x) maxExtents.topLeft.x = EXTENTS.topLeft.x; @@ -157,10 +157,10 @@ SBoxExtents CWindow::getFullWindowExtents() { if (EXTENTS.bottomRight.y > maxExtents.bottomRight.y) maxExtents.bottomRight.y = EXTENTS.bottomRight.y; - if (m_pWLSurface->exists() && !m_bIsX11 && m_pPopupHead) { + if (m_wlSurface->exists() && !m_isX11 && m_popupHead) { CBox surfaceExtents = {0, 0, 0, 0}; // TODO: this could be better, perhaps make a getFullWindowRegion? - m_pPopupHead->breadthfirst( + m_popupHead->breadthfirst( [](WP popup, void* data) { if (!popup->m_wlSurface || !popup->m_wlSurface->resource()) return; @@ -184,38 +184,38 @@ SBoxExtents CWindow::getFullWindowExtents() { if (-surfaceExtents.y > maxExtents.topLeft.y) maxExtents.topLeft.y = -surfaceExtents.y; - if (surfaceExtents.x + surfaceExtents.width > m_pWLSurface->resource()->current.size.x + maxExtents.bottomRight.x) - maxExtents.bottomRight.x = surfaceExtents.x + surfaceExtents.width - m_pWLSurface->resource()->current.size.x; + if (surfaceExtents.x + surfaceExtents.width > m_wlSurface->resource()->current.size.x + maxExtents.bottomRight.x) + maxExtents.bottomRight.x = surfaceExtents.x + surfaceExtents.width - m_wlSurface->resource()->current.size.x; - if (surfaceExtents.y + surfaceExtents.height > m_pWLSurface->resource()->current.size.y + maxExtents.bottomRight.y) - maxExtents.bottomRight.y = surfaceExtents.y + surfaceExtents.height - m_pWLSurface->resource()->current.size.y; + if (surfaceExtents.y + surfaceExtents.height > m_wlSurface->resource()->current.size.y + maxExtents.bottomRight.y) + maxExtents.bottomRight.y = surfaceExtents.y + surfaceExtents.height - m_wlSurface->resource()->current.size.y; } return maxExtents; } CBox CWindow::getFullWindowBoundingBox() { - if (m_sWindowData.dimAround.valueOrDefault()) { - if (const auto PMONITOR = m_pMonitor.lock(); PMONITOR) + if (m_windowData.dimAround.valueOrDefault()) { + if (const auto PMONITOR = m_monitor.lock(); PMONITOR) return {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; } auto maxExtents = getFullWindowExtents(); - CBox finalBox = {m_vRealPosition->value().x - maxExtents.topLeft.x, m_vRealPosition->value().y - maxExtents.topLeft.y, - m_vRealSize->value().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_vRealSize->value().y + maxExtents.topLeft.y + maxExtents.bottomRight.y}; + CBox finalBox = {m_realPosition->value().x - maxExtents.topLeft.x, m_realPosition->value().y - maxExtents.topLeft.y, + m_realSize->value().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_realSize->value().y + maxExtents.topLeft.y + maxExtents.bottomRight.y}; return finalBox; } CBox CWindow::getWindowIdealBoundingBoxIgnoreReserved() { - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); if (!PMONITOR) - return {m_vPosition, m_vSize}; + return {m_position, m_size}; - auto POS = m_vPosition; - auto SIZE = m_vSize; + auto POS = m_position; + auto SIZE = m_size; if (isFullscreen()) { POS = PMONITOR->vecPosition; @@ -243,82 +243,82 @@ CBox CWindow::getWindowIdealBoundingBoxIgnoreReserved() { } CBox CWindow::getWindowBoxUnified(uint64_t properties) { - if (m_sWindowData.dimAround.valueOrDefault()) { - const auto PMONITOR = m_pMonitor.lock(); + if (m_windowData.dimAround.valueOrDefault()) { + const auto PMONITOR = m_monitor.lock(); if (PMONITOR) return {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; } SBoxExtents EXTENTS = {{0, 0}, {0, 0}}; if (properties & RESERVED_EXTENTS) - EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationReserved(m_pSelf.lock())); + EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationReserved(m_self.lock())); if (properties & INPUT_EXTENTS) - EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(m_pSelf.lock(), true)); + EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(m_self.lock(), true)); if (properties & FULL_EXTENTS) - EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(m_pSelf.lock(), false)); + EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(m_self.lock(), false)); - CBox box = {m_vRealPosition->value().x, m_vRealPosition->value().y, m_vRealSize->value().x, m_vRealSize->value().y}; + CBox box = {m_realPosition->value().x, m_realPosition->value().y, m_realSize->value().x, m_realSize->value().y}; box.addExtents(EXTENTS); return box; } SBoxExtents CWindow::getFullWindowReservedArea() { - return g_pDecorationPositioner->getWindowDecorationReserved(m_pSelf.lock()); + return g_pDecorationPositioner->getWindowDecorationReserved(m_self.lock()); } void CWindow::updateWindowDecos() { - if (!m_bIsMapped || isHidden()) + if (!m_isMapped || isHidden()) return; - for (auto const& wd : m_vDecosToRemove) { - for (auto it = m_dWindowDecorations.begin(); it != m_dWindowDecorations.end(); it++) { + for (auto const& wd : m_decosToRemove) { + for (auto it = m_windowDecorations.begin(); it != m_windowDecorations.end(); it++) { if (it->get() == wd) { g_pDecorationPositioner->uncacheDecoration(it->get()); - it = m_dWindowDecorations.erase(it); - if (it == m_dWindowDecorations.end()) + it = m_windowDecorations.erase(it); + if (it == m_windowDecorations.end()) break; } } } - g_pDecorationPositioner->onWindowUpdate(m_pSelf.lock()); + g_pDecorationPositioner->onWindowUpdate(m_self.lock()); - m_vDecosToRemove.clear(); + m_decosToRemove.clear(); // make a copy because updateWindow can remove decos. std::vector decos; // reserve to avoid reallocations - decos.reserve(m_dWindowDecorations.size()); + decos.reserve(m_windowDecorations.size()); - for (auto const& wd : m_dWindowDecorations) { + for (auto const& wd : m_windowDecorations) { decos.push_back(wd.get()); } for (auto const& wd : decos) { - if (std::find_if(m_dWindowDecorations.begin(), m_dWindowDecorations.end(), [wd](const auto& other) { return other.get() == wd; }) == m_dWindowDecorations.end()) + if (std::find_if(m_windowDecorations.begin(), m_windowDecorations.end(), [wd](const auto& other) { return other.get() == wd; }) == m_windowDecorations.end()) continue; - wd->updateWindow(m_pSelf.lock()); + wd->updateWindow(m_self.lock()); } } void CWindow::addWindowDeco(UP deco) { - m_dWindowDecorations.emplace_back(std::move(deco)); - g_pDecorationPositioner->forceRecalcFor(m_pSelf.lock()); + m_windowDecorations.emplace_back(std::move(deco)); + g_pDecorationPositioner->forceRecalcFor(m_self.lock()); updateWindowDecos(); - g_pLayoutManager->getCurrentLayout()->recalculateWindow(m_pSelf.lock()); + g_pLayoutManager->getCurrentLayout()->recalculateWindow(m_self.lock()); } void CWindow::removeWindowDeco(IHyprWindowDecoration* deco) { - m_vDecosToRemove.push_back(deco); - g_pDecorationPositioner->forceRecalcFor(m_pSelf.lock()); + m_decosToRemove.push_back(deco); + g_pDecorationPositioner->forceRecalcFor(m_self.lock()); updateWindowDecos(); - g_pLayoutManager->getCurrentLayout()->recalculateWindow(m_pSelf.lock()); + g_pLayoutManager->getCurrentLayout()->recalculateWindow(m_self.lock()); } void CWindow::uncacheWindowDecos() { - for (auto const& wd : m_dWindowDecorations) { + for (auto const& wd : m_windowDecorations) { g_pDecorationPositioner->uncacheDecoration(wd.get()); } } @@ -327,7 +327,7 @@ bool CWindow::checkInputOnDecos(const eInputType type, const Vector2D& mouseCoor if (type != INPUT_TYPE_DRAG_END && hasPopupAt(mouseCoords)) return false; - for (auto const& wd : m_dWindowDecorations) { + for (auto const& wd : m_windowDecorations) { if (!(wd->getDecorationFlags() & DECORATION_ALLOWS_MOUSE_INPUT)) continue; @@ -343,23 +343,23 @@ bool CWindow::checkInputOnDecos(const eInputType type, const Vector2D& mouseCoor pid_t CWindow::getPID() { pid_t PID = -1; - if (!m_bIsX11) { - if (!m_pXDGSurface || !m_pXDGSurface->owner /* happens at unmap */) + if (!m_isX11) { + if (!m_xdgSurface || !m_xdgSurface->owner /* happens at unmap */) return -1; - wl_client_get_credentials(m_pXDGSurface->owner->client(), &PID, nullptr, nullptr); + wl_client_get_credentials(m_xdgSurface->owner->client(), &PID, nullptr, nullptr); } else { - if (!m_pXWaylandSurface) + if (!m_xwaylandSurface) return -1; - PID = m_pXWaylandSurface->pid; + PID = m_xwaylandSurface->pid; } return PID; } IHyprWindowDecoration* CWindow::getDecorationByType(eDecorationType type) { - for (auto const& wd : m_dWindowDecorations) { + for (auto const& wd : m_windowDecorations) { if (wd->getDecorationType() == type) return wd.get(); } @@ -372,28 +372,28 @@ void CWindow::updateToplevel() { } void CWindow::updateSurfaceScaleTransformDetails(bool force) { - if (!m_bIsMapped || m_bHidden || g_pCompositor->m_unsafeState) + if (!m_isMapped || m_hidden || g_pCompositor->m_unsafeState) return; - const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(m_iLastSurfaceMonitorID); + const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(m_lastSurfaceMonitorID); - m_iLastSurfaceMonitorID = monitorID(); + m_lastSurfaceMonitorID = monitorID(); - const auto PNEWMONITOR = m_pMonitor.lock(); + const auto PNEWMONITOR = m_monitor.lock(); if (!PNEWMONITOR) return; if (PNEWMONITOR != PLASTMONITOR || force) { if (PLASTMONITOR && PLASTMONITOR->m_bEnabled && PNEWMONITOR != PLASTMONITOR) - m_pWLSurface->resource()->breadthfirst([PLASTMONITOR](SP s, const Vector2D& offset, void* d) { s->leave(PLASTMONITOR->self.lock()); }, nullptr); + m_wlSurface->resource()->breadthfirst([PLASTMONITOR](SP s, const Vector2D& offset, void* d) { s->leave(PLASTMONITOR->self.lock()); }, nullptr); - m_pWLSurface->resource()->breadthfirst([PNEWMONITOR](SP s, const Vector2D& offset, void* d) { s->enter(PNEWMONITOR->self.lock()); }, nullptr); + m_wlSurface->resource()->breadthfirst([PNEWMONITOR](SP s, const Vector2D& offset, void* d) { s->enter(PNEWMONITOR->self.lock()); }, nullptr); } - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); - m_pWLSurface->resource()->breadthfirst( + m_wlSurface->resource()->breadthfirst( [PMONITOR](SP s, const Vector2D& offset, void* d) { const auto PSURFACE = CWLSurface::fromResource(s); if (PSURFACE && PSURFACE->m_lastScaleFloat == PMONITOR->scale) @@ -407,18 +407,18 @@ void CWindow::updateSurfaceScaleTransformDetails(bool force) { } void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { - if (m_pWorkspace == pWorkspace) + if (m_workspace == pWorkspace) return; static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); - if (!m_szInitialWorkspaceToken.empty()) { - const auto TOKEN = g_pTokenManager->getToken(m_szInitialWorkspaceToken); + if (!m_initialWorkspaceToken.empty()) { + const auto TOKEN = g_pTokenManager->getToken(m_initialWorkspaceToken); if (TOKEN) { if (*PINITIALWSTRACKING == 2) { // persistent SInitialWorkspaceToken token = std::any_cast(TOKEN->m_data); - if (token.primaryOwner == m_pSelf) { + if (token.primaryOwner == m_self) { token.workspace = pWorkspace->getConfigName(); TOKEN->m_data = token; } @@ -428,16 +428,16 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { static auto PCLOSEONLASTSPECIAL = CConfigValue("misc:close_special_on_empty"); - const auto OLDWORKSPACE = m_pWorkspace; + const auto OLDWORKSPACE = m_workspace; if (OLDWORKSPACE->isVisible()) { - m_fMovingToWorkspaceAlpha->setValueAndWarp(1.F); - *m_fMovingToWorkspaceAlpha = 0.F; - m_fMovingToWorkspaceAlpha->setCallbackOnEnd([this](auto) { m_iMonitorMovedFrom = -1; }); - m_iMonitorMovedFrom = OLDWORKSPACE ? OLDWORKSPACE->monitorID() : -1; + m_movingToWorkspaceAlpha->setValueAndWarp(1.F); + *m_movingToWorkspaceAlpha = 0.F; + m_movingToWorkspaceAlpha->setCallbackOnEnd([this](auto) { m_monitorMovedFrom = -1; }); + m_monitorMovedFrom = OLDWORKSPACE ? OLDWORKSPACE->monitorID() : -1; } - m_pWorkspace = pWorkspace; + m_workspace = pWorkspace; setAnimationsToMove(); @@ -454,13 +454,13 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { if (valid(pWorkspace)) { g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_name)}); g_pEventManager->postEvent(SHyprIPCEvent{"movewindowv2", std::format("{:x},{},{}", (uintptr_t)this, pWorkspace->m_id, pWorkspace->m_name)}); - EMIT_HOOK_EVENT("moveWindow", (std::vector{m_pSelf.lock(), pWorkspace})); + EMIT_HOOK_EVENT("moveWindow", (std::vector{m_self.lock(), pWorkspace})); } - if (const auto SWALLOWED = m_pSwallowed.lock()) { - if (SWALLOWED->m_bCurrentlySwallowed) { + if (const auto SWALLOWED = m_swallowed.lock()) { + if (SWALLOWED->m_currentlySwallowed) { SWALLOWED->moveToWorkspace(pWorkspace); - SWALLOWED->m_pMonitor = m_pMonitor; + SWALLOWED->m_monitor = m_monitor; } } @@ -471,10 +471,10 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { } PHLWINDOW CWindow::x11TransientFor() { - if (!m_pXWaylandSurface || !m_pXWaylandSurface->parent) + if (!m_xwaylandSurface || !m_xwaylandSurface->parent) return nullptr; - auto s = m_pXWaylandSurface->parent; + auto s = m_xwaylandSurface->parent; std::vector> visited; while (s) { // break loops. Some X apps make them, and it seems like it's valid behavior?!?!?! @@ -486,11 +486,11 @@ PHLWINDOW CWindow::x11TransientFor() { s = s->parent; } - if (s == m_pXWaylandSurface) + if (s == m_xwaylandSurface) return nullptr; // dead-ass circle for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pXWaylandSurface != s) + if (w->m_xwaylandSurface != s) continue; return w; } @@ -502,93 +502,93 @@ void CWindow::onUnmap() { static auto PCLOSEONLASTSPECIAL = CConfigValue("misc:close_special_on_empty"); static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); - if (!m_szInitialWorkspaceToken.empty()) { - const auto TOKEN = g_pTokenManager->getToken(m_szInitialWorkspaceToken); + if (!m_initialWorkspaceToken.empty()) { + const auto TOKEN = g_pTokenManager->getToken(m_initialWorkspaceToken); if (TOKEN) { if (*PINITIALWSTRACKING == 2) { // persistent token, but the first window got removed so the token is gone SInitialWorkspaceToken token = std::any_cast(TOKEN->m_data); - if (token.primaryOwner == m_pSelf) + if (token.primaryOwner == m_self) g_pTokenManager->removeToken(TOKEN); } } } - m_iLastWorkspace = m_pWorkspace->m_id; + m_lastWorkspace = m_workspace->m_id; - std::erase_if(g_pCompositor->m_windowFocusHistory, [this](const auto& other) { return other.expired() || other == m_pSelf; }); + std::erase_if(g_pCompositor->m_windowFocusHistory, [this](const auto& other) { return other.expired() || other == m_self; }); - if (*PCLOSEONLASTSPECIAL && m_pWorkspace && m_pWorkspace->getWindows() == 0 && onSpecialWorkspace()) { - const auto PMONITOR = m_pMonitor.lock(); - if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace == m_pWorkspace) + if (*PCLOSEONLASTSPECIAL && m_workspace && m_workspace->getWindows() == 0 && onSpecialWorkspace()) { + const auto PMONITOR = m_monitor.lock(); + if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace == m_workspace) PMONITOR->setSpecialWorkspace(nullptr); } - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); - if (PMONITOR && PMONITOR->solitaryClient == m_pSelf) + if (PMONITOR && PMONITOR->solitaryClient == m_self) PMONITOR->solitaryClient.reset(); - if (m_pWorkspace) { - m_pWorkspace->updateWindows(); - m_pWorkspace->updateWindowData(); + if (m_workspace) { + m_workspace->updateWindows(); + m_workspace->updateWindowData(); } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); - m_pWorkspace.reset(); + m_workspace.reset(); - if (m_bIsX11) + if (m_isX11) return; - m_pSubsurfaceHead.reset(); - m_pPopupHead.reset(); + m_subsurfaceHead.reset(); + m_popupHead.reset(); } void CWindow::onMap() { // JIC, reset the callbacks. If any are set, we'll make sure they are cleared so we don't accidentally unset them. (In case a window got remapped) - m_vRealPosition->resetAllCallbacks(); - m_vRealSize->resetAllCallbacks(); - m_fBorderFadeAnimationProgress->resetAllCallbacks(); - m_fBorderAngleAnimationProgress->resetAllCallbacks(); - m_fActiveInactiveAlpha->resetAllCallbacks(); - m_fAlpha->resetAllCallbacks(); - m_cRealShadowColor->resetAllCallbacks(); - m_fDimPercent->resetAllCallbacks(); - m_fMovingToWorkspaceAlpha->resetAllCallbacks(); - m_fMovingFromWorkspaceAlpha->resetAllCallbacks(); + m_realPosition->resetAllCallbacks(); + m_realSize->resetAllCallbacks(); + m_borderFadeAnimationProgress->resetAllCallbacks(); + m_borderAngleAnimationProgress->resetAllCallbacks(); + m_activeInactiveAlpha->resetAllCallbacks(); + m_alpha->resetAllCallbacks(); + m_realShadowColor->resetAllCallbacks(); + m_dimPercent->resetAllCallbacks(); + m_movingToWorkspaceAlpha->resetAllCallbacks(); + m_movingFromWorkspaceAlpha->resetAllCallbacks(); - m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F); + m_movingFromWorkspaceAlpha->setValueAndWarp(1.F); - if (m_fBorderAngleAnimationProgress->enabled()) { - m_fBorderAngleAnimationProgress->setValueAndWarp(0.f); - m_fBorderAngleAnimationProgress->setCallbackOnEnd([&](WP p) { onBorderAngleAnimEnd(p); }, false); - *m_fBorderAngleAnimationProgress = 1.f; + if (m_borderAngleAnimationProgress->enabled()) { + m_borderAngleAnimationProgress->setValueAndWarp(0.f); + m_borderAngleAnimationProgress->setCallbackOnEnd([&](WP p) { onBorderAngleAnimEnd(p); }, false); + *m_borderAngleAnimationProgress = 1.f; } - m_vRealSize->setCallbackOnBegin( + m_realSize->setCallbackOnBegin( [this](auto) { - if (!m_bIsMapped || isX11OverrideRedirect()) + if (!m_isMapped || isX11OverrideRedirect()) return; sendWindowSize(); }, false); - m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F); + m_movingFromWorkspaceAlpha->setValueAndWarp(1.F); - g_pCompositor->m_windowFocusHistory.push_back(m_pSelf); + g_pCompositor->m_windowFocusHistory.push_back(m_self); - m_vReportedSize = m_vPendingReportedSize; - m_bAnimatingIn = true; + m_reportedSize = m_pendingReportedSize; + m_animatingIn = true; updateSurfaceScaleTransformDetails(true); - if (m_bIsX11) + if (m_isX11) return; - m_pSubsurfaceHead = CSubsurface::create(m_pSelf.lock()); - m_pPopupHead = CPopup::create(m_pSelf.lock()); + m_subsurfaceHead = CSubsurface::create(m_self.lock()); + m_popupHead = CPopup::create(m_self.lock()); } void CWindow::onBorderAngleAnimEnd(WP pav) { @@ -610,34 +610,34 @@ void CWindow::onBorderAngleAnimEnd(WP pav) { } void CWindow::setHidden(bool hidden) { - m_bHidden = hidden; + m_hidden = hidden; - if (hidden && g_pCompositor->m_lastWindow == m_pSelf) + if (hidden && g_pCompositor->m_lastWindow == m_self) g_pCompositor->m_lastWindow.reset(); setSuspended(hidden); } bool CWindow::isHidden() { - return m_bHidden; + return m_hidden; } void CWindow::applyDynamicRule(const SP& r) { - const eOverridePriority priority = r->execRule ? PRIORITY_SET_PROP : PRIORITY_WINDOW_RULE; + const eOverridePriority priority = r->m_execRule ? PRIORITY_SET_PROP : PRIORITY_WINDOW_RULE; - switch (r->ruleType) { + switch (r->m_ruleType) { case CWindowRule::RULE_TAG: { - CVarList vars{r->szRule, 0, 's', true}; + CVarList vars{r->m_rule, 0, 's', true}; if (vars.size() == 2 && vars[0] == "tag") m_tags.applyTag(vars[1], true); else - Debug::log(ERR, "Tag rule invalid: {}", r->szRule); + Debug::log(ERR, "Tag rule invalid: {}", r->m_rule); break; } case CWindowRule::RULE_OPACITY: { try { - CVarList vars(r->szRule, 0, ' '); + CVarList vars(r->m_rule, 0, ' '); int opacityIDX = 0; @@ -647,18 +647,18 @@ void CWindow::applyDynamicRule(const SP& r) { if (r == "override") { if (opacityIDX == 1) - m_sWindowData.alpha = CWindowOverridableVar(SAlphaValue{m_sWindowData.alpha.value().m_fAlpha, true}, priority); + m_windowData.alpha = CWindowOverridableVar(SAlphaValue{m_windowData.alpha.value().alpha, true}, priority); else if (opacityIDX == 2) - m_sWindowData.alphaInactive = CWindowOverridableVar(SAlphaValue{m_sWindowData.alphaInactive.value().m_fAlpha, true}, priority); + m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{m_windowData.alphaInactive.value().alpha, true}, priority); else if (opacityIDX == 3) - m_sWindowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{m_sWindowData.alphaFullscreen.value().m_fAlpha, true}, priority); + m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{m_windowData.alphaFullscreen.value().alpha, true}, priority); } else { if (opacityIDX == 0) { - m_sWindowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); } else if (opacityIDX == 1) { - m_sWindowData.alphaInactive = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); } else if (opacityIDX == 2) { - m_sWindowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); } else { throw std::runtime_error("more than 3 alpha values"); } @@ -668,15 +668,15 @@ void CWindow::applyDynamicRule(const SP& r) { } if (opacityIDX == 1) { - m_sWindowData.alphaInactive = m_sWindowData.alpha; - m_sWindowData.alphaFullscreen = m_sWindowData.alpha; + m_windowData.alphaInactive = m_windowData.alpha; + m_windowData.alphaFullscreen = m_windowData.alpha; } - } catch (std::exception& e) { Debug::log(ERR, "Opacity rule \"{}\" failed with: {}", r->szRule, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "Opacity rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } case CWindowRule::RULE_ANIMATION: { - auto STYLE = r->szRule.substr(r->szRule.find_first_of(' ') + 1); - m_sWindowData.animationStyle = CWindowOverridableVar(STYLE, priority); + auto STYLE = r->m_rule.substr(r->m_rule.find_first_of(' ') + 1); + m_windowData.animationStyle = CWindowOverridableVar(STYLE, priority); break; } case CWindowRule::RULE_BORDERCOLOR: { @@ -685,12 +685,12 @@ void CWindow::applyDynamicRule(const SP& r) { CGradientValueData activeBorderGradient = {}; CGradientValueData inactiveBorderGradient = {}; bool active = true; - CVarList colorsAndAngles = CVarList(trim(r->szRule.substr(r->szRule.find_first_of(' ') + 1)), 0, 's', true); + CVarList colorsAndAngles = CVarList(trim(r->m_rule.substr(r->m_rule.find_first_of(' ') + 1)), 0, 's', true); // Basic form has only two colors, everything else can be parsed as a gradient if (colorsAndAngles.size() == 2 && !colorsAndAngles[1].contains("deg")) { - m_sWindowData.activeBorderColor = CWindowOverridableVar(CGradientValueData(CHyprColor(configStringToInt(colorsAndAngles[0]).value_or(0))), priority); - m_sWindowData.inactiveBorderColor = CWindowOverridableVar(CGradientValueData(CHyprColor(configStringToInt(colorsAndAngles[1]).value_or(0))), priority); + m_windowData.activeBorderColor = CWindowOverridableVar(CGradientValueData(CHyprColor(configStringToInt(colorsAndAngles[0]).value_or(0))), priority); + m_windowData.inactiveBorderColor = CWindowOverridableVar(CGradientValueData(CHyprColor(configStringToInt(colorsAndAngles[1]).value_or(0))), priority); return; } @@ -711,91 +711,91 @@ void CWindow::applyDynamicRule(const SP& r) { // Includes sanity checks for the number of colors in each gradient if (activeBorderGradient.m_colors.size() > 10 || inactiveBorderGradient.m_colors.size() > 10) - Debug::log(WARN, "Bordercolor rule \"{}\" has more than 10 colors in one gradient, ignoring", r->szRule); + Debug::log(WARN, "Bordercolor rule \"{}\" has more than 10 colors in one gradient, ignoring", r->m_rule); else if (activeBorderGradient.m_colors.empty()) - Debug::log(WARN, "Bordercolor rule \"{}\" has no colors, ignoring", r->szRule); + Debug::log(WARN, "Bordercolor rule \"{}\" has no colors, ignoring", r->m_rule); else if (inactiveBorderGradient.m_colors.empty()) - m_sWindowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); + m_windowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); else { - m_sWindowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); - m_sWindowData.inactiveBorderColor = CWindowOverridableVar(inactiveBorderGradient, priority); + m_windowData.activeBorderColor = CWindowOverridableVar(activeBorderGradient, priority); + m_windowData.inactiveBorderColor = CWindowOverridableVar(inactiveBorderGradient, priority); } - } catch (std::exception& e) { Debug::log(ERR, "BorderColor rule \"{}\" failed with: {}", r->szRule, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "BorderColor rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } case CWindowRule::RULE_IDLEINHIBIT: { - auto IDLERULE = r->szRule.substr(r->szRule.find_first_of(' ') + 1); + auto IDLERULE = r->m_rule.substr(r->m_rule.find_first_of(' ') + 1); if (IDLERULE == "none") - m_eIdleInhibitMode = IDLEINHIBIT_NONE; + m_idleInhibitMode = IDLEINHIBIT_NONE; else if (IDLERULE == "always") - m_eIdleInhibitMode = IDLEINHIBIT_ALWAYS; + m_idleInhibitMode = IDLEINHIBIT_ALWAYS; else if (IDLERULE == "focus") - m_eIdleInhibitMode = IDLEINHIBIT_FOCUS; + m_idleInhibitMode = IDLEINHIBIT_FOCUS; else if (IDLERULE == "fullscreen") - m_eIdleInhibitMode = IDLEINHIBIT_FULLSCREEN; + m_idleInhibitMode = IDLEINHIBIT_FULLSCREEN; else Debug::log(ERR, "Rule idleinhibit: unknown mode {}", IDLERULE); break; } case CWindowRule::RULE_MAXSIZE: { try { - if (!m_bIsFloating) + if (!m_isFloating) return; - const auto VEC = configStringToVector2D(r->szRule.substr(8)); + const auto VEC = configStringToVector2D(r->m_rule.substr(8)); if (VEC.x < 1 || VEC.y < 1) { Debug::log(ERR, "Invalid size for maxsize"); return; } - m_sWindowData.maxSize = CWindowOverridableVar(VEC, priority); - clampWindowSize(std::nullopt, m_sWindowData.maxSize.value()); + m_windowData.maxSize = CWindowOverridableVar(VEC, priority); + clampWindowSize(std::nullopt, m_windowData.maxSize.value()); - } catch (std::exception& e) { Debug::log(ERR, "maxsize rule \"{}\" failed with: {}", r->szRule, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "maxsize rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } case CWindowRule::RULE_MINSIZE: { try { - if (!m_bIsFloating) + if (!m_isFloating) return; - const auto VEC = configStringToVector2D(r->szRule.substr(8)); + const auto VEC = configStringToVector2D(r->m_rule.substr(8)); if (VEC.x < 1 || VEC.y < 1) { Debug::log(ERR, "Invalid size for minsize"); return; } - m_sWindowData.minSize = CWindowOverridableVar(VEC, priority); - clampWindowSize(m_sWindowData.minSize.value(), std::nullopt); + m_windowData.minSize = CWindowOverridableVar(VEC, priority); + clampWindowSize(m_windowData.minSize.value(), std::nullopt); - if (m_sGroupData.pNextWindow.expired()) + if (m_groupData.pNextWindow.expired()) setHidden(false); - } catch (std::exception& e) { Debug::log(ERR, "minsize rule \"{}\" failed with: {}", r->szRule, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "minsize rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } case CWindowRule::RULE_RENDERUNFOCUSED: { - m_sWindowData.renderUnfocused = CWindowOverridableVar(true, priority); - g_pHyprRenderer->addWindowToRenderUnfocused(m_pSelf.lock()); + m_windowData.renderUnfocused = CWindowOverridableVar(true, priority); + g_pHyprRenderer->addWindowToRenderUnfocused(m_self.lock()); break; } case CWindowRule::RULE_PROP: { - const CVarList VARS(r->szRule, 0, ' '); + const CVarList VARS(r->m_rule, 0, ' '); if (auto search = NWindowProperties::intWindowProperties.find(VARS[1]); search != NWindowProperties::intWindowProperties.end()) { try { - *(search->second(m_pSelf.lock())) = CWindowOverridableVar(Hyprlang::INT(std::stoi(VARS[2])), priority); - } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->szRule, e.what()); } + *(search->second(m_self.lock())) = CWindowOverridableVar(Hyprlang::INT(std::stoi(VARS[2])), priority); + } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } } else if (auto search = NWindowProperties::floatWindowProperties.find(VARS[1]); search != NWindowProperties::floatWindowProperties.end()) { try { - *(search->second(m_pSelf.lock())) = CWindowOverridableVar(std::stof(VARS[2]), priority); - } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->szRule, e.what()); } + *(search->second(m_self.lock())) = CWindowOverridableVar(std::stof(VARS[2]), priority); + } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } } else if (auto search = NWindowProperties::boolWindowProperties.find(VARS[1]); search != NWindowProperties::boolWindowProperties.end()) { try { - *(search->second(m_pSelf.lock())) = CWindowOverridableVar(VARS[2].empty() ? true : (bool)std::stoi(VARS[2]), priority); - } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->szRule, e.what()); } + *(search->second(m_self.lock())) = CWindowOverridableVar(VARS[2].empty() ? true : (bool)std::stoi(VARS[2]), priority); + } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } } break; } case CWindowRule::RULE_PERSISTENTSIZE: { - m_sWindowData.persistentSize = CWindowOverridableVar(true, PRIORITY_WINDOW_RULE); + m_windowData.persistentSize = CWindowOverridableVar(true, PRIORITY_WINDOW_RULE); break; } default: break; @@ -803,31 +803,31 @@ void CWindow::applyDynamicRule(const SP& r) { } void CWindow::updateDynamicRules() { - m_sWindowData.alpha.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.alphaInactive.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.alphaFullscreen.unset(PRIORITY_WINDOW_RULE); + m_windowData.alpha.unset(PRIORITY_WINDOW_RULE); + m_windowData.alphaInactive.unset(PRIORITY_WINDOW_RULE); + m_windowData.alphaFullscreen.unset(PRIORITY_WINDOW_RULE); unsetWindowData(PRIORITY_WINDOW_RULE); - m_sWindowData.animationStyle.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.maxSize.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.minSize.unset(PRIORITY_WINDOW_RULE); + m_windowData.animationStyle.unset(PRIORITY_WINDOW_RULE); + m_windowData.maxSize.unset(PRIORITY_WINDOW_RULE); + m_windowData.minSize.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.activeBorderColor.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.inactiveBorderColor.unset(PRIORITY_WINDOW_RULE); + m_windowData.activeBorderColor.unset(PRIORITY_WINDOW_RULE); + m_windowData.inactiveBorderColor.unset(PRIORITY_WINDOW_RULE); - m_sWindowData.renderUnfocused.unset(PRIORITY_WINDOW_RULE); + m_windowData.renderUnfocused.unset(PRIORITY_WINDOW_RULE); - m_eIdleInhibitMode = IDLEINHIBIT_NONE; + m_idleInhibitMode = IDLEINHIBIT_NONE; m_tags.removeDynamicTags(); - m_vMatchedRules = g_pConfigManager->getMatchingRules(m_pSelf.lock()); - for (const auto& r : m_vMatchedRules) { + m_matchedRules = g_pConfigManager->getMatchingRules(m_self.lock()); + for (const auto& r : m_matchedRules) { applyDynamicRule(r); } - EMIT_HOOK_EVENT("windowUpdateRules", m_pSelf.lock()); + EMIT_HOOK_EVENT("windowUpdateRules", m_self.lock()); g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); } @@ -842,10 +842,10 @@ bool CWindow::isInCurvedCorner(double x, double y) { return false; // (x0, y0), (x0, y1), ... are the center point of rounding at each corner - double x0 = m_vRealPosition->value().x + ROUNDING; - double y0 = m_vRealPosition->value().y + ROUNDING; - double x1 = m_vRealPosition->value().x + m_vRealSize->value().x - ROUNDING; - double y1 = m_vRealPosition->value().y + m_vRealSize->value().y - ROUNDING; + double x0 = m_realPosition->value().x + ROUNDING; + double y0 = m_realPosition->value().y + ROUNDING; + double x1 = m_realPosition->value().x + m_realSize->value().x - ROUNDING; + double y1 = m_realPosition->value().y + m_realSize->value().y - ROUNDING; if (x < x0 && y < y0) { return std::pow(x0 - x, ROUNDINGPOWER) + std::pow(y0 - y, ROUNDINGPOWER) > std::pow((double)ROUNDING, ROUNDINGPOWER); @@ -865,39 +865,39 @@ bool CWindow::isInCurvedCorner(double x, double y) { // checks if the wayland window has a popup at pos bool CWindow::hasPopupAt(const Vector2D& pos) { - if (m_bIsX11) + if (m_isX11) return false; - auto popup = m_pPopupHead->at(pos); + auto popup = m_popupHead->at(pos); return popup && popup->m_wlSurface->resource(); } void CWindow::applyGroupRules() { - if ((m_eGroupRules & GROUP_SET && m_bFirstMap) || m_eGroupRules & GROUP_SET_ALWAYS) + if ((m_groupRules & GROUP_SET && m_firstMap) || m_groupRules & GROUP_SET_ALWAYS) createGroup(); - if (m_sGroupData.pNextWindow.lock() && ((m_eGroupRules & GROUP_LOCK && m_bFirstMap) || m_eGroupRules & GROUP_LOCK_ALWAYS)) - getGroupHead()->m_sGroupData.locked = true; + if (m_groupData.pNextWindow.lock() && ((m_groupRules & GROUP_LOCK && m_firstMap) || m_groupRules & GROUP_LOCK_ALWAYS)) + getGroupHead()->m_groupData.locked = true; } void CWindow::createGroup() { - if (m_sGroupData.deny) { - Debug::log(LOG, "createGroup: window:{:x},title:{} is denied as a group, ignored", (uintptr_t)this, this->m_szTitle); + if (m_groupData.deny) { + Debug::log(LOG, "createGroup: window:{:x},title:{} is denied as a group, ignored", (uintptr_t)this, this->m_title); return; } - if (m_sGroupData.pNextWindow.expired()) { - m_sGroupData.pNextWindow = m_pSelf; - m_sGroupData.head = true; - m_sGroupData.locked = false; - m_sGroupData.deny = false; + if (m_groupData.pNextWindow.expired()) { + m_groupData.pNextWindow = m_self; + m_groupData.head = true; + m_groupData.locked = false; + m_groupData.deny = false; - addWindowDeco(makeUnique(m_pSelf.lock())); + addWindowDeco(makeUnique(m_self.lock())); - if (m_pWorkspace) { - m_pWorkspace->updateWindows(); - m_pWorkspace->updateWindowData(); + if (m_workspace) { + m_workspace->updateWindows(); + m_workspace->updateWindowData(); } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); @@ -907,17 +907,17 @@ void CWindow::createGroup() { } void CWindow::destroyGroup() { - if (m_sGroupData.pNextWindow == m_pSelf) { - if (m_eGroupRules & GROUP_SET_ALWAYS) { - Debug::log(LOG, "destoryGroup: window:{:x},title:{} has rule [group set always], ignored", (uintptr_t)this, this->m_szTitle); + if (m_groupData.pNextWindow == m_self) { + if (m_groupRules & GROUP_SET_ALWAYS) { + Debug::log(LOG, "destoryGroup: window:{:x},title:{} has rule [group set always], ignored", (uintptr_t)this, this->m_title); return; } - m_sGroupData.pNextWindow.reset(); - m_sGroupData.head = false; + m_groupData.pNextWindow.reset(); + m_groupData.head = false; updateWindowDecos(); - if (m_pWorkspace) { - m_pWorkspace->updateWindows(); - m_pWorkspace->updateWindowData(); + if (m_workspace) { + m_workspace->updateWindows(); + m_workspace->updateWindowData(); } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); @@ -927,12 +927,12 @@ void CWindow::destroyGroup() { } std::string addresses; - PHLWINDOW curr = m_pSelf.lock(); + PHLWINDOW curr = m_self.lock(); std::vector members; do { const auto PLASTWIN = curr; - curr = curr->m_sGroupData.pNextWindow.lock(); - PLASTWIN->m_sGroupData.pNextWindow.reset(); + curr = curr->m_groupData.pNextWindow.lock(); + PLASTWIN->m_groupData.pNextWindow.reset(); curr->setHidden(false); members.push_back(curr); @@ -940,9 +940,9 @@ void CWindow::destroyGroup() { } while (curr.get() != this); for (auto const& w : members) { - if (w->m_sGroupData.head) + if (w->m_groupData.head) g_pLayoutManager->getCurrentLayout()->onWindowRemoved(curr); - w->m_sGroupData.head = false; + w->m_groupData.head = false; } const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked; @@ -953,9 +953,9 @@ void CWindow::destroyGroup() { } g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; - if (m_pWorkspace) { - m_pWorkspace->updateWindows(); - m_pWorkspace->updateWindowData(); + if (m_workspace) { + m_workspace->updateWindows(); + m_workspace->updateWindowData(); } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); @@ -966,31 +966,31 @@ void CWindow::destroyGroup() { } PHLWINDOW CWindow::getGroupHead() { - PHLWINDOW curr = m_pSelf.lock(); - while (!curr->m_sGroupData.head) - curr = curr->m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_self.lock(); + while (!curr->m_groupData.head) + curr = curr->m_groupData.pNextWindow.lock(); return curr; } PHLWINDOW CWindow::getGroupTail() { - PHLWINDOW curr = m_pSelf.lock(); - while (!curr->m_sGroupData.pNextWindow->m_sGroupData.head) - curr = curr->m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_self.lock(); + while (!curr->m_groupData.pNextWindow->m_groupData.head) + curr = curr->m_groupData.pNextWindow.lock(); return curr; } PHLWINDOW CWindow::getGroupCurrent() { - PHLWINDOW curr = m_pSelf.lock(); + PHLWINDOW curr = m_self.lock(); while (curr->isHidden()) - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); return curr; } int CWindow::getGroupSize() { int size = 1; - PHLWINDOW curr = m_pSelf.lock(); - while (curr->m_sGroupData.pNextWindow != m_pSelf) { - curr = curr->m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_self.lock(); + while (curr->m_groupData.pNextWindow != m_self) { + curr = curr->m_groupData.pNextWindow.lock(); size++; } return size; @@ -998,15 +998,15 @@ int CWindow::getGroupSize() { bool CWindow::canBeGroupedInto(PHLWINDOW pWindow) { static auto ALLOWGROUPMERGE = CConfigValue("group:merge_groups_on_drag"); - bool isGroup = m_sGroupData.pNextWindow; + bool isGroup = m_groupData.pNextWindow; bool disallowDragIntoGroup = g_pInputManager->m_bWasDraggingWindow && isGroup && !bool(*ALLOWGROUPMERGE); - return !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged - && ((m_eGroupRules & GROUP_INVADE && m_bFirstMap) // window ignore local group locks, or - || (!pWindow->getGroupHead()->m_sGroupData.locked // target unlocked - && !(m_sGroupData.pNextWindow.lock() && getGroupHead()->m_sGroupData.locked))) // source unlocked or isn't group - && !m_sGroupData.deny // source is not denied entry - && !(m_eGroupRules & GROUP_BARRED && m_bFirstMap) // group rule doesn't prevent adding window - && !disallowDragIntoGroup; // config allows groups to be merged + return !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged + && ((m_groupRules & GROUP_INVADE && m_firstMap) // window ignore local group locks, or + || (!pWindow->getGroupHead()->m_groupData.locked // target unlocked + && !(m_groupData.pNextWindow.lock() && getGroupHead()->m_groupData.locked))) // source unlocked or isn't group + && !m_groupData.deny // source is not denied entry + && !(m_groupRules & GROUP_BARRED && m_firstMap) // group rule doesn't prevent adding window + && !disallowDragIntoGroup; // config allows groups to be merged } PHLWINDOW CWindow::getGroupWindowByIndex(int index) { @@ -1014,21 +1014,21 @@ PHLWINDOW CWindow::getGroupWindowByIndex(int index) { index = ((index % SIZE) + SIZE) % SIZE; PHLWINDOW curr = getGroupHead(); while (index > 0) { - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); index--; } return curr; } void CWindow::setGroupCurrent(PHLWINDOW pWindow) { - PHLWINDOW curr = m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_groupData.pNextWindow.lock(); bool isMember = false; while (curr.get() != this) { if (curr == pWindow) { isMember = true; break; } - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); } if (!isMember && pWindow.get() != this) @@ -1036,25 +1036,25 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto PCURRENT = getGroupCurrent(); const bool FULLSCREEN = PCURRENT->isFullscreen(); - const auto WORKSPACE = PCURRENT->m_pWorkspace; - const auto MODE = PCURRENT->m_sFullscreenState.internal; + const auto WORKSPACE = PCURRENT->m_workspace; + const auto MODE = PCURRENT->m_fullscreenState.internal; const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_lastWindow.lock(); if (FULLSCREEN) g_pCompositor->setWindowFullscreenInternal(PCURRENT, FSMODE_NONE); - const auto PWINDOWSIZE = PCURRENT->m_vRealSize->goal(); - const auto PWINDOWPOS = PCURRENT->m_vRealPosition->goal(); + const auto PWINDOWSIZE = PCURRENT->m_realSize->goal(); + const auto PWINDOWPOS = PCURRENT->m_realPosition->goal(); PCURRENT->setHidden(true); pWindow->setHidden(false); // can remove m_pLastWindow g_pLayoutManager->getCurrentLayout()->replaceWindowDataWith(PCURRENT, pWindow); - if (PCURRENT->m_bIsFloating) { - pWindow->m_vRealPosition->setValueAndWarp(PWINDOWPOS); - pWindow->m_vRealSize->setValueAndWarp(PWINDOWSIZE); + if (PCURRENT->m_isFloating) { + pWindow->m_realPosition->setValueAndWarp(PWINDOWPOS); + pWindow->m_realSize->setValueAndWarp(PWINDOWSIZE); } g_pCompositor->updateAllWindowsAnimatedDecorationValues(); @@ -1071,126 +1071,126 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { } void CWindow::insertWindowToGroup(PHLWINDOW pWindow) { - const auto BEGINAT = m_pSelf.lock(); - const auto ENDAT = m_sGroupData.pNextWindow.lock(); + const auto BEGINAT = m_self.lock(); + const auto ENDAT = m_groupData.pNextWindow.lock(); if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) pWindow->addWindowDeco(makeUnique(pWindow)); - if (!pWindow->m_sGroupData.pNextWindow.lock()) { - BEGINAT->m_sGroupData.pNextWindow = pWindow; - pWindow->m_sGroupData.pNextWindow = ENDAT; - pWindow->m_sGroupData.head = false; + if (!pWindow->m_groupData.pNextWindow.lock()) { + BEGINAT->m_groupData.pNextWindow = pWindow; + pWindow->m_groupData.pNextWindow = ENDAT; + pWindow->m_groupData.head = false; return; } const auto SHEAD = pWindow->getGroupHead(); const auto STAIL = pWindow->getGroupTail(); - SHEAD->m_sGroupData.head = false; - BEGINAT->m_sGroupData.pNextWindow = SHEAD; - STAIL->m_sGroupData.pNextWindow = ENDAT; + SHEAD->m_groupData.head = false; + BEGINAT->m_groupData.pNextWindow = SHEAD; + STAIL->m_groupData.pNextWindow = ENDAT; } PHLWINDOW CWindow::getGroupPrevious() { - PHLWINDOW curr = m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_groupData.pNextWindow.lock(); - while (curr != m_pSelf && curr->m_sGroupData.pNextWindow != m_pSelf) - curr = curr->m_sGroupData.pNextWindow.lock(); + while (curr != m_self && curr->m_groupData.pNextWindow != m_self) + curr = curr->m_groupData.pNextWindow.lock(); return curr; } void CWindow::switchWithWindowInGroup(PHLWINDOW pWindow) { - if (!m_sGroupData.pNextWindow.lock() || !pWindow->m_sGroupData.pNextWindow.lock()) + if (!m_groupData.pNextWindow.lock() || !pWindow->m_groupData.pNextWindow.lock()) return; - if (m_sGroupData.pNextWindow.lock() == pWindow) { // A -> this -> pWindow -> B >> A -> pWindow -> this -> B - getGroupPrevious()->m_sGroupData.pNextWindow = pWindow; - m_sGroupData.pNextWindow = pWindow->m_sGroupData.pNextWindow; - pWindow->m_sGroupData.pNextWindow = m_pSelf; + if (m_groupData.pNextWindow.lock() == pWindow) { // A -> this -> pWindow -> B >> A -> pWindow -> this -> B + getGroupPrevious()->m_groupData.pNextWindow = pWindow; + m_groupData.pNextWindow = pWindow->m_groupData.pNextWindow; + pWindow->m_groupData.pNextWindow = m_self; - } else if (pWindow->m_sGroupData.pNextWindow == m_pSelf) { // A -> pWindow -> this -> B >> A -> this -> pWindow -> B - pWindow->getGroupPrevious()->m_sGroupData.pNextWindow = m_pSelf; - pWindow->m_sGroupData.pNextWindow = m_sGroupData.pNextWindow; - m_sGroupData.pNextWindow = pWindow; + } else if (pWindow->m_groupData.pNextWindow == m_self) { // A -> pWindow -> this -> B >> A -> this -> pWindow -> B + pWindow->getGroupPrevious()->m_groupData.pNextWindow = m_self; + pWindow->m_groupData.pNextWindow = m_groupData.pNextWindow; + m_groupData.pNextWindow = pWindow; } else { // A -> this -> B | C -> pWindow -> D >> A -> pWindow -> B | C -> this -> D - std::swap(m_sGroupData.pNextWindow, pWindow->m_sGroupData.pNextWindow); - std::swap(getGroupPrevious()->m_sGroupData.pNextWindow, pWindow->getGroupPrevious()->m_sGroupData.pNextWindow); + std::swap(m_groupData.pNextWindow, pWindow->m_groupData.pNextWindow); + std::swap(getGroupPrevious()->m_groupData.pNextWindow, pWindow->getGroupPrevious()->m_groupData.pNextWindow); } - std::swap(m_sGroupData.head, pWindow->m_sGroupData.head); - std::swap(m_sGroupData.locked, pWindow->m_sGroupData.locked); + std::swap(m_groupData.head, pWindow->m_groupData.head); + std::swap(m_groupData.locked, pWindow->m_groupData.locked); } void CWindow::updateGroupOutputs() { - if (m_sGroupData.pNextWindow.expired()) + if (m_groupData.pNextWindow.expired()) return; - PHLWINDOW curr = m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = m_groupData.pNextWindow.lock(); - const auto WS = m_pWorkspace; + const auto WS = m_workspace; while (curr.get() != this) { - curr->m_pMonitor = m_pMonitor; + curr->m_monitor = m_monitor; curr->moveToWorkspace(WS); - *curr->m_vRealPosition = m_vRealPosition->goal(); - *curr->m_vRealSize = m_vRealSize->goal(); + *curr->m_realPosition = m_realPosition->goal(); + *curr->m_realSize = m_realSize->goal(); - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); } } Vector2D CWindow::middle() { - return m_vRealPosition->goal() + m_vRealSize->goal() / 2.f; + return m_realPosition->goal() + m_realSize->goal() / 2.f; } bool CWindow::opaque() { - if (m_fAlpha->value() != 1.f || m_fActiveInactiveAlpha->value() != 1.f) + if (m_alpha->value() != 1.f || m_activeInactiveAlpha->value() != 1.f) return false; - const auto PWORKSPACE = m_pWorkspace; + const auto PWORKSPACE = m_workspace; - if (m_pWLSurface->small() && !m_pWLSurface->m_fillIgnoreSmall) + if (m_wlSurface->small() && !m_wlSurface->m_fillIgnoreSmall) return false; if (PWORKSPACE->m_alpha->value() != 1.f) return false; - if (m_bIsX11 && m_pXWaylandSurface && m_pXWaylandSurface->surface && m_pXWaylandSurface->surface->current.texture) - return m_pXWaylandSurface->surface->current.texture->m_bOpaque; + if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->surface && m_xwaylandSurface->surface->current.texture) + return m_xwaylandSurface->surface->current.texture->m_bOpaque; - if (!m_pWLSurface->resource() || !m_pWLSurface->resource()->current.texture) + if (!m_wlSurface->resource() || !m_wlSurface->resource()->current.texture) return false; // TODO: this is wrong - const auto EXTENTS = m_pXDGSurface->surface->current.opaque.getExtents(); - if (EXTENTS.w >= m_pXDGSurface->surface->current.bufferSize.x && EXTENTS.h >= m_pXDGSurface->surface->current.bufferSize.y) + const auto EXTENTS = m_xdgSurface->surface->current.opaque.getExtents(); + if (EXTENTS.w >= m_xdgSurface->surface->current.bufferSize.x && EXTENTS.h >= m_xdgSurface->surface->current.bufferSize.y) return true; - return m_pWLSurface->resource()->current.texture->m_bOpaque; + return m_wlSurface->resource()->current.texture->m_bOpaque; } float CWindow::rounding() { static auto PROUNDING = CConfigValue("decoration:rounding"); static auto PROUNDINGPOWER = CConfigValue("decoration:rounding_power"); - float roundingPower = m_sWindowData.roundingPower.valueOr(*PROUNDINGPOWER); - float rounding = m_sWindowData.rounding.valueOr(*PROUNDING) * (roundingPower / 2.0); /* Make perceived roundness consistent. */ + float roundingPower = m_windowData.roundingPower.valueOr(*PROUNDINGPOWER); + float rounding = m_windowData.rounding.valueOr(*PROUNDING) * (roundingPower / 2.0); /* Make perceived roundness consistent. */ - return m_sWindowData.noRounding.valueOrDefault() ? 0 : rounding; + return m_windowData.noRounding.valueOrDefault() ? 0 : rounding; } float CWindow::roundingPower() { static auto PROUNDINGPOWER = CConfigValue("decoration:rounding_power"); - return m_sWindowData.roundingPower.valueOr(*PROUNDINGPOWER); + return m_windowData.roundingPower.valueOr(*PROUNDINGPOWER); } void CWindow::updateWindowData() { - const auto PWORKSPACE = m_pWorkspace; + const auto PWORKSPACE = m_workspace; const auto WORKSPACERULE = PWORKSPACE ? g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE) : SWorkspaceRule{}; updateWindowData(WORKSPACERULE); } @@ -1199,76 +1199,76 @@ void CWindow::updateWindowData(const SWorkspaceRule& workspaceRule) { static auto PNOBORDERONFLOATING = CConfigValue("general:no_border_on_floating"); if (*PNOBORDERONFLOATING) - m_sWindowData.noBorder = CWindowOverridableVar(m_bIsFloating, PRIORITY_LAYOUT); + m_windowData.noBorder = CWindowOverridableVar(m_isFloating, PRIORITY_LAYOUT); else - m_sWindowData.noBorder.unset(PRIORITY_LAYOUT); + m_windowData.noBorder.unset(PRIORITY_LAYOUT); - m_sWindowData.borderSize.matchOptional(workspaceRule.borderSize, PRIORITY_WORKSPACE_RULE); - m_sWindowData.decorate.matchOptional(workspaceRule.decorate, PRIORITY_WORKSPACE_RULE); - m_sWindowData.noBorder.matchOptional(workspaceRule.noBorder, PRIORITY_WORKSPACE_RULE); - m_sWindowData.noRounding.matchOptional(workspaceRule.noRounding, PRIORITY_WORKSPACE_RULE); - m_sWindowData.noShadow.matchOptional(workspaceRule.noShadow, PRIORITY_WORKSPACE_RULE); + m_windowData.borderSize.matchOptional(workspaceRule.borderSize, PRIORITY_WORKSPACE_RULE); + m_windowData.decorate.matchOptional(workspaceRule.decorate, PRIORITY_WORKSPACE_RULE); + m_windowData.noBorder.matchOptional(workspaceRule.noBorder, PRIORITY_WORKSPACE_RULE); + m_windowData.noRounding.matchOptional(workspaceRule.noRounding, PRIORITY_WORKSPACE_RULE); + m_windowData.noShadow.matchOptional(workspaceRule.noShadow, PRIORITY_WORKSPACE_RULE); } int CWindow::getRealBorderSize() { - if (m_sWindowData.noBorder.valueOrDefault() || (m_pWorkspace && isEffectiveInternalFSMode(FSMODE_FULLSCREEN))) + if (m_windowData.noBorder.valueOrDefault() || (m_workspace && isEffectiveInternalFSMode(FSMODE_FULLSCREEN))) return 0; static auto PBORDERSIZE = CConfigValue("general:border_size"); - return m_sWindowData.borderSize.valueOr(*PBORDERSIZE); + return m_windowData.borderSize.valueOr(*PBORDERSIZE); } float CWindow::getScrollMouse() { static auto PINPUTSCROLLFACTOR = CConfigValue("input:scroll_factor"); - return m_sWindowData.scrollMouse.valueOr(*PINPUTSCROLLFACTOR); + return m_windowData.scrollMouse.valueOr(*PINPUTSCROLLFACTOR); } float CWindow::getScrollTouchpad() { static auto PTOUCHPADSCROLLFACTOR = CConfigValue("input:touchpad:scroll_factor"); - return m_sWindowData.scrollTouchpad.valueOr(*PTOUCHPADSCROLLFACTOR); + return m_windowData.scrollTouchpad.valueOr(*PTOUCHPADSCROLLFACTOR); } bool CWindow::canBeTorn() { static auto PTEARING = CConfigValue("general:allow_tearing"); - return m_sWindowData.tearing.valueOr(m_bTearingHint) && *PTEARING; + return m_windowData.tearing.valueOr(m_tearingHint) && *PTEARING; } void CWindow::setSuspended(bool suspend) { - if (suspend == m_bSuspended) + if (suspend == m_suspended) return; - if (m_bIsX11 || !m_pXDGSurface || !m_pXDGSurface->toplevel) + if (m_isX11 || !m_xdgSurface || !m_xdgSurface->toplevel) return; - m_pXDGSurface->toplevel->setSuspeneded(suspend); - m_bSuspended = suspend; + m_xdgSurface->toplevel->setSuspeneded(suspend); + m_suspended = suspend; } bool CWindow::visibleOnMonitor(PHLMONITOR pMonitor) { - CBox wbox = {m_vRealPosition->value(), m_vRealSize->value()}; + CBox wbox = {m_realPosition->value(), m_realSize->value()}; return !wbox.intersection({pMonitor->vecPosition, pMonitor->vecSize}).empty(); } void CWindow::setAnimationsToMove() { - m_vRealPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsMove")); - m_bAnimatingIn = false; + m_realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsMove")); + m_animatingIn = false; } void CWindow::onWorkspaceAnimUpdate() { // clip box for animated offsets - if (!m_bIsFloating || m_bPinned || isFullscreen() || m_bDraggingTiled) { - m_vFloatingOffset = Vector2D(0, 0); + if (!m_isFloating || m_pinned || isFullscreen() || m_draggingTiled) { + m_floatingOffset = Vector2D(0, 0); return; } Vector2D offset; - const auto PWORKSPACE = m_pWorkspace; + const auto PWORKSPACE = m_workspace; if (!PWORKSPACE) return; - const auto PWSMON = m_pMonitor.lock(); + const auto PWSMON = m_monitor.lock(); if (!PWSMON) return; @@ -1291,62 +1291,62 @@ void CWindow::onWorkspaceAnimUpdate() { offset.y += (WINBB.y + WINBB.height - PWSMON->vecPosition.y - PWSMON->vecSize.y) * PROGRESS; } - m_vFloatingOffset = offset; + m_floatingOffset = offset; } void CWindow::onFocusAnimUpdate() { // borderangle once - if (m_fBorderAngleAnimationProgress->enabled() && !m_fBorderAngleAnimationProgress->isBeingAnimated()) { - m_fBorderAngleAnimationProgress->setValueAndWarp(0.f); - *m_fBorderAngleAnimationProgress = 1.f; + if (m_borderAngleAnimationProgress->enabled() && !m_borderAngleAnimationProgress->isBeingAnimated()) { + m_borderAngleAnimationProgress->setValueAndWarp(0.f); + *m_borderAngleAnimationProgress = 1.f; } } int CWindow::popupsCount() { - if (m_bIsX11) + if (m_isX11) return 0; int no = -1; - m_pPopupHead->breadthfirst([](WP p, void* d) { *((int*)d) += 1; }, &no); + m_popupHead->breadthfirst([](WP p, void* d) { *((int*)d) += 1; }, &no); return no; } int CWindow::surfacesCount() { - if (m_bIsX11) + if (m_isX11) return 1; int no = 0; - m_pWLSurface->resource()->breadthfirst([](SP r, const Vector2D& offset, void* d) { *((int*)d) += 1; }, &no); + m_wlSurface->resource()->breadthfirst([](SP r, const Vector2D& offset, void* d) { *((int*)d) += 1; }, &no); return no; } void CWindow::clampWindowSize(const std::optional minSize, const std::optional maxSize) { - const Vector2D REALSIZE = m_vRealSize->goal(); + const Vector2D REALSIZE = m_realSize->goal(); const Vector2D NEWSIZE = REALSIZE.clamp(minSize.value_or(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), maxSize.value_or(Vector2D{INFINITY, INFINITY})); const Vector2D DELTA = REALSIZE - NEWSIZE; - *m_vRealPosition = m_vRealPosition->goal() + DELTA / 2.0; - *m_vRealSize = NEWSIZE; + *m_realPosition = m_realPosition->goal() + DELTA / 2.0; + *m_realSize = NEWSIZE; } bool CWindow::isFullscreen() { - return m_sFullscreenState.internal != FSMODE_NONE; + return m_fullscreenState.internal != FSMODE_NONE; } bool CWindow::isEffectiveInternalFSMode(const eFullscreenMode MODE) { - return (eFullscreenMode)std::bit_floor((uint8_t)m_sFullscreenState.internal) == MODE; + return (eFullscreenMode)std::bit_floor((uint8_t)m_fullscreenState.internal) == MODE; } WORKSPACEID CWindow::workspaceID() { - return m_pWorkspace ? m_pWorkspace->m_id : m_iLastWorkspace; + return m_workspace ? m_workspace->m_id : m_lastWorkspace; } MONITORID CWindow::monitorID() { - return m_pMonitor ? m_pMonitor->ID : MONITOR_INVALID; + return m_monitor ? m_monitor->ID : MONITOR_INVALID; } bool CWindow::onSpecialWorkspace() { - return m_pWorkspace ? m_pWorkspace->m_isSpecialWorkspace : g_pCompositor->isWorkspaceSpecial(m_iLastWorkspace); + return m_workspace ? m_workspace->m_isSpecialWorkspace : g_pCompositor->isWorkspaceSpecial(m_lastWorkspace); } std::unordered_map CWindow::getEnv() { @@ -1392,59 +1392,59 @@ std::unordered_map CWindow::getEnv() { } void CWindow::activate(bool force) { - if (g_pCompositor->m_lastWindow == m_pSelf) + if (g_pCompositor->m_lastWindow == m_self) return; static auto PFOCUSONACTIVATE = CConfigValue("misc:focus_on_activate"); - m_bIsUrgent = true; + m_isUrgent = true; g_pEventManager->postEvent(SHyprIPCEvent{"urgent", std::format("{:x}", (uintptr_t)this)}); - EMIT_HOOK_EVENT("urgent", m_pSelf.lock()); + EMIT_HOOK_EVENT("urgent", m_self.lock()); - if (!force && (!m_sWindowData.focusOnActivate.valueOr(*PFOCUSONACTIVATE) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE))) + if (!force && (!m_windowData.focusOnActivate.valueOr(*PFOCUSONACTIVATE) || (m_suppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_suppressedEvents & SUPPRESS_ACTIVATE))) return; - if (!m_bIsMapped) { + if (!m_isMapped) { Debug::log(LOG, "Ignoring CWindow::activate focus/warp, window is not mapped yet."); return; } - if (m_bIsFloating) - g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true); + if (m_isFloating) + g_pCompositor->changeWindowZOrder(m_self.lock(), true); - g_pCompositor->focusWindow(m_pSelf.lock()); + g_pCompositor->focusWindow(m_self.lock()); warpCursor(); } void CWindow::onUpdateState() { - std::optional requestsFS = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsFullscreen : m_pXWaylandSurface->state.requestsFullscreen; - std::optional requestsID = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsFullscreenMonitor : MONITOR_INVALID; - std::optional requestsMX = m_pXDGSurface ? m_pXDGSurface->toplevel->state.requestsMaximize : m_pXWaylandSurface->state.requestsMaximize; + std::optional requestsFS = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsFullscreen : m_xwaylandSurface->state.requestsFullscreen; + std::optional requestsID = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsFullscreenMonitor : MONITOR_INVALID; + std::optional requestsMX = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsMaximize : m_xwaylandSurface->state.requestsMaximize; - if (requestsFS.has_value() && !(m_eSuppressedEvents & SUPPRESS_FULLSCREEN)) { - if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_eSuppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { - if (m_bIsMapped) { + if (requestsFS.has_value() && !(m_suppressedEvents & SUPPRESS_FULLSCREEN)) { + if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_suppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { + if (m_isMapped) { const auto monitor = g_pCompositor->getMonitorFromID(requestsID.value()); - g_pCompositor->moveWindowToWorkspaceSafe(m_pSelf.lock(), monitor->activeWorkspace); + g_pCompositor->moveWindowToWorkspaceSafe(m_self.lock(), monitor->activeWorkspace); g_pCompositor->setActiveMonitor(monitor); } - if (!m_bIsMapped) - m_iWantsInitialFullscreenMonitor = requestsID.value(); + if (!m_isMapped) + m_wantsInitialFullscreenMonitor = requestsID.value(); } bool fs = requestsFS.value(); - if (m_bIsMapped) - g_pCompositor->changeWindowFullscreenModeClient(m_pSelf.lock(), FSMODE_FULLSCREEN, requestsFS.value()); + if (m_isMapped) + g_pCompositor->changeWindowFullscreenModeClient(m_self.lock(), FSMODE_FULLSCREEN, requestsFS.value()); - if (!m_bIsMapped) - m_bWantsInitialFullscreen = fs; + if (!m_isMapped) + m_wantsInitialFullscreen = fs; } - if (requestsMX.has_value() && !(m_eSuppressedEvents & SUPPRESS_MAXIMIZE)) { - if (m_bIsMapped) - g_pCompositor->changeWindowFullscreenModeClient(m_pSelf.lock(), FSMODE_MAXIMIZED, requestsMX.value()); + if (requestsMX.has_value() && !(m_suppressedEvents & SUPPRESS_MAXIMIZE)) { + if (m_isMapped) + g_pCompositor->changeWindowFullscreenModeClient(m_self.lock(), FSMODE_MAXIMIZED, requestsMX.value()); } } @@ -1452,107 +1452,107 @@ void CWindow::onUpdateMeta() { const auto NEWTITLE = fetchTitle(); bool doUpdate = false; - if (m_szTitle != NEWTITLE) { - m_szTitle = NEWTITLE; + if (m_title != NEWTITLE) { + m_title = NEWTITLE; g_pEventManager->postEvent(SHyprIPCEvent{"windowtitle", std::format("{:x}", (uintptr_t)this)}); - g_pEventManager->postEvent(SHyprIPCEvent{"windowtitlev2", std::format("{:x},{}", (uintptr_t)this, m_szTitle)}); - EMIT_HOOK_EVENT("windowTitle", m_pSelf.lock()); + g_pEventManager->postEvent(SHyprIPCEvent{"windowtitlev2", std::format("{:x},{}", (uintptr_t)this, m_title)}); + EMIT_HOOK_EVENT("windowTitle", m_self.lock()); - if (m_pSelf == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others - g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_szClass + "," + m_szTitle}); + if (m_self == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others + g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_class + "," + m_title}); g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); - EMIT_HOOK_EVENT("activeWindow", m_pSelf.lock()); + EMIT_HOOK_EVENT("activeWindow", m_self.lock()); } - Debug::log(LOG, "Window {:x} set title to {}", (uintptr_t)this, m_szTitle); + Debug::log(LOG, "Window {:x} set title to {}", (uintptr_t)this, m_title); doUpdate = true; } const auto NEWCLASS = fetchClass(); - if (m_szClass != NEWCLASS) { - m_szClass = NEWCLASS; + if (m_class != NEWCLASS) { + m_class = NEWCLASS; - if (m_pSelf == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others - g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_szClass + "," + m_szTitle}); + if (m_self == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others + g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_class + "," + m_title}); g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); - EMIT_HOOK_EVENT("activeWindow", m_pSelf.lock()); + EMIT_HOOK_EVENT("activeWindow", m_self.lock()); } - Debug::log(LOG, "Window {:x} set class to {}", (uintptr_t)this, m_szClass); + Debug::log(LOG, "Window {:x} set class to {}", (uintptr_t)this, m_class); doUpdate = true; } if (doUpdate) { updateDynamicRules(); - g_pCompositor->updateWindowAnimatedDecorationValues(m_pSelf.lock()); + g_pCompositor->updateWindowAnimatedDecorationValues(m_self.lock()); updateToplevel(); } } std::string CWindow::fetchTitle() { - if (!m_bIsX11) { - if (m_pXDGSurface && m_pXDGSurface->toplevel) - return m_pXDGSurface->toplevel->state.title; + if (!m_isX11) { + if (m_xdgSurface && m_xdgSurface->toplevel) + return m_xdgSurface->toplevel->state.title; } else { - if (m_pXWaylandSurface) - return m_pXWaylandSurface->state.title; + if (m_xwaylandSurface) + return m_xwaylandSurface->state.title; } return ""; } std::string CWindow::fetchClass() { - if (!m_bIsX11) { - if (m_pXDGSurface && m_pXDGSurface->toplevel) - return m_pXDGSurface->toplevel->state.appid; + if (!m_isX11) { + if (m_xdgSurface && m_xdgSurface->toplevel) + return m_xdgSurface->toplevel->state.appid; } else { - if (m_pXWaylandSurface) - return m_pXWaylandSurface->state.appid; + if (m_xwaylandSurface) + return m_xwaylandSurface->state.appid; } return ""; } void CWindow::onAck(uint32_t serial) { - const auto SERIAL = std::find_if(m_vPendingSizeAcks.rbegin(), m_vPendingSizeAcks.rend(), [serial](const auto& e) { return e.first == serial; }); + const auto SERIAL = std::find_if(m_pendingSizeAcks.rbegin(), m_pendingSizeAcks.rend(), [serial](const auto& e) { return e.first == serial; }); - if (SERIAL == m_vPendingSizeAcks.rend()) + if (SERIAL == m_pendingSizeAcks.rend()) return; - m_pPendingSizeAck = *SERIAL; - std::erase_if(m_vPendingSizeAcks, [&](const auto& el) { return el.first <= SERIAL->first; }); + m_pendingSizeAck = *SERIAL; + std::erase_if(m_pendingSizeAcks, [&](const auto& el) { return el.first <= SERIAL->first; }); } void CWindow::onResourceChangeX11() { - if (m_pXWaylandSurface->surface && !m_pWLSurface->resource()) - m_pWLSurface->assign(m_pXWaylandSurface->surface.lock(), m_pSelf.lock()); - else if (!m_pXWaylandSurface->surface && m_pWLSurface->resource()) - m_pWLSurface->unassign(); + if (m_xwaylandSurface->surface && !m_wlSurface->resource()) + m_wlSurface->assign(m_xwaylandSurface->surface.lock(), m_self.lock()); + else if (!m_xwaylandSurface->surface && m_wlSurface->resource()) + m_wlSurface->unassign(); // update metadata as well, // could be first assoc and we need to catch the class onUpdateMeta(); - Debug::log(LOG, "xwayland window {:x} -> association to {:x}", (uintptr_t)m_pXWaylandSurface.get(), (uintptr_t)m_pWLSurface->resource().get()); + Debug::log(LOG, "xwayland window {:x} -> association to {:x}", (uintptr_t)m_xwaylandSurface.get(), (uintptr_t)m_wlSurface->resource().get()); } void CWindow::onX11ConfigureRequest(CBox box) { - if (!m_pXWaylandSurface->surface || !m_pXWaylandSurface->mapped || !m_bIsMapped) { - m_pXWaylandSurface->configure(box); - m_vPendingReportedSize = box.size(); - m_vReportedSize = box.size(); - m_vReportedPosition = box.pos(); + if (!m_xwaylandSurface->surface || !m_xwaylandSurface->mapped || !m_isMapped) { + m_xwaylandSurface->configure(box); + m_pendingReportedSize = box.size(); + m_reportedSize = box.size(); + m_reportedPosition = box.pos(); updateX11SurfaceScale(); return; } - g_pHyprRenderer->damageWindow(m_pSelf.lock()); + g_pHyprRenderer->damageWindow(m_self.lock()); - if (!m_bIsFloating || isFullscreen() || g_pInputManager->currentlyDraggedWindow == m_pSelf) { + if (!m_isFloating || isFullscreen() || g_pInputManager->currentlyDraggedWindow == m_self) { sendWindowSize(true); g_pInputManager->refocus(); - g_pHyprRenderer->damageWindow(m_pSelf.lock()); + g_pHyprRenderer->damageWindow(m_self.lock()); return; } @@ -1561,41 +1561,41 @@ void CWindow::onX11ConfigureRequest(CBox box) { else setHidden(true); - m_vRealPosition->setValueAndWarp(xwaylandPositionToReal(box.pos())); - m_vRealSize->setValueAndWarp(xwaylandSizeToReal(box.size())); + m_realPosition->setValueAndWarp(xwaylandPositionToReal(box.pos())); + m_realSize->setValueAndWarp(xwaylandSizeToReal(box.size())); - m_vPosition = m_vRealPosition->goal(); - m_vSize = m_vRealSize->goal(); + m_position = m_realPosition->goal(); + m_size = m_realSize->goal(); - if (m_vPendingReportedSize != box.size() || m_vReportedPosition != box.pos()) { - m_pXWaylandSurface->configure(box); - m_vReportedSize = box.size(); - m_vPendingReportedSize = box.size(); - m_vReportedPosition = box.pos(); + if (m_pendingReportedSize != box.size() || m_reportedPosition != box.pos()) { + m_xwaylandSurface->configure(box); + m_reportedSize = box.size(); + m_pendingReportedSize = box.size(); + m_reportedPosition = box.pos(); } updateX11SurfaceScale(); updateWindowDecos(); - if (!m_pWorkspace || !m_pWorkspace->isVisible()) + if (!m_workspace || !m_workspace->isVisible()) return; // further things are only for visible windows - m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition->goal() + m_vRealSize->goal() / 2.f)->activeWorkspace; + m_workspace = g_pCompositor->getMonitorFromVector(m_realPosition->goal() + m_realSize->goal() / 2.f)->activeWorkspace; - g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true); + g_pCompositor->changeWindowZOrder(m_self.lock(), true); - m_bCreatedOverFullscreen = true; + m_createdOverFullscreen = true; - g_pHyprRenderer->damageWindow(m_pSelf.lock()); + g_pHyprRenderer->damageWindow(m_self.lock()); } void CWindow::warpCursor(bool force) { - static auto PERSISTENTWARPS = CConfigValue("cursor:persistent_warps"); - const auto coords = m_vRelativeCursorCoordsOnLastWarp; - m_vRelativeCursorCoordsOnLastWarp.x = -1; // reset m_vRelativeCursorCoordsOnLastWarp + static auto PERSISTENTWARPS = CConfigValue("cursor:persistent_warps"); + const auto coords = m_relativeCursorCoordsOnLastWarp; + m_relativeCursorCoordsOnLastWarp.x = -1; // reset m_vRelativeCursorCoordsOnLastWarp - if (*PERSISTENTWARPS && coords.x > 0 && coords.y > 0 && coords < m_vSize) // don't warp cursor outside the window - g_pCompositor->warpCursorTo(m_vPosition + coords, force); + if (*PERSISTENTWARPS && coords.x > 0 && coords.y > 0 && coords < m_size) // don't warp cursor outside the window + g_pCompositor->warpCursorTo(m_position + coords, force); else g_pCompositor->warpCursorTo(middle(), force); } @@ -1619,7 +1619,7 @@ PHLWINDOW CWindow::getSwallower() { break; for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || w->isHidden()) + if (!w->m_isMapped || w->isHidden()) continue; if (w->getPID() == currentPid) @@ -1628,13 +1628,13 @@ PHLWINDOW CWindow::getSwallower() { } if (!(*PSWALLOWREGEX).empty()) - std::erase_if(candidates, [&](const auto& other) { return !RE2::FullMatch(other->m_szClass, *PSWALLOWREGEX); }); + std::erase_if(candidates, [&](const auto& other) { return !RE2::FullMatch(other->m_class, *PSWALLOWREGEX); }); if (candidates.size() == 0) return nullptr; if (!(*PSWALLOWEXREGEX).empty()) - std::erase_if(candidates, [&](const auto& other) { return RE2::FullMatch(other->m_szTitle, *PSWALLOWEXREGEX); }); + std::erase_if(candidates, [&](const auto& other) { return RE2::FullMatch(other->m_title, *PSWALLOWEXREGEX); }); if (candidates.size() == 0) return nullptr; @@ -1657,29 +1657,29 @@ PHLWINDOW CWindow::getSwallower() { void CWindow::unsetWindowData(eOverridePriority priority) { for (auto const& element : NWindowProperties::boolWindowProperties) { - element.second(m_pSelf.lock())->unset(priority); + element.second(m_self.lock())->unset(priority); } for (auto const& element : NWindowProperties::intWindowProperties) { - element.second(m_pSelf.lock())->unset(priority); + element.second(m_self.lock())->unset(priority); } for (auto const& element : NWindowProperties::floatWindowProperties) { - element.second(m_pSelf.lock())->unset(priority); + element.second(m_self.lock())->unset(priority); } } bool CWindow::isX11OverrideRedirect() { - return m_pXWaylandSurface && m_pXWaylandSurface->overrideRedirect; + return m_xwaylandSurface && m_xwaylandSurface->overrideRedirect; } bool CWindow::isModal() { - return (m_pXWaylandSurface && m_pXWaylandSurface->modal); + return (m_xwaylandSurface && m_xwaylandSurface->modal); } Vector2D CWindow::requestedMinSize() { - if ((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && !m_pXDGSurface->toplevel)) + if ((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && !m_xdgSurface->toplevel)) return Vector2D(1, 1); - Vector2D minSize = m_bIsX11 ? Vector2D(m_pXWaylandSurface->sizeHints->min_width, m_pXWaylandSurface->sizeHints->min_height) : m_pXDGSurface->toplevel->layoutMinSize(); + Vector2D minSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->min_width, m_xwaylandSurface->sizeHints->min_height) : m_xdgSurface->toplevel->layoutMinSize(); minSize = minSize.clamp({1, 1}); @@ -1688,10 +1688,10 @@ Vector2D CWindow::requestedMinSize() { Vector2D CWindow::requestedMaxSize() { constexpr int NO_MAX_SIZE_LIMIT = 99999; - if (((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && (!m_pXDGSurface || !m_pXDGSurface->toplevel)) || m_sWindowData.noMaxSize.valueOrDefault())) + if (((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && (!m_xdgSurface || !m_xdgSurface->toplevel)) || m_windowData.noMaxSize.valueOrDefault())) return Vector2D(NO_MAX_SIZE_LIMIT, NO_MAX_SIZE_LIMIT); - Vector2D maxSize = m_bIsX11 ? Vector2D(m_pXWaylandSurface->sizeHints->max_width, m_pXWaylandSurface->sizeHints->max_height) : m_pXDGSurface->toplevel->layoutMaxSize(); + Vector2D maxSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->max_width, m_xwaylandSurface->sizeHints->max_height) : m_xdgSurface->toplevel->layoutMaxSize(); if (maxSize.x < 5) maxSize.x = NO_MAX_SIZE_LIMIT; @@ -1702,13 +1702,13 @@ Vector2D CWindow::requestedMaxSize() { } Vector2D CWindow::realToReportSize() { - if (!m_bIsX11) - return m_vRealSize->goal().clamp(Vector2D{0, 0}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); + if (!m_isX11) + return m_realSize->goal().clamp(Vector2D{0, 0}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - const auto REPORTSIZE = m_vRealSize->goal().clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); - const auto PMONITOR = m_pMonitor.lock(); + const auto REPORTSIZE = m_realSize->goal().clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); + const auto PMONITOR = m_monitor.lock(); if (*PXWLFORCESCALEZERO && PMONITOR) return REPORTSIZE * PMONITOR->scale; @@ -1717,16 +1717,16 @@ Vector2D CWindow::realToReportSize() { } Vector2D CWindow::realToReportPosition() { - if (!m_bIsX11) - return m_vRealPosition->goal(); + if (!m_isX11) + return m_realPosition->goal(); - return g_pXWaylandManager->waylandToXWaylandCoords(m_vRealPosition->goal()); + return g_pXWaylandManager->waylandToXWaylandCoords(m_realPosition->goal()); } Vector2D CWindow::xwaylandSizeToReal(Vector2D size) { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); const auto SIZE = size.clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); const auto SCALE = *PXWLFORCESCALEZERO ? PMONITOR->scale : 1.0f; @@ -1740,85 +1740,85 @@ Vector2D CWindow::xwaylandPositionToReal(Vector2D pos) { void CWindow::updateX11SurfaceScale() { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - m_fX11SurfaceScaledBy = 1.0f; - if (m_bIsX11 && *PXWLFORCESCALEZERO) { - if (const auto PMONITOR = m_pMonitor.lock(); PMONITOR) - m_fX11SurfaceScaledBy = PMONITOR->scale; + m_X11SurfaceScaledBy = 1.0f; + if (m_isX11 && *PXWLFORCESCALEZERO) { + if (const auto PMONITOR = m_monitor.lock(); PMONITOR) + m_X11SurfaceScaledBy = PMONITOR->scale; } } void CWindow::sendWindowSize(bool force) { - const auto PMONITOR = m_pMonitor.lock(); + const auto PMONITOR = m_monitor.lock(); - Debug::log(TRACE, "sendWindowSize: window:{:x},title:{} with real pos {}, real size {} (force: {})", (uintptr_t)this, this->m_szTitle, m_vRealPosition->goal(), - m_vRealSize->goal(), force); + Debug::log(TRACE, "sendWindowSize: window:{:x},title:{} with real pos {}, real size {} (force: {})", (uintptr_t)this, this->m_title, m_realPosition->goal(), m_realSize->goal(), + force); // TODO: this should be decoupled from setWindowSize IMO const auto REPORTPOS = realToReportPosition(); const auto REPORTSIZE = realToReportSize(); - if (!force && m_vPendingReportedSize == REPORTSIZE && (m_vReportedPosition == REPORTPOS || !m_bIsX11)) + if (!force && m_pendingReportedSize == REPORTSIZE && (m_reportedPosition == REPORTPOS || !m_isX11)) return; - m_vReportedPosition = REPORTPOS; - m_vPendingReportedSize = REPORTSIZE; + m_reportedPosition = REPORTPOS; + m_pendingReportedSize = REPORTSIZE; updateX11SurfaceScale(); - if (m_bIsX11 && m_pXWaylandSurface) - m_pXWaylandSurface->configure({REPORTPOS, REPORTSIZE}); - else if (m_pXDGSurface && m_pXDGSurface->toplevel) - m_vPendingSizeAcks.emplace_back(m_pXDGSurface->toplevel->setSize(REPORTSIZE), REPORTPOS.floor()); + if (m_isX11 && m_xwaylandSurface) + m_xwaylandSurface->configure({REPORTPOS, REPORTSIZE}); + else if (m_xdgSurface && m_xdgSurface->toplevel) + m_pendingSizeAcks.emplace_back(m_xdgSurface->toplevel->setSize(REPORTSIZE), REPORTPOS.floor()); } NContentType::eContentType CWindow::getContentType() { - if (!m_pWLSurface || !m_pWLSurface->resource() || !m_pWLSurface->resource()->contentType.valid()) + if (!m_wlSurface || !m_wlSurface->resource() || !m_wlSurface->resource()->contentType.valid()) return CONTENT_TYPE_NONE; - return m_pWLSurface->resource()->contentType->value; + return m_wlSurface->resource()->contentType->value; } void CWindow::setContentType(NContentType::eContentType contentType) { - if (!m_pWLSurface->resource()->contentType.valid()) - m_pWLSurface->resource()->contentType = PROTO::contentType->getContentType(m_pWLSurface->resource()); + if (!m_wlSurface->resource()->contentType.valid()) + m_wlSurface->resource()->contentType = PROTO::contentType->getContentType(m_wlSurface->resource()); // else disallow content type change if proto is used? Debug::log(INFO, "ContentType for window {}", (int)contentType); - m_pWLSurface->resource()->contentType->value = contentType; + m_wlSurface->resource()->contentType->value = contentType; } void CWindow::deactivateGroupMembers() { auto curr = getGroupHead(); while (curr) { - if (curr != m_pSelf.lock()) { + if (curr != m_self.lock()) { // we dont want to deactivate unfocused xwayland windows // because X is weird, keep the behavior for wayland windows // also its not really needed for xwayland windows // ref: #9760 #9294 - if (!curr->m_bIsX11 && curr->m_pXDGSurface && curr->m_pXDGSurface->toplevel) - curr->m_pXDGSurface->toplevel->setActive(false); + if (!curr->m_isX11 && curr->m_xdgSurface && curr->m_xdgSurface->toplevel) + curr->m_xdgSurface->toplevel->setActive(false); } - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); if (curr == getGroupHead()) break; } } bool CWindow::isNotResponding() { - return g_pANRManager->isNotResponding(m_pSelf.lock()); + return g_pANRManager->isNotResponding(m_self.lock()); } std::optional CWindow::xdgTag() { - if (!m_pXDGSurface || !m_pXDGSurface->toplevel) + if (!m_xdgSurface || !m_xdgSurface->toplevel) return std::nullopt; - return m_pXDGSurface->toplevel->m_toplevelTag; + return m_xdgSurface->toplevel->m_toplevelTag; } std::optional CWindow::xdgDescription() { - if (!m_pXDGSurface || !m_pXDGSurface->toplevel) + if (!m_xdgSurface || !m_xdgSurface->toplevel) return std::nullopt; - return m_pXDGSurface->toplevel->m_toplevelDescription; + return m_xdgSurface->toplevel->m_toplevelDescription; } diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 9fbb7522..8a6590bd 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -67,14 +67,14 @@ enum eSuppressEvents : uint8_t { class IWindowTransformer; struct SAlphaValue { - float m_fAlpha; - bool m_bOverride; + float alpha; + bool override; float applyAlpha(float alpha) const { - if (m_bOverride) - return m_fAlpha; + if (override) + return alpha; else - return m_fAlpha * alpha; + return alpha * alpha; }; }; @@ -145,154 +145,151 @@ class CWindow { public: ~CWindow(); - SP m_pWLSurface; + SP m_wlSurface; struct { CSignal destroy; - } events; + } m_events; - WP m_pXDGSurface; - WP m_pXWaylandSurface; + WP m_xdgSurface; + WP m_xwaylandSurface; // this is the position and size of the "bounding box" - Vector2D m_vPosition = Vector2D(0, 0); - Vector2D m_vSize = Vector2D(0, 0); + Vector2D m_position = Vector2D(0, 0); + Vector2D m_size = Vector2D(0, 0); // this is the real position and size used to draw the thing - PHLANIMVAR m_vRealPosition; - PHLANIMVAR m_vRealSize; + PHLANIMVAR m_realPosition; + PHLANIMVAR m_realSize; // for not spamming the protocols - Vector2D m_vReportedPosition; - Vector2D m_vReportedSize; - Vector2D m_vPendingReportedSize; - std::optional> m_pPendingSizeAck; - std::vector> m_vPendingSizeAcks; + Vector2D m_reportedPosition; + Vector2D m_reportedSize; + Vector2D m_pendingReportedSize; + std::optional> m_pendingSizeAck; + std::vector> m_pendingSizeAcks; // for restoring floating statuses - Vector2D m_vLastFloatingSize; - Vector2D m_vLastFloatingPosition; + Vector2D m_lastFloatingSize; + Vector2D m_lastFloatingPosition; // for floating window offset in workspace animations - Vector2D m_vFloatingOffset = Vector2D(0, 0); + Vector2D m_floatingOffset = Vector2D(0, 0); // this is used for pseudotiling - bool m_bIsPseudotiled = false; - Vector2D m_vPseudoSize = Vector2D(1280, 720); + bool m_isPseudotiled = false; + Vector2D m_pseudoSize = Vector2D(1280, 720); // for recovering relative cursor position - Vector2D m_vRelativeCursorCoordsOnLastWarp = Vector2D(-1, -1); + Vector2D m_relativeCursorCoordsOnLastWarp = Vector2D(-1, -1); - bool m_bFirstMap = false; // for layouts - bool m_bIsFloating = false; - bool m_bDraggingTiled = false; // for dragging around tiled windows - bool m_bWasMaximized = false; - SFullscreenState m_sFullscreenState = {.internal = FSMODE_NONE, .client = FSMODE_NONE}; - std::string m_szTitle = ""; - std::string m_szClass = ""; - std::string m_szInitialTitle = ""; - std::string m_szInitialClass = ""; - PHLWORKSPACE m_pWorkspace; - PHLMONITORREF m_pMonitor; + bool m_firstMap = false; // for layouts + bool m_isFloating = false; + bool m_draggingTiled = false; // for dragging around tiled windows + SFullscreenState m_fullscreenState = {.internal = FSMODE_NONE, .client = FSMODE_NONE}; + std::string m_title = ""; + std::string m_class = ""; + std::string m_initialTitle = ""; + std::string m_initialClass = ""; + PHLWORKSPACE m_workspace; + PHLMONITORREF m_monitor; - bool m_bIsMapped = false; + bool m_isMapped = false; - bool m_bRequestsFloat = false; + bool m_requestsFloat = false; // This is for fullscreen apps - bool m_bCreatedOverFullscreen = false; + bool m_createdOverFullscreen = false; // XWayland stuff - bool m_bIsX11 = false; - PHLWINDOWREF m_pX11Parent; - bool m_bX11DoesntWantBorders = false; - bool m_bX11ShouldntFocus = false; - float m_fX11SurfaceScaledBy = 1.f; + bool m_isX11 = false; + bool m_X11DoesntWantBorders = false; + bool m_X11ShouldntFocus = false; + float m_X11SurfaceScaledBy = 1.f; // // For nofocus - bool m_bNoInitialFocus = false; + bool m_noInitialFocus = false; // Fullscreen and Maximize - bool m_bWantsInitialFullscreen = false; - MONITORID m_iWantsInitialFullscreenMonitor = MONITOR_INVALID; + bool m_wantsInitialFullscreen = false; + MONITORID m_wantsInitialFullscreenMonitor = MONITOR_INVALID; - // bitfield eSuppressEvents - uint64_t m_eSuppressedEvents = SUPPRESS_NONE; + // bitfield suppressEvents + uint64_t m_suppressedEvents = SUPPRESS_NONE; // desktop components - UP m_pSubsurfaceHead; - UP m_pPopupHead; + UP m_subsurfaceHead; + UP m_popupHead; // Animated border - CGradientValueData m_cRealBorderColor = {0}; - CGradientValueData m_cRealBorderColorPrevious = {0}; - PHLANIMVAR m_fBorderFadeAnimationProgress; - PHLANIMVAR m_fBorderAngleAnimationProgress; + CGradientValueData m_realBorderColor = {0}; + CGradientValueData m_realBorderColorPrevious = {0}; + PHLANIMVAR m_borderFadeAnimationProgress; + PHLANIMVAR m_borderAngleAnimationProgress; // Fade in-out - PHLANIMVAR m_fAlpha; - bool m_bFadingOut = false; - bool m_bReadyToDelete = false; - Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in - Vector2D m_vOriginalClosedSize; // drawing the closing animations - SBoxExtents m_eOriginalClosedExtents; - bool m_bAnimatingIn = false; + PHLANIMVAR m_alpha; + bool m_fadingOut = false; + bool m_readyToDelete = false; + Vector2D m_originalClosedPos; // these will be used for calculations later on in + Vector2D m_originalClosedSize; // drawing the closing animations + SBoxExtents m_originalClosedExtents; + bool m_animatingIn = false; // For pinned (sticky) windows - bool m_bPinned = false; + bool m_pinned = false; // For preserving pinned state when fullscreening a pinned window - bool m_bPinFullscreened = false; + bool m_pinFullscreened = false; // urgency hint - bool m_bIsUrgent = false; + bool m_isUrgent = false; // for proper cycling. While cycling we can't just move the pointers, so we need to keep track of the last cycled window. - PHLWINDOWREF m_pLastCycledWindow; + PHLWINDOWREF m_lastCycledWindow; // Window decorations // TODO: make this a SP. - std::vector> m_dWindowDecorations; - std::vector m_vDecosToRemove; + std::vector> m_windowDecorations; + std::vector m_decosToRemove; // Special render data, rules, etc - SWindowData m_sWindowData; + SWindowData m_windowData; // Transformers - std::vector> m_vTransformers; + std::vector> m_transformers; // for alpha - PHLANIMVAR m_fActiveInactiveAlpha; - PHLANIMVAR m_fMovingFromWorkspaceAlpha; + PHLANIMVAR m_activeInactiveAlpha; + PHLANIMVAR m_movingFromWorkspaceAlpha; // animated shadow color - PHLANIMVAR m_cRealShadowColor; + PHLANIMVAR m_realShadowColor; // animated tint - PHLANIMVAR m_fDimPercent; + PHLANIMVAR m_dimPercent; // animate moving to an invisible workspace - int m_iMonitorMovedFrom = -1; // -1 means not moving - PHLANIMVAR m_fMovingToWorkspaceAlpha; + int m_monitorMovedFrom = -1; // -1 means not moving + PHLANIMVAR m_movingToWorkspaceAlpha; // swallowing - PHLWINDOWREF m_pSwallowed; - bool m_bCurrentlySwallowed = false; - bool m_bGroupSwallowed = false; + PHLWINDOWREF m_swallowed; + bool m_currentlySwallowed = false; + bool m_groupSwallowed = false; // focus stuff - bool m_bStayFocused = false; + bool m_stayFocused = false; // for toplevel monitor events - MONITORID m_iLastToplevelMonitorID = -1; - MONITORID m_iLastSurfaceMonitorID = -1; + MONITORID m_lastSurfaceMonitorID = -1; // for idle inhibiting windows - eIdleInhibitMode m_eIdleInhibitMode = IDLEINHIBIT_NONE; + eIdleInhibitMode m_idleInhibitMode = IDLEINHIBIT_NONE; // initial token. Will be unregistered on workspace change or timeout of 2 minutes - std::string m_szInitialWorkspaceToken = ""; + std::string m_initialWorkspaceToken = ""; // for groups struct SGroupData { @@ -300,13 +297,13 @@ class CWindow { bool head = false; bool locked = false; // per group lock bool deny = false; // deny window from enter a group or made a group - } m_sGroupData; - uint16_t m_eGroupRules = GROUP_NONE; + } m_groupData; + uint16_t m_groupRules = GROUP_NONE; - bool m_bTearingHint = false; + bool m_tearingHint = false; // stores the currently matched window rules - std::vector> m_vMatchedRules; + std::vector> m_matchedRules; // window tags CTagKeeper m_tags; @@ -316,8 +313,8 @@ class CWindow { // For the list lookup bool operator==(const CWindow& rhs) const { - return m_pXDGSurface == rhs.m_pXDGSurface && m_pXWaylandSurface == rhs.m_pXWaylandSurface && m_vPosition == rhs.m_vPosition && m_vSize == rhs.m_vSize && - m_bFadingOut == rhs.m_bFadingOut; + return m_xdgSurface == rhs.m_xdgSurface && m_xwaylandSurface == rhs.m_xwaylandSurface && m_position == rhs.m_position && m_size == rhs.m_size && + m_fadingOut == rhs.m_fadingOut; } // methods @@ -411,7 +408,7 @@ class CWindow { std::optional xdgDescription(); CBox getWindowMainSurfaceBox() const { - return {m_vRealPosition->value().x, m_vRealPosition->value().y, m_vRealSize->value().x, m_vRealSize->value().y}; + return {m_realPosition->value().x, m_realPosition->value().y, m_realSize->value().x, m_realSize->value().y}; } // listeners @@ -421,7 +418,7 @@ class CWindow { std::unordered_map getEnv(); // - PHLWINDOWREF m_pSelf; + PHLWINDOWREF m_self; // make private once we move listeners to inside CWindow struct { @@ -436,13 +433,13 @@ class CWindow { CHyprSignalListener updateState; CHyprSignalListener updateMetadata; CHyprSignalListener resourceChange; - } listeners; + } m_listeners; private: // For hidden windows and stuff - bool m_bHidden = false; - bool m_bSuspended = false; - WORKSPACEID m_iLastWorkspace = WORKSPACE_INVALID; + bool m_hidden = false; + bool m_suspended = false; + WORKSPACEID m_lastWorkspace = WORKSPACE_INVALID; }; inline bool valid(PHLWINDOW w) { @@ -456,49 +453,49 @@ inline bool valid(PHLWINDOWREF w) { inline bool validMapped(PHLWINDOW w) { if (!valid(w)) return false; - return w->m_bIsMapped; + return w->m_isMapped; } inline bool validMapped(PHLWINDOWREF w) { if (!valid(w)) return false; - return w->m_bIsMapped; + return w->m_isMapped; } namespace NWindowProperties { static const std::unordered_map*(const PHLWINDOW&)>> boolWindowProperties = { - {"allowsinput", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.allowsInput; }}, - {"dimaround", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.dimAround; }}, - {"decorate", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.decorate; }}, - {"focusonactivate", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.focusOnActivate; }}, - {"keepaspectratio", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.keepAspectRatio; }}, - {"nearestneighbor", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.nearestNeighbor; }}, - {"noanim", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noAnim; }}, - {"noblur", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noBlur; }}, - {"noborder", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noBorder; }}, - {"nodim", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noDim; }}, - {"nofocus", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noFocus; }}, - {"nomaxsize", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noMaxSize; }}, - {"norounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noRounding; }}, - {"noshadow", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noShadow; }}, - {"noshortcutsinhibit", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noShortcutsInhibit; }}, - {"opaque", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.opaque; }}, - {"forcergbx", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.RGBX; }}, - {"syncfullscreen", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.syncFullscreen; }}, - {"immediate", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.tearing; }}, - {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.xray; }}, - {"nofollowmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.noFollowMouse; }}, + {"allowsinput", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.allowsInput; }}, + {"dimaround", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.dimAround; }}, + {"decorate", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.decorate; }}, + {"focusonactivate", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.focusOnActivate; }}, + {"keepaspectratio", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.keepAspectRatio; }}, + {"nearestneighbor", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.nearestNeighbor; }}, + {"noanim", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noAnim; }}, + {"noblur", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noBlur; }}, + {"noborder", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noBorder; }}, + {"nodim", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noDim; }}, + {"nofocus", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noFocus; }}, + {"nomaxsize", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noMaxSize; }}, + {"norounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noRounding; }}, + {"noshadow", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noShadow; }}, + {"noshortcutsinhibit", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noShortcutsInhibit; }}, + {"opaque", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.opaque; }}, + {"forcergbx", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.RGBX; }}, + {"syncfullscreen", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.syncFullscreen; }}, + {"immediate", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.tearing; }}, + {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.xray; }}, + {"nofollowmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noFollowMouse; }}, }; const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { - {"rounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.rounding; }}, - {"bordersize", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.borderSize; }}, + {"rounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.rounding; }}, + {"bordersize", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.borderSize; }}, }; const std::unordered_map*(PHLWINDOW)>> floatWindowProperties = { - {"roundingpower", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.roundingPower; }}, - {"scrollmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollMouse; }}, - {"scrolltouchpad", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollTouchpad; }}, + {"roundingpower", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.roundingPower; }}, + {"scrollmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.scrollMouse; }}, + {"scrolltouchpad", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.scrollTouchpad; }}, }; }; @@ -532,13 +529,13 @@ struct std::formatter : std::formatter { return std::format_to(out, "[Window nullptr]"); std::format_to(out, "["); - std::format_to(out, "Window {:x}: title: \"{}\"", (uintptr_t)w.get(), w->m_szTitle); + std::format_to(out, "Window {:x}: title: \"{}\"", (uintptr_t)w.get(), w->m_title); if (formatWorkspace) - std::format_to(out, ", workspace: {}", w->m_pWorkspace ? w->workspaceID() : WORKSPACE_INVALID); + std::format_to(out, ", workspace: {}", w->m_workspace ? w->workspaceID() : WORKSPACE_INVALID); if (formatMonitor) std::format_to(out, ", monitor: {}", w->monitorID()); if (formatClass) - std::format_to(out, ", class: {}", w->m_szClass); + std::format_to(out, ", class: {}", w->m_class); return std::format_to(out, "]"); } }; diff --git a/src/desktop/WindowRule.cpp b/src/desktop/WindowRule.cpp index 23269085..245d1583 100644 --- a/src/desktop/WindowRule.cpp +++ b/src/desktop/WindowRule.cpp @@ -13,7 +13,7 @@ static const auto RULES_PREFIX = std::unordered_set{ "size", "suppressevent", "tag", "workspace", "xray", }; -CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool isV2, bool isExecRule) : szValue(value), szRule(rule), v2(isV2), execRule(isExecRule) { +CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool isV2, bool isExecRule) : m_value(value), m_rule(rule), m_v2(isV2), m_execRule(isExecRule) { const auto VALS = CVarList(rule, 2, ' '); const bool VALID = RULES.contains(rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule](auto prefix) { return rule.starts_with(prefix); }) || (NWindowProperties::boolWindowProperties.find(VALS[0]) != NWindowProperties::boolWindowProperties.end()) || @@ -24,73 +24,73 @@ CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool return; if (rule == "float") - ruleType = RULE_FLOAT; + m_ruleType = RULE_FLOAT; else if (rule == "fullscreen") - ruleType = RULE_FULLSCREEN; + m_ruleType = RULE_FULLSCREEN; else if (rule == "maximize") - ruleType = RULE_MAXIMIZE; + m_ruleType = RULE_MAXIMIZE; else if (rule == "noinitialfocus") - ruleType = RULE_NOINITIALFOCUS; + m_ruleType = RULE_NOINITIALFOCUS; else if (rule == "pin") - ruleType = RULE_PIN; + m_ruleType = RULE_PIN; else if (rule == "stayfocused") - ruleType = RULE_STAYFOCUSED; + m_ruleType = RULE_STAYFOCUSED; else if (rule == "tile") - ruleType = RULE_TILE; + m_ruleType = RULE_TILE; else if (rule == "renderunfocused") - ruleType = RULE_RENDERUNFOCUSED; + m_ruleType = RULE_RENDERUNFOCUSED; else if (rule == "persistentsize") - ruleType = RULE_PERSISTENTSIZE; + m_ruleType = RULE_PERSISTENTSIZE; else if (rule.starts_with("animation")) - ruleType = RULE_ANIMATION; + m_ruleType = RULE_ANIMATION; else if (rule.starts_with("bordercolor")) - ruleType = RULE_BORDERCOLOR; + m_ruleType = RULE_BORDERCOLOR; else if (rule.starts_with("center")) - ruleType = RULE_CENTER; + m_ruleType = RULE_CENTER; else if (rule.starts_with("fullscreenstate")) - ruleType = RULE_FULLSCREENSTATE; + m_ruleType = RULE_FULLSCREENSTATE; else if (rule.starts_with("group")) - ruleType = RULE_GROUP; + m_ruleType = RULE_GROUP; else if (rule.starts_with("idleinhibit")) - ruleType = RULE_IDLEINHIBIT; + m_ruleType = RULE_IDLEINHIBIT; else if (rule.starts_with("maxsize")) - ruleType = RULE_MAXSIZE; + m_ruleType = RULE_MAXSIZE; else if (rule.starts_with("minsize")) - ruleType = RULE_MINSIZE; + m_ruleType = RULE_MINSIZE; else if (rule.starts_with("monitor")) - ruleType = RULE_MONITOR; + m_ruleType = RULE_MONITOR; else if (rule.starts_with("move")) - ruleType = RULE_MOVE; + m_ruleType = RULE_MOVE; else if (rule.starts_with("opacity")) - ruleType = RULE_OPACITY; + m_ruleType = RULE_OPACITY; else if (rule.starts_with("plugin:")) - ruleType = RULE_PLUGIN; + m_ruleType = RULE_PLUGIN; else if (rule.starts_with("pseudo")) - ruleType = RULE_PSEUDO; + m_ruleType = RULE_PSEUDO; else if (rule.starts_with("size")) - ruleType = RULE_SIZE; + m_ruleType = RULE_SIZE; else if (rule.starts_with("suppressevent")) - ruleType = RULE_SUPPRESSEVENT; + m_ruleType = RULE_SUPPRESSEVENT; else if (rule.starts_with("tag")) - ruleType = RULE_TAG; + m_ruleType = RULE_TAG; else if (rule.starts_with("workspace")) - ruleType = RULE_WORKSPACE; + m_ruleType = RULE_WORKSPACE; else if (rule.starts_with("prop")) - ruleType = RULE_PROP; + m_ruleType = RULE_PROP; else if (rule.starts_with("content")) - ruleType = RULE_CONTENT; + m_ruleType = RULE_CONTENT; else { // check if this is a prop. const CVarList VARS(rule, 0, 's', true); if (NWindowProperties::intWindowProperties.find(VARS[0]) != NWindowProperties::intWindowProperties.end() || NWindowProperties::boolWindowProperties.find(VARS[0]) != NWindowProperties::boolWindowProperties.end() || NWindowProperties::floatWindowProperties.find(VARS[0]) != NWindowProperties::floatWindowProperties.end()) { - *const_cast(&szRule) = "prop " + rule; - ruleType = RULE_PROP; - Debug::log(LOG, "CWindowRule: direct prop rule found, rewritten {} -> {}", rule, szRule); + *const_cast(&m_rule) = "prop " + rule; + m_ruleType = RULE_PROP; + Debug::log(LOG, "CWindowRule: direct prop rule found, rewritten {} -> {}", rule, m_rule); } else { Debug::log(ERR, "CWindowRule: didn't match a rule that was found valid?!"); - ruleType = RULE_INVALID; + m_ruleType = RULE_INVALID; } } } diff --git a/src/desktop/WindowRule.hpp b/src/desktop/WindowRule.hpp index 465ddbb1..084c67f9 100644 --- a/src/desktop/WindowRule.hpp +++ b/src/desktop/WindowRule.hpp @@ -40,33 +40,33 @@ class CWindowRule { RULE_PERSISTENTSIZE }; - eRuleType ruleType = RULE_INVALID; + eRuleType m_ruleType = RULE_INVALID; - const std::string szValue; - const std::string szRule; - const bool v2 = false; - const bool execRule = false; + const std::string m_value; + const std::string m_rule; + const bool m_v2 = false; + const bool m_execRule = false; - std::string szTitle; - std::string szClass; - std::string szInitialTitle; - std::string szInitialClass; - std::string szTag; - int bX11 = -1; // -1 means "ANY" - int bFloating = -1; - int bFullscreen = -1; - int bPinned = -1; - int bFocus = -1; - std::string szFullscreenState = ""; // empty means any - std::string szOnWorkspace = ""; // empty means any - std::string szWorkspace = ""; // empty means any - std::string szContentType = ""; // empty means any - std::string szXdgTag = ""; // empty means any + std::string m_title; + std::string m_class; + std::string m_initialTitle; + std::string m_initialClass; + std::string m_tag; + int m_X11 = -1; // -1 means "ANY" + int m_floating = -1; + int m_fullscreen = -1; + int m_pinned = -1; + int m_focus = -1; + std::string m_fullscreenState = ""; // empty means any + std::string m_onWorkspace = ""; // empty means any + std::string m_workspace = ""; // empty means any + std::string m_contentType = ""; // empty means any + std::string m_xdgTag = ""; // empty means any // precompiled regexes - CRuleRegexContainer rTitle; - CRuleRegexContainer rClass; - CRuleRegexContainer rInitialTitle; - CRuleRegexContainer rInitialClass; - CRuleRegexContainer rV1Regex; + CRuleRegexContainer m_titleRegex; + CRuleRegexContainer m_classRegex; + CRuleRegexContainer m_initialTitleRegex; + CRuleRegexContainer m_initialClassRegex; + CRuleRegexContainer m_v1Regex; }; \ No newline at end of file diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 18322799..8bb7f7a0 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -525,7 +525,7 @@ MONITORID CWorkspace::monitorID() { PHLWINDOW CWorkspace::getFullscreenWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_self && w->isFullscreen()) + if (w->m_workspace == m_self && w->isFullscreen()) return w; } @@ -547,11 +547,11 @@ bool CWorkspace::isVisibleNotCovered() { int CWorkspace::getWindows(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; for (auto const& w : g_pCompositor->m_windows) { - if (w->workspaceID() != m_id || !w->m_bIsMapped) + if (w->workspaceID() != m_id || !w->m_isMapped) continue; - if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value()) + if (onlyTiled.has_value() && w->m_isFloating == onlyTiled.value()) continue; - if (onlyPinned.has_value() && w->m_bPinned != onlyPinned.value()) + if (onlyPinned.has_value() && w->m_pinned != onlyPinned.value()) continue; if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value()) continue; @@ -564,13 +564,13 @@ int CWorkspace::getWindows(std::optional onlyTiled, std::optional on int CWorkspace::getGroups(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { int no = 0; for (auto const& w : g_pCompositor->m_windows) { - if (w->workspaceID() != m_id || !w->m_bIsMapped) + if (w->workspaceID() != m_id || !w->m_isMapped) continue; - if (!w->m_sGroupData.head) + if (!w->m_groupData.head) continue; - if (onlyTiled.has_value() && w->m_bIsFloating == onlyTiled.value()) + if (onlyTiled.has_value() && w->m_isFloating == onlyTiled.value()) continue; - if (onlyPinned.has_value() && w->m_bPinned != onlyPinned.value()) + if (onlyPinned.has_value() && w->m_pinned != onlyPinned.value()) continue; if (onlyVisible.has_value() && w->isHidden() == onlyVisible.value()) continue; @@ -581,7 +581,7 @@ int CWorkspace::getGroups(std::optional onlyTiled, std::optional onl PHLWINDOW CWorkspace::getFirstWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_self && w->m_bIsMapped && !w->isHidden()) + if (w->m_workspace == m_self && w->m_isMapped && !w->isHidden()) return w; } @@ -592,7 +592,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { const auto PMONITOR = m_monitor.lock(); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_self || !w->m_bIsMapped || w->isHidden()) + if (w->m_workspace != m_self || !w->m_isMapped || w->isHidden()) continue; const auto WINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved(); @@ -605,7 +605,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { bool CWorkspace::hasUrgentWindow() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == m_self && w->m_bIsMapped && w->m_bIsUrgent) + if (w->m_workspace == m_self && w->m_isMapped && w->m_isUrgent) return true; } @@ -614,7 +614,7 @@ bool CWorkspace::hasUrgentWindow() { void CWorkspace::updateWindowDecos() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_self) + if (w->m_workspace != m_self) continue; w->updateWindowDecos(); @@ -625,7 +625,7 @@ void CWorkspace::updateWindowData() { const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(m_self.lock()); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_self) + if (w->m_workspace != m_self) continue; w->updateWindowData(WORKSPACERULE); @@ -634,7 +634,7 @@ void CWorkspace::updateWindowData() { void CWorkspace::forceReportSizesToWindows() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != m_self || !w->m_bIsMapped || w->isHidden()) + if (w->m_workspace != m_self || !w->m_isMapped || w->isHidden()) continue; w->sendWindowSize(true); @@ -658,10 +658,10 @@ void CWorkspace::rename(const std::string& name) { } void CWorkspace::updateWindows() { - m_hasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_bIsMapped && w->m_pWorkspace == m_self && w->isFullscreen(); }); + m_hasFullscreenWindow = std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_isMapped && w->m_workspace == m_self && w->isFullscreen(); }); for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || w->m_pWorkspace != m_self) + if (!w->m_isMapped || w->m_workspace != m_self) continue; w->updateDynamicRules(); diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 7b0fbd34..3cff2516 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -45,11 +45,11 @@ static void setVector2DAnimToMove(WP pav) { const auto PHLWINDOW = animvar->m_Context.pWindow.lock(); if (PHLWINDOW) - PHLWINDOW->m_bAnimatingIn = false; + PHLWINDOW->m_animatingIn = false; } void Events::listener_mapWindow(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); static auto PINACTIVEALPHA = CConfigValue("decoration:inactive_opacity"); static auto PACTIVEALPHA = CConfigValue("decoration:active_opacity"); @@ -62,16 +62,16 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pCompositor->setActiveMonitor(g_pCompositor->getMonitorFromVector({})); PMONITOR = g_pCompositor->m_lastMonitor.lock(); } - auto PWORKSPACE = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; - PWINDOW->m_pMonitor = PMONITOR; - PWINDOW->m_pWorkspace = PWORKSPACE; - PWINDOW->m_bIsMapped = true; - PWINDOW->m_bReadyToDelete = false; - PWINDOW->m_bFadingOut = false; - PWINDOW->m_szTitle = PWINDOW->fetchTitle(); - PWINDOW->m_bFirstMap = true; - PWINDOW->m_szInitialTitle = PWINDOW->m_szTitle; - PWINDOW->m_szInitialClass = PWINDOW->fetchClass(); + auto PWORKSPACE = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + PWINDOW->m_monitor = PMONITOR; + PWINDOW->m_workspace = PWORKSPACE; + PWINDOW->m_isMapped = true; + PWINDOW->m_readyToDelete = false; + PWINDOW->m_fadingOut = false; + PWINDOW->m_title = PWINDOW->fetchTitle(); + PWINDOW->m_firstMap = true; + PWINDOW->m_initialTitle = PWINDOW->m_title; + PWINDOW->m_initialClass = PWINDOW->fetchClass(); // check for token std::string requestedWorkspace = ""; @@ -89,7 +89,7 @@ void Events::listener_mapWindow(void* owner, void* data) { Debug::log(LOG, "HL_INITIAL_WORKSPACE_TOKEN {} -> {}", SZTOKEN, WS.workspace); - if (g_pCompositor->getWorkspaceByString(WS.workspace) != PWINDOW->m_pWorkspace) { + if (g_pCompositor->getWorkspaceByString(WS.workspace) != PWINDOW->m_workspace) { requestedWorkspace = WS.workspace; workspaceSilent = true; } @@ -102,7 +102,7 @@ void Events::listener_mapWindow(void* owner, void* data) { TOKEN->m_data = WS; } - PWINDOW->m_szInitialWorkspaceToken = SZTOKEN; + PWINDOW->m_initialWorkspaceToken = SZTOKEN; } } } @@ -117,7 +117,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // registers the animated vars and stuff PWINDOW->onMap(); - const auto PWINDOWSURFACE = PWINDOW->m_pWLSurface->resource(); + const auto PWINDOWSURFACE = PWINDOW->m_wlSurface->resource(); if (!PWINDOWSURFACE) { g_pCompositor->removeWindowFromVectorSafe(PWINDOW); @@ -125,39 +125,39 @@ void Events::listener_mapWindow(void* owner, void* data) { } if (g_pXWaylandManager->shouldBeFloated(PWINDOW)) { - PWINDOW->m_bIsFloating = true; - PWINDOW->m_bRequestsFloat = true; + PWINDOW->m_isFloating = true; + PWINDOW->m_requestsFloat = true; } - PWINDOW->m_bX11ShouldntFocus = PWINDOW->m_bX11ShouldntFocus || (PWINDOW->m_bIsX11 && PWINDOW->isX11OverrideRedirect() && !PWINDOW->m_pXWaylandSurface->wantsFocus()); + PWINDOW->m_X11ShouldntFocus = PWINDOW->m_X11ShouldntFocus || (PWINDOW->m_isX11 && PWINDOW->isX11OverrideRedirect() && !PWINDOW->m_xwaylandSurface->wantsFocus()); // window rules - PWINDOW->m_vMatchedRules = g_pConfigManager->getMatchingRules(PWINDOW, false); + PWINDOW->m_matchedRules = g_pConfigManager->getMatchingRules(PWINDOW, false); std::optional requestedInternalFSMode, requestedClientFSMode; std::optional requestedFSState; - if (PWINDOW->m_bWantsInitialFullscreen || (PWINDOW->m_bIsX11 && PWINDOW->m_pXWaylandSurface->fullscreen)) + if (PWINDOW->m_wantsInitialFullscreen || (PWINDOW->m_isX11 && PWINDOW->m_xwaylandSurface->fullscreen)) requestedClientFSMode = FSMODE_FULLSCREEN; - MONITORID requestedFSMonitor = PWINDOW->m_iWantsInitialFullscreenMonitor; + MONITORID requestedFSMonitor = PWINDOW->m_wantsInitialFullscreenMonitor; - for (auto const& r : PWINDOW->m_vMatchedRules) { - switch (r->ruleType) { + for (auto const& r : PWINDOW->m_matchedRules) { + switch (r->m_ruleType) { case CWindowRule::RULE_MONITOR: { try { - const auto MONITORSTR = trim(r->szRule.substr(r->szRule.find(' '))); + const auto MONITORSTR = trim(r->m_rule.substr(r->m_rule.find(' '))); if (MONITORSTR == "unset") { - PWINDOW->m_pMonitor = PMONITOR; + PWINDOW->m_monitor = PMONITOR; } else { if (isNumber(MONITORSTR)) { const MONITORID MONITOR = std::stoi(MONITORSTR); if (const auto PM = g_pCompositor->getMonitorFromID(MONITOR); PM) - PWINDOW->m_pMonitor = PM; + PWINDOW->m_monitor = PM; else - PWINDOW->m_pMonitor = g_pCompositor->m_monitors.at(0); + PWINDOW->m_monitor = g_pCompositor->m_monitors.at(0); } else { const auto PMONITOR = g_pCompositor->getMonitorFromName(MONITORSTR); if (PMONITOR) - PWINDOW->m_pMonitor = PMONITOR; + PWINDOW->m_monitor = PMONITOR; else { Debug::log(ERR, "No monitor in monitor {} rule", MONITORSTR); continue; @@ -165,23 +165,23 @@ void Events::listener_mapWindow(void* owner, void* data) { } } - const auto PMONITORFROMID = PWINDOW->m_pMonitor.lock(); + const auto PMONITORFROMID = PWINDOW->m_monitor.lock(); - if (PWINDOW->m_pMonitor != PMONITOR) { + if (PWINDOW->m_monitor != PMONITOR) { g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } - PWINDOW->m_pWorkspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; - PWORKSPACE = PWINDOW->m_pWorkspace; + PWINDOW->m_workspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + PWORKSPACE = PWINDOW->m_workspace; Debug::log(LOG, "Rule monitor, applying to {:mw}", PWINDOW); requestedFSMonitor = MONITOR_INVALID; - } catch (std::exception& e) { Debug::log(ERR, "Rule monitor failed, rule: {} -> {} | err: {}", r->szRule, r->szValue, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "Rule monitor failed, rule: {} -> {} | err: {}", r->m_rule, r->m_value, e.what()); } break; } case CWindowRule::RULE_WORKSPACE: { // check if it isnt unset - const auto WORKSPACERQ = r->szRule.substr(r->szRule.find_first_of(' ') + 1); + const auto WORKSPACERQ = r->m_rule.substr(r->m_rule.find_first_of(' ') + 1); if (WORKSPACERQ == "unset") requestedWorkspace = ""; @@ -193,28 +193,28 @@ void Events::listener_mapWindow(void* owner, void* data) { if (JUSTWORKSPACE == PWORKSPACE->m_name || JUSTWORKSPACE == "name:" + PWORKSPACE->m_name) requestedWorkspace = ""; - Debug::log(LOG, "Rule workspace matched by {}, {} applied.", PWINDOW, r->szValue); + Debug::log(LOG, "Rule workspace matched by {}, {} applied.", PWINDOW, r->m_value); requestedFSMonitor = MONITOR_INVALID; break; } case CWindowRule::RULE_FLOAT: { - PWINDOW->m_bIsFloating = true; + PWINDOW->m_isFloating = true; break; } case CWindowRule::RULE_TILE: { - PWINDOW->m_bIsFloating = false; + PWINDOW->m_isFloating = false; break; } case CWindowRule::RULE_PSEUDO: { - PWINDOW->m_bIsPseudotiled = true; + PWINDOW->m_isPseudotiled = true; break; } case CWindowRule::RULE_NOINITIALFOCUS: { - PWINDOW->m_bNoInitialFocus = true; + PWINDOW->m_noInitialFocus = true; break; } case CWindowRule::RULE_FULLSCREENSTATE: { - const auto ARGS = CVarList(r->szRule.substr(r->szRule.find_first_of(' ') + 1), 2, ' '); + const auto ARGS = CVarList(r->m_rule.substr(r->m_rule.find_first_of(' ') + 1), 2, ' '); int internalMode, clientMode; try { internalMode = std::stoi(ARGS[0]); @@ -226,25 +226,25 @@ void Events::listener_mapWindow(void* owner, void* data) { break; } case CWindowRule::RULE_SUPPRESSEVENT: { - CVarList vars(r->szRule, 0, 's', true); + CVarList vars(r->m_rule, 0, 's', true); for (size_t i = 1; i < vars.size(); ++i) { if (vars[i] == "fullscreen") - PWINDOW->m_eSuppressedEvents |= SUPPRESS_FULLSCREEN; + PWINDOW->m_suppressedEvents |= SUPPRESS_FULLSCREEN; else if (vars[i] == "maximize") - PWINDOW->m_eSuppressedEvents |= SUPPRESS_MAXIMIZE; + PWINDOW->m_suppressedEvents |= SUPPRESS_MAXIMIZE; else if (vars[i] == "activate") - PWINDOW->m_eSuppressedEvents |= SUPPRESS_ACTIVATE; + PWINDOW->m_suppressedEvents |= SUPPRESS_ACTIVATE; else if (vars[i] == "activatefocus") - PWINDOW->m_eSuppressedEvents |= SUPPRESS_ACTIVATE_FOCUSONLY; + PWINDOW->m_suppressedEvents |= SUPPRESS_ACTIVATE_FOCUSONLY; else if (vars[i] == "fullscreenoutput") - PWINDOW->m_eSuppressedEvents |= SUPPRESS_FULLSCREEN_OUTPUT; + PWINDOW->m_suppressedEvents |= SUPPRESS_FULLSCREEN_OUTPUT; else Debug::log(ERR, "Error while parsing suppressevent windowrule: unknown event type {}", vars[i]); } break; } case CWindowRule::RULE_PIN: { - PWINDOW->m_bPinned = true; + PWINDOW->m_pinned = true; break; } case CWindowRule::RULE_FULLSCREEN: { @@ -256,20 +256,20 @@ void Events::listener_mapWindow(void* owner, void* data) { break; } case CWindowRule::RULE_STAYFOCUSED: { - PWINDOW->m_bStayFocused = true; + PWINDOW->m_stayFocused = true; break; } case CWindowRule::RULE_GROUP: { - if (PWINDOW->m_eGroupRules & GROUP_OVERRIDE) + if (PWINDOW->m_groupRules & GROUP_OVERRIDE) continue; // `group` is a shorthand of `group set` - if (trim(r->szRule) == "group") { - PWINDOW->m_eGroupRules |= GROUP_SET; + if (trim(r->m_rule) == "group") { + PWINDOW->m_groupRules |= GROUP_SET; continue; } - CVarList vars(r->szRule, 0, 's'); + CVarList vars(r->m_rule, 0, 's'); std::string vPrev = ""; for (auto const& v : vars) { @@ -277,30 +277,30 @@ void Events::listener_mapWindow(void* owner, void* data) { continue; if (v == "set") { - PWINDOW->m_eGroupRules |= GROUP_SET; + PWINDOW->m_groupRules |= GROUP_SET; } else if (v == "new") { // shorthand for `group barred set` - PWINDOW->m_eGroupRules |= (GROUP_SET | GROUP_BARRED); + PWINDOW->m_groupRules |= (GROUP_SET | GROUP_BARRED); } else if (v == "lock") { - PWINDOW->m_eGroupRules |= GROUP_LOCK; + PWINDOW->m_groupRules |= GROUP_LOCK; } else if (v == "invade") { - PWINDOW->m_eGroupRules |= GROUP_INVADE; + PWINDOW->m_groupRules |= GROUP_INVADE; } else if (v == "barred") { - PWINDOW->m_eGroupRules |= GROUP_BARRED; + PWINDOW->m_groupRules |= GROUP_BARRED; } else if (v == "deny") { - PWINDOW->m_sGroupData.deny = true; + PWINDOW->m_groupData.deny = true; } else if (v == "override") { // Clear existing rules - PWINDOW->m_eGroupRules = GROUP_OVERRIDE; + PWINDOW->m_groupRules = GROUP_OVERRIDE; } else if (v == "unset") { // Clear existing rules and stop processing - PWINDOW->m_eGroupRules = GROUP_OVERRIDE; + PWINDOW->m_groupRules = GROUP_OVERRIDE; break; } else if (v == "always") { if (vPrev == "set" || vPrev == "group") - PWINDOW->m_eGroupRules |= GROUP_SET_ALWAYS; + PWINDOW->m_groupRules |= GROUP_SET_ALWAYS; else if (vPrev == "lock") - PWINDOW->m_eGroupRules |= GROUP_LOCK_ALWAYS; + PWINDOW->m_groupRules |= GROUP_LOCK_ALWAYS; else Debug::log(ERR, "windowrule `group` does not support `{} always`", vPrev); } @@ -309,10 +309,10 @@ void Events::listener_mapWindow(void* owner, void* data) { break; } case CWindowRule::RULE_CONTENT: { - const CVarList VARS(r->szRule, 0, ' '); + const CVarList VARS(r->m_rule, 0, ' '); try { PWINDOW->setContentType(NContentType::fromString(VARS[1])); - } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->szRule, e.what()); } + } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } default: break; @@ -322,8 +322,8 @@ void Events::listener_mapWindow(void* owner, void* data) { } // disallow tiled pinned - if (PWINDOW->m_bPinned && !PWINDOW->m_bIsFloating) - PWINDOW->m_bPinned = false; + if (PWINDOW->m_pinned && !PWINDOW->m_isFloating) + PWINDOW->m_pinned = false; const CVarList WORKSPACEARGS = CVarList(requestedWorkspace, 0, ' '); @@ -341,16 +341,16 @@ void Events::listener_mapWindow(void* owner, void* data) { PWORKSPACE = pWorkspace; - PWINDOW->m_pWorkspace = pWorkspace; - PWINDOW->m_pMonitor = pWorkspace->m_monitor; + PWINDOW->m_workspace = pWorkspace; + PWINDOW->m_monitor = pWorkspace->m_monitor; - if (PWINDOW->m_pMonitor.lock()->activeSpecialWorkspace && !pWorkspace->m_isSpecialWorkspace) + if (PWINDOW->m_monitor.lock()->activeSpecialWorkspace && !pWorkspace->m_isSpecialWorkspace) workspaceSilent = true; if (!workspaceSilent) { if (pWorkspace->m_isSpecialWorkspace) pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace); - else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_bNoInitialFocus) + else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_noInitialFocus) g_pKeybindManager->m_mDispatchers["workspace"](requestedWorkspaceName); PMONITOR = g_pCompositor->m_lastMonitor.lock(); @@ -361,48 +361,48 @@ void Events::listener_mapWindow(void* owner, void* data) { workspaceSilent = false; } - if (PWINDOW->m_eSuppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT) + if (PWINDOW->m_suppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT) requestedFSMonitor = MONITOR_INVALID; else if (requestedFSMonitor != MONITOR_INVALID) { if (const auto PM = g_pCompositor->getMonitorFromID(requestedFSMonitor); PM) - PWINDOW->m_pMonitor = PM; + PWINDOW->m_monitor = PM; - const auto PMONITORFROMID = PWINDOW->m_pMonitor.lock(); + const auto PMONITORFROMID = PWINDOW->m_monitor.lock(); - if (PWINDOW->m_pMonitor != PMONITOR) { + if (PWINDOW->m_monitor != PMONITOR) { g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } - PWINDOW->m_pWorkspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; - PWORKSPACE = PWINDOW->m_pWorkspace; + PWINDOW->m_workspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + PWORKSPACE = PWINDOW->m_workspace; Debug::log(LOG, "Requested monitor, applying to {:mw}", PWINDOW); } if (PWORKSPACE->m_defaultFloating) - PWINDOW->m_bIsFloating = true; + PWINDOW->m_isFloating = true; if (PWORKSPACE->m_defaultPseudo) { - PWINDOW->m_bIsPseudotiled = true; - CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(PWINDOW); - PWINDOW->m_vPseudoSize = Vector2D(desiredGeometry.width, desiredGeometry.height); + PWINDOW->m_isPseudotiled = true; + CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(PWINDOW); + PWINDOW->m_pseudoSize = Vector2D(desiredGeometry.width, desiredGeometry.height); } PWINDOW->updateWindowData(); // Verify window swallowing. Get the swallower before calling onWindowCreated(PWINDOW) because getSwallower() wouldn't get it after if PWINDOW gets auto grouped. - const auto SWALLOWER = PWINDOW->getSwallower(); - PWINDOW->m_pSwallowed = SWALLOWER; - if (PWINDOW->m_pSwallowed) - PWINDOW->m_pSwallowed->m_bCurrentlySwallowed = true; + const auto SWALLOWER = PWINDOW->getSwallower(); + PWINDOW->m_swallowed = SWALLOWER; + if (PWINDOW->m_swallowed) + PWINDOW->m_swallowed->m_currentlySwallowed = true; - if (PWINDOW->m_bIsFloating) { + if (PWINDOW->m_isFloating) { g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW); - PWINDOW->m_bCreatedOverFullscreen = true; + PWINDOW->m_createdOverFullscreen = true; // size and move rules - for (auto const& r : PWINDOW->m_vMatchedRules) { - switch (r->ruleType) { + for (auto const& r : PWINDOW->m_matchedRules) { + switch (r->m_ruleType) { case CWindowRule::RULE_SIZE: { try { auto stringToFloatClamp = [](const std::string& VALUE, const float CURR, const float REL) { @@ -414,29 +414,29 @@ void Events::listener_mapWindow(void* owner, void* data) { return stringToPercentage(VALUE, REL); }; - const auto VALUE = r->szRule.substr(r->szRule.find(' ') + 1); + const auto VALUE = r->m_rule.substr(r->m_rule.find(' ') + 1); const auto SIZEXSTR = VALUE.substr(0, VALUE.find(' ')); const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1); const auto MAXSIZE = PWINDOW->requestedMaxSize(); const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, PMONITOR->vecSize.x) : - stringToFloatClamp(SIZEXSTR, PWINDOW->m_vRealSize->goal().x, PMONITOR->vecSize.x); + stringToFloatClamp(SIZEXSTR, PWINDOW->m_realSize->goal().x, PMONITOR->vecSize.x); const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, PMONITOR->vecSize.y) : - stringToFloatClamp(SIZEYSTR, PWINDOW->m_vRealSize->goal().y, PMONITOR->vecSize.y); + stringToFloatClamp(SIZEYSTR, PWINDOW->m_realSize->goal().y, PMONITOR->vecSize.y); Debug::log(LOG, "Rule size, applying to {}", PWINDOW); PWINDOW->clampWindowSize(Vector2D{SIZEXSTR.starts_with("<") ? 0 : SIZEX, SIZEYSTR.starts_with("<") ? 0 : SIZEY}, Vector2D{SIZEX, SIZEY}); PWINDOW->setHidden(false); - } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->szRule, r->szValue); } + } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->m_rule, r->m_value); } break; } case CWindowRule::RULE_MOVE: { try { - auto value = r->szRule.substr(r->szRule.find(' ') + 1); + auto value = r->m_rule.substr(r->m_rule.find(' ') + 1); const bool ONSCREEN = value.starts_with("onscreen"); @@ -461,7 +461,7 @@ void Events::listener_mapWindow(void* owner, void* data) { (!POSXRAW.contains('%') ? std::stoi(POSXRAW) : std::stof(POSXRAW.substr(0, POSXRAW.length() - 1)) * 0.01 * PMONITOR->vecSize.x); if (subtractWindow) - posX -= PWINDOW->m_vRealSize->goal().x; + posX -= PWINDOW->m_realSize->goal().x; if (CURSOR) Debug::log(ERR, "Cursor is not compatible with 100%-, ignoring cursor!"); @@ -473,7 +473,7 @@ void Events::listener_mapWindow(void* owner, void* data) { posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x; } else { posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x + - (!POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize->goal().x); + (!POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PWINDOW->m_realSize->goal().x); } } @@ -484,7 +484,7 @@ void Events::listener_mapWindow(void* owner, void* data) { (!POSYRAW.contains('%') ? std::stoi(POSYRAW) : std::stof(POSYRAW.substr(0, POSYRAW.length() - 1)) * 0.01 * PMONITOR->vecSize.y); if (subtractWindow) - posY -= PWINDOW->m_vRealSize->goal().y; + posY -= PWINDOW->m_realSize->goal().y; if (CURSOR) Debug::log(ERR, "Cursor is not compatible with 100%-, ignoring cursor!"); @@ -496,7 +496,7 @@ void Events::listener_mapWindow(void* owner, void* data) { posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y; } else { posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y + - (!POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize->goal().y); + (!POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PWINDOW->m_realSize->goal().y); } } @@ -504,27 +504,27 @@ void Events::listener_mapWindow(void* owner, void* data) { int borderSize = PWINDOW->getRealBorderSize(); posX = std::clamp(posX, (int)(PMONITOR->vecReservedTopLeft.x + borderSize), - (int)(PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PWINDOW->m_vRealSize->goal().x - borderSize)); + (int)(PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PWINDOW->m_realSize->goal().x - borderSize)); posY = std::clamp(posY, (int)(PMONITOR->vecReservedTopLeft.y + borderSize), - (int)(PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PWINDOW->m_vRealSize->goal().y - borderSize)); + (int)(PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PWINDOW->m_realSize->goal().y - borderSize)); } Debug::log(LOG, "Rule move, applying to {}", PWINDOW); - *PWINDOW->m_vRealPosition = Vector2D(posX, posY) + PMONITOR->vecPosition; + *PWINDOW->m_realPosition = Vector2D(posX, posY) + PMONITOR->vecPosition; PWINDOW->setHidden(false); - } catch (...) { Debug::log(LOG, "Rule move failed, rule: {} -> {}", r->szRule, r->szValue); } + } catch (...) { Debug::log(LOG, "Rule move failed, rule: {} -> {}", r->m_rule, r->m_value); } break; } case CWindowRule::RULE_CENTER: { auto RESERVEDOFFSET = Vector2D(); - const auto ARGS = CVarList(r->szRule, 2, ' '); + const auto ARGS = CVarList(r->m_rule, 2, ' '); if (ARGS[1] == "1") RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f; - *PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize->goal() / 2.f + RESERVEDOFFSET; + *PWINDOW->m_realPosition = PMONITOR->middle() - PWINDOW->m_realSize->goal() / 2.f + RESERVEDOFFSET; break; } @@ -534,7 +534,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // set the pseudo size to the GOAL of our current size // because the windows are animated on RealSize - PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize->goal(); + PWINDOW->m_pseudoSize = PWINDOW->m_realSize->goal(); g_pCompositor->changeWindowZOrder(PWINDOW, true); } else { @@ -542,12 +542,12 @@ void Events::listener_mapWindow(void* owner, void* data) { bool setPseudo = false; - for (auto const& r : PWINDOW->m_vMatchedRules) { - if (r->ruleType != CWindowRule::RULE_SIZE) + for (auto const& r : PWINDOW->m_matchedRules) { + if (r->m_ruleType != CWindowRule::RULE_SIZE) continue; try { - const auto VALUE = r->szRule.substr(r->szRule.find(' ') + 1); + const auto VALUE = r->m_rule.substr(r->m_rule.find(' ') + 1); const auto SIZEXSTR = VALUE.substr(0, VALUE.find(' ')); const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1); @@ -559,67 +559,67 @@ void Events::listener_mapWindow(void* owner, void* data) { Debug::log(LOG, "Rule size (tiled), applying to {}", PWINDOW); - setPseudo = true; - PWINDOW->m_vPseudoSize = Vector2D(SIZEX, SIZEY); + setPseudo = true; + PWINDOW->m_pseudoSize = Vector2D(SIZEX, SIZEY); PWINDOW->setHidden(false); - } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->szRule, r->szValue); } + } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->m_rule, r->m_value); } } if (!setPseudo) - PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize->goal() - Vector2D(10, 10); + PWINDOW->m_pseudoSize = PWINDOW->m_realSize->goal() - Vector2D(10, 10); } const auto PFOCUSEDWINDOWPREV = g_pCompositor->m_lastWindow.lock(); - if (PWINDOW->m_sWindowData.allowsInput.valueOrDefault()) { // if default value wasn't set to false getPriority() would throw an exception - PWINDOW->m_sWindowData.noFocus = CWindowOverridableVar(false, PWINDOW->m_sWindowData.allowsInput.getPriority()); - PWINDOW->m_bNoInitialFocus = false; - PWINDOW->m_bX11ShouldntFocus = false; + if (PWINDOW->m_windowData.allowsInput.valueOrDefault()) { // if default value wasn't set to false getPriority() would throw an exception + PWINDOW->m_windowData.noFocus = CWindowOverridableVar(false, PWINDOW->m_windowData.allowsInput.getPriority()); + PWINDOW->m_noInitialFocus = false; + PWINDOW->m_X11ShouldntFocus = false; } // check LS focus grab const auto PFORCEFOCUS = g_pCompositor->getForceFocus(); const auto PLSFROMFOCUS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); if (PLSFROMFOCUS && PLSFROMFOCUS->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) - PWINDOW->m_bNoInitialFocus = true; + PWINDOW->m_noInitialFocus = true; - if (PWINDOW->m_pWorkspace->m_hasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_bIsFloating) { + if (PWINDOW->m_workspace->m_hasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_isFloating) { if (*PNEWTAKESOVERFS == 0) - PWINDOW->m_bNoInitialFocus = true; + PWINDOW->m_noInitialFocus = true; else if (*PNEWTAKESOVERFS == 1) - requestedInternalFSMode = PWINDOW->m_pWorkspace->m_fullscreenMode; + requestedInternalFSMode = PWINDOW->m_workspace->m_fullscreenMode; else if (*PNEWTAKESOVERFS == 2) - g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE); + g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_workspace->getFullscreenWindow(), FSMODE_NONE); } - if (!PWINDOW->m_sWindowData.noFocus.valueOrDefault() && !PWINDOW->m_bNoInitialFocus && - (!PWINDOW->isX11OverrideRedirect() || (PWINDOW->m_bIsX11 && PWINDOW->m_pXWaylandSurface->wantsFocus())) && !workspaceSilent && (!PFORCEFOCUS || PFORCEFOCUS == PWINDOW) && + if (!PWINDOW->m_windowData.noFocus.valueOrDefault() && !PWINDOW->m_noInitialFocus && + (!PWINDOW->isX11OverrideRedirect() || (PWINDOW->m_isX11 && PWINDOW->m_xwaylandSurface->wantsFocus())) && !workspaceSilent && (!PFORCEFOCUS || PFORCEFOCUS == PWINDOW) && !g_pInputManager->isConstrained()) { g_pCompositor->focusWindow(PWINDOW); - PWINDOW->m_fActiveInactiveAlpha->setValueAndWarp(*PACTIVEALPHA); - PWINDOW->m_fDimPercent->setValueAndWarp(PWINDOW->m_sWindowData.noDim.valueOrDefault() ? 0.f : *PDIMSTRENGTH); + PWINDOW->m_activeInactiveAlpha->setValueAndWarp(*PACTIVEALPHA); + PWINDOW->m_dimPercent->setValueAndWarp(PWINDOW->m_windowData.noDim.valueOrDefault() ? 0.f : *PDIMSTRENGTH); } else { - PWINDOW->m_fActiveInactiveAlpha->setValueAndWarp(*PINACTIVEALPHA); - PWINDOW->m_fDimPercent->setValueAndWarp(0); + PWINDOW->m_activeInactiveAlpha->setValueAndWarp(*PINACTIVEALPHA); + PWINDOW->m_dimPercent->setValueAndWarp(0); } - if (requestedClientFSMode.has_value() && (PWINDOW->m_eSuppressedEvents & SUPPRESS_FULLSCREEN)) + if (requestedClientFSMode.has_value() && (PWINDOW->m_suppressedEvents & SUPPRESS_FULLSCREEN)) requestedClientFSMode = (eFullscreenMode)((uint8_t)requestedClientFSMode.value_or(FSMODE_NONE) & ~(uint8_t)FSMODE_FULLSCREEN); - if (requestedClientFSMode.has_value() && (PWINDOW->m_eSuppressedEvents & SUPPRESS_MAXIMIZE)) + if (requestedClientFSMode.has_value() && (PWINDOW->m_suppressedEvents & SUPPRESS_MAXIMIZE)) requestedClientFSMode = (eFullscreenMode)((uint8_t)requestedClientFSMode.value_or(FSMODE_NONE) & ~(uint8_t)FSMODE_MAXIMIZED); - if (!PWINDOW->m_bNoInitialFocus && (requestedInternalFSMode.has_value() || requestedClientFSMode.has_value() || requestedFSState.has_value())) { + if (!PWINDOW->m_noInitialFocus && (requestedInternalFSMode.has_value() || requestedClientFSMode.has_value() || requestedFSState.has_value())) { // fix fullscreen on requested (basically do a switcheroo) - if (PWINDOW->m_pWorkspace->m_hasFullscreenWindow) - g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_pWorkspace->getFullscreenWindow(), FSMODE_NONE); + if (PWINDOW->m_workspace->m_hasFullscreenWindow) + g_pCompositor->setWindowFullscreenInternal(PWINDOW->m_workspace->getFullscreenWindow(), FSMODE_NONE); - PWINDOW->m_vRealPosition->warp(); - PWINDOW->m_vRealSize->warp(); + PWINDOW->m_realPosition->warp(); + PWINDOW->m_realSize->warp(); if (requestedFSState.has_value()) { - PWINDOW->m_sWindowData.syncFullscreen = CWindowOverridableVar(false, PRIORITY_WINDOW_RULE); + PWINDOW->m_windowData.syncFullscreen = CWindowOverridableVar(false, PRIORITY_WINDOW_RULE); g_pCompositor->setWindowFullscreenState(PWINDOW, requestedFSState.value()); - } else if (requestedInternalFSMode.has_value() && requestedClientFSMode.has_value() && !PWINDOW->m_sWindowData.syncFullscreen.valueOrDefault()) + } else if (requestedInternalFSMode.has_value() && requestedClientFSMode.has_value() && !PWINDOW->m_windowData.syncFullscreen.valueOrDefault()) g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = requestedInternalFSMode.value(), .client = requestedClientFSMode.value()}); else if (requestedInternalFSMode.has_value()) g_pCompositor->setWindowFullscreenInternal(PWINDOW, requestedInternalFSMode.value()); @@ -648,12 +648,12 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); } - PWINDOW->m_bFirstMap = false; + PWINDOW->m_firstMap = false; - Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_vRealPosition->goal(), PWINDOW->m_vRealSize->goal()); + Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_realPosition->goal(), PWINDOW->m_realSize->goal()); auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name; - g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, PWINDOW->m_szClass, PWINDOW->m_szTitle)}); + g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, PWINDOW->m_class, PWINDOW->m_title)}); EMIT_HOOK_EVENT("openWindow", PWINDOW); // apply data from default decos. Borders, shadows. @@ -663,65 +663,65 @@ void Events::listener_mapWindow(void* owner, void* data) { // do animations g_pAnimationManager->onWindowPostCreateClose(PWINDOW, false); - PWINDOW->m_fAlpha->setValueAndWarp(0.f); - *PWINDOW->m_fAlpha = 1.f; + PWINDOW->m_alpha->setValueAndWarp(0.f); + *PWINDOW->m_alpha = 1.f; - PWINDOW->m_vRealPosition->setCallbackOnEnd(setVector2DAnimToMove); - PWINDOW->m_vRealSize->setCallbackOnEnd(setVector2DAnimToMove); + PWINDOW->m_realPosition->setCallbackOnEnd(setVector2DAnimToMove); + PWINDOW->m_realSize->setCallbackOnEnd(setVector2DAnimToMove); // recalc the values for this window g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); // avoid this window being visible - if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen() && !PWINDOW->m_bIsFloating) - PWINDOW->m_fAlpha->setValueAndWarp(0.f); + if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen() && !PWINDOW->m_isFloating) + PWINDOW->m_alpha->setValueAndWarp(0.f); - g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_pWLSurface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_pWLSurface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->scale); + g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->transform); if (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained()) g_pInputManager->sendMotionEventsToFocused(); // fix some xwayland apps that don't behave nicely - PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize; + PWINDOW->m_reportedSize = PWINDOW->m_pendingReportedSize; - if (PWINDOW->m_pWorkspace) - PWINDOW->m_pWorkspace->updateWindows(); + if (PWINDOW->m_workspace) + PWINDOW->m_workspace->updateWindows(); if (PMONITOR && PWINDOW->isX11OverrideRedirect()) - PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale; + PWINDOW->m_X11SurfaceScaledBy = PMONITOR->scale; } void Events::listener_unmapWindow(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); Debug::log(LOG, "{:c} unmapped", PWINDOW); static auto PEXITRETAINSFS = CConfigValue("misc:exit_window_retains_fullscreen"); const auto CURRENTWINDOWFSSTATE = PWINDOW->isFullscreen(); - const auto CURRENTFSMODE = PWINDOW->m_sFullscreenState.internal; + const auto CURRENTFSMODE = PWINDOW->m_fullscreenState.internal; - if (!PWINDOW->m_pWLSurface->exists() || !PWINDOW->m_bIsMapped) { + if (!PWINDOW->m_wlSurface->exists() || !PWINDOW->m_isMapped) { Debug::log(WARN, "{} unmapped without being mapped??", PWINDOW); - PWINDOW->m_bFadingOut = false; + PWINDOW->m_fadingOut = false; return; } - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PWINDOW->m_monitor.lock(); if (PMONITOR) { - PWINDOW->m_vOriginalClosedPos = PWINDOW->m_vRealPosition->value() - PMONITOR->vecPosition; - PWINDOW->m_vOriginalClosedSize = PWINDOW->m_vRealSize->value(); - PWINDOW->m_eOriginalClosedExtents = PWINDOW->getFullWindowExtents(); + PWINDOW->m_originalClosedPos = PWINDOW->m_realPosition->value() - PMONITOR->vecPosition; + PWINDOW->m_originalClosedSize = PWINDOW->m_realSize->value(); + PWINDOW->m_originalClosedExtents = PWINDOW->getFullWindowExtents(); } g_pEventManager->postEvent(SHyprIPCEvent{"closewindow", std::format("{:x}", PWINDOW)}); EMIT_HOOK_EVENT("closeWindow", PWINDOW); - if (PWINDOW->m_bIsFloating && !PWINDOW->m_bIsX11 && - std::any_of(PWINDOW->m_vMatchedRules.begin(), PWINDOW->m_vMatchedRules.end(), [](const auto& r) { return r->ruleType == CWindowRule::RULE_PERSISTENTSIZE; })) { - Debug::log(LOG, "storing floating size {}x{} for window {}::{} on close", PWINDOW->m_vRealSize->value().x, PWINDOW->m_vRealSize->value().y, PWINDOW->m_szClass, - PWINDOW->m_szTitle); - g_pConfigManager->storeFloatingSize(PWINDOW, PWINDOW->m_vRealSize->value()); + if (PWINDOW->m_isFloating && !PWINDOW->m_isX11 && + std::any_of(PWINDOW->m_matchedRules.begin(), PWINDOW->m_matchedRules.end(), [](const auto& r) { return r->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; })) { + Debug::log(LOG, "storing floating size {}x{} for window {}::{} on close", PWINDOW->m_realSize->value().x, PWINDOW->m_realSize->value().y, PWINDOW->m_class, + PWINDOW->m_title); + g_pConfigManager->storeFloatingSize(PWINDOW, PWINDOW->m_realSize->value()); } PROTO::toplevelExport->onWindowUnmap(PWINDOW); @@ -733,19 +733,19 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pHyprRenderer->makeWindowSnapshot(PWINDOW); // swallowing - if (valid(PWINDOW->m_pSwallowed)) { - if (PWINDOW->m_pSwallowed->m_bCurrentlySwallowed) { - PWINDOW->m_pSwallowed->m_bCurrentlySwallowed = false; - PWINDOW->m_pSwallowed->setHidden(false); + if (valid(PWINDOW->m_swallowed)) { + if (PWINDOW->m_swallowed->m_currentlySwallowed) { + PWINDOW->m_swallowed->m_currentlySwallowed = false; + PWINDOW->m_swallowed->setHidden(false); - if (PWINDOW->m_sGroupData.pNextWindow.lock()) - PWINDOW->m_pSwallowed->m_bGroupSwallowed = true; // flag for the swallowed window to be created into the group where it belongs when auto_group = false. + if (PWINDOW->m_groupData.pNextWindow.lock()) + PWINDOW->m_swallowed->m_groupSwallowed = true; // flag for the swallowed window to be created into the group where it belongs when auto_group = false. - g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW->m_pSwallowed.lock()); + g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW->m_swallowed.lock()); } - PWINDOW->m_pSwallowed->m_bGroupSwallowed = false; - PWINDOW->m_pSwallowed.reset(); + PWINDOW->m_swallowed->m_groupSwallowed = false; + PWINDOW->m_swallowed.reset(); } bool wasLastWindow = false; @@ -762,7 +762,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); // remove the fullscreen window status from workspace if we closed it - const auto PWORKSPACE = PWINDOW->m_pWorkspace; + const auto PWORKSPACE = PWINDOW->m_workspace; if (PWORKSPACE->m_hasFullscreenWindow && PWINDOW->isFullscreen()) PWORKSPACE->m_hasFullscreenWindow = false; @@ -772,7 +772,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pHyprRenderer->damageWindow(PWINDOW); // do this after onWindowRemoved because otherwise it'll think the window is invalid - PWINDOW->m_bIsMapped = false; + PWINDOW->m_isMapped = false; // refocus on a new window if needed if (wasLastWindow) { @@ -791,7 +791,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pCompositor->setWindowFullscreenInternal(PWINDOWCANDIDATE, CURRENTFSMODE); } - if (!PWINDOWCANDIDATE && PWINDOW->m_pWorkspace && PWINDOW->m_pWorkspace->getWindows() == 0) + if (!PWINDOWCANDIDATE && PWINDOW->m_workspace && PWINDOW->m_workspace->getWindows() == 0) g_pInputManager->refocus(); g_pInputManager->sendMotionEventsToFocused(); @@ -806,57 +806,57 @@ void Events::listener_unmapWindow(void* owner, void* data) { Debug::log(LOG, "Unmapped was not focused, ignoring a refocus."); } - PWINDOW->m_bFadingOut = true; + PWINDOW->m_fadingOut = true; g_pCompositor->addToFadingOutSafe(PWINDOW); - if (!PWINDOW->m_bX11DoesntWantBorders) // don't animate out if they weren't animated in. - *PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition->value() + Vector2D(0.01f, 0.01f); // it has to be animated, otherwise onWindowPostCreateClose will ignore it + if (!PWINDOW->m_X11DoesntWantBorders) // don't animate out if they weren't animated in. + *PWINDOW->m_realPosition = PWINDOW->m_realPosition->value() + Vector2D(0.01f, 0.01f); // it has to be animated, otherwise onWindowPostCreateClose will ignore it // anims g_pAnimationManager->onWindowPostCreateClose(PWINDOW, true); - *PWINDOW->m_fAlpha = 0.f; + *PWINDOW->m_alpha = 0.f; // recheck idle inhibitors g_pInputManager->recheckIdleInhibitorStatus(); // force report all sizes (QT sometimes has an issue with this) - if (PWINDOW->m_pWorkspace) - PWINDOW->m_pWorkspace->forceReportSizesToWindows(); + if (PWINDOW->m_workspace) + PWINDOW->m_workspace->forceReportSizesToWindows(); // update lastwindow after focus PWINDOW->onUnmap(); } void Events::listener_commitWindow(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); - if (!PWINDOW->m_bIsX11 && PWINDOW->m_pXDGSurface->initialCommit) { + if (!PWINDOW->m_isX11 && PWINDOW->m_xdgSurface->initialCommit) { Vector2D predSize = g_pLayoutManager->getCurrentLayout()->predictSizeForNewWindow(PWINDOW); Debug::log(LOG, "Layout predicts size {} for {}", predSize, PWINDOW); - PWINDOW->m_pXDGSurface->toplevel->setSize(predSize); + PWINDOW->m_xdgSurface->toplevel->setSize(predSize); return; } - if (!PWINDOW->m_bIsMapped || PWINDOW->isHidden()) + if (!PWINDOW->m_isMapped || PWINDOW->isHidden()) return; - PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize; // apply pending size. We pinged, the window ponged. + PWINDOW->m_reportedSize = PWINDOW->m_pendingReportedSize; // apply pending size. We pinged, the window ponged. - if (!PWINDOW->m_bIsX11 && !PWINDOW->isFullscreen() && PWINDOW->m_bIsFloating) { - const auto MINSIZE = PWINDOW->m_pXDGSurface->toplevel->layoutMinSize(); - const auto MAXSIZE = PWINDOW->m_pXDGSurface->toplevel->layoutMaxSize(); + if (!PWINDOW->m_isX11 && !PWINDOW->isFullscreen() && PWINDOW->m_isFloating) { + const auto MINSIZE = PWINDOW->m_xdgSurface->toplevel->layoutMinSize(); + const auto MAXSIZE = PWINDOW->m_xdgSurface->toplevel->layoutMaxSize(); PWINDOW->clampWindowSize(MINSIZE, MAXSIZE > Vector2D{1, 1} ? std::optional{MAXSIZE} : std::nullopt); g_pHyprRenderer->damageWindow(PWINDOW); } - if (!PWINDOW->m_pWorkspace->m_visible) + if (!PWINDOW->m_workspace->m_visible) return; - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PWINDOW->m_monitor.lock(); if (PMONITOR) PMONITOR->debugLastPresentation(g_pSeatManager->isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow"); @@ -865,8 +865,8 @@ void Events::listener_commitWindow(void* owner, void* data) { g_pSeatManager->isPointerFrameSkipped = false; g_pSeatManager->isPointerFrameCommit = false; } else - g_pHyprRenderer->damageSurface(PWINDOW->m_pWLSurface->resource(), PWINDOW->m_vRealPosition->goal().x, PWINDOW->m_vRealPosition->goal().y, - PWINDOW->m_bIsX11 ? 1.0 / PWINDOW->m_fX11SurfaceScaledBy : 1.0); + g_pHyprRenderer->damageSurface(PWINDOW->m_wlSurface->resource(), PWINDOW->m_realPosition->goal().x, PWINDOW->m_realPosition->goal().y, + PWINDOW->m_isX11 ? 1.0 / PWINDOW->m_X11SurfaceScaledBy : 1.0); if (g_pSeatManager->isPointerFrameSkipped) { g_pPointerManager->sendStoredMovement(); @@ -874,14 +874,14 @@ void Events::listener_commitWindow(void* owner, void* data) { g_pSeatManager->isPointerFrameCommit = true; } - if (!PWINDOW->m_bIsX11) { - PWINDOW->m_pSubsurfaceHead->recheckDamageForSubsurfaces(); - PWINDOW->m_pPopupHead->recheckTree(); + if (!PWINDOW->m_isX11) { + PWINDOW->m_subsurfaceHead->recheckDamageForSubsurfaces(); + PWINDOW->m_popupHead->recheckTree(); } // tearing: if solitary, redraw it. This still might be a single surface window - if (PMONITOR && PMONITOR->solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->tearingState.canTear && PWINDOW->m_pWLSurface->resource()->current.texture) { - CRegion damageBox{PWINDOW->m_pWLSurface->resource()->current.accumulateBufferDamage()}; + if (PMONITOR && PMONITOR->solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->tearingState.canTear && PWINDOW->m_wlSurface->resource()->current.texture) { + CRegion damageBox{PWINDOW->m_wlSurface->resource()->current.accumulateBufferDamage()}; if (!damageBox.empty()) { if (PMONITOR->tearingState.busy) { @@ -895,7 +895,7 @@ void Events::listener_commitWindow(void* owner, void* data) { } void Events::listener_destroyWindow(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); Debug::log(LOG, "{:c} destroyed, queueing.", PWINDOW); @@ -904,29 +904,29 @@ void Events::listener_destroyWindow(void* owner, void* data) { g_pCompositor->m_lastFocus.reset(); } - PWINDOW->m_pWLSurface->unassign(); + PWINDOW->m_wlSurface->unassign(); - PWINDOW->listeners = {}; + PWINDOW->m_listeners = {}; g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW); - PWINDOW->m_bReadyToDelete = true; + PWINDOW->m_readyToDelete = true; - PWINDOW->m_pXDGSurface.reset(); + PWINDOW->m_xdgSurface.reset(); - if (!PWINDOW->m_bFadingOut) { + if (!PWINDOW->m_fadingOut) { Debug::log(LOG, "Unmapped {} removed instantly", PWINDOW); g_pCompositor->removeWindowFromVectorSafe(PWINDOW); // most likely X11 unmanaged or sumn } - PWINDOW->listeners.unmap.reset(); - PWINDOW->listeners.destroy.reset(); - PWINDOW->listeners.map.reset(); - PWINDOW->listeners.commit.reset(); + PWINDOW->m_listeners.unmap.reset(); + PWINDOW->m_listeners.destroy.reset(); + PWINDOW->m_listeners.map.reset(); + PWINDOW->m_listeners.commit.reset(); } void Events::listener_activateX11(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); Debug::log(LOG, "X11 Activate request for window {}", PWINDOW); @@ -937,34 +937,34 @@ void Events::listener_activateX11(void* owner, void* data) { if (g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->getPID() != PWINDOW->getPID()) return; - if (!PWINDOW->m_pXWaylandSurface->wantsFocus()) + if (!PWINDOW->m_xwaylandSurface->wantsFocus()) return; g_pCompositor->focusWindow(PWINDOW); return; } - if (PWINDOW == g_pCompositor->m_lastWindow.lock() || (PWINDOW->m_eSuppressedEvents & SUPPRESS_ACTIVATE)) + if (PWINDOW == g_pCompositor->m_lastWindow.lock() || (PWINDOW->m_suppressedEvents & SUPPRESS_ACTIVATE)) return; PWINDOW->activate(); } void Events::listener_unmanagedSetGeometry(void* owner, void* data) { - PHLWINDOW PWINDOW = ((CWindow*)owner)->m_pSelf.lock(); + PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); - if (!PWINDOW->m_bIsMapped || !PWINDOW->m_pXWaylandSurface || !PWINDOW->m_pXWaylandSurface->overrideRedirect) + if (!PWINDOW->m_isMapped || !PWINDOW->m_xwaylandSurface || !PWINDOW->m_xwaylandSurface->overrideRedirect) return; - const auto POS = PWINDOW->m_vRealPosition->goal(); - const auto SIZ = PWINDOW->m_vRealSize->goal(); + const auto POS = PWINDOW->m_realPosition->goal(); + const auto SIZ = PWINDOW->m_realSize->goal(); - if (PWINDOW->m_pXWaylandSurface->geometry.size() > Vector2D{1, 1}) + if (PWINDOW->m_xwaylandSurface->geometry.size() > Vector2D{1, 1}) PWINDOW->setHidden(false); else PWINDOW->setHidden(true); - if (PWINDOW->isFullscreen() || !PWINDOW->m_bIsFloating) { + if (PWINDOW->isFullscreen() || !PWINDOW->m_isFloating) { PWINDOW->sendWindowSize(true); g_pHyprRenderer->damageWindow(PWINDOW); return; @@ -972,34 +972,34 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - const auto LOGICALPOS = g_pXWaylandManager->xwaylandToWaylandCoords(PWINDOW->m_pXWaylandSurface->geometry.pos()); + const auto LOGICALPOS = g_pXWaylandManager->xwaylandToWaylandCoords(PWINDOW->m_xwaylandSurface->geometry.pos()); - if (abs(std::floor(POS.x) - LOGICALPOS.x) > 2 || abs(std::floor(POS.y) - LOGICALPOS.y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_pXWaylandSurface->geometry.width) > 2 || - abs(std::floor(SIZ.y) - PWINDOW->m_pXWaylandSurface->geometry.height) > 2) { - Debug::log(LOG, "Unmanaged window {} requests geometry update to {:j} {:j}", PWINDOW, LOGICALPOS, PWINDOW->m_pXWaylandSurface->geometry.size()); + if (abs(std::floor(POS.x) - LOGICALPOS.x) > 2 || abs(std::floor(POS.y) - LOGICALPOS.y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->geometry.width) > 2 || + abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->geometry.height) > 2) { + Debug::log(LOG, "Unmanaged window {} requests geometry update to {:j} {:j}", PWINDOW, LOGICALPOS, PWINDOW->m_xwaylandSurface->geometry.size()); g_pHyprRenderer->damageWindow(PWINDOW); - PWINDOW->m_vRealPosition->setValueAndWarp(Vector2D(LOGICALPOS.x, LOGICALPOS.y)); + PWINDOW->m_realPosition->setValueAndWarp(Vector2D(LOGICALPOS.x, LOGICALPOS.y)); - if (abs(std::floor(SIZ.x) - PWINDOW->m_pXWaylandSurface->geometry.w) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_pXWaylandSurface->geometry.h) > 2) - PWINDOW->m_vRealSize->setValueAndWarp(PWINDOW->m_pXWaylandSurface->geometry.size()); + if (abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->geometry.w) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->geometry.h) > 2) + PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_xwaylandSurface->geometry.size()); if (*PXWLFORCESCALEZERO) { - if (const auto PMONITOR = PWINDOW->m_pMonitor.lock(); PMONITOR) { - PWINDOW->m_vRealSize->setValueAndWarp(PWINDOW->m_vRealSize->goal() / PMONITOR->scale); + if (const auto PMONITOR = PWINDOW->m_monitor.lock(); PMONITOR) { + PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_realSize->goal() / PMONITOR->scale); } } - PWINDOW->m_vPosition = PWINDOW->m_vRealPosition->goal(); - PWINDOW->m_vSize = PWINDOW->m_vRealSize->goal(); + PWINDOW->m_position = PWINDOW->m_realPosition->goal(); + PWINDOW->m_size = PWINDOW->m_realSize->goal(); - PWINDOW->m_pWorkspace = g_pCompositor->getMonitorFromVector(PWINDOW->m_vRealPosition->value() + PWINDOW->m_vRealSize->value() / 2.f)->activeWorkspace; + PWINDOW->m_workspace = g_pCompositor->getMonitorFromVector(PWINDOW->m_realPosition->value() + PWINDOW->m_realSize->value() / 2.f)->activeWorkspace; g_pCompositor->changeWindowZOrder(PWINDOW, true); PWINDOW->updateWindowDecos(); g_pHyprRenderer->damageWindow(PWINDOW); - PWINDOW->m_vReportedPosition = PWINDOW->m_vRealPosition->goal(); - PWINDOW->m_vPendingReportedSize = PWINDOW->m_vRealSize->goal(); + PWINDOW->m_reportedPosition = PWINDOW->m_realPosition->goal(); + PWINDOW->m_pendingReportedSize = PWINDOW->m_realSize->goal(); } } diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index d5c4e2d1..cd394c19 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1127,12 +1127,12 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo // move pinned windows for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == POLDWORKSPACE && w->m_bPinned) + if (w->m_workspace == POLDWORKSPACE && w->m_pinned) w->moveToWorkspace(pWorkspace); } if (!noFocus && !g_pCompositor->m_lastMonitor->activeSpecialWorkspace && - !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { + !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); auto pWindow = pWorkspace->m_hasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow(); @@ -1194,7 +1194,7 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); - if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { if (const auto PLAST = activeWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else @@ -1238,32 +1238,32 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { pWorkspace->startAnim(true, true); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == pWorkspace) { - w->m_pMonitor = self; + if (w->m_workspace == pWorkspace) { + w->m_monitor = self; w->updateSurfaceScaleTransformDetails(); w->setAnimationsToMove(); const auto MIDDLE = w->middle(); - if (w->m_bIsFloating && !VECINRECT(MIDDLE, vecPosition.x, vecPosition.y, vecPosition.x + vecSize.x, vecPosition.y + vecSize.y) && !w->isX11OverrideRedirect()) { + if (w->m_isFloating && !VECINRECT(MIDDLE, vecPosition.x, vecPosition.y, vecPosition.x + vecSize.x, vecPosition.y + vecSize.y) && !w->isX11OverrideRedirect()) { // if it's floating and the middle isnt on the current mon, move it to the center const auto PMONFROMMIDDLE = g_pCompositor->getMonitorFromVector(MIDDLE); - Vector2D pos = w->m_vRealPosition->goal(); + Vector2D pos = w->m_realPosition->goal(); if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->vecPosition.x, PMONFROMMIDDLE->vecPosition.y, PMONFROMMIDDLE->vecPosition.x + PMONFROMMIDDLE->vecSize.x, PMONFROMMIDDLE->vecPosition.y + PMONFROMMIDDLE->vecSize.y)) { // not on any monitor, center - pos = middle() / 2.f - w->m_vRealSize->goal() / 2.f; + pos = middle() / 2.f - w->m_realSize->goal() / 2.f; } else pos = pos - PMONFROMMIDDLE->vecPosition + vecPosition; - *w->m_vRealPosition = pos; - w->m_vPosition = pos; + *w->m_realPosition = pos; + w->m_position = pos; } } } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); - if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bPinned && g_pCompositor->m_lastWindow->m_pMonitor == self)) { + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { if (const auto PLAST = pWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else @@ -1447,7 +1447,7 @@ bool CMonitor::attemptDirectScanout() { if (lastScanout.expired()) { lastScanout = PCANDIDATE; - Debug::log(LOG, "Entered a direct scanout to {:x}: \"{}\"", (uintptr_t)PCANDIDATE.get(), PCANDIDATE->m_szTitle); + Debug::log(LOG, "Entered a direct scanout to {:x}: \"{}\"", (uintptr_t)PCANDIDATE.get(), PCANDIDATE->m_title); } scanoutNeedsCursorUpdate = false; diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 0c9f0803..5ebd14ce 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -147,13 +147,13 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for CBox nodeBox = pNode->box; nodeBox.round(); - PWINDOW->m_vSize = nodeBox.size(); - PWINDOW->m_vPosition = nodeBox.pos(); + PWINDOW->m_size = nodeBox.size(); + PWINDOW->m_position = nodeBox.pos(); PWINDOW->updateWindowDecos(); - auto calcPos = PWINDOW->m_vPosition; - auto calcSize = PWINDOW->m_vSize; + auto calcPos = PWINDOW->m_position; + auto calcSize = PWINDOW->m_size; const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.m_left : gapsIn.m_left), (double)(DISPLAYTOP ? gapsOut.m_top : gapsIn.m_top)); @@ -162,27 +162,27 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for calcPos = calcPos + OFFSETTOPLEFT; calcSize = calcSize - OFFSETTOPLEFT - OFFSETBOTTOMRIGHT; - if (PWINDOW->m_bIsPseudotiled) { + if (PWINDOW->m_isPseudotiled) { // Calculate pseudo float scale = 1; // adjust if doesnt fit - if (PWINDOW->m_vPseudoSize.x > calcSize.x || PWINDOW->m_vPseudoSize.y > calcSize.y) { - if (PWINDOW->m_vPseudoSize.x > calcSize.x) { - scale = calcSize.x / PWINDOW->m_vPseudoSize.x; + if (PWINDOW->m_pseudoSize.x > calcSize.x || PWINDOW->m_pseudoSize.y > calcSize.y) { + if (PWINDOW->m_pseudoSize.x > calcSize.x) { + scale = calcSize.x / PWINDOW->m_pseudoSize.x; } - if (PWINDOW->m_vPseudoSize.y * scale > calcSize.y) { - scale = calcSize.y / PWINDOW->m_vPseudoSize.y; + if (PWINDOW->m_pseudoSize.y * scale > calcSize.y) { + scale = calcSize.y / PWINDOW->m_pseudoSize.y; } - auto DELTA = calcSize - PWINDOW->m_vPseudoSize * scale; - calcSize = PWINDOW->m_vPseudoSize * scale; + auto DELTA = calcSize - PWINDOW->m_pseudoSize * scale; + calcSize = PWINDOW->m_pseudoSize * scale; calcPos = calcPos + DELTA / 2.f; // center } else { - auto DELTA = calcSize - PWINDOW->m_vPseudoSize; + auto DELTA = calcSize - PWINDOW->m_pseudoSize; calcPos = calcPos + DELTA / 2.f; // center - calcSize = PWINDOW->m_vPseudoSize; + calcSize = PWINDOW->m_pseudoSize; } } @@ -197,21 +197,21 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for CBox wb = {calcPos + (calcSize - calcSize * *PSCALEFACTOR) / 2.f, calcSize * *PSCALEFACTOR}; wb.round(); // avoid rounding mess - *PWINDOW->m_vRealPosition = wb.pos(); - *PWINDOW->m_vRealSize = wb.size(); + *PWINDOW->m_realPosition = wb.pos(); + *PWINDOW->m_realSize = wb.size(); } else { CBox wb = {calcPos, calcSize}; wb.round(); // avoid rounding mess - *PWINDOW->m_vRealSize = wb.size(); - *PWINDOW->m_vRealPosition = wb.pos(); + *PWINDOW->m_realSize = wb.size(); + *PWINDOW->m_realPosition = wb.pos(); } if (force) { g_pHyprRenderer->damageWindow(PWINDOW); - PWINDOW->m_vRealPosition->warp(); - PWINDOW->m_vRealSize->warp(); + PWINDOW->m_realPosition->warp(); + PWINDOW->m_realSize->warp(); g_pHyprRenderer->damageWindow(PWINDOW); } @@ -220,13 +220,13 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for } void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection direction) { - if (pWindow->m_bIsFloating) + if (pWindow->m_isFloating) return; m_lDwindleNodesData.emplace_back(); const auto PNODE = &m_lDwindleNodesData.back(); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); static auto PUSEACTIVE = CConfigValue("dwindle:use_active_for_splits"); static auto PDEFAULTSPLIT = CConfigValue("dwindle:default_split_ratio"); @@ -253,8 +253,8 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir OPENINGON = getClosestNodeOnWorkspace(PNODE->workspaceID, MOUSECOORDS); } else if (*PUSEACTIVE) { - if (g_pCompositor->m_lastWindow.lock() && !g_pCompositor->m_lastWindow->m_bIsFloating && g_pCompositor->m_lastWindow.lock() != pWindow && - g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace && g_pCompositor->m_lastWindow->m_bIsMapped) { + if (g_pCompositor->m_lastWindow.lock() && !g_pCompositor->m_lastWindow->m_isFloating && g_pCompositor->m_lastWindow.lock() != pWindow && + g_pCompositor->m_lastWindow->m_workspace == pWindow->m_workspace && g_pCompositor->m_lastWindow->m_isMapped) { OPENINGON = getNodeFromWindow(g_pCompositor->m_lastWindow.lock()); } else { OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS)); @@ -277,7 +277,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir const auto PREDSIZEMAX = OPENINGON ? Vector2D(OPENINGON->box.w, OPENINGON->box.h) : PMONITOR->vecSize; if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PREDSIZEMAX.x || MAXSIZE.y < PREDSIZEMAX.y) { // we can't continue. make it floating. - pWindow->m_bIsFloating = true; + pWindow->m_isFloating = true; m_lDwindleNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; @@ -379,7 +379,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir NEWPARENT->children[1] = OPENINGON; } } - } else if (*PFORCESPLIT == 0 || !pWindow->m_bFirstMap) { + } else if (*PFORCESPLIT == 0 || !pWindow->m_firstMap) { if ((SIDEBYSIDE && VECINRECT(MOUSECOORDS, NEWPARENT->box.x, NEWPARENT->box.y / *PWIDTHMULTIPLIER, NEWPARENT->box.x + NEWPARENT->box.w / 2.f, NEWPARENT->box.y + NEWPARENT->box.h)) || (!SIDEBYSIDE && @@ -509,15 +509,15 @@ void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - *PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition; - *PFULLWINDOW->m_vRealSize = PMONITOR->vecSize; + *PFULLWINDOW->m_realPosition = PMONITOR->vecPosition; + *PFULLWINDOW->m_realSize = PMONITOR->vecSize; } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SDwindleNodeData fakeNode; - fakeNode.pWindow = PFULLWINDOW; - fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; - fakeNode.workspaceID = pWorkspace->m_id; - PFULLWINDOW->m_vPosition = fakeNode.box.pos(); - PFULLWINDOW->m_vSize = fakeNode.box.size(); + fakeNode.pWindow = PFULLWINDOW; + fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; + fakeNode.workspaceID = pWorkspace->m_id; + PFULLWINDOW->m_position = fakeNode.box.pos(); + PFULLWINDOW->m_size = fakeNode.box.size(); fakeNode.ignoreFullscreenChecks = true; applyNodeDataToWindow(&fakeNode); @@ -555,9 +555,9 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn const auto PNODE = getNodeFromWindow(PWINDOW); if (!PNODE) { - *PWINDOW->m_vRealSize = - (PWINDOW->m_vRealSize->goal() + pixResize) - .clamp(PWINDOW->m_sWindowData.minSize.valueOr(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), PWINDOW->m_sWindowData.maxSize.valueOr(Vector2D{INFINITY, INFINITY})); + *PWINDOW->m_realSize = + (PWINDOW->m_realSize->goal() + pixResize) + .clamp(PWINDOW->m_windowData.minSize.valueOr(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), PWINDOW->m_windowData.maxSize.valueOr(Vector2D{INFINITY, INFINITY})); PWINDOW->updateWindowDecos(); return; } @@ -566,17 +566,17 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn static auto PSMARTRESIZING = CConfigValue("dwindle:smart_resizing"); // get some data about our window - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); - const bool DISPLAYLEFT = STICKS(PWINDOW->m_vPosition.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(PWINDOW->m_vPosition.x + PWINDOW->m_vSize.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(PWINDOW->m_vPosition.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_vPosition.y + PWINDOW->m_vSize.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const auto PMONITOR = PWINDOW->m_monitor.lock(); + const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); + const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); - if (PWINDOW->m_bIsPseudotiled) { + if (PWINDOW->m_isPseudotiled) { if (!m_PseudoDragFlags.started) { m_PseudoDragFlags.started = true; - const auto pseudoSize = PWINDOW->m_vRealSize->goal(); + const auto pseudoSize = PWINDOW->m_realSize->goal(); const auto mouseOffset = g_pInputManager->getMouseCoordsInternal() - (PNODE->box.pos() + ((PNODE->box.size() / 2) - (pseudoSize / 2))); if (mouseOffset.x > 0 && mouseOffset.x < pseudoSize.x && mouseOffset.y > 0 && mouseOffset.y < pseudoSize.y) { @@ -584,7 +584,7 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn m_PseudoDragFlags.xExtent = mouseOffset.x > pseudoSize.x / 2; m_PseudoDragFlags.yExtent = mouseOffset.y > pseudoSize.y / 2; - PWINDOW->m_vPseudoSize = pseudoSize; + PWINDOW->m_pseudoSize = pseudoSize; } else { m_PseudoDragFlags.pseudo = false; } @@ -592,20 +592,20 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn if (m_PseudoDragFlags.pseudo) { if (m_PseudoDragFlags.xExtent) - PWINDOW->m_vPseudoSize.x += pixResize.x * 2; + PWINDOW->m_pseudoSize.x += pixResize.x * 2; else - PWINDOW->m_vPseudoSize.x -= pixResize.x * 2; + PWINDOW->m_pseudoSize.x -= pixResize.x * 2; if (m_PseudoDragFlags.yExtent) - PWINDOW->m_vPseudoSize.y += pixResize.y * 2; + PWINDOW->m_pseudoSize.y += pixResize.y * 2; else - PWINDOW->m_vPseudoSize.y -= pixResize.y * 2; + PWINDOW->m_pseudoSize.y -= pixResize.y * 2; CBox wbox = PNODE->box; wbox.round(); - PWINDOW->m_vPseudoSize = {std::clamp(PWINDOW->m_vPseudoSize.x, 30.0, wbox.w), std::clamp(PWINDOW->m_vPseudoSize.y, 30.0, wbox.h)}; + PWINDOW->m_pseudoSize = {std::clamp(PWINDOW->m_pseudoSize.x, 30.0, wbox.w), std::clamp(PWINDOW->m_pseudoSize.y, 30.0, wbox.h)}; - PWINDOW->m_vLastFloatingSize = PWINDOW->m_vPseudoSize; + PWINDOW->m_lastFloatingSize = PWINDOW->m_pseudoSize; PNODE->recalcSizePosRecursive(*PANIMATE == 0); return; @@ -739,15 +739,15 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn } void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFullscreenMode CURRENT_EFFECTIVE_MODE, const eFullscreenMode EFFECTIVE_MODE) { - const auto PMONITOR = pWindow->m_pMonitor.lock(); - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PMONITOR = pWindow->m_monitor.lock(); + const auto PWORKSPACE = pWindow->m_workspace; // save position and size if floating - if (pWindow->m_bIsFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE) { - pWindow->m_vLastFloatingSize = pWindow->m_vRealSize->goal(); - pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition->goal(); - pWindow->m_vPosition = pWindow->m_vRealPosition->goal(); - pWindow->m_vSize = pWindow->m_vRealSize->goal(); + if (pWindow->m_isFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE) { + pWindow->m_lastFloatingSize = pWindow->m_realSize->goal(); + pWindow->m_lastFloatingPosition = pWindow->m_realPosition->goal(); + pWindow->m_position = pWindow->m_realPosition->goal(); + pWindow->m_size = pWindow->m_realSize->goal(); } if (EFFECTIVE_MODE == FSMODE_NONE) { @@ -757,8 +757,8 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFu applyNodeDataToWindow(PNODE); else { // get back its' dimensions from position and size - *pWindow->m_vRealPosition = pWindow->m_vLastFloatingPosition; - *pWindow->m_vRealSize = pWindow->m_vLastFloatingSize; + *pWindow->m_realPosition = pWindow->m_lastFloatingPosition; + *pWindow->m_realSize = pWindow->m_lastFloatingSize; pWindow->unsetWindowData(PRIORITY_LAYOUT); pWindow->updateWindowData(); @@ -766,8 +766,8 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFu } else { // apply new pos and size being monitors' box if (EFFECTIVE_MODE == FSMODE_FULLSCREEN) { - *pWindow->m_vRealPosition = PMONITOR->vecPosition; - *pWindow->m_vRealSize = PMONITOR->vecSize; + *pWindow->m_realPosition = PMONITOR->vecPosition; + *pWindow->m_realSize = PMONITOR->vecSize; } else { // This is a massive hack. // We make a fake "only" node and apply @@ -777,8 +777,8 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFu fakeNode.pWindow = pWindow; fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; fakeNode.workspaceID = pWindow->workspaceID(); - pWindow->m_vPosition = fakeNode.box.pos(); - pWindow->m_vSize = fakeNode.box.size(); + pWindow->m_position = fakeNode.box.pos(); + pWindow->m_size = fakeNode.box.size(); fakeNode.ignoreFullscreenChecks = true; applyNodeDataToWindow(&fakeNode); @@ -816,12 +816,12 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, const auto originalWorkspaceID = pWindow->workspaceID(); const Vector2D originalPos = pWindow->middle(); - if (!PNODE || !pWindow->m_pMonitor) + if (!PNODE || !pWindow->m_monitor) return; Vector2D focalPoint; - const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{pWindow->m_pMonitor->vecPosition, pWindow->m_pMonitor->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); + const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{pWindow->m_monitor->vecPosition, pWindow->m_monitor->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); switch (dir[0]) { case 't': @@ -841,17 +841,17 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, const auto PMONITORFOCAL = g_pCompositor->getMonitorFromVector(focalPoint); - if (PMONITORFOCAL != pWindow->m_pMonitor) { + if (PMONITORFOCAL != pWindow->m_monitor) { pWindow->moveToWorkspace(PMONITORFOCAL->activeWorkspace); - pWindow->m_pMonitor = PMONITORFOCAL; + pWindow->m_monitor = PMONITORFOCAL; } pWindow->updateGroupOutputs(); - if (!pWindow->m_sGroupData.pNextWindow.expired()) { - PHLWINDOW next = pWindow->m_sGroupData.pNextWindow.lock(); + if (!pWindow->m_groupData.pNextWindow.expired()) { + PHLWINDOW next = pWindow->m_groupData.pNextWindow.lock(); while (next != pWindow) { next->updateToplevel(); - next = next->m_sGroupData.pNextWindow.lock(); + next = next->m_groupData.pNextWindow.lock(); } } @@ -876,8 +876,8 @@ void CHyprDwindleLayout::switchWindows(PHLWINDOW pWindow, PHLWINDOW pWindow2) { if (!PNODE2 || !PNODE) return; - const eFullscreenMode MODE1 = pWindow->m_sFullscreenState.internal; - const eFullscreenMode MODE2 = pWindow2->m_sFullscreenState.internal; + const eFullscreenMode MODE1 = pWindow->m_fullscreenState.internal; + const eFullscreenMode MODE2 = pWindow2->m_fullscreenState.internal; g_pCompositor->setWindowFullscreenInternal(pWindow, FSMODE_NONE); g_pCompositor->setWindowFullscreenInternal(pWindow2, FSMODE_NONE); @@ -890,8 +890,8 @@ void CHyprDwindleLayout::switchWindows(PHLWINDOW pWindow, PHLWINDOW pWindow2) { PNODE->pWindow = pWindow2; if (PNODE->workspaceID != PNODE2->workspaceID) { - std::swap(pWindow2->m_pMonitor, pWindow->m_pMonitor); - std::swap(pWindow2->m_pWorkspace, pWindow->m_pWorkspace); + std::swap(pWindow2->m_monitor, pWindow->m_monitor); + std::swap(pWindow2->m_workspace, pWindow->m_workspace); } pWindow->setAnimationsToMove(); @@ -904,15 +904,15 @@ void CHyprDwindleLayout::switchWindows(PHLWINDOW pWindow, PHLWINDOW pWindow2) { getMasterNodeOnWorkspace(PNODE2->workspaceID)->recalcSizePosRecursive(); if (ACTIVE1) { - ACTIVE1->box = PNODE->box; - ACTIVE1->pWindow->m_vPosition = ACTIVE1->box.pos(); - ACTIVE1->pWindow->m_vSize = ACTIVE1->box.size(); + ACTIVE1->box = PNODE->box; + ACTIVE1->pWindow->m_position = ACTIVE1->box.pos(); + ACTIVE1->pWindow->m_size = ACTIVE1->box.size(); } if (ACTIVE2) { - ACTIVE2->box = PNODE2->box; - ACTIVE2->pWindow->m_vPosition = ACTIVE2->box.pos(); - ACTIVE2->pWindow->m_vSize = ACTIVE2->box.size(); + ACTIVE2->box = PNODE2->box; + ACTIVE2->pWindow->m_position = ACTIVE2->box.pos(); + ACTIVE2->pWindow->m_size = ACTIVE2->box.size(); } g_pHyprRenderer->damageWindow(pWindow); @@ -1047,7 +1047,7 @@ void CHyprDwindleLayout::moveToRoot(PHLWINDOW pWindow, bool stable) { std::swap(pRoot->children[0], pRoot->children[1]); // if the workspace is visible, recalculate layout - if (pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible()) + if (pWindow->m_workspace && pWindow->m_workspace->isVisible()) pRoot->recalcSizePosRecursive(); } @@ -1068,7 +1068,7 @@ std::string CHyprDwindleLayout::getLayoutName() { void CHyprDwindleLayout::onEnable() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_bIsFloating || !w->m_bIsMapped || w->isHidden()) + if (w->m_isFloating || !w->m_isMapped || w->isHidden()) continue; onWindowCreatedTiling(w); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index cf036131..ac04157b 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -18,26 +18,26 @@ void IHyprLayout::onWindowCreated(PHLWINDOW pWindow, eDirection direction) { CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(pWindow); const bool HASPERSISTENTSIZE = - std::any_of(pWindow->m_vMatchedRules.begin(), pWindow->m_vMatchedRules.end(), [](const auto& rule) { return rule->ruleType == CWindowRule::RULE_PERSISTENTSIZE; }); + std::any_of(pWindow->m_matchedRules.begin(), pWindow->m_matchedRules.end(), [](const auto& rule) { return rule->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; }); const auto STOREDSIZE = HASPERSISTENTSIZE ? g_pConfigManager->getStoredFloatingSize(pWindow) : std::nullopt; if (STOREDSIZE.has_value()) { - Debug::log(LOG, "using stored size {}x{} for new window {}::{}", STOREDSIZE->x, STOREDSIZE->y, pWindow->m_szClass, pWindow->m_szTitle); - pWindow->m_vLastFloatingSize = STOREDSIZE.value(); + Debug::log(LOG, "using stored size {}x{} for new window {}::{}", STOREDSIZE->x, STOREDSIZE->y, pWindow->m_class, pWindow->m_title); + pWindow->m_lastFloatingSize = STOREDSIZE.value(); } else if (desiredGeometry.width <= 5 || desiredGeometry.height <= 5) { - const auto PMONITOR = pWindow->m_pMonitor.lock(); - pWindow->m_vLastFloatingSize = PMONITOR->vecSize / 2.f; + const auto PMONITOR = pWindow->m_monitor.lock(); + pWindow->m_lastFloatingSize = PMONITOR->vecSize / 2.f; } else - pWindow->m_vLastFloatingSize = Vector2D(desiredGeometry.width, desiredGeometry.height); + pWindow->m_lastFloatingSize = Vector2D(desiredGeometry.width, desiredGeometry.height); - pWindow->m_vPseudoSize = pWindow->m_vLastFloatingSize; + pWindow->m_pseudoSize = pWindow->m_lastFloatingSize; bool autoGrouped = IHyprLayout::onWindowCreatedAutoGroup(pWindow); if (autoGrouped) return; - if (pWindow->m_bIsFloating) + if (pWindow->m_isFloating) onWindowCreatedFloating(pWindow); else onWindowCreatedTiling(pWindow, direction); @@ -50,24 +50,24 @@ void IHyprLayout::onWindowRemoved(PHLWINDOW pWindow) { if (pWindow->isFullscreen()) g_pCompositor->setWindowFullscreenInternal(pWindow, FSMODE_NONE); - if (!pWindow->m_sGroupData.pNextWindow.expired()) { - if (pWindow->m_sGroupData.pNextWindow.lock() == pWindow) - pWindow->m_sGroupData.pNextWindow.reset(); + if (!pWindow->m_groupData.pNextWindow.expired()) { + if (pWindow->m_groupData.pNextWindow.lock() == pWindow) + pWindow->m_groupData.pNextWindow.reset(); else { // find last window and update PHLWINDOW PWINDOWPREV = pWindow->getGroupPrevious(); const auto WINDOWISVISIBLE = pWindow->getGroupCurrent() == pWindow; if (WINDOWISVISIBLE) - PWINDOWPREV->setGroupCurrent(pWindow->m_sGroupData.head ? pWindow->m_sGroupData.pNextWindow.lock() : PWINDOWPREV); + PWINDOWPREV->setGroupCurrent(pWindow->m_groupData.head ? pWindow->m_groupData.pNextWindow.lock() : PWINDOWPREV); - PWINDOWPREV->m_sGroupData.pNextWindow = pWindow->m_sGroupData.pNextWindow; + PWINDOWPREV->m_groupData.pNextWindow = pWindow->m_groupData.pNextWindow; - pWindow->m_sGroupData.pNextWindow.reset(); + pWindow->m_groupData.pNextWindow.reset(); - if (pWindow->m_sGroupData.head) { - std::swap(PWINDOWPREV->m_sGroupData.pNextWindow->m_sGroupData.head, pWindow->m_sGroupData.head); - std::swap(PWINDOWPREV->m_sGroupData.pNextWindow->m_sGroupData.locked, pWindow->m_sGroupData.locked); + if (pWindow->m_groupData.head) { + std::swap(PWINDOWPREV->m_groupData.pNextWindow->m_groupData.head, pWindow->m_groupData.head); + std::swap(PWINDOWPREV->m_groupData.pNextWindow->m_groupData.locked, pWindow->m_groupData.locked); } if (pWindow == m_pLastTiledWindow) @@ -83,7 +83,7 @@ void IHyprLayout::onWindowRemoved(PHLWINDOW pWindow) { } } - if (pWindow->m_bIsFloating) { + if (pWindow->m_isFloating) { onWindowRemovedFloating(pWindow); } else { onWindowRemovedTiling(pWindow); @@ -100,9 +100,9 @@ void IHyprLayout::onWindowRemovedFloating(PHLWINDOW pWindow) { void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(pWindow); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); - if (pWindow->m_bIsX11) { + if (pWindow->m_isX11) { Vector2D xy = {desiredGeometry.x, desiredGeometry.y}; xy = g_pXWaylandManager->xwaylandToWaylandCoords(xy); desiredGeometry.x = xy.x; @@ -117,39 +117,39 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { } if (desiredGeometry.width <= 5 || desiredGeometry.height <= 5) { - const auto PWINDOWSURFACE = pWindow->m_pWLSurface->resource(); - *pWindow->m_vRealSize = PWINDOWSURFACE->current.size; + const auto PWINDOWSURFACE = pWindow->m_wlSurface->resource(); + *pWindow->m_realSize = PWINDOWSURFACE->current.size; - if ((desiredGeometry.width <= 1 || desiredGeometry.height <= 1) && pWindow->m_bIsX11 && + if ((desiredGeometry.width <= 1 || desiredGeometry.height <= 1) && pWindow->m_isX11 && pWindow->isX11OverrideRedirect()) { // XDG windows should be fine. TODO: check for weird atoms? pWindow->setHidden(true); return; } // reject any windows with size <= 5x5 - if (pWindow->m_vRealSize->goal().x <= 5 || pWindow->m_vRealSize->goal().y <= 5) - *pWindow->m_vRealSize = PMONITOR->vecSize / 2.f; + if (pWindow->m_realSize->goal().x <= 5 || pWindow->m_realSize->goal().y <= 5) + *pWindow->m_realSize = PMONITOR->vecSize / 2.f; - if (pWindow->m_bIsX11 && pWindow->isX11OverrideRedirect()) { + if (pWindow->m_isX11 && pWindow->isX11OverrideRedirect()) { - if (pWindow->m_pXWaylandSurface->geometry.x != 0 && pWindow->m_pXWaylandSurface->geometry.y != 0) - *pWindow->m_vRealPosition = g_pXWaylandManager->xwaylandToWaylandCoords(pWindow->m_pXWaylandSurface->geometry.pos()); + if (pWindow->m_xwaylandSurface->geometry.x != 0 && pWindow->m_xwaylandSurface->geometry.y != 0) + *pWindow->m_realPosition = g_pXWaylandManager->xwaylandToWaylandCoords(pWindow->m_xwaylandSurface->geometry.pos()); else - *pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize->goal().x) / 2.f, - PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize->goal().y) / 2.f); + *pWindow->m_realPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_realSize->goal().x) / 2.f, + PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_realSize->goal().y) / 2.f); } else { - *pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize->goal().x) / 2.f, - PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize->goal().y) / 2.f); + *pWindow->m_realPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_realSize->goal().x) / 2.f, + PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_realSize->goal().y) / 2.f); } } else { // we respect the size. - *pWindow->m_vRealSize = Vector2D(desiredGeometry.width, desiredGeometry.height); + *pWindow->m_realSize = Vector2D(desiredGeometry.width, desiredGeometry.height); // check if it's on the correct monitor! Vector2D middlePoint = Vector2D(desiredGeometry.x, desiredGeometry.y) + Vector2D(desiredGeometry.width, desiredGeometry.height) / 2.f; // check if it's visible on any monitor (only for XDG) - bool visible = pWindow->m_bIsX11; + bool visible = pWindow->m_isX11; if (!visible) { visible = g_pCompositor->isPointOnAnyMonitor(Vector2D(desiredGeometry.x, desiredGeometry.y)) && @@ -159,57 +159,57 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { } // TODO: detect a popup in a more consistent way. - if ((desiredGeometry.x == 0 && desiredGeometry.y == 0) || !visible || !pWindow->m_bIsX11) { + if ((desiredGeometry.x == 0 && desiredGeometry.y == 0) || !visible || !pWindow->m_isX11) { // if the pos isn't set, fall back to the center placement if it's not a child, otherwise middle of parent if available - if (!pWindow->m_bIsX11 && pWindow->m_pXDGSurface->toplevel->parent && validMapped(pWindow->m_pXDGSurface->toplevel->parent->window)) - *pWindow->m_vRealPosition = pWindow->m_pXDGSurface->toplevel->parent->window->m_vRealPosition->goal() + - pWindow->m_pXDGSurface->toplevel->parent->window->m_vRealSize->goal() / 2.F - desiredGeometry.size() / 2.F; + if (!pWindow->m_isX11 && pWindow->m_xdgSurface->toplevel->parent && validMapped(pWindow->m_xdgSurface->toplevel->parent->window)) + *pWindow->m_realPosition = pWindow->m_xdgSurface->toplevel->parent->window->m_realPosition->goal() + + pWindow->m_xdgSurface->toplevel->parent->window->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; else - *pWindow->m_vRealPosition = PMONITOR->vecPosition + PMONITOR->vecSize / 2.F - desiredGeometry.size() / 2.F; + *pWindow->m_realPosition = PMONITOR->vecPosition + PMONITOR->vecSize / 2.F - desiredGeometry.size() / 2.F; } else { // if it is, we respect where it wants to put itself, but apply monitor offset if outside // most of these are popups if (const auto POPENMON = g_pCompositor->getMonitorFromVector(middlePoint); POPENMON->ID != PMONITOR->ID) - *pWindow->m_vRealPosition = Vector2D(desiredGeometry.x, desiredGeometry.y) - POPENMON->vecPosition + PMONITOR->vecPosition; + *pWindow->m_realPosition = Vector2D(desiredGeometry.x, desiredGeometry.y) - POPENMON->vecPosition + PMONITOR->vecPosition; else - *pWindow->m_vRealPosition = Vector2D(desiredGeometry.x, desiredGeometry.y); + *pWindow->m_realPosition = Vector2D(desiredGeometry.x, desiredGeometry.y); } } - if (*PXWLFORCESCALEZERO && pWindow->m_bIsX11) - *pWindow->m_vRealSize = pWindow->m_vRealSize->goal() / PMONITOR->scale; + if (*PXWLFORCESCALEZERO && pWindow->m_isX11) + *pWindow->m_realSize = pWindow->m_realSize->goal() / PMONITOR->scale; - if (pWindow->m_bX11DoesntWantBorders || (pWindow->m_bIsX11 && pWindow->isX11OverrideRedirect())) { - pWindow->m_vRealPosition->warp(); - pWindow->m_vRealSize->warp(); + if (pWindow->m_X11DoesntWantBorders || (pWindow->m_isX11 && pWindow->isX11OverrideRedirect())) { + pWindow->m_realPosition->warp(); + pWindow->m_realSize->warp(); } if (!pWindow->isX11OverrideRedirect()) g_pCompositor->changeWindowZOrder(pWindow, true); else { - pWindow->m_vPendingReportedSize = pWindow->m_vRealSize->goal(); - pWindow->m_vReportedSize = pWindow->m_vPendingReportedSize; + pWindow->m_pendingReportedSize = pWindow->m_realSize->goal(); + pWindow->m_reportedSize = pWindow->m_pendingReportedSize; } } bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) { static auto PAUTOGROUP = CConfigValue("group:auto_group"); - const PHLWINDOW OPENINGON = g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace ? + const PHLWINDOW OPENINGON = g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_workspace == pWindow->m_workspace ? g_pCompositor->m_lastWindow.lock() : - (pWindow->m_pWorkspace ? pWindow->m_pWorkspace->getFirstWindow() : nullptr); - const bool FLOATEDINTOTILED = pWindow->m_bIsFloating && !OPENINGON->m_bIsFloating; - const bool SWALLOWING = pWindow->m_pSwallowed || pWindow->m_bGroupSwallowed; + (pWindow->m_workspace ? pWindow->m_workspace->getFirstWindow() : nullptr); + const bool FLOATEDINTOTILED = pWindow->m_isFloating && !OPENINGON->m_isFloating; + const bool SWALLOWING = pWindow->m_swallowed || pWindow->m_groupSwallowed; if ((*PAUTOGROUP || SWALLOWING) // continue if auto_group is enabled or if dealing with window swallowing. && OPENINGON // this shouldn't be 0, but honestly, better safe than sorry. && OPENINGON != pWindow // prevent freeze when the "group set" window rule makes the new window to be already a group. - && OPENINGON->m_sGroupData.pNextWindow.lock() // check if OPENINGON is a group. + && OPENINGON->m_groupData.pNextWindow.lock() // check if OPENINGON is a group. && pWindow->canBeGroupedInto(OPENINGON) // check if the new window can be grouped into OPENINGON. && !g_pXWaylandManager->shouldBeFloated(pWindow) // don't group child windows. Fix for floated groups. Tiled groups don't need this because we check if !FLOATEDINTOTILED. && !FLOATEDINTOTILED) { // don't group a new floated window into a tiled group (for convenience). - pWindow->m_bIsFloating = OPENINGON->m_bIsFloating; // match the floating state. Needed to autogroup a new tiled window into a floated group. + pWindow->m_isFloating = OPENINGON->m_isFloating; // match the floating state. Needed to autogroup a new tiled window into a floated group. static auto USECURRPOS = CConfigValue("group:insert_after_current"); (*USECURRPOS ? OPENINGON : OPENINGON->getGroupTail())->insertWindowToGroup(pWindow); @@ -250,7 +250,7 @@ void IHyprLayout::onBeginDragWindow() { // get the grab corner static auto RESIZECORNER = CConfigValue("general:resize_corner"); - if (*RESIZECORNER != 0 && *RESIZECORNER <= 4 && DRAGGINGWINDOW->m_bIsFloating) { + if (*RESIZECORNER != 0 && *RESIZECORNER <= 4 && DRAGGINGWINDOW->m_isFloating) { switch (*RESIZECORNER) { case 1: m_eGrabbedCorner = CORNER_TOPLEFT; @@ -324,24 +324,24 @@ void IHyprLayout::onEndDragWindow() { if (pWindow->checkInputOnDecos(INPUT_TYPE_DRAG_END, MOUSECOORDS, DRAGGINGWINDOW)) return; - const bool FLOATEDINTOTILED = !pWindow->m_bIsFloating && !DRAGGINGWINDOW->m_bDraggingTiled; + const bool FLOATEDINTOTILED = !pWindow->m_isFloating && !DRAGGINGWINDOW->m_draggingTiled; static auto PDRAGINTOGROUP = CConfigValue("group:drag_into_group"); - if (pWindow->m_sGroupData.pNextWindow.lock() && DRAGGINGWINDOW->canBeGroupedInto(pWindow) && *PDRAGINTOGROUP == 1 && !FLOATEDINTOTILED) { + if (pWindow->m_groupData.pNextWindow.lock() && DRAGGINGWINDOW->canBeGroupedInto(pWindow) && *PDRAGINTOGROUP == 1 && !FLOATEDINTOTILED) { - if (DRAGGINGWINDOW->m_sGroupData.pNextWindow) { - PHLWINDOW next = DRAGGINGWINDOW->m_sGroupData.pNextWindow.lock(); + if (DRAGGINGWINDOW->m_groupData.pNextWindow) { + PHLWINDOW next = DRAGGINGWINDOW->m_groupData.pNextWindow.lock(); while (next != DRAGGINGWINDOW) { - next->m_bIsFloating = pWindow->m_bIsFloating; // match the floating state of group members - *next->m_vRealSize = pWindow->m_vRealSize->goal(); // match the size of group members - *next->m_vRealPosition = pWindow->m_vRealPosition->goal(); // match the position of group members - next = next->m_sGroupData.pNextWindow.lock(); + next->m_isFloating = pWindow->m_isFloating; // match the floating state of group members + *next->m_realSize = pWindow->m_realSize->goal(); // match the size of group members + *next->m_realPosition = pWindow->m_realPosition->goal(); // match the position of group members + next = next->m_groupData.pNextWindow.lock(); } } - DRAGGINGWINDOW->m_bIsFloating = pWindow->m_bIsFloating; // match the floating state of the window - DRAGGINGWINDOW->m_vLastFloatingSize = m_vDraggingWindowOriginalFloatSize; - DRAGGINGWINDOW->m_bDraggingTiled = false; + DRAGGINGWINDOW->m_isFloating = pWindow->m_isFloating; // match the floating state of the window + DRAGGINGWINDOW->m_lastFloatingSize = m_vDraggingWindowOriginalFloatSize; + DRAGGINGWINDOW->m_draggingTiled = false; static auto USECURRPOS = CConfigValue("group:insert_after_current"); (*USECURRPOS ? pWindow : pWindow->getGroupTail())->insertWindowToGroup(DRAGGINGWINDOW); @@ -355,11 +355,11 @@ void IHyprLayout::onEndDragWindow() { } } - if (DRAGGINGWINDOW->m_bDraggingTiled) { - DRAGGINGWINDOW->m_bIsFloating = false; + if (DRAGGINGWINDOW->m_draggingTiled) { + DRAGGINGWINDOW->m_isFloating = false; g_pInputManager->refocus(); changeWindowFloatingMode(DRAGGINGWINDOW); - DRAGGINGWINDOW->m_vLastFloatingSize = m_vDraggingWindowOriginalFloatSize; + DRAGGINGWINDOW->m_lastFloatingSize = m_vDraggingWindowOriginalFloatSize; } g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); @@ -404,10 +404,10 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA if (*SNAPWINDOWGAP) { const double GAPSIZE = *SNAPWINDOWGAP; const auto WSID = DRAGGINGWINDOW->workspaceID(); - const bool HASFULLSCREEN = DRAGGINGWINDOW->m_pWorkspace && DRAGGINGWINDOW->m_pWorkspace->m_hasFullscreenWindow; + const bool HASFULLSCREEN = DRAGGINGWINDOW->m_workspace && DRAGGINGWINDOW->m_workspace->m_hasFullscreenWindow; for (auto& other : g_pCompositor->m_windows) { - if ((HASFULLSCREEN && !other->m_bCreatedOverFullscreen) || other == DRAGGINGWINDOW || other->workspaceID() != WSID || !other->m_bIsMapped || other->m_bFadingOut || + if ((HASFULLSCREEN && !other->m_createdOverFullscreen) || other == DRAGGINGWINDOW || other->workspaceID() != WSID || !other->m_isMapped || other->m_fadingOut || other->isX11OverrideRedirect()) continue; @@ -466,7 +466,7 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA if (*SNAPMONITORGAP) { const double GAPSIZE = *SNAPMONITORGAP; const double BORDERDIFF = OVERLAP ? DRAGGINGBORDERSIZE : 0; - const auto MON = DRAGGINGWINDOW->m_pMonitor.lock(); + const auto MON = DRAGGINGWINDOW->m_monitor.lock(); SRange monX = {MON->vecPosition.x + MON->vecReservedTopLeft.x + DRAGGINGBORDERSIZE, MON->vecPosition.x + MON->vecSize.x - MON->vecReservedBottomRight.x - DRAGGINGBORDERSIZE}; @@ -584,30 +584,30 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { if (g_pInputManager->dragMode == MBIND_MOVE) { Vector2D newPos = m_vBeginDragPositionXY + DELTA; - Vector2D newSize = DRAGGINGWINDOW->m_vRealSize->goal(); + Vector2D newSize = DRAGGINGWINDOW->m_realSize->goal(); - if (*SNAPENABLED && !DRAGGINGWINDOW->m_bDraggingTiled) + if (*SNAPENABLED && !DRAGGINGWINDOW->m_draggingTiled) performSnap(newPos, newSize, DRAGGINGWINDOW, MBIND_MOVE, -1, m_vBeginDragSizeXY); CBox wb = {newPos, newSize}; wb.round(); if (*PANIMATEMOUSE) - *DRAGGINGWINDOW->m_vRealPosition = wb.pos(); + *DRAGGINGWINDOW->m_realPosition = wb.pos(); else { - DRAGGINGWINDOW->m_vRealPosition->setValueAndWarp(wb.pos()); + DRAGGINGWINDOW->m_realPosition->setValueAndWarp(wb.pos()); DRAGGINGWINDOW->sendWindowSize(); } - DRAGGINGWINDOW->m_vPosition = wb.pos(); + DRAGGINGWINDOW->m_position = wb.pos(); } else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) { - if (DRAGGINGWINDOW->m_bIsFloating) { + if (DRAGGINGWINDOW->m_isFloating) { - Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); + Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_windowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); Vector2D MAXSIZE; - if (DRAGGINGWINDOW->m_sWindowData.maxSize.hasValue()) - MAXSIZE = DRAGGINGWINDOW->requestedMaxSize().clamp({}, DRAGGINGWINDOW->m_sWindowData.maxSize.value()); + if (DRAGGINGWINDOW->m_windowData.maxSize.hasValue()) + MAXSIZE = DRAGGINGWINDOW->requestedMaxSize().clamp({}, DRAGGINGWINDOW->m_windowData.maxSize.value()); else MAXSIZE = DRAGGINGWINDOW->requestedMaxSize().clamp({}, Vector2D(std::numeric_limits::max(), std::numeric_limits::max())); @@ -624,7 +624,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { newSize = newSize + Vector2D(-DELTA.x, DELTA.y); eMouseBindMode mode = g_pInputManager->dragMode; - if (DRAGGINGWINDOW->m_sWindowData.keepAspectRatio.valueOrDefault() && mode != MBIND_RESIZE_BLOCK_RATIO) + if (DRAGGINGWINDOW->m_windowData.keepAspectRatio.valueOrDefault() && mode != MBIND_RESIZE_BLOCK_RATIO) mode = MBIND_RESIZE_FORCE_RATIO; if (m_vBeginDragSizeXY.x >= 1 && m_vBeginDragSizeXY.y >= 1 && mode == MBIND_RESIZE_FORCE_RATIO) { @@ -665,29 +665,29 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { wb.round(); if (*PANIMATE) { - *DRAGGINGWINDOW->m_vRealSize = wb.size(); - *DRAGGINGWINDOW->m_vRealPosition = wb.pos(); + *DRAGGINGWINDOW->m_realSize = wb.size(); + *DRAGGINGWINDOW->m_realPosition = wb.pos(); } else { - DRAGGINGWINDOW->m_vRealSize->setValueAndWarp(wb.size()); - DRAGGINGWINDOW->m_vRealPosition->setValueAndWarp(wb.pos()); + DRAGGINGWINDOW->m_realSize->setValueAndWarp(wb.size()); + DRAGGINGWINDOW->m_realPosition->setValueAndWarp(wb.pos()); DRAGGINGWINDOW->sendWindowSize(); } - DRAGGINGWINDOW->m_vPosition = wb.pos(); - DRAGGINGWINDOW->m_vSize = wb.size(); + DRAGGINGWINDOW->m_position = wb.pos(); + DRAGGINGWINDOW->m_size = wb.size(); } else { resizeActiveWindow(TICKDELTA, m_eGrabbedCorner, DRAGGINGWINDOW); } } // get middle point - Vector2D middle = DRAGGINGWINDOW->m_vRealPosition->value() + DRAGGINGWINDOW->m_vRealSize->value() / 2.f; + Vector2D middle = DRAGGINGWINDOW->m_realPosition->value() + DRAGGINGWINDOW->m_realSize->value() / 2.f; // and check its monitor const auto PMONITOR = g_pCompositor->getMonitorFromVector(middle); if (PMONITOR && !SPECIAL) { - DRAGGINGWINDOW->m_pMonitor = PMONITOR; + DRAGGINGWINDOW->m_monitor = PMONITOR; DRAGGINGWINDOW->moveToWorkspace(PMONITOR->activeWorkspace); DRAGGINGWINDOW->updateGroupOutputs(); @@ -706,7 +706,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { g_pCompositor->setWindowFullscreenInternal(pWindow, FSMODE_NONE); } - pWindow->m_bPinned = false; + pWindow->m_pinned = false; g_pHyprRenderer->damageWindow(pWindow, true); @@ -717,8 +717,8 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { EMIT_HOOK_EVENT("changeFloatingMode", pWindow); if (!TILED) { - const auto PNEWMON = g_pCompositor->getMonitorFromVector(pWindow->m_vRealPosition->value() + pWindow->m_vRealSize->value() / 2.f); - pWindow->m_pMonitor = PNEWMON; + const auto PNEWMON = g_pCompositor->getMonitorFromVector(pWindow->m_realPosition->value() + pWindow->m_realSize->value() / 2.f); + pWindow->m_monitor = PNEWMON; pWindow->moveToWorkspace(PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace); pWindow->updateGroupOutputs(); @@ -728,25 +728,25 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { g_pCompositor->setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); // save real pos cuz the func applies the default 5,5 mid - const auto PSAVEDPOS = pWindow->m_vRealPosition->goal(); - const auto PSAVEDSIZE = pWindow->m_vRealSize->goal(); + const auto PSAVEDPOS = pWindow->m_realPosition->goal(); + const auto PSAVEDSIZE = pWindow->m_realSize->goal(); // if the window is pseudo, update its size - if (!pWindow->m_bDraggingTiled) - pWindow->m_vPseudoSize = pWindow->m_vRealSize->goal(); + if (!pWindow->m_draggingTiled) + pWindow->m_pseudoSize = pWindow->m_realSize->goal(); - pWindow->m_vLastFloatingSize = PSAVEDSIZE; + pWindow->m_lastFloatingSize = PSAVEDSIZE; // move to narnia because we don't wanna find our own node. onWindowCreatedTiling should apply the coords back. - pWindow->m_vPosition = Vector2D(-999999, -999999); + pWindow->m_position = Vector2D(-999999, -999999); onWindowCreatedTiling(pWindow); - pWindow->m_vRealPosition->setValue(PSAVEDPOS); - pWindow->m_vRealSize->setValue(PSAVEDSIZE); + pWindow->m_realPosition->setValue(PSAVEDPOS); + pWindow->m_realSize->setValue(PSAVEDSIZE); // fix pseudo leaving artifacts - g_pHyprRenderer->damageMonitor(pWindow->m_pMonitor.lock()); + g_pHyprRenderer->damageMonitor(pWindow->m_monitor.lock()); if (pWindow == g_pCompositor->m_lastWindow) m_pLastTiledWindow = pWindow; @@ -755,21 +755,21 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { g_pCompositor->changeWindowZOrder(pWindow, true); - CBox wb = {pWindow->m_vRealPosition->goal() + (pWindow->m_vRealSize->goal() - pWindow->m_vLastFloatingSize) / 2.f, pWindow->m_vLastFloatingSize}; + CBox wb = {pWindow->m_realPosition->goal() + (pWindow->m_realSize->goal() - pWindow->m_lastFloatingSize) / 2.f, pWindow->m_lastFloatingSize}; wb.round(); - if (!(pWindow->m_bIsFloating && pWindow->m_bIsPseudotiled) && DELTALESSTHAN(pWindow->m_vRealSize->value().x, pWindow->m_vLastFloatingSize.x, 10) && - DELTALESSTHAN(pWindow->m_vRealSize->value().y, pWindow->m_vLastFloatingSize.y, 10)) { + if (!(pWindow->m_isFloating && pWindow->m_isPseudotiled) && DELTALESSTHAN(pWindow->m_realSize->value().x, pWindow->m_lastFloatingSize.x, 10) && + DELTALESSTHAN(pWindow->m_realSize->value().y, pWindow->m_lastFloatingSize.y, 10)) { wb = {wb.pos() + Vector2D{10, 10}, wb.size() - Vector2D{20, 20}}; } - *pWindow->m_vRealPosition = wb.pos(); - *pWindow->m_vRealSize = wb.size(); + *pWindow->m_realPosition = wb.pos(); + *pWindow->m_realSize = wb.size(); - pWindow->m_vSize = wb.size(); - pWindow->m_vPosition = wb.pos(); + pWindow->m_size = wb.size(); + pWindow->m_position = wb.pos(); - g_pHyprRenderer->damageMonitor(pWindow->m_pMonitor.lock()); + g_pHyprRenderer->damageMonitor(pWindow->m_monitor.lock()); pWindow->unsetWindowData(PRIORITY_LAYOUT); pWindow->updateWindowData(); @@ -789,21 +789,21 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, PHLWINDOW pWindow) { if (!validMapped(PWINDOW)) return; - if (!PWINDOW->m_bIsFloating) { + if (!PWINDOW->m_isFloating) { Debug::log(LOG, "Dwindle cannot move a tiled window in moveActiveWindow!"); return; } PWINDOW->setAnimationsToMove(); - PWINDOW->m_vPosition += delta; - *PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition->goal() + delta; + PWINDOW->m_position += delta; + *PWINDOW->m_realPosition = PWINDOW->m_realPosition->goal() + delta; g_pHyprRenderer->damageWindow(PWINDOW); } void IHyprLayout::onWindowFocusChange(PHLWINDOW pNewFocus) { - m_pLastTiledWindow = pNewFocus && !pNewFocus->m_bIsFloating ? pNewFocus : m_pLastTiledWindow; + m_pLastTiledWindow = pNewFocus && !pNewFocus->m_isFloating ? pNewFocus : m_pLastTiledWindow; } PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { @@ -811,27 +811,26 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { if (!pWindow) return nullptr; - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PWORKSPACE = pWindow->m_workspace; // first of all, if this is a fullscreen workspace, if (PWORKSPACE->m_hasFullscreenWindow) return PWORKSPACE->getFullscreenWindow(); - if (pWindow->m_bIsFloating) { + if (pWindow->m_isFloating) { // find whether there is a floating window below this one for (auto const& w : g_pCompositor->m_windows) { - if (w->m_bIsMapped && !w->isHidden() && w->m_bIsFloating && !w->isX11OverrideRedirect() && w->m_pWorkspace == pWindow->m_pWorkspace && !w->m_bX11ShouldntFocus && - !w->m_sWindowData.noFocus.valueOrDefault() && w != pWindow) { - if (VECINRECT((pWindow->m_vSize / 2.f + pWindow->m_vPosition), w->m_vPosition.x, w->m_vPosition.y, w->m_vPosition.x + w->m_vSize.x, - w->m_vPosition.y + w->m_vSize.y)) { + if (w->m_isMapped && !w->isHidden() && w->m_isFloating && !w->isX11OverrideRedirect() && w->m_workspace == pWindow->m_workspace && !w->m_X11ShouldntFocus && + !w->m_windowData.noFocus.valueOrDefault() && w != pWindow) { + if (VECINRECT((pWindow->m_size / 2.f + pWindow->m_position), w->m_position.x, w->m_position.y, w->m_position.x + w->m_size.x, w->m_position.y + w->m_size.y)) { return w; } } } // let's try the last tiled window. - if (m_pLastTiledWindow.lock() && m_pLastTiledWindow->m_pWorkspace == pWindow->m_pWorkspace) + if (m_pLastTiledWindow.lock() && m_pLastTiledWindow->m_workspace == pWindow->m_workspace) return m_pLastTiledWindow.lock(); // if we don't, let's try to find any window that is in the middle @@ -841,8 +840,8 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { // if not, floating window for (auto const& w : g_pCompositor->m_windows) { - if (w->m_bIsMapped && !w->isHidden() && w->m_bIsFloating && !w->isX11OverrideRedirect() && w->m_pWorkspace == pWindow->m_pWorkspace && !w->m_bX11ShouldntFocus && - !w->m_sWindowData.noFocus.valueOrDefault() && w != pWindow) + if (w->m_isMapped && !w->isHidden() && w->m_isFloating && !w->isX11OverrideRedirect() && w->m_workspace == pWindow->m_workspace && !w->m_X11ShouldntFocus && + !w->m_windowData.noFocus.valueOrDefault() && w != pWindow) return w; } @@ -859,22 +858,22 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { if (!pWindowCandidate) pWindowCandidate = PWORKSPACE->getFirstWindow(); - if (!pWindowCandidate || pWindow == pWindowCandidate || !pWindowCandidate->m_bIsMapped || pWindowCandidate->isHidden() || pWindowCandidate->m_bX11ShouldntFocus || - pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_pMonitor != g_pCompositor->m_lastMonitor) + if (!pWindowCandidate || pWindow == pWindowCandidate || !pWindowCandidate->m_isMapped || pWindowCandidate->isHidden() || pWindowCandidate->m_X11ShouldntFocus || + pWindowCandidate->isX11OverrideRedirect() || pWindowCandidate->m_monitor != g_pCompositor->m_lastMonitor) return nullptr; return pWindowCandidate; } bool IHyprLayout::isWindowReachable(PHLWINDOW pWindow) { - return pWindow && (!pWindow->isHidden() || pWindow->m_sGroupData.pNextWindow); + return pWindow && (!pWindow->isHidden() || pWindow->m_groupData.pNextWindow); } void IHyprLayout::bringWindowToTop(PHLWINDOW pWindow) { if (pWindow == nullptr) return; - if (pWindow->isHidden() && pWindow->m_sGroupData.pNextWindow) { + if (pWindow->isHidden() && pWindow->m_groupData.pNextWindow) { // grouped, change the current to this window pWindow->setGroupCurrent(pWindow); } @@ -890,11 +889,11 @@ Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // ge Vector2D sizeOverride = {}; if (g_pCompositor->m_lastMonitor) { for (auto const& r : g_pConfigManager->getMatchingRules(pWindow, true, true)) { - if (r->ruleType != CWindowRule::RULE_SIZE) + if (r->m_ruleType != CWindowRule::RULE_SIZE) continue; try { - const auto VALUE = r->szRule.substr(r->szRule.find(' ') + 1); + const auto VALUE = r->m_rule.substr(r->m_rule.find(' ') + 1); const auto SIZEXSTR = VALUE.substr(0, VALUE.find(' ')); const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1); @@ -908,7 +907,7 @@ Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // ge sizeOverride = {SIZEX, SIZEY}; - } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->szRule, r->szValue); } + } catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r->m_rule, r->m_value); } break; } } @@ -921,7 +920,7 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { if (!shouldBeFloated) { for (auto const& r : g_pConfigManager->getMatchingRules(pWindow, true, true)) { - if (r->ruleType != CWindowRule::RULE_FLOAT) + if (r->m_ruleType != CWindowRule::RULE_FLOAT) continue; shouldBeFloated = true; @@ -936,7 +935,7 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { else sizePredicted = predictSizeForNewWindowFloating(pWindow); - Vector2D maxSize = pWindow->m_pXDGSurface->toplevel->pending.maxSize; + Vector2D maxSize = pWindow->m_xdgSurface->toplevel->pending.maxSize; if ((maxSize.x > 0 && maxSize.x < sizePredicted.x) || (maxSize.y > 0 && maxSize.y < sizePredicted.y)) sizePredicted = {}; @@ -954,35 +953,35 @@ bool IHyprLayout::updateDragWindow() { g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); } - const auto PWORKSPACE = DRAGGINGWINDOW->m_pWorkspace; + const auto PWORKSPACE = DRAGGINGWINDOW->m_workspace; - if (PWORKSPACE->m_hasFullscreenWindow && (!DRAGGINGWINDOW->m_bCreatedOverFullscreen || !DRAGGINGWINDOW->m_bIsFloating)) { + if (PWORKSPACE->m_hasFullscreenWindow && (!DRAGGINGWINDOW->m_createdOverFullscreen || !DRAGGINGWINDOW->m_isFloating)) { Debug::log(LOG, "Rejecting drag on a fullscreen workspace. (window under fullscreen)"); g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); return true; } } - DRAGGINGWINDOW->m_bDraggingTiled = false; - m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_vLastFloatingSize; + DRAGGINGWINDOW->m_draggingTiled = false; + m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_lastFloatingSize; - if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_bIsFloating) { - const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); - *DRAGGINGWINDOW->m_vRealPosition = MOUSECOORDS - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; - } else if (!DRAGGINGWINDOW->m_bIsFloating && g_pInputManager->dragMode == MBIND_MOVE) { - Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_sWindowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); - DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize->goal() * 0.8489).clamp(MINSIZE, Vector2D{}).floor(); - *DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize->goal() / 2.f; + if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_isFloating) { + const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); + *DRAGGINGWINDOW->m_realPosition = MOUSECOORDS - DRAGGINGWINDOW->m_realSize->goal() / 2.f; + } else if (!DRAGGINGWINDOW->m_isFloating && g_pInputManager->dragMode == MBIND_MOVE) { + Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_windowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); + DRAGGINGWINDOW->m_lastFloatingSize = (DRAGGINGWINDOW->m_realSize->goal() * 0.8489).clamp(MINSIZE, Vector2D{}).floor(); + *DRAGGINGWINDOW->m_realPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_realSize->goal() / 2.f; if (g_pInputManager->m_bDragThresholdReached) { changeWindowFloatingMode(DRAGGINGWINDOW); - DRAGGINGWINDOW->m_bIsFloating = true; - DRAGGINGWINDOW->m_bDraggingTiled = true; + DRAGGINGWINDOW->m_isFloating = true; + DRAGGINGWINDOW->m_draggingTiled = true; } } m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal(); - m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition->goal(); - m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize->goal(); + m_vBeginDragPositionXY = DRAGGINGWINDOW->m_realPosition->goal(); + m_vBeginDragSizeXY = DRAGGINGWINDOW->m_realSize->goal(); m_vLastDragXY = m_vBeginDragXY; return false; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 052a6ed9..6c7f6d1a 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -78,14 +78,14 @@ SMasterNodeData* CHyprMasterLayout::getMasterNodeOnWorkspace(const WORKSPACEID& } void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection direction) { - if (pWindow->m_bIsFloating) + if (pWindow->m_isFloating) return; static auto PNEWONACTIVE = CConfigValue("master:new_on_active"); static auto PNEWONTOP = CConfigValue("master:new_on_top"); static auto PNEWSTATUS = CConfigValue("master:new_status"); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); const bool BNEWBEFOREACTIVE = *PNEWONACTIVE == "before"; const bool BNEWISMASTER = *PNEWSTATUS == "master"; @@ -110,13 +110,13 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire static auto PMFACT = CConfigValue("master:mfact"); float lastSplitPercent = *PMFACT; - auto OPENINGON = isWindowTiled(g_pCompositor->m_lastWindow.lock()) && g_pCompositor->m_lastWindow->m_pWorkspace == pWindow->m_pWorkspace ? + auto OPENINGON = isWindowTiled(g_pCompositor->m_lastWindow.lock()) && g_pCompositor->m_lastWindow->m_workspace == pWindow->m_workspace ? getNodeFromWindow(g_pCompositor->m_lastWindow.lock()) : getMasterNodeOnWorkspace(pWindow->workspaceID()); const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); static auto PDROPATCURSOR = CConfigValue("master:drop_at_cursor"); - eOrientation orientation = getDynamicOrientation(pWindow->m_pWorkspace); + eOrientation orientation = getDynamicOrientation(pWindow->m_workspace); const auto NODEIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *PNODE); bool forceDropAsMaster = false; @@ -177,10 +177,10 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire } } - if ((BNEWISMASTER && g_pInputManager->dragMode != MBIND_MOVE) // - || WINDOWSONWORKSPACE == 1 // - || (WINDOWSONWORKSPACE > 2 && !pWindow->m_bFirstMap && OPENINGON->isMaster) // - || forceDropAsMaster // + if ((BNEWISMASTER && g_pInputManager->dragMode != MBIND_MOVE) // + || WINDOWSONWORKSPACE == 1 // + || (WINDOWSONWORKSPACE > 2 && !pWindow->m_firstMap && OPENINGON->isMaster) // + || forceDropAsMaster // || (*PNEWSTATUS == "inherit" && OPENINGON && OPENINGON->isMaster && g_pInputManager->dragMode != MBIND_MOVE)) { if (BNEWBEFOREACTIVE) { @@ -207,7 +207,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire // first, check if it isn't too big. if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PMONITOR->vecSize.x * lastSplitPercent || MAXSIZE.y < PMONITOR->vecSize.y) { // we can't continue. make it floating. - pWindow->m_bIsFloating = true; + pWindow->m_isFloating = true; m_lMasterNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; @@ -220,7 +220,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PMONITOR->vecSize.x * (1 - lastSplitPercent) || MAXSIZE.y < PMONITOR->vecSize.y * (1.f / (WINDOWSONWORKSPACE - 1))) { // we can't continue. make it floating. - pWindow->m_bIsFloating = true; + pWindow->m_isFloating = true; m_lMasterNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; @@ -306,16 +306,16 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - *PFULLWINDOW->m_vRealPosition = PMONITOR->vecPosition; - *PFULLWINDOW->m_vRealSize = PMONITOR->vecSize; + *PFULLWINDOW->m_realPosition = PMONITOR->vecPosition; + *PFULLWINDOW->m_realSize = PMONITOR->vecSize; } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SMasterNodeData fakeNode; fakeNode.pWindow = PFULLWINDOW; fakeNode.position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; fakeNode.size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; fakeNode.workspaceID = pWorkspace->m_id; - PFULLWINDOW->m_vPosition = fakeNode.position; - PFULLWINDOW->m_vSize = fakeNode.size; + PFULLWINDOW->m_position = fakeNode.position; + PFULLWINDOW->m_size = fakeNode.size; fakeNode.ignoreFullscreenChecks = true; applyNodeDataToWindow(&fakeNode); @@ -644,7 +644,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { const auto PWINDOW = pNode->pWindow.lock(); // get specific gaps and rules for this workspace, // if user specified them in config - const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(PWINDOW->m_pWorkspace); + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(PWINDOW->m_workspace); if (PWINDOW->isFullscreen() && !pNode->ignoreFullscreenChecks) return; @@ -666,13 +666,13 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { return; } - PWINDOW->m_vSize = pNode->size; - PWINDOW->m_vPosition = pNode->position; + PWINDOW->m_size = pNode->size; + PWINDOW->m_position = pNode->position; PWINDOW->updateWindowDecos(); - auto calcPos = PWINDOW->m_vPosition; - auto calcSize = PWINDOW->m_vSize; + auto calcPos = PWINDOW->m_position; + auto calcSize = PWINDOW->m_size; const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.m_left : gapsIn.m_left), (double)(DISPLAYTOP ? gapsOut.m_top : gapsIn.m_top)); @@ -691,21 +691,21 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { CBox wb = {calcPos + (calcSize - calcSize * *PSCALEFACTOR) / 2.f, calcSize * *PSCALEFACTOR}; wb.round(); // avoid rounding mess - *PWINDOW->m_vRealPosition = wb.pos(); - *PWINDOW->m_vRealSize = wb.size(); + *PWINDOW->m_realPosition = wb.pos(); + *PWINDOW->m_realSize = wb.size(); } else { CBox wb = {calcPos, calcSize}; wb.round(); // avoid rounding mess - *PWINDOW->m_vRealPosition = wb.pos(); - *PWINDOW->m_vRealSize = wb.size(); + *PWINDOW->m_realPosition = wb.pos(); + *PWINDOW->m_realSize = wb.size(); } if (m_bForceWarps && !*PANIMATE) { g_pHyprRenderer->damageWindow(PWINDOW); - PWINDOW->m_vRealPosition->warp(); - PWINDOW->m_vRealSize->warp(); + PWINDOW->m_realPosition->warp(); + PWINDOW->m_realSize->warp(); g_pHyprRenderer->damageWindow(PWINDOW); } @@ -726,21 +726,21 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne const auto PNODE = getNodeFromWindow(PWINDOW); if (!PNODE) { - *PWINDOW->m_vRealSize = - (PWINDOW->m_vRealSize->goal() + pixResize) - .clamp(PWINDOW->m_sWindowData.minSize.valueOr(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), PWINDOW->m_sWindowData.maxSize.valueOr(Vector2D{INFINITY, INFINITY})); + *PWINDOW->m_realSize = + (PWINDOW->m_realSize->goal() + pixResize) + .clamp(PWINDOW->m_windowData.minSize.valueOr(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), PWINDOW->m_windowData.maxSize.valueOr(Vector2D{INFINITY, INFINITY})); PWINDOW->updateWindowDecos(); return; } - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PWINDOW->m_monitor.lock(); static auto SLAVECOUNTFORCENTER = CConfigValue("master:slave_count_for_center_master"); static auto PSMARTRESIZING = CConfigValue("master:smart_resizing"); - const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_vPosition.y + PWINDOW->m_vSize.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); - const bool DISPLAYRIGHT = STICKS(PWINDOW->m_vPosition.x + PWINDOW->m_vSize.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(PWINDOW->m_vPosition.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYLEFT = STICKS(PWINDOW->m_vPosition.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); + const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); + const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); + const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); const bool LEFT = corner == CORNER_TOPLEFT || corner == CORNER_BOTTOMLEFT; const bool TOP = corner == CORNER_TOPLEFT || corner == CORNER_TOPRIGHT; @@ -750,7 +750,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne const auto WINDOWS = getNodesOnWorkspace(PNODE->workspaceID); const auto STACKWINDOWS = WINDOWS - MASTERS; - eOrientation orientation = getDynamicOrientation(PWINDOW->m_pWorkspace); + eOrientation orientation = getDynamicOrientation(PWINDOW->m_workspace); bool centered = orientation == ORIENTATION_CENTER && (STACKWINDOWS >= *SLAVECOUNTFORCENTER); double delta = 0; @@ -862,15 +862,15 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne } void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFullscreenMode CURRENT_EFFECTIVE_MODE, const eFullscreenMode EFFECTIVE_MODE) { - const auto PMONITOR = pWindow->m_pMonitor.lock(); - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PMONITOR = pWindow->m_monitor.lock(); + const auto PWORKSPACE = pWindow->m_workspace; // save position and size if floating - if (pWindow->m_bIsFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE) { - pWindow->m_vLastFloatingSize = pWindow->m_vRealSize->goal(); - pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition->goal(); - pWindow->m_vPosition = pWindow->m_vRealPosition->goal(); - pWindow->m_vSize = pWindow->m_vRealSize->goal(); + if (pWindow->m_isFloating && CURRENT_EFFECTIVE_MODE == FSMODE_NONE) { + pWindow->m_lastFloatingSize = pWindow->m_realSize->goal(); + pWindow->m_lastFloatingPosition = pWindow->m_realPosition->goal(); + pWindow->m_position = pWindow->m_realPosition->goal(); + pWindow->m_size = pWindow->m_realSize->goal(); } if (EFFECTIVE_MODE == FSMODE_NONE) { @@ -880,8 +880,8 @@ void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFul applyNodeDataToWindow(PNODE); else { // get back its' dimensions from position and size - *pWindow->m_vRealPosition = pWindow->m_vLastFloatingPosition; - *pWindow->m_vRealSize = pWindow->m_vLastFloatingSize; + *pWindow->m_realPosition = pWindow->m_lastFloatingPosition; + *pWindow->m_realSize = pWindow->m_lastFloatingSize; pWindow->unsetWindowData(PRIORITY_LAYOUT); pWindow->updateWindowData(); @@ -889,8 +889,8 @@ void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFul } else { // apply new pos and size being monitors' box if (EFFECTIVE_MODE == FSMODE_FULLSCREEN) { - *pWindow->m_vRealPosition = PMONITOR->vecPosition; - *pWindow->m_vRealSize = PMONITOR->vecSize; + *pWindow->m_realPosition = PMONITOR->vecPosition; + *pWindow->m_realSize = PMONITOR->vecSize; } else { // This is a massive hack. // We make a fake "only" node and apply @@ -901,8 +901,8 @@ void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFul fakeNode.position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; fakeNode.size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; fakeNode.workspaceID = pWindow->workspaceID(); - pWindow->m_vPosition = fakeNode.position; - pWindow->m_vSize = fakeNode.size; + pWindow->m_position = fakeNode.position; + pWindow->m_size = fakeNode.size; fakeNode.ignoreFullscreenChecks = true; applyNodeDataToWindow(&fakeNode); @@ -940,13 +940,13 @@ void CHyprMasterLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, pWindow->setAnimationsToMove(); - if (pWindow->m_pWorkspace != PWINDOW2->m_pWorkspace) { + if (pWindow->m_workspace != PWINDOW2->m_workspace) { // if different monitors, send to monitor onWindowRemovedTiling(pWindow); - pWindow->moveToWorkspace(PWINDOW2->m_pWorkspace); - pWindow->m_pMonitor = PWINDOW2->m_pMonitor; + pWindow->moveToWorkspace(PWINDOW2->m_workspace); + pWindow->m_monitor = PWINDOW2->m_monitor; if (!silent) { - const auto pMonitor = pWindow->m_pMonitor.lock(); + const auto pMonitor = pWindow->m_monitor.lock(); g_pCompositor->setActiveMonitor(pMonitor); } onWindowCreatedTiling(pWindow); @@ -958,11 +958,11 @@ void CHyprMasterLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, } pWindow->updateGroupOutputs(); - if (!pWindow->m_sGroupData.pNextWindow.expired()) { - PHLWINDOW next = pWindow->m_sGroupData.pNextWindow.lock(); + if (!pWindow->m_groupData.pNextWindow.expired()) { + PHLWINDOW next = pWindow->m_groupData.pNextWindow.lock(); while (next != pWindow) { next->updateToplevel(); - next = next->m_sGroupData.pNextWindow.lock(); + next = next->m_groupData.pNextWindow.lock(); } } } @@ -977,8 +977,8 @@ void CHyprMasterLayout::switchWindows(PHLWINDOW pWindow, PHLWINDOW pWindow2) { return; if (PNODE->workspaceID != PNODE2->workspaceID) { - std::swap(pWindow2->m_pMonitor, pWindow->m_pMonitor); - std::swap(pWindow2->m_pWorkspace, pWindow->m_pWorkspace); + std::swap(pWindow2->m_monitor, pWindow->m_monitor); + std::swap(pWindow2->m_workspace, pWindow->m_workspace); } // massive hack: just swap window pointers, lol @@ -1047,8 +1047,8 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri return; if (header.pWindow->isFullscreen()) { - const auto PWORKSPACE = header.pWindow->m_pWorkspace; - const auto FSMODE = header.pWindow->m_sFullscreenState.internal; + const auto PWORKSPACE = header.pWindow->m_workspace; + const auto FSMODE = header.pWindow->m_fullscreenState.internal; static auto INHERITFULLSCREEN = CConfigValue("master:inherit_fullscreen"); g_pCompositor->setWindowFullscreenInternal(header.pWindow, FSMODE_NONE); g_pCompositor->focusWindow(PWINDOWTOCHANGETO); @@ -1167,7 +1167,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!validMapped(header.pWindow)) return 0; - if (header.pWindow->m_bIsFloating) { + if (header.pWindow->m_isFloating) { g_pKeybindManager->m_mDispatchers["swapnext"](""); return 0; } @@ -1184,7 +1184,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!validMapped(header.pWindow)) return 0; - if (header.pWindow->m_bIsFloating) { + if (header.pWindow->m_isFloating) { g_pKeybindManager->m_mDispatchers["swapnext"]("prev"); return 0; } @@ -1201,7 +1201,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!validMapped(header.pWindow)) return 0; - if (header.pWindow->m_bIsFloating) + if (header.pWindow->m_isFloating) return 0; const auto PNODE = getNodeFromWindow(header.pWindow); @@ -1234,7 +1234,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!validMapped(header.pWindow)) return 0; - if (header.pWindow->m_bIsFloating) + if (header.pWindow->m_isFloating) return 0; const auto PNODE = getNodeFromWindow(header.pWindow); @@ -1469,7 +1469,7 @@ Vector2D CHyprMasterLayout::predictSizeForNewWindowTiled() { void CHyprMasterLayout::onEnable() { for (auto const& w : g_pCompositor->m_windows) { - if (w->m_bIsFloating || !w->m_bIsMapped || w->isHidden()) + if (w->m_isFloating || !w->m_isMapped || w->isHidden()) continue; onWindowCreatedTiling(w); diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index 48b9a6db..84261c45 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -51,7 +51,7 @@ void CANRManager::onTick() { PHLWINDOW firstWindow; int count = 0; for (const auto& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped) + if (!w->m_isMapped) continue; if (!data->fitsWindow(w)) @@ -67,10 +67,10 @@ void CANRManager::onTick() { if (data->missedResponses >= *PANRTHRESHOLD) { if (!data->isRunning() && !data->dialogSaidWait) { - data->runDialog("Application Not Responding", firstWindow->m_szTitle, firstWindow->m_szClass, data->getPid()); + data->runDialog("Application Not Responding", firstWindow->m_title, firstWindow->m_class, data->getPid()); for (const auto& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped) + if (!w->m_isMapped) continue; if (!data->fitsWindow(w)) @@ -133,10 +133,10 @@ bool CANRManager::isNotResponding(SP data) { SP CANRManager::dataFor(PHLWINDOW pWindow) { auto it = m_data.end(); - if (pWindow->m_pXWaylandSurface) - it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xwaylandSurface && data->xwaylandSurface == pWindow->m_pXWaylandSurface; }); - else if (pWindow->m_pXDGSurface) - it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xdgBase && data->xdgBase == pWindow->m_pXDGSurface->owner; }); + if (pWindow->m_xwaylandSurface) + it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xwaylandSurface && data->xwaylandSurface == pWindow->m_xwaylandSurface; }); + else if (pWindow->m_xdgSurface) + it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xdgBase && data->xdgBase == pWindow->m_xdgSurface->owner; }); return it == m_data.end() ? nullptr : *it; } @@ -150,8 +150,7 @@ SP CANRManager::dataFor(SP pXwaylandSur return it == m_data.end() ? nullptr : *it; } -CANRManager::SANRData::SANRData(PHLWINDOW pWindow) : - xwaylandSurface(pWindow->m_pXWaylandSurface), xdgBase(pWindow->m_pXDGSurface ? pWindow->m_pXDGSurface->owner : WP{}) { +CANRManager::SANRData::SANRData(PHLWINDOW pWindow) : xwaylandSurface(pWindow->m_xwaylandSurface), xdgBase(pWindow->m_xdgSurface ? pWindow->m_xdgSurface->owner : WP{}) { ; } @@ -199,10 +198,10 @@ void CANRManager::SANRData::killDialog() { } bool CANRManager::SANRData::fitsWindow(PHLWINDOW pWindow) const { - if (pWindow->m_pXWaylandSurface) - return pWindow->m_pXWaylandSurface == xwaylandSurface; - else if (pWindow->m_pXDGSurface) - return pWindow->m_pXDGSurface->owner == xdgBase && xdgBase; + if (pWindow->m_xwaylandSurface) + return pWindow->m_xwaylandSurface == xwaylandSurface; + else if (pWindow->m_xdgSurface) + return pWindow->m_xdgSurface->owner == xdgBase && xdgBase; return false; } diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 0db60e58..c9b270e2 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -94,11 +94,11 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { PDECO->damageEntire(); } - PMONITOR = PWINDOW->m_pMonitor.lock(); + PMONITOR = PWINDOW->m_monitor.lock(); if (!PMONITOR) return; - animationsDisabled = PWINDOW->m_sWindowData.noAnim.valueOr(animationsDisabled); + animationsDisabled = PWINDOW->m_windowData.noAnim.valueOr(animationsDisabled); } else if (PWORKSPACE) { PMONITOR = PWORKSPACE->m_monitor.lock(); if (!PMONITOR) @@ -110,10 +110,10 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { // TODO: just make this into a damn callback already vax... for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || w->isHidden() || w->m_pWorkspace != PWORKSPACE) + if (!w->m_isMapped || w->isHidden() || w->m_workspace != PWORKSPACE) continue; - if (w->m_bIsFloating && !w->m_bPinned) { + if (w->m_isFloating && !w->m_pinned) { // still doing the full damage hack for floating because sometimes when the window // goes through multiple monitors the last rendered frame is missing damage somehow?? const CBox windowBoxNoOffset = w->getFullWindowBoundingBox(); @@ -128,7 +128,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { // damage any workspace window that is on any monitor for (auto const& w : g_pCompositor->m_windows) { - if (!validMapped(w) || w->m_pWorkspace != PWORKSPACE || w->m_bPinned) + if (!validMapped(w) || w->m_workspace != PWORKSPACE || w->m_pinned) continue; g_pHyprRenderer->damageWindow(w); @@ -164,13 +164,13 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { g_pHyprRenderer->damageWindow(PWINDOW); } else if (PWORKSPACE) { for (auto const& w : g_pCompositor->m_windows) { - if (!validMapped(w) || w->m_pWorkspace != PWORKSPACE) + if (!validMapped(w) || w->m_workspace != PWORKSPACE) continue; w->updateWindowDecos(); // damage any workspace window that is on any monitor - if (!w->m_bPinned) + if (!w->m_pinned) g_pHyprRenderer->damageWindow(w); } } else if (PLAYER) { @@ -281,25 +281,25 @@ void CHyprAnimationManager::onTicked() { // void CHyprAnimationManager::animationPopin(PHLWINDOW pWindow, bool close, float minPerc) { - const auto GOALPOS = pWindow->m_vRealPosition->goal(); - const auto GOALSIZE = pWindow->m_vRealSize->goal(); + const auto GOALPOS = pWindow->m_realPosition->goal(); + const auto GOALSIZE = pWindow->m_realSize->goal(); if (!close) { - pWindow->m_vRealSize->setValue((GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y})); - pWindow->m_vRealPosition->setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize->value() / 2.f); + pWindow->m_realSize->setValue((GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y})); + pWindow->m_realPosition->setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_realSize->value() / 2.f); } else { - *pWindow->m_vRealSize = (GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y}); - *pWindow->m_vRealPosition = GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize->goal() / 2.f; + *pWindow->m_realSize = (GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y}); + *pWindow->m_realPosition = GOALPOS + GOALSIZE / 2.f - pWindow->m_realSize->goal() / 2.f; } } void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, bool close) { - pWindow->m_vRealSize->warp(false); // size we preserve in slide + pWindow->m_realSize->warp(false); // size we preserve in slide - const auto GOALPOS = pWindow->m_vRealPosition->goal(); - const auto GOALSIZE = pWindow->m_vRealSize->goal(); + const auto GOALPOS = pWindow->m_realPosition->goal(); + const auto GOALSIZE = pWindow->m_realSize->goal(); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); if (!PMONITOR) return; // unsafe state most likely @@ -317,9 +317,9 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, posOffset = Vector2D(GOALPOS.x, PMONITOR->vecPosition.y - GOALSIZE.y); if (!close) - pWindow->m_vRealPosition->setValue(posOffset); + pWindow->m_realPosition->setValue(posOffset); else - *pWindow->m_vRealPosition = posOffset; + *pWindow->m_realPosition = posOffset; return; } @@ -327,10 +327,10 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, const auto MIDPOINT = GOALPOS + GOALSIZE / 2.f; // check sides it touches - const bool DISPLAYLEFT = STICKS(pWindow->m_vPosition.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(pWindow->m_vPosition.x + pWindow->m_vSize.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(pWindow->m_vPosition.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(pWindow->m_vPosition.y + pWindow->m_vSize.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYLEFT = STICKS(pWindow->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(pWindow->m_position.x + pWindow->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); + const bool DISPLAYTOP = STICKS(pWindow->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(pWindow->m_position.y + pWindow->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); if (DISPLAYBOTTOM && DISPLAYTOP) { if (DISPLAYLEFT && DISPLAYRIGHT) { @@ -352,52 +352,52 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, } if (!close) - pWindow->m_vRealPosition->setValue(posOffset); + pWindow->m_realPosition->setValue(posOffset); else - *pWindow->m_vRealPosition = posOffset; + *pWindow->m_realPosition = posOffset; } void CHyprAnimationManager::animationGnomed(PHLWINDOW pWindow, bool close) { - const auto GOALPOS = pWindow->m_vRealPosition->goal(); - const auto GOALSIZE = pWindow->m_vRealSize->goal(); + const auto GOALPOS = pWindow->m_realPosition->goal(); + const auto GOALSIZE = pWindow->m_realSize->goal(); if (close) { - *pWindow->m_vRealPosition = GOALPOS + Vector2D{0.F, GOALSIZE.y / 2.F}; - *pWindow->m_vRealSize = Vector2D{GOALSIZE.x, 0.F}; + *pWindow->m_realPosition = GOALPOS + Vector2D{0.F, GOALSIZE.y / 2.F}; + *pWindow->m_realSize = Vector2D{GOALSIZE.x, 0.F}; } else { - pWindow->m_vRealPosition->setValueAndWarp(GOALPOS + Vector2D{0.F, GOALSIZE.y / 2.F}); - pWindow->m_vRealSize->setValueAndWarp(Vector2D{GOALSIZE.x, 0.F}); - *pWindow->m_vRealPosition = GOALPOS; - *pWindow->m_vRealSize = GOALSIZE; + pWindow->m_realPosition->setValueAndWarp(GOALPOS + Vector2D{0.F, GOALSIZE.y / 2.F}); + pWindow->m_realSize->setValueAndWarp(Vector2D{GOALSIZE.x, 0.F}); + *pWindow->m_realPosition = GOALPOS; + *pWindow->m_realSize = GOALSIZE; } } void CHyprAnimationManager::onWindowPostCreateClose(PHLWINDOW pWindow, bool close) { if (!close) { - pWindow->m_vRealPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsIn")); - pWindow->m_vRealSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsIn")); - pWindow->m_fAlpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeIn")); + pWindow->m_realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsIn")); + pWindow->m_realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsIn")); + pWindow->m_alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeIn")); } else { - pWindow->m_vRealPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsOut")); - pWindow->m_vRealSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsOut")); - pWindow->m_fAlpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut")); + pWindow->m_realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsOut")); + pWindow->m_realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsOut")); + pWindow->m_alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut")); } - std::string ANIMSTYLE = pWindow->m_vRealPosition->getStyle(); + std::string ANIMSTYLE = pWindow->m_realPosition->getStyle(); transform(ANIMSTYLE.begin(), ANIMSTYLE.end(), ANIMSTYLE.begin(), ::tolower); CVarList animList(ANIMSTYLE, 0, 's'); // if the window is not being animated, that means the layout set a fixed size for it, don't animate. - if (!pWindow->m_vRealPosition->isBeingAnimated() && !pWindow->m_vRealSize->isBeingAnimated()) + if (!pWindow->m_realPosition->isBeingAnimated() && !pWindow->m_realSize->isBeingAnimated()) return; // if the animation is disabled and we are leaving, ignore the anim to prevent the snapshot being fucked - if (!pWindow->m_vRealPosition->enabled()) + if (!pWindow->m_realPosition->enabled()) return; - if (pWindow->m_sWindowData.animationStyle.hasValue()) { - const auto STYLE = pWindow->m_sWindowData.animationStyle.value(); + if (pWindow->m_windowData.animationStyle.hasValue()) { + const auto STYLE = pWindow->m_windowData.animationStyle.value(); // the window has config'd special anim if (STYLE.starts_with("slide")) { CVarList animList2(STYLE, 0, 's'); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 44d90748..f30f65a1 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -331,7 +331,7 @@ static void updateRelativeCursorCoords() { return; if (g_pCompositor->m_lastWindow) - g_pCompositor->m_lastWindow->m_vRelativeCursorCoordsOnLastWarp = g_pInputManager->getMouseCoordsInternal() - g_pCompositor->m_lastWindow->m_vPosition; + g_pCompositor->m_lastWindow->m_relativeCursorCoordsOnLastWarp = g_pInputManager->getMouseCoordsInternal() - g_pCompositor->m_lastWindow->m_position; } bool CKeybindManager::tryMoveFocusToMonitor(PHLMONITOR monitor) { @@ -389,21 +389,21 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF // remove constraints g_pInputManager->unconstrainMouse(); - if (PLASTWINDOW && PLASTWINDOW->m_pWorkspace == PWINDOWTOCHANGETO->m_pWorkspace && PLASTWINDOW->isFullscreen()) { - const auto PWORKSPACE = PLASTWINDOW->m_pWorkspace; + if (PLASTWINDOW && PLASTWINDOW->m_workspace == PWINDOWTOCHANGETO->m_workspace && PLASTWINDOW->isFullscreen()) { + const auto PWORKSPACE = PLASTWINDOW->m_workspace; const auto MODE = PWORKSPACE->m_fullscreenMode; - if (!PWINDOWTOCHANGETO->m_bPinned) + if (!PWINDOWTOCHANGETO->m_pinned) g_pCompositor->setWindowFullscreenInternal(PLASTWINDOW, FSMODE_NONE); g_pCompositor->focusWindow(PWINDOWTOCHANGETO, nullptr, preserveFocusHistory); - if (!PWINDOWTOCHANGETO->m_bPinned) + if (!PWINDOWTOCHANGETO->m_pinned) g_pCompositor->setWindowFullscreenInternal(PWINDOWTOCHANGETO, MODE); // warp the position + size animation, otherwise it looks weird. - PWINDOWTOCHANGETO->m_vRealPosition->warp(); - PWINDOWTOCHANGETO->m_vRealSize->warp(); + PWINDOWTOCHANGETO->m_realPosition->warp(); + PWINDOWTOCHANGETO->m_realSize->warp(); } else { updateRelativeCursorCoords(); g_pCompositor->focusWindow(PWINDOWTOCHANGETO, nullptr, preserveFocusHistory); @@ -416,9 +416,9 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF g_pInputManager->m_pForcedFocus.reset(); } - if (PLASTWINDOW && PLASTWINDOW->m_pMonitor != PWINDOWTOCHANGETO->m_pMonitor) { + if (PLASTWINDOW && PLASTWINDOW->m_monitor != PWINDOWTOCHANGETO->m_monitor) { // event - const auto PNEWMON = PWINDOWTOCHANGETO->m_pMonitor.lock(); + const auto PNEWMON = PWINDOWTOCHANGETO->m_monitor.lock(); g_pCompositor->setActiveMonitor(PNEWMON); } @@ -1133,33 +1133,33 @@ static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional< if (!PWINDOW) return {.success = false, .error = "Window not found"}; - if (floatState.has_value() && floatState == PWINDOW->m_bIsFloating) + if (floatState.has_value() && floatState == PWINDOW->m_isFloating) return {}; // remove drag status if (!g_pInputManager->currentlyDraggedWindow.expired()) g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); - if (PWINDOW->m_sGroupData.pNextWindow.lock() && PWINDOW->m_sGroupData.pNextWindow.lock() != PWINDOW) { + if (PWINDOW->m_groupData.pNextWindow.lock() && PWINDOW->m_groupData.pNextWindow.lock() != PWINDOW) { const auto PCURRENT = PWINDOW->getGroupCurrent(); - PCURRENT->m_bIsFloating = !PCURRENT->m_bIsFloating; + PCURRENT->m_isFloating = !PCURRENT->m_isFloating; g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PCURRENT); - PHLWINDOW curr = PCURRENT->m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = PCURRENT->m_groupData.pNextWindow.lock(); while (curr != PCURRENT) { - curr->m_bIsFloating = PCURRENT->m_bIsFloating; - curr = curr->m_sGroupData.pNextWindow.lock(); + curr->m_isFloating = PCURRENT->m_isFloating; + curr = curr->m_groupData.pNextWindow.lock(); } } else { - PWINDOW->m_bIsFloating = !PWINDOW->m_bIsFloating; + PWINDOW->m_isFloating = !PWINDOW->m_isFloating; g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW); } - if (PWINDOW->m_pWorkspace) { - PWINDOW->m_pWorkspace->updateWindows(); - PWINDOW->m_pWorkspace->updateWindowData(); + if (PWINDOW->m_workspace) { + PWINDOW->m_workspace->updateWindows(); + PWINDOW->m_workspace->updateWindowData(); } g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); @@ -1183,17 +1183,17 @@ SDispatchResult CKeybindManager::setActiveTiled(std::string args) { SDispatchResult CKeybindManager::centerWindow(std::string args) { const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); - if (!PWINDOW || !PWINDOW->m_bIsFloating || PWINDOW->isFullscreen()) + if (!PWINDOW || !PWINDOW->m_isFloating || PWINDOW->isFullscreen()) return {.success = false, .error = "No floating window found"}; - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PWINDOW->m_monitor.lock(); auto RESERVEDOFFSET = Vector2D(); if (args == "1") RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f; - *PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize->goal() / 2.f + RESERVEDOFFSET; - PWINDOW->m_vPosition = PWINDOW->m_vRealPosition->goal(); + *PWINDOW->m_realPosition = PMONITOR->middle() - PWINDOW->m_realSize->goal() / 2.f + RESERVEDOFFSET; + PWINDOW->m_position = PWINDOW->m_realPosition->goal(); return {}; } @@ -1209,7 +1209,7 @@ SDispatchResult CKeybindManager::toggleActivePseudo(std::string args) { if (!PWINDOW) return {.success = false, .error = "Window not found"}; - PWINDOW->m_bIsPseudotiled = !PWINDOW->m_bIsPseudotiled; + PWINDOW->m_isPseudotiled = !PWINDOW->m_isPseudotiled; if (!PWINDOW->isFullscreen()) g_pLayoutManager->getCurrentLayout()->recalculateWindow(PWINDOW); @@ -1362,7 +1362,7 @@ SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) { if (!PWINDOW) return {.success = false, .error = "Window not found"}; - PWINDOW->m_sWindowData.syncFullscreen = CWindowOverridableVar(false, PRIORITY_SET_PROP); + PWINDOW->m_windowData.syncFullscreen = CWindowOverridableVar(false, PRIORITY_SET_PROP); int internalMode, clientMode; try { @@ -1372,19 +1372,19 @@ SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) { clientMode = std::stoi(ARGS[1]); } catch (std::exception& e) { clientMode = -1; } - const SFullscreenState STATE = SFullscreenState{.internal = (internalMode != -1 ? (eFullscreenMode)internalMode : PWINDOW->m_sFullscreenState.internal), - .client = (clientMode != -1 ? (eFullscreenMode)clientMode : PWINDOW->m_sFullscreenState.client)}; + const SFullscreenState STATE = SFullscreenState{.internal = (internalMode != -1 ? (eFullscreenMode)internalMode : PWINDOW->m_fullscreenState.internal), + .client = (clientMode != -1 ? (eFullscreenMode)clientMode : PWINDOW->m_fullscreenState.client)}; - if (internalMode != -1 && clientMode != -1 && PWINDOW->m_sFullscreenState.internal == STATE.internal && PWINDOW->m_sFullscreenState.client == STATE.client) + if (internalMode != -1 && clientMode != -1 && PWINDOW->m_fullscreenState.internal == STATE.internal && PWINDOW->m_fullscreenState.client == STATE.client) g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = FSMODE_NONE}); - else if (internalMode != -1 && clientMode == -1 && PWINDOW->m_sFullscreenState.internal == STATE.internal) - g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = PWINDOW->m_sFullscreenState.client}); - else if (internalMode == -1 && clientMode != -1 && PWINDOW->m_sFullscreenState.client == STATE.client) - g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_sFullscreenState.internal, .client = FSMODE_NONE}); + else if (internalMode != -1 && clientMode == -1 && PWINDOW->m_fullscreenState.internal == STATE.internal) + g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = FSMODE_NONE, .client = PWINDOW->m_fullscreenState.client}); + else if (internalMode == -1 && clientMode != -1 && PWINDOW->m_fullscreenState.client == STATE.client) + g_pCompositor->setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_fullscreenState.internal, .client = FSMODE_NONE}); else g_pCompositor->setWindowFullscreenState(PWINDOW, STATE); - PWINDOW->m_sWindowData.syncFullscreen = CWindowOverridableVar(PWINDOW->m_sFullscreenState.internal == PWINDOW->m_sFullscreenState.client, PRIORITY_SET_PROP); + PWINDOW->m_windowData.syncFullscreen = CWindowOverridableVar(PWINDOW->m_fullscreenState.internal == PWINDOW->m_fullscreenState.client, PRIORITY_SET_PROP); return {}; } @@ -1416,7 +1416,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { auto pWorkspace = g_pCompositor->getWorkspaceByID(WORKSPACEID); PHLMONITOR pMonitor = nullptr; - const auto POLDWS = PWINDOW->m_pWorkspace; + const auto POLDWS = PWINDOW->m_workspace; static auto PALLOWWORKSPACECYCLES = CConfigValue("binds:allow_workspace_cycles"); updateRelativeCursorCoords(); @@ -1519,7 +1519,7 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { g_pCompositor->getWindowInDirection(PLASTWINDOW, arg); // Prioritize focus change within groups if the window is a part of it. - if (*PGROUPCYCLE && PLASTWINDOW->m_sGroupData.pNextWindow) { + if (*PGROUPCYCLE && PLASTWINDOW->m_groupData.pNextWindow) { auto isTheOnlyGroupOnWs = !PWINDOWTOCHANGETO && g_pCompositor->m_monitors.size() == 1; if (arg == 'l' && (PLASTWINDOW != PLASTWINDOW->getGroupHead() || isTheOnlyGroupOnWs)) { PLASTWINDOW->setGroupCurrent(PLASTWINDOW->getGroupPrevious()); @@ -1527,7 +1527,7 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { } else if (arg == 'r' && (PLASTWINDOW != PLASTWINDOW->getGroupTail() || isTheOnlyGroupOnWs)) { - PLASTWINDOW->setGroupCurrent(PLASTWINDOW->m_sGroupData.pNextWindow.lock()); + PLASTWINDOW->setGroupCurrent(PLASTWINDOW->m_groupData.pNextWindow.lock()); return {}; } } @@ -1549,15 +1549,15 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { Debug::log(LOG, "No monitor found in direction {}, getting the inverse edge", arg); - const auto PMONITOR = PLASTWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PLASTWINDOW->m_monitor.lock(); if (!PMONITOR) return {.success = false, .error = "last window has no monitor?"}; if (arg == 'l' || arg == 'r') { - if (STICKS(PLASTWINDOW->m_vPosition.x, PMONITOR->vecPosition.x) && STICKS(PLASTWINDOW->m_vSize.x, PMONITOR->vecSize.x)) + if (STICKS(PLASTWINDOW->m_position.x, PMONITOR->vecPosition.x) && STICKS(PLASTWINDOW->m_size.x, PMONITOR->vecSize.x)) return {.success = false, .error = "move does not make sense, would return back"}; - } else if (STICKS(PLASTWINDOW->m_vPosition.y, PMONITOR->vecPosition.y) && STICKS(PLASTWINDOW->m_vSize.y, PMONITOR->vecSize.y)) + } else if (STICKS(PLASTWINDOW->m_position.y, PMONITOR->vecPosition.y) && STICKS(PLASTWINDOW->m_size.y, PMONITOR->vecSize.y)) return {.success = false, .error = "move does not make sense, would return back"}; CBox box = PMONITOR->logicalBox(); @@ -1583,7 +1583,7 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { } const auto PWINDOWCANDIDATE = g_pCompositor->getWindowInDirection(box, PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace, arg, - PLASTWINDOW, PLASTWINDOW->m_bIsFloating); + PLASTWINDOW, PLASTWINDOW->m_isFloating); if (PWINDOWCANDIDATE) switchToWindow(PWINDOWCANDIDATE); @@ -1675,21 +1675,21 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { if (PLASTWINDOW->isFullscreen()) return {.success = false, .error = "Can't move fullscreen window"}; - if (PLASTWINDOW->m_bIsFloating) { + if (PLASTWINDOW->m_isFloating) { std::optional vPosx, vPosy; - const auto PMONITOR = PLASTWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PLASTWINDOW->m_monitor.lock(); const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize(); switch (arg) { case 'l': vPosx = PMONITOR->vecReservedTopLeft.x + BORDERSIZE + PMONITOR->vecPosition.x; break; - case 'r': vPosx = PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PLASTWINDOW->m_vRealSize->goal().x - BORDERSIZE + PMONITOR->vecPosition.x; break; + case 'r': vPosx = PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->vecPosition.x; break; case 't': case 'u': vPosy = PMONITOR->vecReservedTopLeft.y + BORDERSIZE + PMONITOR->vecPosition.y; break; case 'b': - case 'd': vPosy = PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PLASTWINDOW->m_vRealSize->goal().y - BORDERSIZE + PMONITOR->vecPosition.y; break; + case 'd': vPosy = PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->vecPosition.y; break; } - *PLASTWINDOW->m_vRealPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_vRealPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_vRealPosition->goal().y)); + *PLASTWINDOW->m_realPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_realPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_realPosition->goal().y)); return {}; } @@ -1732,7 +1732,7 @@ SDispatchResult CKeybindManager::toggleGroup(std::string args) { if (PWINDOW->isFullscreen()) g_pCompositor->setWindowFullscreenInternal(PWINDOW, FSMODE_NONE); - if (PWINDOW->m_sGroupData.pNextWindow.expired()) + if (PWINDOW->m_groupData.pNextWindow.expired()) PWINDOW->createGroup(); else PWINDOW->destroyGroup(); @@ -1746,10 +1746,10 @@ SDispatchResult CKeybindManager::changeGroupActive(std::string args) { if (!PWINDOW) return {.success = false, .error = "Window not found"}; - if (PWINDOW->m_sGroupData.pNextWindow.expired()) + if (PWINDOW->m_groupData.pNextWindow.expired()) return {.success = false, .error = "No next window in group"}; - if (PWINDOW->m_sGroupData.pNextWindow.lock() == PWINDOW) + if (PWINDOW->m_groupData.pNextWindow.lock() == PWINDOW) return {.success = false, .error = "Only one window in group"}; if (isNumber(args, false)) { @@ -1765,7 +1765,7 @@ SDispatchResult CKeybindManager::changeGroupActive(std::string args) { } if (args != "b" && args != "prev") { - PWINDOW->setGroupCurrent(PWINDOW->m_sGroupData.pNextWindow.lock()); + PWINDOW->setGroupCurrent(PWINDOW->m_groupData.pNextWindow.lock()); } else { PWINDOW->setGroupCurrent(PWINDOW->getGroupPrevious()); } @@ -1780,7 +1780,7 @@ SDispatchResult CKeybindManager::toggleSplit(std::string args) { if (!header.pWindow) return {.success = false, .error = "Window not found"}; - const auto PWORKSPACE = header.pWindow->m_pWorkspace; + const auto PWORKSPACE = header.pWindow->m_workspace; if (PWORKSPACE->m_hasFullscreenWindow) return {.success = false, .error = "Can't split windows that already split"}; @@ -1797,7 +1797,7 @@ SDispatchResult CKeybindManager::swapSplit(std::string args) { if (!header.pWindow) return {.success = false, .error = "Window not found"}; - const auto PWORKSPACE = header.pWindow->m_pWorkspace; + const auto PWORKSPACE = header.pWindow->m_workspace; if (PWORKSPACE->m_hasFullscreenWindow) return {.success = false, .error = "Can't split windows that already split"}; @@ -1860,20 +1860,20 @@ SDispatchResult CKeybindManager::moveCursorToCorner(std::string arg) { switch (CORNER) { case 0: // bottom left - g_pCompositor->warpCursorTo({PWINDOW->m_vRealPosition->value().x, PWINDOW->m_vRealPosition->value().y + PWINDOW->m_vRealSize->value().y}, true); + g_pCompositor->warpCursorTo({PWINDOW->m_realPosition->value().x, PWINDOW->m_realPosition->value().y + PWINDOW->m_realSize->value().y}, true); break; case 1: // bottom right - g_pCompositor->warpCursorTo( - {PWINDOW->m_vRealPosition->value().x + PWINDOW->m_vRealSize->value().x, PWINDOW->m_vRealPosition->value().y + PWINDOW->m_vRealSize->value().y}, true); + g_pCompositor->warpCursorTo({PWINDOW->m_realPosition->value().x + PWINDOW->m_realSize->value().x, PWINDOW->m_realPosition->value().y + PWINDOW->m_realSize->value().y}, + true); break; case 2: // top right - g_pCompositor->warpCursorTo({PWINDOW->m_vRealPosition->value().x + PWINDOW->m_vRealSize->value().x, PWINDOW->m_vRealPosition->value().y}, true); + g_pCompositor->warpCursorTo({PWINDOW->m_realPosition->value().x + PWINDOW->m_realSize->value().x, PWINDOW->m_realPosition->value().y}, true); break; case 3: // top left - g_pCompositor->warpCursorTo({PWINDOW->m_vRealPosition->value().x, PWINDOW->m_vRealPosition->value().y}, true); + g_pCompositor->warpCursorTo({PWINDOW->m_realPosition->value().x, PWINDOW->m_realPosition->value().y}, true); break; } @@ -1923,10 +1923,10 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { // apply for (auto const& w : g_pCompositor->m_windows) { - if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE) + if (!w->m_isMapped || w->m_workspace != PWORKSPACE) continue; - w->m_bIsPseudotiled = PWORKSPACE->m_defaultPseudo; + w->m_isPseudotiled = PWORKSPACE->m_defaultPseudo; } } else if (args == "allfloat") { PWORKSPACE->m_defaultFloating = !PWORKSPACE->m_defaultFloating; @@ -1936,21 +1936,21 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { std::vector ptrs(g_pCompositor->m_windows.begin(), g_pCompositor->m_windows.end()); for (auto const& w : ptrs) { - if (!w->m_bIsMapped || w->m_pWorkspace != PWORKSPACE || w->isHidden()) + if (!w->m_isMapped || w->m_workspace != PWORKSPACE || w->isHidden()) continue; - if (!w->m_bRequestsFloat && w->m_bIsFloating != PWORKSPACE->m_defaultFloating) { - const auto SAVEDPOS = w->m_vRealPosition->goal(); - const auto SAVEDSIZE = w->m_vRealSize->goal(); + if (!w->m_requestsFloat && w->m_isFloating != PWORKSPACE->m_defaultFloating) { + const auto SAVEDPOS = w->m_realPosition->goal(); + const auto SAVEDSIZE = w->m_realSize->goal(); - w->m_bIsFloating = PWORKSPACE->m_defaultFloating; + w->m_isFloating = PWORKSPACE->m_defaultFloating; g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(w); if (PWORKSPACE->m_defaultFloating) { - w->m_vRealPosition->setValueAndWarp(SAVEDPOS); - w->m_vRealSize->setValueAndWarp(SAVEDSIZE); - *w->m_vRealSize = w->m_vRealSize->value() + Vector2D(4, 4); - *w->m_vRealPosition = w->m_vRealPosition->value() - Vector2D(2, 2); + w->m_realPosition->setValueAndWarp(SAVEDPOS); + w->m_realSize->setValueAndWarp(SAVEDSIZE); + *w->m_realSize = w->m_realSize->value() + Vector2D(4, 4); + *w->m_realPosition = w->m_realPosition->value() - Vector2D(2, 2); } } } @@ -2186,14 +2186,14 @@ SDispatchResult CKeybindManager::resizeActive(std::string args) { if (PLASTWINDOW->isFullscreen()) return {.success = false, .error = "Window is fullscreen"}; - const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_vRealSize->goal()); + const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_realSize->goal()); if (SIZ.x < 1 || SIZ.y < 1) return {.success = false, .error = "Invalid size provided"}; - g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PLASTWINDOW->m_vRealSize->goal()); + g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PLASTWINDOW->m_realSize->goal()); - if (PLASTWINDOW->m_vRealSize->goal().x > 1 && PLASTWINDOW->m_vRealSize->goal().y > 1) + if (PLASTWINDOW->m_realSize->goal().x > 1 && PLASTWINDOW->m_realSize->goal().y > 1) PLASTWINDOW->setHidden(false); return {}; @@ -2208,9 +2208,9 @@ SDispatchResult CKeybindManager::moveActive(std::string args) { if (PLASTWINDOW->isFullscreen()) return {.success = false, .error = "Window is fullscreen"}; - const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_vRealPosition->goal()); + const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, PLASTWINDOW->m_realPosition->goal()); - g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PLASTWINDOW->m_vRealPosition->goal()); + g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PLASTWINDOW->m_realPosition->goal()); return {}; } @@ -2230,9 +2230,9 @@ SDispatchResult CKeybindManager::moveWindow(std::string args) { if (PWINDOW->isFullscreen()) return {.success = false, .error = "Window is fullscreen"}; - const auto POS = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealPosition->goal()); + const auto POS = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_realPosition->goal()); - g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PWINDOW->m_vRealPosition->goal(), PWINDOW); + g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PWINDOW->m_realPosition->goal(), PWINDOW); return {}; } @@ -2252,14 +2252,14 @@ SDispatchResult CKeybindManager::resizeWindow(std::string args) { if (PWINDOW->isFullscreen()) return {.success = false, .error = "Window is fullscreen"}; - const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealSize->goal()); + const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_realSize->goal()); if (SIZ.x < 1 || SIZ.y < 1) return {.success = false, .error = "Invalid size provided"}; - g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize->goal(), CORNER_NONE, PWINDOW); + g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_realSize->goal(), CORNER_NONE, PWINDOW); - if (PWINDOW->m_vRealSize->goal().x > 1 && PWINDOW->m_vRealSize->goal().y > 1) + if (PWINDOW->m_realSize->goal().x > 1 && PWINDOW->m_realSize->goal().y > 1) PWINDOW->setHidden(false); return {}; @@ -2303,9 +2303,9 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { if (!PWINDOW) return {.success = false, .error = "No such window found"}; - Debug::log(LOG, "Focusing to window name: {}", PWINDOW->m_szTitle); + Debug::log(LOG, "Focusing to window name: {}", PWINDOW->m_title); - const auto PWORKSPACE = PWINDOW->m_pWorkspace; + const auto PWORKSPACE = PWINDOW->m_workspace; if (!PWORKSPACE) { Debug::log(ERR, "BUG THIS: null workspace in focusWindow"); return {.success = false, .error = "BUG THIS: null workspace in focusWindow"}; @@ -2313,8 +2313,8 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { updateRelativeCursorCoords(); - if (g_pCompositor->m_lastMonitor && g_pCompositor->m_lastMonitor->activeWorkspace != PWINDOW->m_pWorkspace && - g_pCompositor->m_lastMonitor->activeSpecialWorkspace != PWINDOW->m_pWorkspace) { + if (g_pCompositor->m_lastMonitor && g_pCompositor->m_lastMonitor->activeWorkspace != PWINDOW->m_workspace && + g_pCompositor->m_lastMonitor->activeSpecialWorkspace != PWINDOW->m_workspace) { Debug::log(LOG, "Fake executing workspace to move focus"); changeworkspace(PWORKSPACE->getConfigName()); } @@ -2323,26 +2323,26 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { const auto FSWINDOW = PWORKSPACE->getFullscreenWindow(); const auto FSMODE = PWORKSPACE->m_fullscreenMode; - if (PWINDOW->m_bIsFloating) { + if (PWINDOW->m_isFloating) { // don't make floating implicitly fs - if (!PWINDOW->m_bCreatedOverFullscreen) { + if (!PWINDOW->m_createdOverFullscreen) { g_pCompositor->changeWindowZOrder(PWINDOW, true); g_pCompositor->updateFullscreenFadeOnWorkspace(PWORKSPACE); } g_pCompositor->focusWindow(PWINDOW); } else { - if (FSWINDOW != PWINDOW && !PWINDOW->m_bPinned) + if (FSWINDOW != PWINDOW && !PWINDOW->m_pinned) g_pCompositor->setWindowFullscreenClient(FSWINDOW, FSMODE_NONE); g_pCompositor->focusWindow(PWINDOW); - if (FSWINDOW != PWINDOW && !PWINDOW->m_bPinned) + if (FSWINDOW != PWINDOW && !PWINDOW->m_pinned) g_pCompositor->setWindowFullscreenClient(PWINDOW, FSMODE); // warp the position + size animation, otherwise it looks weird. - PWINDOW->m_vRealPosition->warp(); - PWINDOW->m_vRealSize->warp(); + PWINDOW->m_realPosition->warp(); + PWINDOW->m_realSize->warp(); } } else g_pCompositor->focusWindow(PWINDOW); @@ -2365,7 +2365,7 @@ SDispatchResult CKeybindManager::tagWindow(std::string args) { if (PWINDOW && PWINDOW->m_tags.applyTag(vars[0])) { PWINDOW->updateDynamicRules(); - g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW->m_pSelf.lock()); + g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW->m_self.lock()); } return {}; @@ -2374,19 +2374,19 @@ SDispatchResult CKeybindManager::tagWindow(std::string args) { SDispatchResult CKeybindManager::toggleSwallow(std::string args) { PHLWINDOWREF pWindow = g_pCompositor->m_lastWindow; - if (!valid(pWindow) || !valid(pWindow->m_pSwallowed)) + if (!valid(pWindow) || !valid(pWindow->m_swallowed)) return {}; - if (pWindow->m_pSwallowed->m_bCurrentlySwallowed) { + if (pWindow->m_swallowed->m_currentlySwallowed) { // Unswallow - pWindow->m_pSwallowed->m_bCurrentlySwallowed = false; - pWindow->m_pSwallowed->setHidden(false); - g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow->m_pSwallowed.lock()); + pWindow->m_swallowed->m_currentlySwallowed = false; + pWindow->m_swallowed->setHidden(false); + g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow->m_swallowed.lock()); } else { // Reswallow - pWindow->m_pSwallowed->m_bCurrentlySwallowed = true; - pWindow->m_pSwallowed->setHidden(true); - g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow->m_pSwallowed.lock()); + pWindow->m_swallowed->m_currentlySwallowed = true; + pWindow->m_swallowed->setHidden(true); + g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow->m_swallowed.lock()); } return {}; @@ -2430,16 +2430,16 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { return {.success = false, .error = "No kb in pass?"}; } - const auto XWTOXW = PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsX11; + const auto XWTOXW = PWINDOW->m_isX11 && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_isX11; const auto LASTMOUSESURF = g_pSeatManager->state.pointerFocus.lock(); const auto LASTKBSURF = g_pSeatManager->state.keyboardFocus.lock(); // pass all mf shit if (!XWTOXW) { if (g_pKeybindManager->m_uLastCode != 0) - g_pSeatManager->setKeyboardFocus(PWINDOW->m_pWLSurface->resource()); + g_pSeatManager->setKeyboardFocus(PWINDOW->m_wlSurface->resource()); else - g_pSeatManager->setPointerFocus(PWINDOW->m_pWLSurface->resource(), {1, 1}); + g_pSeatManager->setPointerFocus(PWINDOW->m_wlSurface->resource(), {1, 1}); } g_pSeatManager->sendKeyboardMods(g_pInputManager->accumulateModsFromAllKBs(), 0, 0, 0); @@ -2471,7 +2471,7 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { // Massive hack: // this will make g_pSeatManager NOT send the leave event to XWayland apps, provided we are not on an XWayland window already. // please kill me - if (PWINDOW->m_bIsX11) { + if (PWINDOW->m_isX11) { if (g_pKeybindManager->m_uLastCode != 0) { g_pSeatManager->state.keyboardFocus.reset(); g_pSeatManager->state.keyboardFocusResource.reset(); @@ -2481,7 +2481,7 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { } } - const auto SL = PWINDOW->m_vRealPosition->goal() - g_pInputManager->getMouseCoordsInternal(); + const auto SL = PWINDOW->m_realPosition->goal() - g_pInputManager->getMouseCoordsInternal(); if (g_pKeybindManager->m_uLastCode != 0) g_pSeatManager->setKeyboardFocus(LASTKBSURF); @@ -2585,17 +2585,17 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { } if (!isMouse) - g_pSeatManager->setKeyboardFocus(PWINDOW->m_pWLSurface->resource()); + g_pSeatManager->setKeyboardFocus(PWINDOW->m_wlSurface->resource()); else - g_pSeatManager->setPointerFocus(PWINDOW->m_pWLSurface->resource(), {1, 1}); + g_pSeatManager->setPointerFocus(PWINDOW->m_wlSurface->resource(), {1, 1}); } //copied the rest from pass and modified it // if wl -> xwl, activate destination - if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_bIsX11) - g_pXWaylandManager->activateSurface(PWINDOW->m_pWLSurface->resource(), true); + if (PWINDOW && PWINDOW->m_isX11 && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_isX11) + g_pXWaylandManager->activateSurface(PWINDOW->m_wlSurface->resource(), true); // if xwl -> xwl, send to current. Timing issues make this not work. - if (PWINDOW && PWINDOW->m_bIsX11 && g_pCompositor->m_lastWindow && g_pCompositor->m_lastWindow->m_bIsX11) + if (PWINDOW && PWINDOW->m_isX11 && g_pCompositor->m_lastWindow && g_pCompositor->m_lastWindow->m_isX11) PWINDOW = nullptr; g_pSeatManager->sendKeyboardMods(MOD, 0, 0, 0); @@ -2626,7 +2626,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { if (!PWINDOW) return {}; - if (PWINDOW->m_bIsX11) { //xwayland hack, see pass + if (PWINDOW->m_isX11) { //xwayland hack, see pass if (!isMouse) { g_pSeatManager->state.keyboardFocus.reset(); g_pSeatManager->state.keyboardFocusResource.reset(); @@ -2636,7 +2636,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { } } - const auto SL = PWINDOW->m_vRealPosition->goal() - g_pInputManager->getMouseCoordsInternal(); + const auto SL = PWINDOW->m_realPosition->goal() - g_pInputManager->getMouseCoordsInternal(); if (!isMouse) g_pSeatManager->setKeyboardFocus(LASTSURFACE); @@ -2704,8 +2704,8 @@ SDispatchResult CKeybindManager::swapnext(std::string arg) { const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); const auto PLASTCYCLED = - validMapped(g_pCompositor->m_lastWindow->m_pLastCycledWindow) && g_pCompositor->m_lastWindow->m_pLastCycledWindow->m_pWorkspace == PLASTWINDOW->m_pWorkspace ? - g_pCompositor->m_lastWindow->m_pLastCycledWindow.lock() : + validMapped(g_pCompositor->m_lastWindow->m_lastCycledWindow) && g_pCompositor->m_lastWindow->m_lastCycledWindow->m_workspace == PLASTWINDOW->m_workspace ? + g_pCompositor->m_lastWindow->m_lastCycledWindow.lock() : nullptr; const bool NEED_PREV = arg == "last" || arg == "l" || arg == "prev" || arg == "p"; @@ -2717,7 +2717,7 @@ SDispatchResult CKeybindManager::swapnext(std::string arg) { g_pLayoutManager->getCurrentLayout()->switchWindows(PLASTWINDOW, toSwap); - PLASTWINDOW->m_pLastCycledWindow = toSwap; + PLASTWINDOW->m_lastCycledWindow = toSwap; g_pCompositor->focusWindow(PLASTWINDOW); @@ -2756,28 +2756,28 @@ SDispatchResult CKeybindManager::pinActive(std::string args) { return {.success = false, .error = "pin: window not found"}; } - if (!PWINDOW->m_bIsFloating || PWINDOW->isFullscreen()) + if (!PWINDOW->m_isFloating || PWINDOW->isFullscreen()) return {.success = false, .error = "Window does not qualify to be pinned"}; - PWINDOW->m_bPinned = !PWINDOW->m_bPinned; + PWINDOW->m_pinned = !PWINDOW->m_pinned; - const auto PMONITOR = PWINDOW->m_pMonitor.lock(); + const auto PMONITOR = PWINDOW->m_monitor.lock(); if (!PMONITOR) { Debug::log(ERR, "pin: monitor not found"); return {.success = false, .error = "pin: window not found"}; } - PWINDOW->m_pWorkspace = PMONITOR->activeWorkspace; + PWINDOW->m_workspace = PMONITOR->activeWorkspace; PWINDOW->updateDynamicRules(); g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); - const auto PWORKSPACE = PWINDOW->m_pWorkspace; + const auto PWORKSPACE = PWINDOW->m_workspace; PWORKSPACE->m_lastFocusedWindow = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS); - g_pEventManager->postEvent(SHyprIPCEvent{"pin", std::format("{:x},{}", (uintptr_t)PWINDOW.get(), (int)PWINDOW->m_bPinned)}); + g_pEventManager->postEvent(SHyprIPCEvent{"pin", std::format("{:x},{}", (uintptr_t)PWINDOW.get(), (int)PWINDOW->m_pinned)}); EMIT_HOOK_EVENT("pin", PWINDOW); return {}; @@ -2836,7 +2836,7 @@ SDispatchResult CKeybindManager::changeMouseBindMode(const eMouseBindMode MODE) } SDispatchResult CKeybindManager::bringActiveToTop(std::string args) { - if (g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsFloating) + if (g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_isFloating) g_pCompositor->changeWindowZOrder(g_pCompositor->m_lastWindow.lock(), true); return {}; @@ -2847,7 +2847,7 @@ SDispatchResult CKeybindManager::alterZOrder(std::string args) { const auto POSITION = args.substr(0, args.find_first_of(',')); auto PWINDOW = g_pCompositor->getWindowByRegex(WINDOWREGEX); - if (!PWINDOW && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_bIsFloating) + if (!PWINDOW && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_isFloating) PWINDOW = g_pCompositor->m_lastWindow.lock(); if (!PWINDOW) { @@ -2889,17 +2889,17 @@ SDispatchResult CKeybindManager::lockActiveGroup(std::string args) { if (!PWINDOW) return {.success = false, .error = "No window found"}; - if (!PWINDOW->m_sGroupData.pNextWindow.lock()) + if (!PWINDOW->m_groupData.pNextWindow.lock()) return {.success = false, .error = "Not a group"}; const auto PHEAD = PWINDOW->getGroupHead(); if (args == "lock") - PHEAD->m_sGroupData.locked = true; + PHEAD->m_groupData.locked = true; else if (args == "toggle") - PHEAD->m_sGroupData.locked = !PHEAD->m_sGroupData.locked; + PHEAD->m_groupData.locked = !PHEAD->m_groupData.locked; else - PHEAD->m_sGroupData.locked = false; + PHEAD->m_groupData.locked = false; g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); @@ -2907,16 +2907,16 @@ SDispatchResult CKeybindManager::lockActiveGroup(std::string args) { } void CKeybindManager::moveWindowIntoGroup(PHLWINDOW pWindow, PHLWINDOW pWindowInDirection) { - if (pWindow->m_sGroupData.deny) + if (pWindow->m_groupData.deny) return; updateRelativeCursorCoords(); g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); // This removes groupped property! - if (pWindow->m_pMonitor != pWindowInDirection->m_pMonitor) { - pWindow->moveToWorkspace(pWindowInDirection->m_pWorkspace); - pWindow->m_pMonitor = pWindowInDirection->m_pMonitor; + if (pWindow->m_monitor != pWindowInDirection->m_monitor) { + pWindow->moveToWorkspace(pWindowInDirection->m_workspace); + pWindow->m_monitor = pWindowInDirection->m_monitor; } static auto USECURRPOS = CConfigValue("group:insert_after_current"); @@ -2951,7 +2951,7 @@ void CKeybindManager::moveWindowOutOfGroup(PHLWINDOW pWindow, const std::string& updateRelativeCursorCoords(); - if (pWindow->m_sGroupData.pNextWindow.lock() == pWindow) { + if (pWindow->m_groupData.pNextWindow.lock() == pWindow) { pWindow->destroyGroup(); } else { g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); @@ -2990,16 +2990,16 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) { const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); - if (!PWINDOW || PWINDOW->m_sGroupData.deny) + if (!PWINDOW || PWINDOW->m_groupData.deny) return {}; auto PWINDOWINDIR = g_pCompositor->getWindowInDirection(PWINDOW, arg); - if (!PWINDOWINDIR || !PWINDOWINDIR->m_sGroupData.pNextWindow.lock()) + if (!PWINDOWINDIR || !PWINDOWINDIR->m_groupData.pNextWindow.lock()) return {}; // Do not move window into locked group if binds:ignore_group_lock is false - if (!*PIGNOREGROUPLOCK && (PWINDOWINDIR->getGroupHead()->m_sGroupData.locked || (PWINDOW->m_sGroupData.pNextWindow.lock() && PWINDOW->getGroupHead()->m_sGroupData.locked))) + if (!*PIGNOREGROUPLOCK && (PWINDOWINDIR->getGroupHead()->m_groupData.locked || (PWINDOW->m_groupData.pNextWindow.lock() && PWINDOW->getGroupHead()->m_groupData.locked))) return {}; moveWindowIntoGroup(PWINDOW, PWINDOWINDIR); @@ -3023,7 +3023,7 @@ SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) { if (!PWINDOW) return {.success = false, .error = "No window found"}; - if (!PWINDOW->m_sGroupData.pNextWindow.lock()) + if (!PWINDOW->m_groupData.pNextWindow.lock()) return {.success = false, .error = "Window not in a group"}; moveWindowOutOfGroup(PWINDOW); @@ -3055,21 +3055,21 @@ SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) { const auto PWINDOWINDIR = g_pCompositor->getWindowInDirection(PWINDOW, arg); - const bool ISWINDOWGROUP = PWINDOW->m_sGroupData.pNextWindow; - const bool ISWINDOWGROUPLOCKED = ISWINDOWGROUP && PWINDOW->getGroupHead()->m_sGroupData.locked; - const bool ISWINDOWGROUPSINGLE = ISWINDOWGROUP && PWINDOW->m_sGroupData.pNextWindow.lock() == PWINDOW; + const bool ISWINDOWGROUP = PWINDOW->m_groupData.pNextWindow; + const bool ISWINDOWGROUPLOCKED = ISWINDOWGROUP && PWINDOW->getGroupHead()->m_groupData.locked; + const bool ISWINDOWGROUPSINGLE = ISWINDOWGROUP && PWINDOW->m_groupData.pNextWindow.lock() == PWINDOW; updateRelativeCursorCoords(); - // note: PWINDOWINDIR is not null implies !PWINDOW->m_bIsFloating - if (PWINDOWINDIR && PWINDOWINDIR->m_sGroupData.pNextWindow) { // target is group - if (!*PIGNOREGROUPLOCK && (PWINDOWINDIR->getGroupHead()->m_sGroupData.locked || ISWINDOWGROUPLOCKED || PWINDOW->m_sGroupData.deny)) { + // note: PWINDOWINDIR is not null implies !PWINDOW->m_isFloating + if (PWINDOWINDIR && PWINDOWINDIR->m_groupData.pNextWindow) { // target is group + if (!*PIGNOREGROUPLOCK && (PWINDOWINDIR->getGroupHead()->m_groupData.locked || ISWINDOWGROUPLOCKED || PWINDOW->m_groupData.deny)) { g_pLayoutManager->getCurrentLayout()->moveWindowTo(PWINDOW, args); PWINDOW->warpCursor(); } else moveWindowIntoGroup(PWINDOW, PWINDOWINDIR); } else if (PWINDOWINDIR) { // target is regular window - if ((!*PIGNOREGROUPLOCK && ISWINDOWGROUPLOCKED) || !ISWINDOWGROUP || (ISWINDOWGROUPSINGLE && PWINDOW->m_eGroupRules & GROUP_SET_ALWAYS)) { + if ((!*PIGNOREGROUPLOCK && ISWINDOWGROUPLOCKED) || !ISWINDOWGROUP || (ISWINDOWGROUPSINGLE && PWINDOW->m_groupRules & GROUP_SET_ALWAYS)) { g_pLayoutManager->getCurrentLayout()->moveWindowTo(PWINDOW, args); PWINDOW->warpCursor(); } else @@ -3101,13 +3101,13 @@ SDispatchResult CKeybindManager::setIgnoreGroupLock(std::string args) { SDispatchResult CKeybindManager::denyWindowFromGroup(std::string args) { const auto PWINDOW = g_pCompositor->m_lastWindow.lock(); - if (!PWINDOW || (PWINDOW && PWINDOW->m_sGroupData.pNextWindow.lock())) + if (!PWINDOW || (PWINDOW && PWINDOW->m_groupData.pNextWindow.lock())) return {}; if (args == "toggle") - PWINDOW->m_sGroupData.deny = !PWINDOW->m_sGroupData.deny; + PWINDOW->m_groupData.deny = !PWINDOW->m_groupData.deny; else - PWINDOW->m_sGroupData.deny = args == "on"; + PWINDOW->m_groupData.deny = args == "on"; g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); @@ -3137,14 +3137,14 @@ SDispatchResult CKeybindManager::moveGroupWindow(std::string args) { if (!PLASTWINDOW) return {.success = false, .error = "No window found"}; - if (!PLASTWINDOW->m_sGroupData.pNextWindow.lock()) + if (!PLASTWINDOW->m_groupData.pNextWindow.lock()) return {.success = false, .error = "Window not in a group"}; - if ((!BACK && PLASTWINDOW->m_sGroupData.pNextWindow->m_sGroupData.head) || (BACK && PLASTWINDOW->m_sGroupData.head)) { - std::swap(PLASTWINDOW->m_sGroupData.head, PLASTWINDOW->m_sGroupData.pNextWindow->m_sGroupData.head); - std::swap(PLASTWINDOW->m_sGroupData.locked, PLASTWINDOW->m_sGroupData.pNextWindow->m_sGroupData.locked); + if ((!BACK && PLASTWINDOW->m_groupData.pNextWindow->m_groupData.head) || (BACK && PLASTWINDOW->m_groupData.head)) { + std::swap(PLASTWINDOW->m_groupData.head, PLASTWINDOW->m_groupData.pNextWindow->m_groupData.head); + std::swap(PLASTWINDOW->m_groupData.locked, PLASTWINDOW->m_groupData.pNextWindow->m_groupData.locked); } else - PLASTWINDOW->switchWithWindowInGroup(BACK ? PLASTWINDOW->getGroupPrevious() : PLASTWINDOW->m_sGroupData.pNextWindow.lock()); + PLASTWINDOW->switchWithWindowInGroup(BACK ? PLASTWINDOW->getGroupPrevious() : PLASTWINDOW->m_groupData.pNextWindow.lock()); PLASTWINDOW->updateWindowDecos(); @@ -3174,36 +3174,36 @@ SDispatchResult CKeybindManager::setProp(std::string args) { const auto PROP = vars[1]; const auto VAL = vars[2]; - bool noFocus = PWINDOW->m_sWindowData.noFocus.valueOrDefault(); + bool noFocus = PWINDOW->m_windowData.noFocus.valueOrDefault(); try { if (PROP == "animationstyle") { - PWINDOW->m_sWindowData.animationStyle = CWindowOverridableVar(VAL, PRIORITY_SET_PROP); + PWINDOW->m_windowData.animationStyle = CWindowOverridableVar(VAL, PRIORITY_SET_PROP); } else if (PROP == "maxsize") { - PWINDOW->m_sWindowData.maxSize = CWindowOverridableVar(configStringToVector2D(VAL), PRIORITY_SET_PROP); - PWINDOW->clampWindowSize(std::nullopt, PWINDOW->m_sWindowData.maxSize.value()); + PWINDOW->m_windowData.maxSize = CWindowOverridableVar(configStringToVector2D(VAL), PRIORITY_SET_PROP); + PWINDOW->clampWindowSize(std::nullopt, PWINDOW->m_windowData.maxSize.value()); PWINDOW->setHidden(false); } else if (PROP == "minsize") { - PWINDOW->m_sWindowData.minSize = CWindowOverridableVar(configStringToVector2D(VAL), PRIORITY_SET_PROP); - PWINDOW->clampWindowSize(PWINDOW->m_sWindowData.minSize.value(), std::nullopt); + PWINDOW->m_windowData.minSize = CWindowOverridableVar(configStringToVector2D(VAL), PRIORITY_SET_PROP); + PWINDOW->clampWindowSize(PWINDOW->m_windowData.minSize.value(), std::nullopt); PWINDOW->setHidden(false); } else if (PROP == "alpha") { - PWINDOW->m_sWindowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_sWindowData.alpha.valueOrDefault().m_bOverride}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alpha.valueOrDefault().override}, PRIORITY_SET_PROP); } else if (PROP == "alphainactive") { - PWINDOW->m_sWindowData.alphaInactive = - CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_sWindowData.alphaInactive.valueOrDefault().m_bOverride}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alphaInactive = + CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaInactive.valueOrDefault().override}, PRIORITY_SET_PROP); } else if (PROP == "alphafullscreen") { - PWINDOW->m_sWindowData.alphaFullscreen = - CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_sWindowData.alphaFullscreen.valueOrDefault().m_bOverride}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alphaFullscreen = + CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaFullscreen.valueOrDefault().override}, PRIORITY_SET_PROP); } else if (PROP == "alphaoverride") { - PWINDOW->m_sWindowData.alpha = - CWindowOverridableVar(SAlphaValue{PWINDOW->m_sWindowData.alpha.valueOrDefault().m_fAlpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alpha = + CWindowOverridableVar(SAlphaValue{PWINDOW->m_windowData.alpha.valueOrDefault().alpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); } else if (PROP == "alphainactiveoverride") { - PWINDOW->m_sWindowData.alphaInactive = - CWindowOverridableVar(SAlphaValue{PWINDOW->m_sWindowData.alphaInactive.valueOrDefault().m_fAlpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alphaInactive = + CWindowOverridableVar(SAlphaValue{PWINDOW->m_windowData.alphaInactive.valueOrDefault().alpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); } else if (PROP == "alphafullscreenoverride") { - PWINDOW->m_sWindowData.alphaFullscreen = - CWindowOverridableVar(SAlphaValue{PWINDOW->m_sWindowData.alphaFullscreen.valueOrDefault().m_fAlpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alphaFullscreen = + CWindowOverridableVar(SAlphaValue{PWINDOW->m_windowData.alphaFullscreen.valueOrDefault().alpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); } else if (PROP == "activebordercolor" || PROP == "inactivebordercolor") { CGradientValueData colorData = {}; if (vars.size() > 4) { @@ -3226,9 +3226,9 @@ SDispatchResult CKeybindManager::setProp(std::string args) { colorData.updateColorsOk(); if (PROP == "activebordercolor") - PWINDOW->m_sWindowData.activeBorderColor = CWindowOverridableVar(colorData, PRIORITY_SET_PROP); + PWINDOW->m_windowData.activeBorderColor = CWindowOverridableVar(colorData, PRIORITY_SET_PROP); else - PWINDOW->m_sWindowData.inactiveBorderColor = CWindowOverridableVar(colorData, PRIORITY_SET_PROP); + PWINDOW->m_windowData.inactiveBorderColor = CWindowOverridableVar(colorData, PRIORITY_SET_PROP); } else if (auto search = NWindowProperties::boolWindowProperties.find(PROP); search != NWindowProperties::boolWindowProperties.end()) { auto pWindowDataElement = search->second(PWINDOW); if (VAL == "toggle") @@ -3261,7 +3261,7 @@ SDispatchResult CKeybindManager::setProp(std::string args) { g_pCompositor->updateAllWindowsAnimatedDecorationValues(); - if (!(PWINDOW->m_sWindowData.noFocus.valueOrDefault() == noFocus)) { + if (!(PWINDOW->m_windowData.noFocus.valueOrDefault() == noFocus)) { g_pCompositor->focusWindow(nullptr); g_pCompositor->focusWindow(PWINDOW); g_pCompositor->focusWindow(PLASTWINDOW); diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 61820fe5..c5cf77f5 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -21,7 +21,7 @@ CHyprXWaylandManager::~CHyprXWaylandManager() { } SP CHyprXWaylandManager::getWindowSurface(PHLWINDOW pWindow) { - return pWindow ? pWindow->m_pWLSurface->resource() : nullptr; + return pWindow ? pWindow->m_wlSurface->resource() : nullptr; } void CHyprXWaylandManager::activateSurface(SP pSurface, bool activate) { @@ -40,41 +40,41 @@ void CHyprXWaylandManager::activateSurface(SP pSurface, bool return; } - if (PWINDOW->m_bIsX11) { - if (PWINDOW->m_pXWaylandSurface) { + if (PWINDOW->m_isX11) { + if (PWINDOW->m_xwaylandSurface) { if (activate) { - PWINDOW->m_pXWaylandSurface->setMinimized(false); - PWINDOW->m_pXWaylandSurface->restackToTop(); + PWINDOW->m_xwaylandSurface->setMinimized(false); + PWINDOW->m_xwaylandSurface->restackToTop(); } - PWINDOW->m_pXWaylandSurface->activate(activate); + PWINDOW->m_xwaylandSurface->activate(activate); } - } else if (PWINDOW->m_pXDGSurface && PWINDOW->m_pXDGSurface->toplevel) - PWINDOW->m_pXDGSurface->toplevel->setActive(activate); + } else if (PWINDOW->m_xdgSurface && PWINDOW->m_xdgSurface->toplevel) + PWINDOW->m_xdgSurface->toplevel->setActive(activate); } void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) { - if (pWindow->m_bIsX11) { + if (pWindow->m_isX11) { if (activate) { pWindow->sendWindowSize(true); // update xwayland output pos - pWindow->m_pXWaylandSurface->setMinimized(false); + pWindow->m_xwaylandSurface->setMinimized(false); if (!pWindow->isX11OverrideRedirect()) - pWindow->m_pXWaylandSurface->restackToTop(); + pWindow->m_xwaylandSurface->restackToTop(); } - pWindow->m_pXWaylandSurface->activate(activate); + pWindow->m_xwaylandSurface->activate(activate); - } else if (pWindow->m_pXDGSurface && pWindow->m_pXDGSurface->toplevel) - pWindow->m_pXDGSurface->toplevel->setActive(activate); + } else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) + pWindow->m_xdgSurface->toplevel->setActive(activate); if (activate) { g_pCompositor->m_lastFocus = getWindowSurface(pWindow); g_pCompositor->m_lastWindow = pWindow; } - if (!pWindow->m_bPinned) - pWindow->m_pWorkspace->m_lastFocusedWindow = pWindow; + if (!pWindow->m_pinned) + pWindow->m_workspace->m_lastFocusedWindow = pWindow; } CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { @@ -83,52 +83,52 @@ CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { CBox box; - if (pWindow->m_bIsX11) - box = pWindow->m_pXWaylandSurface->geometry; - else if (pWindow->m_pXDGSurface) - box = pWindow->m_pXDGSurface->current.geometry; + if (pWindow->m_isX11) + box = pWindow->m_xwaylandSurface->geometry; + else if (pWindow->m_xdgSurface) + box = pWindow->m_xdgSurface->current.geometry; return box; } void CHyprXWaylandManager::sendCloseWindow(PHLWINDOW pWindow) { - if (pWindow->m_bIsX11) - pWindow->m_pXWaylandSurface->close(); - else if (pWindow->m_pXDGSurface && pWindow->m_pXDGSurface->toplevel) - pWindow->m_pXDGSurface->toplevel->close(); + if (pWindow->m_isX11) + pWindow->m_xwaylandSurface->close(); + else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) + pWindow->m_xdgSurface->toplevel->close(); } bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { - if (pWindow->m_bIsX11) { - for (const auto& a : pWindow->m_pXWaylandSurface->atoms) + if (pWindow->m_isX11) { + for (const auto& a : pWindow->m_xwaylandSurface->atoms) if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DIALOG"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_SPLASH"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLBAR"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_UTILITY"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLTIP"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_POPUP_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DOCK"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"] || a == HYPRATOMS["_KDE_NET_WM_WINDOW_TYPE_OVERRIDE"]) { if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"]) - pWindow->m_bX11ShouldntFocus = true; + pWindow->m_X11ShouldntFocus = true; if (a != HYPRATOMS["_NET_WM_WINDOW_TYPE_DIALOG"]) - pWindow->m_bNoInitialFocus = true; + pWindow->m_noInitialFocus = true; return true; } - if (pWindow->isModal() || pWindow->m_pXWaylandSurface->transient || - (pWindow->m_pXWaylandSurface->role.contains("task_dialog") || pWindow->m_pXWaylandSurface->role.contains("pop-up")) || pWindow->m_pXWaylandSurface->overrideRedirect) + if (pWindow->isModal() || pWindow->m_xwaylandSurface->transient || + (pWindow->m_xwaylandSurface->role.contains("task_dialog") || pWindow->m_xwaylandSurface->role.contains("pop-up")) || pWindow->m_xwaylandSurface->overrideRedirect) return true; - const auto SIZEHINTS = pWindow->m_pXWaylandSurface->sizeHints.get(); - if (pWindow->m_pXWaylandSurface->transient || pWindow->m_pXWaylandSurface->parent || + const auto SIZEHINTS = pWindow->m_xwaylandSurface->sizeHints.get(); + if (pWindow->m_xwaylandSurface->transient || pWindow->m_xwaylandSurface->parent || (SIZEHINTS && (SIZEHINTS->min_width == SIZEHINTS->max_width) && (SIZEHINTS->min_height == SIZEHINTS->max_height))) return true; } else { - if (!pWindow->m_pXDGSurface || !pWindow->m_pXDGSurface->toplevel) + if (!pWindow->m_xdgSurface || !pWindow->m_xdgSurface->toplevel) return false; - const auto PSTATE = pending ? &pWindow->m_pXDGSurface->toplevel->pending : &pWindow->m_pXDGSurface->toplevel->current; - if (pWindow->m_pXDGSurface->toplevel->parent || + const auto PSTATE = pending ? &pWindow->m_xdgSurface->toplevel->pending : &pWindow->m_xdgSurface->toplevel->current; + if (pWindow->m_xdgSurface->toplevel->parent || (PSTATE->minSize.x != 0 && PSTATE->minSize.y != 0 && (PSTATE->minSize.x == PSTATE->maxSize.x || PSTATE->minSize.y == PSTATE->maxSize.y))) return true; } @@ -137,31 +137,31 @@ bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { } void CHyprXWaylandManager::checkBorders(PHLWINDOW pWindow) { - if (!pWindow->m_bIsX11) + if (!pWindow->m_isX11) return; - for (auto const& a : pWindow->m_pXWaylandSurface->atoms) { + for (auto const& a : pWindow->m_xwaylandSurface->atoms) { if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_POPUP_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_NOTIFICATION"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_COMBO"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_SPLASH"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLTIP"]) { - pWindow->m_bX11DoesntWantBorders = true; + pWindow->m_X11DoesntWantBorders = true; return; } } if (pWindow->isX11OverrideRedirect()) - pWindow->m_bX11DoesntWantBorders = true; + pWindow->m_X11DoesntWantBorders = true; } void CHyprXWaylandManager::setWindowFullscreen(PHLWINDOW pWindow, bool fullscreen) { if (!pWindow) return; - if (pWindow->m_bIsX11) - pWindow->m_pXWaylandSurface->setFullscreen(fullscreen); - else if (pWindow->m_pXDGSurface && pWindow->m_pXDGSurface->toplevel) - pWindow->m_pXDGSurface->toplevel->setFullscreen(fullscreen); + if (pWindow->m_isX11) + pWindow->m_xwaylandSurface->setFullscreen(fullscreen); + else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) + pWindow->m_xdgSurface->toplevel->setFullscreen(fullscreen); } Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& coord) { diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index f0050381..2ca0f4d6 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -61,13 +61,13 @@ void CInputManager::recheckIdleInhibitorStatus() { } bool CInputManager::isWindowInhibiting(const PHLWINDOW& w, bool onlyHl) { - if (w->m_eIdleInhibitMode == IDLEINHIBIT_ALWAYS) + if (w->m_idleInhibitMode == IDLEINHIBIT_ALWAYS) return true; - if (w->m_eIdleInhibitMode == IDLEINHIBIT_FOCUS && g_pCompositor->isWindowActive(w)) + if (w->m_idleInhibitMode == IDLEINHIBIT_FOCUS && g_pCompositor->isWindowActive(w)) return true; - if (w->m_eIdleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->isFullscreen() && w->m_pWorkspace && w->m_pWorkspace->isVisible()) + if (w->m_idleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->isFullscreen() && w->m_workspace && w->m_workspace->isVisible()) return true; if (onlyHl) @@ -78,7 +78,7 @@ bool CInputManager::isWindowInhibiting(const PHLWINDOW& w, bool onlyHl) { continue; bool isInhibiting = false; - w->m_pWLSurface->resource()->breadthfirst( + w->m_wlSurface->resource()->breadthfirst( [&ii](SP surf, const Vector2D& pos, void* data) { if (ii->inhibitor->surface != surf) return; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 58ae6e93..319196ee 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -157,7 +157,7 @@ void CInputManager::sendMotionEventsToFocused() { const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition->goal() : (PLS ? Vector2D{PLS->m_geometry.x, PLS->m_geometry.y} : Vector2D{})); + const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_realPosition->goal() : (PLS ? Vector2D{PLS->m_geometry.x, PLS->m_geometry.y} : Vector2D{})); m_bEmptyFocusCursorSet = false; @@ -233,7 +233,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { const auto RG = CONSTRAINT->logicConstraintRegion(); const auto CLOSEST = RG.closestPoint(mouseCoords); const auto BOX = SURF->getSurfaceBoxGlobal(); - const auto CLOSESTLOCAL = (CLOSEST - (BOX.has_value() ? BOX->pos() : Vector2D{})) * (SURF->getWindow() ? SURF->getWindow()->m_fX11SurfaceScaledBy : 1.0); + const auto CLOSESTLOCAL = (CLOSEST - (BOX.has_value() ? BOX->pos() : Vector2D{})) * (SURF->getWindow() ? SURF->getWindow()->m_X11SurfaceScaledBy : 1.0); g_pCompositor->warpCursorTo(CLOSEST, true); g_pSeatManager->sendPointerMotion(time, CLOSESTLOCAL); @@ -283,8 +283,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (forcedFocus) { pFoundWindow = forcedFocus; - surfacePos = pFoundWindow->m_vRealPosition->value(); - foundSurface = pFoundWindow->m_pWLSurface->resource(); + surfacePos = pFoundWindow->m_realPosition->value(); + foundSurface = pFoundWindow->m_wlSurface->resource(); } // if we are holding a pointer button, @@ -363,16 +363,16 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (PWINDOWIDEAL && - ((PWINDOWIDEAL->m_bIsFloating && PWINDOWIDEAL->m_bCreatedOverFullscreen) /* floating over fullscreen */ - || (PMONITOR->activeSpecialWorkspace == PWINDOWIDEAL->m_pWorkspace) /* on an open special workspace */)) + ((PWINDOWIDEAL->m_isFloating && PWINDOWIDEAL->m_createdOverFullscreen) /* floating over fullscreen */ + || (PMONITOR->activeSpecialWorkspace == PWINDOWIDEAL->m_workspace) /* on an open special workspace */)) pFoundWindow = PWINDOWIDEAL; - if (!pFoundWindow->m_bIsX11) { + if (!pFoundWindow->m_isX11) { foundSurface = g_pCompositor->vectorWindowToSurface(mouseCoords, pFoundWindow, surfaceCoords); surfacePos = Vector2D(-1337, -1337); } else { - foundSurface = pFoundWindow->m_pWLSurface->resource(); - surfacePos = pFoundWindow->m_vRealPosition->value(); + foundSurface = pFoundWindow->m_wlSurface->resource(); + surfacePos = pFoundWindow->m_realPosition->value(); } } @@ -398,7 +398,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (pFoundWindow != PWINDOWIDEAL) pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); - if (!(pFoundWindow && pFoundWindow->m_bIsFloating && pFoundWindow->m_bCreatedOverFullscreen)) + if (!(pFoundWindow && pFoundWindow->m_isFloating && pFoundWindow->m_createdOverFullscreen)) pFoundWindow = PWORKSPACE->getFullscreenWindow(); } } @@ -410,15 +410,15 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (pFoundWindow) { - if (!pFoundWindow->m_bIsX11) { + if (!pFoundWindow->m_isX11) { foundSurface = g_pCompositor->vectorWindowToSurface(mouseCoords, pFoundWindow, surfaceCoords); if (!foundSurface) { - foundSurface = pFoundWindow->m_pWLSurface->resource(); - surfacePos = pFoundWindow->m_vRealPosition->value(); + foundSurface = pFoundWindow->m_wlSurface->resource(); + surfacePos = pFoundWindow->m_realPosition->value(); } } else { - foundSurface = pFoundWindow->m_pWLSurface->resource(); - surfacePos = pFoundWindow->m_vRealPosition->value(); + foundSurface = pFoundWindow->m_wlSurface->resource(); + surfacePos = pFoundWindow->m_realPosition->value(); } } } @@ -483,15 +483,15 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Vector2D surfaceLocal = surfacePos == Vector2D(-1337, -1337) ? surfaceCoords : mouseCoords - surfacePos; - if (pFoundWindow && !pFoundWindow->m_bIsX11 && surfacePos != Vector2D(-1337, -1337)) { + if (pFoundWindow && !pFoundWindow->m_isX11 && surfacePos != Vector2D(-1337, -1337)) { // calc for oversized windows... fucking bullshit. - CBox geom = pFoundWindow->m_pXDGSurface->current.geometry; + CBox geom = pFoundWindow->m_xdgSurface->current.geometry; surfaceLocal = mouseCoords - surfacePos + geom.pos(); } - if (pFoundWindow && pFoundWindow->m_bIsX11) // for x11 force scale zero - surfaceLocal = surfaceLocal * pFoundWindow->m_fX11SurfaceScaledBy; + if (pFoundWindow && pFoundWindow->m_isX11) // for x11 force scale zero + surfaceLocal = surfaceLocal * pFoundWindow->m_X11SurfaceScaledBy; bool allowKeyboardRefocus = true; @@ -514,7 +514,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { return; } - if (pFoundWindow && foundSurface == pFoundWindow->m_pWLSurface->resource() && !m_bCursorImageOverridden) { + if (pFoundWindow && foundSurface == pFoundWindow->m_wlSurface->resource() && !m_bCursorImageOverridden) { const auto BOX = pFoundWindow->getWindowMainSurfaceBox(); if (!VECINRECT(mouseCoords, BOX.x, BOX.y, BOX.x + BOX.width, BOX.y + BOX.height)) setCursorImageOverride("left_ptr"); @@ -534,7 +534,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (FOLLOWMOUSE != 1 && !refocus) { if (pFoundWindow != g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow.lock() && - ((pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR == 2) || (g_pCompositor->m_lastWindow->m_bIsFloating != pFoundWindow->m_bIsFloating && *PFLOATBEHAVIOR != 0))) { + ((pFoundWindow->m_isFloating && *PFLOATBEHAVIOR == 2) || (g_pCompositor->m_lastWindow->m_isFloating != pFoundWindow->m_isFloating && *PFLOATBEHAVIOR != 0))) { // enter if change floating style if (FOLLOWMOUSE != 3 && allowKeyboardRefocus) g_pCompositor->focusWindow(pFoundWindow, foundSurface); @@ -562,7 +562,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // Temp fix until that's figured out. Otherwise spams windowrule lookups and other shit. if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow) { if (m_fMousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) { - const bool hasNoFollowMouse = pFoundWindow && pFoundWindow->m_sWindowData.noFollowMouse.valueOrDefault(); + const bool hasNoFollowMouse = pFoundWindow && pFoundWindow->m_windowData.noFollowMouse.valueOrDefault(); if (refocus || !hasNoFollowMouse) g_pCompositor->focusWindow(pFoundWindow, foundSurface); @@ -746,7 +746,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { // TODO detect click on LS properly if (*PRESIZEONBORDER && !m_bLastFocusOnLS && e.state == WL_POINTER_BUTTON_STATE_PRESSED && (!w || !w->isX11OverrideRedirect())) { if (w && !w->isFullscreen()) { - const CBox real = {w->m_vRealPosition->value().x, w->m_vRealPosition->value().y, w->m_vRealSize->value().x, w->m_vRealSize->value().y}; + const CBox real = {w->m_realPosition->value().x, w->m_realPosition->value().y, w->m_realSize->value().x, w->m_realSize->value().y}; const CBox grab = {real.x - BORDER_GRAB_AREA, real.y - BORDER_GRAB_AREA, real.width + 2 * BORDER_GRAB_AREA, real.height + 2 * BORDER_GRAB_AREA}; if ((grab.containsPoint(mouseCoords) && (!real.containsPoint(mouseCoords) || w->isInCurvedCorner(mouseCoords.x, mouseCoords.y))) && !w->hasPopupAt(mouseCoords)) { @@ -1482,7 +1482,7 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { foundSurface = nullptr; } - if (!foundSurface && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pWorkspace && g_pCompositor->m_lastWindow->m_pWorkspace->isVisibleNotCovered()) { + if (!foundSurface && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_workspace && g_pCompositor->m_lastWindow->m_workspace->isVisibleNotCovered()) { // then the last focused window if we're on the same workspace as it const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); g_pCompositor->focusWindow(PLASTWINDOW); @@ -1779,7 +1779,7 @@ void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { } // ignore X11 OR windows, they shouldn't be touched - if (w->m_bIsX11 && w->isX11OverrideRedirect()) + if (w->m_isX11 && w->isX11OverrideRedirect()) return; static auto PEXTENDBORDERGRAB = CConfigValue("general:extend_border_grab_area"); @@ -1802,7 +1802,7 @@ void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { bool onDeco = false; - for (auto const& wd : w->m_dWindowDecorations) { + for (auto const& wd : w->m_windowDecorations) { if (!(wd->getDecorationFlags() & DECORATION_ALLOWS_MOUSE_INPUT)) continue; diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index a543e228..5cbfed46 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -69,12 +69,12 @@ static void refocusTablet(SP tab, SP tool, bool motion = f // yes, this technically ignores any regions set by the app. Too bad! if (LASTHLSURFACE->getWindow()) - local = tool->absolutePos * LASTHLSURFACE->getWindow()->m_vRealSize->goal(); + local = tool->absolutePos * LASTHLSURFACE->getWindow()->m_realSize->goal(); else local = tool->absolutePos * BOX->size(); - if (LASTHLSURFACE->getWindow() && LASTHLSURFACE->getWindow()->m_bIsX11) - local = local * LASTHLSURFACE->getWindow()->m_fX11SurfaceScaledBy; + if (LASTHLSURFACE->getWindow() && LASTHLSURFACE->getWindow()->m_isX11) + local = local * LASTHLSURFACE->getWindow()->m_X11SurfaceScaledBy; PROTO::tablet->motion(tool, local); return; @@ -82,8 +82,8 @@ static void refocusTablet(SP tab, SP tool, bool motion = f auto local = CURSORPOS - BOX->pos(); - if (LASTHLSURFACE->getWindow() && LASTHLSURFACE->getWindow()->m_bIsX11) - local = local * LASTHLSURFACE->getWindow()->m_fX11SurfaceScaledBy; + if (LASTHLSURFACE->getWindow() && LASTHLSURFACE->getWindow()->m_isX11) + local = local * LASTHLSURFACE->getWindow()->m_X11SurfaceScaledBy; PROTO::tablet->motion(tool, local); } diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index a5d53029..71fd27d8 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -80,9 +80,9 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->vecPosition; m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } else if (!m_sTouchData.touchFocusWindow.expired()) { - if (m_sTouchData.touchFocusWindow->m_bIsX11) { - local = (g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_vRealPosition->goal()) * m_sTouchData.touchFocusWindow->m_fX11SurfaceScaledBy; - m_sTouchData.touchSurfaceOrigin = m_sTouchData.touchFocusWindow->m_vRealPosition->goal(); + if (m_sTouchData.touchFocusWindow->m_isX11) { + local = (g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_realPosition->goal()) * m_sTouchData.touchFocusWindow->m_X11SurfaceScaledBy; + m_sTouchData.touchSurfaceOrigin = m_sTouchData.touchFocusWindow->m_realPosition->goal(); } else { g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_sTouchData.touchFocusWindow.lock(), local); m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; @@ -148,13 +148,13 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { auto local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->vecPosition; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); } else if (validMapped(m_sTouchData.touchFocusWindow)) { - const auto PMONITOR = m_sTouchData.touchFocusWindow->m_pMonitor.lock(); + const auto PMONITOR = m_sTouchData.touchFocusWindow->m_monitor.lock(); g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin; - if (m_sTouchData.touchFocusWindow->m_bIsX11) - local = local * m_sTouchData.touchFocusWindow->m_fX11SurfaceScaledBy; + if (m_sTouchData.touchFocusWindow->m_isX11) + local = local * m_sTouchData.touchFocusWindow->m_X11SurfaceScaledBy; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); } else if (!m_sTouchData.touchFocusLS.expired()) { diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index 523ae7cf..2bca8eb4 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -131,7 +131,7 @@ APICALL bool HyprlandAPI::removeWindowDecoration(HANDLE handle, IHyprWindowDecor return false; for (auto const& w : g_pCompositor->m_windows) { - for (auto const& d : w->m_dWindowDecorations) { + for (auto const& d : w->m_windowDecorations) { if (d.get() == pDecoration) { w->removeWindowDeco(pDecoration); return true; diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index e6c026d6..843e8b94 100644 --- a/src/protocols/ForeignToplevel.cpp +++ b/src/protocols/ForeignToplevel.cpp @@ -60,8 +60,8 @@ void CForeignToplevelList::onMap(PHLWINDOW pWindow) { LOGM(LOG, "Newly mapped window gets an identifier of {}", IDENTIFIER); resource->sendToplevel(NEWHANDLE->resource.get()); NEWHANDLE->resource->sendIdentifier(IDENTIFIER.c_str()); - NEWHANDLE->resource->sendAppId(pWindow->m_szInitialClass.c_str()); - NEWHANDLE->resource->sendTitle(pWindow->m_szInitialTitle.c_str()); + NEWHANDLE->resource->sendAppId(pWindow->m_initialClass.c_str()); + NEWHANDLE->resource->sendTitle(pWindow->m_initialTitle.c_str()); NEWHANDLE->resource->sendDone(); handles.push_back(NEWHANDLE); @@ -81,7 +81,7 @@ void CForeignToplevelList::onTitle(PHLWINDOW pWindow) { if UNLIKELY (!H || H->closed) return; - H->resource->sendTitle(pWindow->m_szTitle.c_str()); + H->resource->sendTitle(pWindow->m_title.c_str()); H->resource->sendDone(); } @@ -93,7 +93,7 @@ void CForeignToplevelList::onClass(PHLWINDOW pWindow) { if UNLIKELY (!H || H->closed) return; - H->resource->sendAppId(pWindow->m_szClass.c_str()); + H->resource->sendAppId(pWindow->m_class.c_str()); H->resource->sendDone(); } diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index f1f32d7e..089c414b 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -32,11 +32,11 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_eSuppressedEvents & SUPPRESS_FULLSCREEN) + if UNLIKELY (PWINDOW->m_suppressedEvents & SUPPRESS_FULLSCREEN) return; - if UNLIKELY (!PWINDOW->m_bIsMapped) { - PWINDOW->m_bWantsInitialFullscreen = true; + if UNLIKELY (!PWINDOW->m_isMapped) { + PWINDOW->m_wantsInitialFullscreen = true; return; } @@ -46,7 +46,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_pWorkspace != monitor->activeWorkspace) { + if (PWINDOW->m_workspace != monitor->activeWorkspace) { g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, monitor->activeWorkspace); g_pCompositor->setActiveMonitor(monitor); } @@ -63,7 +63,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_eSuppressedEvents & SUPPRESS_FULLSCREEN) + if UNLIKELY (PWINDOW->m_suppressedEvents & SUPPRESS_FULLSCREEN) return; g_pCompositor->changeWindowFullscreenModeClient(PWINDOW, FSMODE_FULLSCREEN, false); @@ -75,11 +75,11 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_eSuppressedEvents & SUPPRESS_MAXIMIZE) + if UNLIKELY (PWINDOW->m_suppressedEvents & SUPPRESS_MAXIMIZE) return; - if UNLIKELY (!PWINDOW->m_bIsMapped) { - PWINDOW->m_bWantsInitialFullscreen = true; + if UNLIKELY (!PWINDOW->m_isMapped) { + PWINDOW->m_wantsInitialFullscreen = true; return; } @@ -92,7 +92,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_eSuppressedEvents & SUPPRESS_MAXIMIZE) + if UNLIKELY (PWINDOW->m_suppressedEvents & SUPPRESS_MAXIMIZE) return; g_pCompositor->changeWindowFullscreenModeClient(PWINDOW, FSMODE_MAXIMIZED, false); @@ -104,7 +104,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_bIsMapped) + if UNLIKELY (!PWINDOW->m_isMapped) return; g_pEventManager->postEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},1", (uintptr_t)PWINDOW.get())}); @@ -116,7 +116,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_bIsMapped) + if UNLIKELY (!PWINDOW->m_isMapped) return; g_pEventManager->postEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},0", (uintptr_t)PWINDOW.get())}); @@ -170,7 +170,7 @@ void CForeignToplevelHandleWlr::sendMonitor(PHLMONITOR pMonitor) { void CForeignToplevelHandleWlr::sendState() { const auto PWINDOW = pWindow.lock(); - if UNLIKELY (!PWINDOW || !PWINDOW->m_pWorkspace || !PWINDOW->m_bIsMapped) + if UNLIKELY (!PWINDOW || !PWINDOW->m_workspace || !PWINDOW->m_isMapped) return; wl_array state; @@ -233,9 +233,9 @@ void CForeignToplevelWlrManager::onMap(PHLWINDOW pWindow) { LOGM(LOG, "Newly mapped window {:016x}", (uintptr_t)pWindow.get()); resource->sendToplevel(NEWHANDLE->resource.get()); - NEWHANDLE->resource->sendAppId(pWindow->m_szClass.c_str()); - NEWHANDLE->resource->sendTitle(pWindow->m_szTitle.c_str()); - if LIKELY (const auto PMONITOR = pWindow->m_pMonitor.lock(); PMONITOR) + NEWHANDLE->resource->sendAppId(pWindow->m_class.c_str()); + NEWHANDLE->resource->sendTitle(pWindow->m_title.c_str()); + if LIKELY (const auto PMONITOR = pWindow->m_monitor.lock(); PMONITOR) NEWHANDLE->sendMonitor(PMONITOR); NEWHANDLE->sendState(); NEWHANDLE->resource->sendDone(); @@ -257,7 +257,7 @@ void CForeignToplevelWlrManager::onTitle(PHLWINDOW pWindow) { if UNLIKELY (!H || H->closed) return; - H->resource->sendTitle(pWindow->m_szTitle.c_str()); + H->resource->sendTitle(pWindow->m_title.c_str()); H->resource->sendDone(); } @@ -269,7 +269,7 @@ void CForeignToplevelWlrManager::onClass(PHLWINDOW pWindow) { if UNLIKELY (!H || H->closed) return; - H->resource->sendAppId(pWindow->m_szClass.c_str()); + H->resource->sendAppId(pWindow->m_class.c_str()); H->resource->sendDone(); } @@ -294,7 +294,7 @@ void CForeignToplevelWlrManager::onMoveMonitor(PHLWINDOW pWindow) { if UNLIKELY (!H || H->closed) return; - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); if UNLIKELY (!PMONITOR) return; diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index 4744fec4..d42ddf41 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -499,7 +499,7 @@ void CLinuxDMABufV1Protocol::resetFormatTable() { PHLMONITOR mon; auto HLSurface = CWLSurface::fromResource(feedback->surface); if (auto w = HLSurface->getWindow(); w) - if (auto m = w->m_pMonitor.lock(); m) + if (auto m = w->m_monitor.lock(); m) mon = m->self.lock(); if (!mon) { diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index c25dfdee..ed24a5fe 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -36,8 +36,8 @@ CPointerConstraint::CPointerConstraint(SP resource_, SPgetWindow(); if (PWINDOW) { - const auto ISXWL = PWINDOW->m_bIsX11; - scale = ISXWL && *PXWLFORCESCALEZERO ? PWINDOW->m_fX11SurfaceScaledBy : 1.f; + const auto ISXWL = PWINDOW->m_isX11; + scale = ISXWL && *PXWLFORCESCALEZERO ? PWINDOW->m_X11SurfaceScaledBy : 1.f; } positionHint = {wl_fixed_to_double(x) / scale, wl_fixed_to_double(y) / scale}; diff --git a/src/protocols/ShortcutsInhibit.cpp b/src/protocols/ShortcutsInhibit.cpp index 61669107..b9219f72 100644 --- a/src/protocols/ShortcutsInhibit.cpp +++ b/src/protocols/ShortcutsInhibit.cpp @@ -71,7 +71,7 @@ bool CKeyboardShortcutsInhibitProtocol::isInhibited() { if (!g_pCompositor->m_lastFocus) return false; - if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); PWINDOW && PWINDOW->m_sWindowData.noShortcutsInhibit.valueOrDefault()) + if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); PWINDOW && PWINDOW->m_windowData.noShortcutsInhibit.valueOrDefault()) return false; for (auto const& in : m_vInhibitors) { diff --git a/src/protocols/TearingControl.cpp b/src/protocols/TearingControl.cpp index f78d365e..a6036690 100644 --- a/src/protocols/TearingControl.cpp +++ b/src/protocols/TearingControl.cpp @@ -54,7 +54,7 @@ CTearingControl::CTearingControl(SP resource_, SPsetSetPresentationHint([this](CWpTearingControlV1* res, wpTearingControlV1PresentationHint hint) { this->onHint(hint); }); for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWLSurface->resource() == surf_) { + if (w->m_wlSurface->resource() == surf_) { pWindow = w; break; } @@ -70,7 +70,7 @@ void CTearingControl::updateWindow() { if UNLIKELY (pWindow.expired()) return; - pWindow->m_bTearingHint = hint == WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; + pWindow->m_tearingHint = hint == WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; } bool CTearingControl::good() { diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index fc0dc9d5..51ad8f5d 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -86,7 +86,7 @@ CToplevelExportFrame::CToplevelExportFrame(SP re return; } - if UNLIKELY (!pWindow->m_bIsMapped) { + if UNLIKELY (!pWindow->m_isMapped) { LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable!", pWindow); resource->sendFailed(); return; @@ -96,7 +96,7 @@ CToplevelExportFrame::CToplevelExportFrame(SP re resource->setDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); resource->setCopy([this](CHyprlandToplevelExportFrameV1* pFrame, wl_resource* res, int32_t ignoreDamage) { this->copy(pFrame, res, ignoreDamage); }); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); g_pHyprRenderer->makeEGLCurrent(); @@ -116,7 +116,7 @@ CToplevelExportFrame::CToplevelExportFrame(SP re dmabufFormat = PMONITOR->output->state->state().drmFormat; - box = {0, 0, (int)(pWindow->m_vRealSize->value().x * PMONITOR->scale), (int)(pWindow->m_vRealSize->value().y * PMONITOR->scale)}; + box = {0, 0, (int)(pWindow->m_realSize->value().x * PMONITOR->scale), (int)(pWindow->m_realSize->value().y * PMONITOR->scale)}; box.transform(wlTransformToHyprutils(PMONITOR->transform), PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y).round(); @@ -142,7 +142,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - if UNLIKELY (!pWindow->m_bIsMapped) { + if UNLIKELY (!pWindow->m_isMapped) { LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable (2)!", pWindow); resource->sendFailed(); return; @@ -235,7 +235,7 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm // render the client - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); CRegion fakeDamage{0, 0, PMONITOR->vecPixelSize.x * 10, PMONITOR->vecPixelSize.y * 10}; g_pHyprRenderer->makeEGLCurrent(); @@ -262,7 +262,7 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); @@ -329,7 +329,7 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; @@ -350,7 +350,7 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_vRealPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); @@ -445,10 +445,10 @@ void CToplevelExportProtocol::onOutputCommit(PHLMONITOR pMonitor) { const auto PWINDOW = f->pWindow; - if (pMonitor != PWINDOW->m_pMonitor.lock()) + if (pMonitor != PWINDOW->m_monitor.lock()) continue; - CBox geometry = {PWINDOW->m_vRealPosition->value().x, PWINDOW->m_vRealPosition->value().y, PWINDOW->m_vRealSize->value().x, PWINDOW->m_vRealSize->value().y}; + CBox geometry = {PWINDOW->m_realPosition->value().x, PWINDOW->m_realPosition->value().y, PWINDOW->m_realSize->value().x, PWINDOW->m_realSize->value().y}; if (geometry.intersection({pMonitor->vecPosition, pMonitor->vecSize}).empty()) continue; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index bc606c8d..a6ddb519 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1533,7 +1533,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } } - if (m_RenderData.currentWindow && m_RenderData.currentWindow->m_sWindowData.RGBX.valueOrDefault()) { + if (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.RGBX.valueOrDefault()) { shader = &m_shaders->m_shRGBX; texType = TEXTURE_RGBX; } @@ -1628,9 +1628,9 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB const auto DIM = m_RenderData.currentWindow->m_notRespondingTint->value(); glUniform1i(shader->applyTint, 1); glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM); - } else if (m_RenderData.currentWindow->m_fDimPercent->value() > 0) { + } else if (m_RenderData.currentWindow->m_dimPercent->value() > 0) { glUniform1i(shader->applyTint, 1); - const auto DIM = m_RenderData.currentWindow->m_fDimPercent->value(); + const auto DIM = m_RenderData.currentWindow->m_dimPercent->value(); glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM); } else glUniform1i(shader->applyTint, 0); @@ -2054,16 +2054,16 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { if (!pWindow) return false; - if (pWindow->m_sWindowData.noBlur.valueOrDefault()) + if (pWindow->m_windowData.noBlur.valueOrDefault()) return false; - if (pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall) + if (pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall) return true; - const auto PSURFACE = pWindow->m_pWLSurface->resource(); + const auto PSURFACE = pWindow->m_wlSurface->resource(); - const auto PWORKSPACE = pWindow->m_pWorkspace; - const float A = pWindow->m_fAlpha->value() * pWindow->m_fActiveInactiveAlpha->value() * PWORKSPACE->m_alpha->value(); + const auto PWORKSPACE = pWindow->m_workspace; + const float A = pWindow->m_alpha->value() * pWindow->m_activeInactiveAlpha->value() * PWORKSPACE->m_alpha->value(); if (A >= 1.f) { // if (PSURFACE->opaque) @@ -2084,7 +2084,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { bool hasWindows = false; for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace == pMonitor->activeWorkspace && !w->isHidden() && w->m_bIsMapped && (!w->m_bIsFloating || *PBLURXRAY)) { + if (w->m_workspace == pMonitor->activeWorkspace && !w->isHidden() && w->m_isMapped && (!w->m_isFloating || *PBLURXRAY)) { // check if window is valid if (!windowShouldBeBlurred(w)) @@ -2170,16 +2170,16 @@ bool CHyprOpenGLImpl::shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWin if (!m_RenderData.pCurrentMonData->blurFB.getTexture()) return false; - if (pWindow && pWindow->m_sWindowData.xray.hasValue() && !pWindow->m_sWindowData.xray.valueOrDefault()) + if (pWindow && pWindow->m_windowData.xray.hasValue() && !pWindow->m_windowData.xray.valueOrDefault()) return false; if (pLayer && pLayer->m_xray == 0) return false; - if ((*PBLURNEWOPTIMIZE && pWindow && !pWindow->m_bIsFloating && !pWindow->onSpecialWorkspace()) || *PBLURXRAY) + if ((*PBLURNEWOPTIMIZE && pWindow && !pWindow->m_isFloating && !pWindow->onSpecialWorkspace()) || *PBLURXRAY) return true; - if ((pLayer && pLayer->m_xray == 1) || (pWindow && pWindow->m_sWindowData.xray.valueOrDefault())) + if ((pLayer && pLayer->m_xray == 1) || (pWindow && pWindow->m_windowData.xray.valueOrDefault())) return true; return false; @@ -2303,7 +2303,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr TRACY_GPU_ZONE("RenderBorder"); - if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_sWindowData.noBorder.valueOrDefault())) + if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.noBorder.valueOrDefault())) return; CBox newBox = box; @@ -2401,7 +2401,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr TRACY_GPU_ZONE("RenderBorder2"); - if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_sWindowData.noBorder.valueOrDefault())) + if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.noBorder.valueOrDefault())) return; CBox newBox = box; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index fd231027..813aec08 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -143,18 +143,18 @@ CHyprRenderer::CHyprRenderer() { continue; } - if (!w->m_pWLSurface || !w->m_pWLSurface->resource() || shouldRenderWindow(w.lock())) + if (!w->m_wlSurface || !w->m_wlSurface->resource() || shouldRenderWindow(w.lock())) continue; - w->m_pWLSurface->resource()->frame(Time::steadyNow()); - auto FEEDBACK = makeShared(w->m_pWLSurface->resource()); + w->m_wlSurface->resource()->frame(Time::steadyNow()); + auto FEEDBACK = makeShared(w->m_wlSurface->resource()); FEEDBACK->attachMonitor(g_pCompositor->m_lastMonitor.lock()); FEEDBACK->discarded(); PROTO::presentation->queueData(FEEDBACK); } if (dirty) - std::erase_if(m_vRenderUnfocused, [](const auto& e) { return !e || !e->m_sWindowData.renderUnfocused.valueOr(false); }); + std::erase_if(m_vRenderUnfocused, [](const auto& e) { return !e || !e->m_windowData.renderUnfocused.valueOr(false); }); if (!m_vRenderUnfocused.empty()) m_tRenderUnfocusedTimer->updateTimeout(std::chrono::milliseconds(1000 / *PFPS)); @@ -173,52 +173,51 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { if (!pWindow->visibleOnMonitor(pMonitor)) return false; - if (!pWindow->m_pWorkspace && !pWindow->m_bFadingOut) + if (!pWindow->m_workspace && !pWindow->m_fadingOut) return false; - if (!pWindow->m_pWorkspace && pWindow->m_bFadingOut) + if (!pWindow->m_workspace && pWindow->m_fadingOut) return pWindow->workspaceID() == pMonitor->activeWorkspaceID(); - if (pWindow->m_bPinned) + if (pWindow->m_pinned) return true; // if the window is being moved to a workspace that is not invisible, and the alpha is > 0.F, render it. - if (pWindow->m_iMonitorMovedFrom != -1 && pWindow->m_fMovingToWorkspaceAlpha->isBeingAnimated() && pWindow->m_fMovingToWorkspaceAlpha->value() > 0.F && pWindow->m_pWorkspace && - !pWindow->m_pWorkspace->isVisible()) + if (pWindow->m_monitorMovedFrom != -1 && pWindow->m_movingToWorkspaceAlpha->isBeingAnimated() && pWindow->m_movingToWorkspaceAlpha->value() > 0.F && pWindow->m_workspace && + !pWindow->m_workspace->isVisible()) return true; - const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace; + const auto PWINDOWWORKSPACE = pWindow->m_workspace; if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_monitor == pMonitor) { if (PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() || PWINDOWWORKSPACE->m_alpha->isBeingAnimated() || PWINDOWWORKSPACE->m_forceRendering) return true; // if hidden behind fullscreen - if (PWINDOWWORKSPACE->m_hasFullscreenWindow && !pWindow->isFullscreen() && (!pWindow->m_bIsFloating || !pWindow->m_bCreatedOverFullscreen) && - pWindow->m_fAlpha->value() == 0) + if (PWINDOWWORKSPACE->m_hasFullscreenWindow && !pWindow->isFullscreen() && (!pWindow->m_isFloating || !pWindow->m_createdOverFullscreen) && pWindow->m_alpha->value() == 0) return false; if (!PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOWWORKSPACE->m_alpha->isBeingAnimated() && !PWINDOWWORKSPACE->isVisible()) return false; } - if (pWindow->m_pMonitor == pMonitor) + if (pWindow->m_monitor == pMonitor) return true; - if ((!pWindow->m_pWorkspace || !pWindow->m_pWorkspace->isVisible()) && pWindow->m_pMonitor != pMonitor) + if ((!pWindow->m_workspace || !pWindow->m_workspace->isVisible()) && pWindow->m_monitor != pMonitor) return false; // if not, check if it maybe is active on a different monitor. - if (pWindow->m_pWorkspace && pWindow->m_pWorkspace->isVisible() && pWindow->m_bIsFloating /* tiled windows can't be multi-ws */) + if (pWindow->m_workspace && pWindow->m_workspace->isVisible() && pWindow->m_isFloating /* tiled windows can't be multi-ws */) return !pWindow->isFullscreen(); // Do not draw fullscreen windows on other monitors - if (pMonitor->activeSpecialWorkspace == pWindow->m_pWorkspace) + if (pMonitor->activeSpecialWorkspace == pWindow->m_workspace) return true; // if window is tiled and it's flying in, don't render on other mons (for slide) - if (!pWindow->m_bIsFloating && pWindow->m_vRealPosition->isBeingAnimated() && pWindow->m_bAnimatingIn && pWindow->m_pMonitor != pMonitor) + if (!pWindow->m_isFloating && pWindow->m_realPosition->isBeingAnimated() && pWindow->m_animatingIn && pWindow->m_monitor != pMonitor) return false; - if (pWindow->m_vRealPosition->isBeingAnimated()) { + if (pWindow->m_realPosition->isBeingAnimated()) { if (PWINDOWWORKSPACE && !PWINDOWWORKSPACE->m_isSpecialWorkspace && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated()) return false; // render window if window and monitor intersect @@ -226,10 +225,10 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { CBox windowBox = pWindow->getFullWindowBoundingBox(); if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated()) windowBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); - windowBox.translate(pWindow->m_vFloatingOffset); + windowBox.translate(pWindow->m_floatingOffset); const CBox monitorBox = {pMonitor->vecPosition, pMonitor->vecSize}; - if (!windowBox.intersection(monitorBox).empty() && (pWindow->workspaceID() == pMonitor->activeWorkspaceID() || pWindow->m_iMonitorMovedFrom != -1)) + if (!windowBox.intersection(monitorBox).empty() && (pWindow->workspaceID() == pMonitor->activeWorkspaceID() || pWindow->m_monitorMovedFrom != -1)) return true; } @@ -241,12 +240,12 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) { if (!validMapped(pWindow)) return false; - const auto PWORKSPACE = pWindow->m_pWorkspace; + const auto PWORKSPACE = pWindow->m_workspace; - if (!pWindow->m_pWorkspace) + if (!pWindow->m_workspace) return false; - if (pWindow->m_bPinned || PWORKSPACE->m_forceRendering) + if (pWindow->m_pinned || PWORKSPACE->m_forceRendering) return true; if (PWORKSPACE && PWORKSPACE->isVisible()) @@ -273,10 +272,10 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (!shouldRenderWindow(w, pMonitor)) continue; - if (w->m_fAlpha->value() == 0.f) + if (w->m_alpha->value() == 0.f) continue; - if (w->isFullscreen() || w->m_bIsFloating) + if (w->isFullscreen() || w->m_isFloating) continue; if (pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) @@ -290,16 +289,16 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR if (!shouldRenderWindow(w, pMonitor)) continue; - if (w->m_fAlpha->value() == 0.f) + if (w->m_alpha->value() == 0.f) continue; - if (w->isFullscreen() || !w->m_bIsFloating) + if (w->isFullscreen() || !w->m_isFloating) continue; - if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_monitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_monitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL); @@ -307,26 +306,26 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR // TODO: this pass sucks for (auto const& w : g_pCompositor->m_windows) { - const auto PWORKSPACE = w->m_pWorkspace; + const auto PWORKSPACE = w->m_workspace; - if (w->m_pWorkspace != pWorkspace || !w->isFullscreen()) { + if (w->m_workspace != pWorkspace || !w->isFullscreen()) { if (!(PWORKSPACE && (PWORKSPACE->m_renderOffset->isBeingAnimated() || PWORKSPACE->m_alpha->isBeingAnimated() || PWORKSPACE->m_forceRendering))) continue; - if (w->m_pMonitor != pMonitor) + if (w->m_monitor != pMonitor) continue; } if (!w->isFullscreen()) continue; - if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_monitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; if (shouldRenderWindow(w, pMonitor)) renderWindow(w, pMonitor, time, pWorkspace->m_fullscreenMode != FSMODE_FULLSCREEN, RENDER_PASS_ALL); - if (w->m_pWorkspace != pWorkspace) + if (w->m_workspace != pWorkspace) continue; pWorkspaceWindow = w; @@ -340,14 +339,14 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR // then render windows over fullscreen. for (auto const& w : g_pCompositor->m_windows) { - if (w->m_pWorkspace != pWorkspaceWindow->m_pWorkspace || !w->m_bIsFloating || (!w->m_bCreatedOverFullscreen && !w->m_bPinned) || (!w->m_bIsMapped && !w->m_bFadingOut) || + if (w->m_workspace != pWorkspaceWindow->m_workspace || !w->m_isFloating || (!w->m_createdOverFullscreen && !w->m_pinned) || (!w->m_isMapped && !w->m_fadingOut) || w->isFullscreen()) continue; - if (w->m_pMonitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) + if (w->m_monitor == pWorkspace->m_monitor && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_monitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass renderWindow(w, pMonitor, time, true, RENDER_PASS_ALL); @@ -363,7 +362,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo windows.reserve(g_pCompositor->m_windows.size()); for (auto const& w : g_pCompositor->m_windows) { - if (w->isHidden() || (!w->m_bIsMapped && !w->m_bFadingOut)) + if (w->isHidden() || (!w->m_isMapped && !w->m_fadingOut)) continue; if (!shouldRenderWindow(w, pMonitor)) @@ -374,11 +373,11 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo // Non-floating main for (auto& w : windows) { - if (w->m_bIsFloating) + if (w->m_isFloating) continue; // floating are in the second pass // some things may force us to ignore the special/not special disparity - const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); + const bool IGNORE_SPECIAL_CHECK = w->m_monitorMovedFrom != -1 && (w->m_workspace && !w->m_workspace->isVisible()); if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; @@ -390,7 +389,7 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo } // render tiled fading out after others - if (w->m_bFadingOut) { + if (w->m_fadingOut) { tiledFadingOut.emplace_back(w); w.reset(); continue; @@ -416,11 +415,11 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo if (!w) continue; - if (w->m_bIsFloating) + if (w->m_isFloating) continue; // floating are in the second pass // some things may force us to ignore the special/not special disparity - const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); + const bool IGNORE_SPECIAL_CHECK = w->m_monitorMovedFrom != -1 && (w->m_workspace && !w->m_workspace->isVisible()); if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; @@ -435,16 +434,16 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo if (!w) continue; - if (!w->m_bIsFloating || w->m_bPinned) + if (!w->m_isFloating || w->m_pinned) continue; // some things may force us to ignore the special/not special disparity - const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible()); + const bool IGNORE_SPECIAL_CHECK = w->m_monitorMovedFrom != -1 && (w->m_workspace && !w->m_workspace->isVisible()); if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_isSpecialWorkspace != w->onSpecialWorkspace()) continue; - if (pWorkspace->m_isSpecialWorkspace && w->m_pMonitor != pWorkspace->m_monitor) + if (pWorkspace->m_isSpecialWorkspace && w->m_monitor != pWorkspace->m_monitor) continue; // special on another are rendered as a part of the base pass // render the bad boy @@ -456,24 +455,24 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (pWindow->isHidden() && !standalone) return; - if (pWindow->m_bFadingOut) { - if (pMonitor == pWindow->m_pMonitor) // TODO: fix this + if (pWindow->m_fadingOut) { + if (pMonitor == pWindow->m_monitor) // TODO: fix this renderSnapshot(pWindow); return; } - if (!pWindow->m_bIsMapped) + if (!pWindow->m_isMapped) return; TRACY_GPU_ZONE("RenderWindow"); - const auto PWORKSPACE = pWindow->m_pWorkspace; - const auto REALPOS = pWindow->m_vRealPosition->value() + (pWindow->m_bPinned ? Vector2D{} : PWORKSPACE->m_renderOffset->value()); + const auto PWORKSPACE = pWindow->m_workspace; + const auto REALPOS = pWindow->m_realPosition->value() + (pWindow->m_pinned ? Vector2D{} : PWORKSPACE->m_renderOffset->value()); static auto PDIMAROUND = CConfigValue("decoration:dim_around"); static auto PBLUR = CConfigValue("decoration:blur:enabled"); CSurfacePassElement::SRenderData renderdata = {pMonitor, time}; - CBox textureBox = {REALPOS.x, REALPOS.y, std::max(pWindow->m_vRealSize->value().x, 5.0), std::max(pWindow->m_vRealSize->value().y, 5.0)}; + CBox textureBox = {REALPOS.x, REALPOS.y, std::max(pWindow->m_realSize->value().x, 5.0), std::max(pWindow->m_realSize->value().y, 5.0)}; renderdata.pos.x = textureBox.x; renderdata.pos.y = textureBox.y; @@ -495,15 +494,15 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T decorate = false; // whether to use m_fMovingToWorkspaceAlpha, only if fading out into an invisible ws - const bool USE_WORKSPACE_FADE_ALPHA = pWindow->m_iMonitorMovedFrom != -1 && (!PWORKSPACE || !PWORKSPACE->isVisible()); - const bool DONT_BLUR = pWindow->m_sWindowData.noBlur.valueOrDefault() || pWindow->m_sWindowData.RGBX.valueOrDefault() || pWindow->opaque(); + const bool USE_WORKSPACE_FADE_ALPHA = pWindow->m_monitorMovedFrom != -1 && (!PWORKSPACE || !PWORKSPACE->isVisible()); + const bool DONT_BLUR = pWindow->m_windowData.noBlur.valueOrDefault() || pWindow->m_windowData.RGBX.valueOrDefault() || pWindow->opaque(); - renderdata.surface = pWindow->m_pWLSurface->resource(); - renderdata.dontRound = pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN) || pWindow->m_sWindowData.noRounding.valueOrDefault(); - renderdata.fadeAlpha = pWindow->m_fAlpha->value() * (pWindow->m_bPinned || USE_WORKSPACE_FADE_ALPHA ? 1.f : PWORKSPACE->m_alpha->value()) * - (USE_WORKSPACE_FADE_ALPHA ? pWindow->m_fMovingToWorkspaceAlpha->value() : 1.F) * pWindow->m_fMovingFromWorkspaceAlpha->value(); - renderdata.alpha = pWindow->m_fActiveInactiveAlpha->value(); - renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN); + renderdata.surface = pWindow->m_wlSurface->resource(); + renderdata.dontRound = pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN) || pWindow->m_windowData.noRounding.valueOrDefault(); + renderdata.fadeAlpha = pWindow->m_alpha->value() * (pWindow->m_pinned || USE_WORKSPACE_FADE_ALPHA ? 1.f : PWORKSPACE->m_alpha->value()) * + (USE_WORKSPACE_FADE_ALPHA ? pWindow->m_movingToWorkspaceAlpha->value() : 1.F) * pWindow->m_movingFromWorkspaceAlpha->value(); + renderdata.alpha = pWindow->m_activeInactiveAlpha->value(); + renderdata.decorate = decorate && !pWindow->m_X11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN); renderdata.rounding = standalone || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale; renderdata.roundingPower = standalone || renderdata.dontRound ? 2.0f : pWindow->roundingPower(); renderdata.blur = !standalone && *PBLUR && !DONT_BLUR; @@ -515,14 +514,14 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } // apply opaque - if (pWindow->m_sWindowData.opaque.valueOrDefault()) + if (pWindow->m_windowData.opaque.valueOrDefault()) renderdata.alpha = 1.f; renderdata.pWindow = pWindow; EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW); - if (*PDIMAROUND && pWindow->m_sWindowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) { + if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) { CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.y}; CRectPassElement::SRectData data; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * renderdata.alpha * renderdata.fadeAlpha); @@ -530,38 +529,37 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T m_sRenderPass.add(makeShared(data)); } - renderdata.pos.x += pWindow->m_vFloatingOffset.x; - renderdata.pos.y += pWindow->m_vFloatingOffset.y; + renderdata.pos.x += pWindow->m_floatingOffset.x; + renderdata.pos.y += pWindow->m_floatingOffset.y; // if window is floating and we have a slide animation, clip it to its full bb - if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->isFullscreen() && PWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_bPinned) { - CRegion rg = - pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_renderOffset->value() + pWindow->m_vFloatingOffset).scale(pMonitor->scale); + if (!ignorePosition && pWindow->m_isFloating && !pWindow->isFullscreen() && PWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_pinned) { + CRegion rg = pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_renderOffset->value() + pWindow->m_floatingOffset).scale(pMonitor->scale); renderdata.clipBox = rg.getExtents(); } // render window decorations first, if not fullscreen full if (mode == RENDER_PASS_ALL || mode == RENDER_PASS_MAIN) { - const bool TRANSFORMERSPRESENT = !pWindow->m_vTransformers.empty(); + const bool TRANSFORMERSPRESENT = !pWindow->m_transformers.empty(); if (TRANSFORMERSPRESENT) { g_pHyprOpenGL->bindOffMain(); - for (auto const& t : pWindow->m_vTransformers) { + for (auto const& t : pWindow->m_transformers) { t->preWindowRender(&renderdata); } } if (renderdata.decorate) { - for (auto const& wd : pWindow->m_dWindowDecorations) { + for (auto const& wd : pWindow->m_windowDecorations) { if (wd->getDecorationLayer() != DECORATION_LAYER_BOTTOM) continue; wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha); } - for (auto const& wd : pWindow->m_dWindowDecorations) { + for (auto const& wd : pWindow->m_windowDecorations) { if (wd->getDecorationLayer() != DECORATION_LAYER_UNDER) continue; @@ -570,10 +568,10 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } static auto PXWLUSENN = CConfigValue("xwayland:use_nearest_neighbor"); - if ((pWindow->m_bIsX11 && *PXWLUSENN) || pWindow->m_sWindowData.nearestNeighbor.valueOrDefault()) + if ((pWindow->m_isX11 && *PXWLUSENN) || pWindow->m_windowData.nearestNeighbor.valueOrDefault()) renderdata.useNearestNeighbor = true; - if (!pWindow->m_sWindowData.noBlur.valueOrDefault() && pWindow->m_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall && renderdata.blur && *PBLUR) { + if (!pWindow->m_windowData.noBlur.valueOrDefault() && pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall && renderdata.blur && *PBLUR) { CBox wb = {renderdata.pos.x - pMonitor->vecPosition.x, renderdata.pos.y - pMonitor->vecPosition.y, renderdata.w, renderdata.h}; wb.scale(pMonitor->scale).round(); CRectPassElement::SRectData data; @@ -588,12 +586,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } renderdata.surfaceCounter = 0; - pWindow->m_pWLSurface->resource()->breadthfirst( + pWindow->m_wlSurface->resource()->breadthfirst( [this, &renderdata, &pWindow](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; renderdata.texture = s->current.texture; renderdata.surface = s; - renderdata.mainSurface = s == pWindow->m_pWLSurface->resource(); + renderdata.mainSurface = s == pWindow->m_wlSurface->resource(); m_sRenderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, @@ -602,7 +600,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.useNearestNeighbor = false; if (renderdata.decorate) { - for (auto const& wd : pWindow->m_dWindowDecorations) { + for (auto const& wd : pWindow->m_windowDecorations) { if (wd->getDecorationLayer() != DECORATION_LAYER_OVER) continue; @@ -612,7 +610,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (TRANSFORMERSPRESENT) { CFramebuffer* last = g_pHyprOpenGL->m_RenderData.currentFB; - for (auto const& t : pWindow->m_vTransformers) { + for (auto const& t : pWindow->m_transformers) { last = t->transform(last); } @@ -624,8 +622,8 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T g_pHyprOpenGL->m_RenderData.clipBox = CBox(); if (mode == RENDER_PASS_ALL || mode == RENDER_PASS_POPUP) { - if (!pWindow->m_bIsX11) { - CBox geom = pWindow->m_pXDGSurface->current.geometry; + if (!pWindow->m_isX11) { + CBox geom = pWindow->m_xdgSurface->current.geometry; renderdata.pos -= geom.pos(); renderdata.dontRound = true; // don't round popups @@ -643,12 +641,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.discardOpacity = *PBLURIGNOREA; } - if (pWindow->m_sWindowData.nearestNeighbor.valueOrDefault()) + if (pWindow->m_windowData.nearestNeighbor.valueOrDefault()) renderdata.useNearestNeighbor = true; renderdata.surfaceCounter = 0; - pWindow->m_pPopupHead->breadthfirst( + pWindow->m_popupHead->breadthfirst( [this, &renderdata](WP popup, void* data) { if (!popup->m_wlSurface || !popup->m_wlSurface->resource() || !popup->m_mapped) return; @@ -673,7 +671,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } if (decorate) { - for (auto const& wd : pWindow->m_dWindowDecorations) { + for (auto const& wd : pWindow->m_windowDecorations) { if (wd->getDecorationLayer() != DECORATION_LAYER_OVERLAY) continue; @@ -950,10 +948,10 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA // pinned always above for (auto const& w : g_pCompositor->m_windows) { - if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut) + if (w->isHidden() && !w->m_isMapped && !w->m_fadingOut) continue; - if (!w->m_bPinned || !w->m_bIsFloating) + if (!w->m_pinned || !w->m_isFloating) continue; if (!shouldRenderWindow(w, pMonitor)) @@ -1049,7 +1047,7 @@ void CHyprRenderer::renderSessionLockMissing(PHLMONITOR pMonitor) { void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SP pSurface, PHLMONITOR pMonitor, bool main, const Vector2D& projSize, const Vector2D& projSizeUnscaled, bool fixMisalignedFSV1) { - if (!pWindow || !pWindow->m_bIsX11) { + if (!pWindow || !pWindow->m_isX11) { static auto PEXPANDEDGES = CConfigValue("render:expand_undersized_textures"); Vector2D uvTL; @@ -1109,7 +1107,7 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_pXDGSurface->current.geometry; + CBox geom = pWindow->m_xdgSurface->current.geometry; // ignore X and Y, adjust uv if (geom.x != 0 || geom.y != 0 || geom.width > projSizeUnscaled.x || geom.height > projSizeUnscaled.y) { @@ -1124,8 +1122,8 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_pWLSurface->small() && !pWindow->m_pWLSurface->m_fillIgnoreSmall) - maxSize = pWindow->m_pWLSurface->getViewporterCorrectedSize(); + if (pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall) + maxSize = pWindow->m_wlSurface->getViewporterCorrectedSize(); if (geom.width > maxSize.x) uvBR.x = uvBR.x * (maxSize.x / geom.width); @@ -1500,7 +1498,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { bool hdrIsHandled = false; if (*PPASS && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); - const auto ROOT_SURF = WINDOW->m_pWLSurface->resource(); + const auto ROOT_SURF = WINDOW->m_wlSurface->resource(); const auto SURF = ROOT_SURF->findFirstPreorder([ROOT_SURF](SP surf) { return surf->colorManagement.valid() && surf->extends() == ROOT_SURF->extends(); }); @@ -1609,13 +1607,13 @@ void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now) { for (auto const& w : g_pCompositor->m_windows) { - if (w->isHidden() || !w->m_bIsMapped || w->m_bFadingOut || !w->m_pWLSurface->resource()) + if (w->isHidden() || !w->m_isMapped || w->m_fadingOut || !w->m_wlSurface->resource()) continue; if (!shouldRenderWindow(w, pMonitor)) continue; - w->m_pWLSurface->resource()->breadthfirst([now](SP r, const Vector2D& offset, void* d) { r->frame(now); }, nullptr); + w->m_wlSurface->resource()->breadthfirst([now](SP r, const Vector2D& offset, void* d) { r->frame(now); }, nullptr); } for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { @@ -1886,10 +1884,10 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { return; CBox windowBox = pWindow->getFullWindowBoundingBox(); - const auto PWINDOWWORKSPACE = pWindow->m_pWorkspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_bPinned) + const auto PWINDOWWORKSPACE = pWindow->m_workspace; + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_pinned) windowBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); - windowBox.translate(pWindow->m_vFloatingOffset); + windowBox.translate(pWindow->m_floatingOffset); for (auto const& m : g_pCompositor->m_monitors) { if (forceFull || shouldRenderWindow(pWindow, m)) { // only damage if window is rendered on monitor @@ -1899,13 +1897,13 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { } } - for (auto const& wd : pWindow->m_dWindowDecorations) + for (auto const& wd : pWindow->m_windowDecorations) wd->damageEntire(); static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) - Debug::log(LOG, "Damage: Window ({}): xy: {}, {} wh: {}, {}", pWindow->m_szTitle, windowBox.x, windowBox.y, windowBox.width, windowBox.height); + Debug::log(LOG, "Damage: Window ({}): xy: {}, {} wh: {}, {}", pWindow->m_title, windowBox.x, windowBox.y, windowBox.width, windowBox.height); } void CHyprRenderer::damageMonitor(PHLMONITOR pMonitor) { @@ -2148,8 +2146,8 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { if (!PCANDIDATE->opaque()) return; - if (PCANDIDATE->m_vRealSize->value() != pMonitor->vecSize || PCANDIDATE->m_vRealPosition->value() != pMonitor->vecPosition || PCANDIDATE->m_vRealPosition->isBeingAnimated() || - PCANDIDATE->m_vRealSize->isBeingAnimated()) + if (PCANDIDATE->m_realSize->value() != pMonitor->vecSize || PCANDIDATE->m_realPosition->value() != pMonitor->vecPosition || PCANDIDATE->m_realPosition->isBeingAnimated() || + PCANDIDATE->m_realSize->isBeingAnimated()) return; if (!pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY].empty()) @@ -2161,10 +2159,10 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { } for (auto const& w : g_pCompositor->m_windows) { - if (w == PCANDIDATE || (!w->m_bIsMapped && !w->m_bFadingOut) || w->isHidden()) + if (w == PCANDIDATE || (!w->m_isMapped && !w->m_fadingOut) || w->isHidden()) continue; - if (w->m_pWorkspace == PCANDIDATE->m_pWorkspace && w->m_bIsFloating && w->m_bCreatedOverFullscreen && w->visibleOnMonitor(pMonitor)) + if (w->m_workspace == PCANDIDATE->m_workspace && w->m_isFloating && w->m_createdOverFullscreen && w->visibleOnMonitor(pMonitor)) return; } @@ -2173,7 +2171,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { // check if it did not open any subsurfaces or shit int surfaceCount = 0; - if (PCANDIDATE->m_bIsX11) + if (PCANDIDATE->m_isX11) surfaceCount = 1; else surfaceCount = PCANDIDATE->popupsCount() + PCANDIDATE->surfacesCount(); @@ -2387,7 +2385,7 @@ void CHyprRenderer::addWindowToRenderUnfocused(PHLWINDOW window) { void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFramebuffer) { // we trust the window is valid. - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) return; @@ -2431,7 +2429,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { // we trust the window is valid. - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) return; @@ -2469,7 +2467,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - renderWindow(pWindow, PMONITOR, Time::steadyNow(), !pWindow->m_bX11DoesntWantBorders, RENDER_PASS_ALL); + renderWindow(pWindow, PMONITOR, Time::steadyNow(), !pWindow->m_X11DoesntWantBorders, RENDER_PASS_ALL); **PBLUR = BLURVAL; @@ -2528,27 +2526,27 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { if (!FBDATA->getTexture()) return; - const auto PMONITOR = pWindow->m_pMonitor.lock(); + const auto PMONITOR = pWindow->m_monitor.lock(); CBox windowBox; // some mafs to figure out the correct box // the originalClosedPos is relative to the monitor's pos - Vector2D scaleXY = Vector2D((PMONITOR->scale * pWindow->m_vRealSize->value().x / (pWindow->m_vOriginalClosedSize.x * PMONITOR->scale)), - (PMONITOR->scale * pWindow->m_vRealSize->value().y / (pWindow->m_vOriginalClosedSize.y * PMONITOR->scale))); + Vector2D scaleXY = Vector2D((PMONITOR->scale * pWindow->m_realSize->value().x / (pWindow->m_originalClosedSize.x * PMONITOR->scale)), + (PMONITOR->scale * pWindow->m_realSize->value().y / (pWindow->m_originalClosedSize.y * PMONITOR->scale))); windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x; windowBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y; - windowBox.x = ((pWindow->m_vRealPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - ((pWindow->m_vOriginalClosedPos.x * PMONITOR->scale) * scaleXY.x); - windowBox.y = ((pWindow->m_vRealPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - ((pWindow->m_vOriginalClosedPos.y * PMONITOR->scale) * scaleXY.y); + windowBox.x = ((pWindow->m_realPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - ((pWindow->m_originalClosedPos.x * PMONITOR->scale) * scaleXY.x); + windowBox.y = ((pWindow->m_realPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - ((pWindow->m_originalClosedPos.y * PMONITOR->scale) * scaleXY.y); CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y}; - if (*PDIMAROUND && pWindow->m_sWindowData.dimAround.valueOrDefault()) { + if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault()) { CRectPassElement::SRectData data; data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.y}; - data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_fAlpha->value()); + data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_alpha->value()); m_sRenderPass.add(makeShared(data)); damageMonitor(PMONITOR); @@ -2558,7 +2556,7 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { data.flipEndFrame = true; data.tex = FBDATA->getTexture(); data.box = windowBox; - data.a = pWindow->m_fAlpha->value(); + data.a = pWindow->m_alpha->value(); data.damage = fakeDamage; m_sRenderPass.add(makeShared(data)); diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 229736de..d1d8e9c0 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -36,12 +36,12 @@ CBox CHyprBorderDecoration::assignedBoxGlobal() { CBox box = m_bAssignedGeometry; box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_BOTTOM | DECORATION_EDGE_LEFT | DECORATION_EDGE_RIGHT | DECORATION_EDGE_TOP, m_pWindow.lock())); - const auto PWORKSPACE = m_pWindow->m_pWorkspace; + const auto PWORKSPACE = m_pWindow->m_workspace; if (!PWORKSPACE) return box; - const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); + const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); return box.translate(WORKSPACEOFFSET); } @@ -52,22 +52,22 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (m_bAssignedGeometry.width < m_seExtents.topLeft.x + 1 || m_bAssignedGeometry.height < m_seExtents.topLeft.y + 1) return; - CBox windowBox = assignedBoxGlobal().translate(-pMonitor->vecPosition + m_pWindow->m_vFloatingOffset).expand(-m_pWindow->getRealBorderSize()).scale(pMonitor->scale).round(); + CBox windowBox = assignedBoxGlobal().translate(-pMonitor->vecPosition + m_pWindow->m_floatingOffset).expand(-m_pWindow->getRealBorderSize()).scale(pMonitor->scale).round(); if (windowBox.width < 1 || windowBox.height < 1) return; - auto grad = m_pWindow->m_cRealBorderColor; - const bool ANIMATED = m_pWindow->m_fBorderFadeAnimationProgress->isBeingAnimated(); + auto grad = m_pWindow->m_realBorderColor; + const bool ANIMATED = m_pWindow->m_borderFadeAnimationProgress->isBeingAnimated(); - if (m_pWindow->m_fBorderAngleAnimationProgress->enabled()) { - grad.m_angle += m_pWindow->m_fBorderAngleAnimationProgress->value() * M_PI * 2; + if (m_pWindow->m_borderAngleAnimationProgress->enabled()) { + grad.m_angle += m_pWindow->m_borderAngleAnimationProgress->value() * M_PI * 2; grad.m_angle = normalizeAngleRad(grad.m_angle); // When borderangle is animated, it is counterintuitive to fade between inactive/active gradient angles. // Instead we sync the angles to avoid fading between them and additionally rotating the border angle. if (ANIMATED) - m_pWindow->m_cRealBorderColorPrevious.m_angle = grad.m_angle; + m_pWindow->m_realBorderColorPrevious.m_angle = grad.m_angle; } int borderSize = m_pWindow->getRealBorderSize(); @@ -84,9 +84,9 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (ANIMATED) { data.hasGrad2 = true; - data.grad1 = m_pWindow->m_cRealBorderColorPrevious; + data.grad1 = m_pWindow->m_realBorderColorPrevious; data.grad2 = grad; - data.lerp = m_pWindow->m_fBorderFadeAnimationProgress->value(); + data.lerp = m_pWindow->m_borderFadeAnimationProgress->value(); } g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); @@ -119,10 +119,10 @@ void CHyprBorderDecoration::damageEntire() { const auto ROUNDINGSIZE = ROUNDING - M_SQRT1_2 * ROUNDING + 2; const auto BORDERSIZE = m_pWindow->getRealBorderSize() + 1; - const auto PWINDOWWORKSPACE = m_pWindow->m_pWorkspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !m_pWindow->m_bPinned) + const auto PWINDOWWORKSPACE = m_pWindow->m_workspace; + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !m_pWindow->m_pinned) surfaceBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); - surfaceBox.translate(m_pWindow->m_vFloatingOffset); + surfaceBox.translate(m_pWindow->m_floatingOffset); CBox surfaceBoxExpandedBorder = surfaceBox; surfaceBoxExpandedBorder.expand(BORDERSIZE); @@ -157,5 +157,5 @@ std::string CHyprBorderDecoration::getDisplayName() { } bool CHyprBorderDecoration::doesntWantBorders() { - return m_pWindow->m_sWindowData.noBorder.valueOrDefault() || m_pWindow->m_bX11DoesntWantBorders || m_pWindow->getRealBorderSize() == 0; + return m_pWindow->m_windowData.noBorder.valueOrDefault() || m_pWindow->m_X11DoesntWantBorders || m_pWindow->getRealBorderSize() == 0; } diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index 8a3e9334..ff9a195e 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -43,14 +43,14 @@ void CHyprDropShadowDecoration::damageEntire() { const auto PWINDOW = m_pWindow.lock(); - CBox shadowBox = {PWINDOW->m_vRealPosition->value().x - m_seExtents.topLeft.x, PWINDOW->m_vRealPosition->value().y - m_seExtents.topLeft.y, - PWINDOW->m_vRealSize->value().x + m_seExtents.topLeft.x + m_seExtents.bottomRight.x, - PWINDOW->m_vRealSize->value().y + m_seExtents.topLeft.y + m_seExtents.bottomRight.y}; + CBox shadowBox = {PWINDOW->m_realPosition->value().x - m_seExtents.topLeft.x, PWINDOW->m_realPosition->value().y - m_seExtents.topLeft.y, + PWINDOW->m_realSize->value().x + m_seExtents.topLeft.x + m_seExtents.bottomRight.x, + PWINDOW->m_realSize->value().y + m_seExtents.topLeft.y + m_seExtents.bottomRight.y}; - const auto PWORKSPACE = PWINDOW->m_pWorkspace; - if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) + const auto PWORKSPACE = PWINDOW->m_workspace; + if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) shadowBox.translate(PWORKSPACE->m_renderOffset->value()); - shadowBox.translate(PWINDOW->m_vFloatingOffset); + shadowBox.translate(PWINDOW->m_floatingOffset); static auto PSHADOWIGNOREWINDOW = CConfigValue("decoration:shadow:ignore_window"); const auto ROUNDING = PWINDOW->rounding(); @@ -59,9 +59,9 @@ void CHyprDropShadowDecoration::damageEntire() { CRegion shadowRegion(shadowBox); if (*PSHADOWIGNOREWINDOW) { CBox surfaceBox = PWINDOW->getWindowMainSurfaceBox(); - if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_bPinned) + if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) surfaceBox.translate(PWORKSPACE->m_renderOffset->value()); - surfaceBox.translate(PWINDOW->m_vFloatingOffset); + surfaceBox.translate(PWINDOW->m_floatingOffset); surfaceBox.expand(-ROUNDINGSIZE); shadowRegion.subtract(CRegion(surfaceBox)); } @@ -79,8 +79,8 @@ void CHyprDropShadowDecoration::damageEntire() { void CHyprDropShadowDecoration::updateWindow(PHLWINDOW pWindow) { const auto PWINDOW = m_pWindow.lock(); - m_vLastWindowPos = PWINDOW->m_vRealPosition->value(); - m_vLastWindowSize = PWINDOW->m_vRealSize->value(); + m_vLastWindowPos = PWINDOW->m_realPosition->value(); + m_vLastWindowSize = PWINDOW->m_realSize->value(); m_bLastWindowBox = {m_vLastWindowPos.x, m_vLastWindowPos.y, m_vLastWindowSize.x, m_vLastWindowSize.y}; m_bLastWindowBoxWithDecos = g_pDecorationPositioner->getBoxWithIncludedDecos(pWindow); @@ -99,13 +99,13 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { if (!validMapped(PWINDOW)) return; - if (PWINDOW->m_cRealShadowColor->value() == CHyprColor(0, 0, 0, 0)) + if (PWINDOW->m_realShadowColor->value() == CHyprColor(0, 0, 0, 0)) return; // don't draw invisible shadows - if (!PWINDOW->m_sWindowData.decorate.valueOrDefault()) + if (!PWINDOW->m_windowData.decorate.valueOrDefault()) return; - if (PWINDOW->m_sWindowData.noShadow.valueOrDefault()) + if (PWINDOW->m_windowData.noShadow.valueOrDefault()) return; static auto PSHADOWS = CConfigValue("decoration:shadow:enabled"); @@ -120,8 +120,8 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { const auto ROUNDINGBASE = PWINDOW->rounding(); const auto ROUNDINGPOWER = PWINDOW->roundingPower(); const auto ROUNDING = ROUNDINGBASE > 0 ? ROUNDINGBASE + PWINDOW->getRealBorderSize() : 0; - const auto PWORKSPACE = PWINDOW->m_pWorkspace; - const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_bPinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); + const auto PWORKSPACE = PWINDOW->m_workspace; + const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); // draw the shadow CBox fullBox = m_bLastWindowBoxWithDecos; @@ -142,7 +142,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { {fullBox.x + fullBox.width + pMonitor->vecPosition.x - m_vLastWindowPos.x - m_vLastWindowSize.x + 2, fullBox.y + fullBox.height + pMonitor->vecPosition.y - m_vLastWindowPos.y - m_vLastWindowSize.y + 2}}; - fullBox.translate(PWINDOW->m_vFloatingOffset); + fullBox.translate(PWINDOW->m_floatingOffset); if (fullBox.width < 1 || fullBox.height < 1) return; // don't draw invisible shadows @@ -165,8 +165,8 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { windowBox.translate(-pMonitor->vecPosition + WORKSPACEOFFSET); withDecos.translate(-pMonitor->vecPosition + WORKSPACEOFFSET); - windowBox.translate(PWINDOW->m_vFloatingOffset); - withDecos.translate(PWINDOW->m_vFloatingOffset); + windowBox.translate(PWINDOW->m_floatingOffset); + withDecos.translate(PWINDOW->m_floatingOffset); auto scaledExtentss = withDecos.extentsFrom(windowBox); scaledExtentss = scaledExtentss * pMonitor->scale; @@ -192,7 +192,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->renderRect(fullBox, CHyprColor(0, 0, 0, 1), 0); // render white shadow with the alpha of the shadow color (otherwise we clear with alpha later and shit it to 2 bit) - drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, CHyprColor(1, 1, 1, PWINDOW->m_cRealShadowColor->value().a), a); + drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, CHyprColor(1, 1, 1, PWINDOW->m_realShadowColor->value().a), a); // render black window box ("clip") g_pHyprOpenGL->renderRect(windowBox, CHyprColor(0, 0, 0, 1.0), (ROUNDING + 1 /* This fixes small pixel gaps. */) * pMonitor->scale, ROUNDINGPOWER); @@ -200,7 +200,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { alphaSwapFB.bind(); // alpha swap just has the shadow color. It will be the "texture" to render. - g_pHyprOpenGL->renderRect(fullBox, PWINDOW->m_cRealShadowColor->value().stripA(), 0); + g_pHyprOpenGL->renderRect(fullBox, PWINDOW->m_realShadowColor->value().stripA(), 0); LASTFB->bind(); @@ -214,7 +214,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->m_RenderData.damage = saveDamage; } else - drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, PWINDOW->m_cRealShadowColor->value(), a); + drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, PWINDOW->m_realShadowColor->value(), a); if (m_seExtents != m_seReportedExtents) g_pDecorationPositioner->repositionDeco(this); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index c09ca991..57861d26 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -43,7 +43,7 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { info.priority = *PPRIORITY; info.reserved = true; - if (*PENABLED && m_pWindow->m_sWindowData.decorate.valueOrDefault()) { + if (*PENABLED && m_pWindow->m_windowData.decorate.valueOrDefault()) { if (*PSTACKED) { const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + (*PKEEPUPPERGAP * *POUTERGAP)}, {0, 0}}; @@ -65,7 +65,7 @@ eDecorationType CHyprGroupBarDecoration::getDecorationType() { // void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { - if (m_pWindow->m_sGroupData.pNextWindow.expired()) { + if (m_pWindow->m_groupData.pNextWindow.expired()) { m_pWindow->removeWindowDeco(this); return; } @@ -74,10 +74,10 @@ void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { PHLWINDOW head = pWindow->getGroupHead(); m_dwGroupMembers.emplace_back(head); - PHLWINDOW curr = head->m_sGroupData.pNextWindow.lock(); + PHLWINDOW curr = head->m_groupData.pNextWindow.lock(); while (curr != head) { m_dwGroupMembers.emplace_back(curr); - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); } damageEntire(); @@ -90,7 +90,7 @@ void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { void CHyprGroupBarDecoration::damageEntire() { auto box = assignedBoxGlobal(); - box.translate(m_pWindow->m_vFloatingOffset); + box.translate(m_pWindow->m_floatingOffset); g_pHyprRenderer->damageBox(box); } @@ -100,7 +100,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { static auto PENABLED = CConfigValue("group:groupbar:enabled"); - if (!*PENABLED || !m_pWindow->m_sWindowData.decorate.valueOrDefault()) + if (!*PENABLED || !m_pWindow->m_windowData.decorate.valueOrDefault()) return; static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); @@ -143,13 +143,13 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { for (int i = 0; i < barsToDraw; ++i) { const auto WINDOWINDEX = *PSTACKED ? m_dwGroupMembers.size() - i - 1 : i; - CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->vecPosition.y + m_pWindow->m_vFloatingOffset.y, m_fBarWidth, + CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->vecPosition.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, *PINDICATORHEIGHT}; rect.scale(pMonitor->scale).round(); - const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_sGroupData.locked || g_pKeybindManager->m_bGroupsLocked; + const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_bGroupsLocked; const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE; @@ -187,8 +187,8 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); } - rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_vFloatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->vecPosition.y + m_pWindow->m_vFloatingOffset.y, m_fBarWidth, + rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->vecPosition.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}; rect.scale(pMonitor->scale); @@ -229,7 +229,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { } if (*PRENDERTITLES) { - CTitleTex* pTitleTex = textureFromTitle(m_dwGroupMembers[WINDOWINDEX]->m_szTitle); + CTitleTex* pTitleTex = textureFromTitle(m_dwGroupMembers[WINDOWINDEX]->m_title); if (!pTitleTex) pTitleTex = @@ -276,7 +276,7 @@ void CHyprGroupBarDecoration::invalidateTextures() { m_sTitleTexs.titleTexs.clear(); } -CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale) : szContent(pWindow->m_szTitle), pWindowOwner(pWindow) { +CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale) : szContent(pWindow->m_title), pWindowOwner(pWindow) { static auto FALLBACKFONT = CConfigValue("misc:font_family"); static auto PTITLEFONTFAMILY = CConfigValue("group:groupbar:font_family"); static auto PTITLEFONTSIZE = CConfigValue("group:groupbar:font_size"); @@ -291,8 +291,8 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float const CHyprColor COLOR = CHyprColor(*PTEXTCOLOR); const auto FONTFAMILY = *PTITLEFONTFAMILY != STRVAL_EMPTY ? *PTITLEFONTFAMILY : *FALLBACKFONT; - texActive = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTACTIVE->m_value); - texInactive = g_pHyprOpenGL->renderText(pWindow->m_szTitle, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTINACTIVE->m_value); + texActive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTACTIVE->m_value); + texInactive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTINACTIVE->m_value); } static void renderGradientTo(SP tex, CGradientValueData* grad) { @@ -380,7 +380,7 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) { static auto PSTACKED = CConfigValue("group:groupbar:stacked"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); - if (m_pWindow.lock() == m_pWindow->m_sGroupData.pNextWindow.lock()) + if (m_pWindow.lock() == m_pWindow->m_groupData.pNextWindow.lock()) return false; const float BARRELATIVEX = pos.x - assignedBoxGlobal().x; @@ -397,7 +397,7 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) { // hack g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); - if (!pWindow->m_bIsFloating) { + if (!pWindow->m_isFloating) { const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked; g_pKeybindManager->m_bGroupsLocked = true; g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow); @@ -419,12 +419,12 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND static auto PMERGEGROUPSONGROUPBAR = CConfigValue("group:merge_groups_on_groupbar"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); - const bool FLOATEDINTOTILED = !m_pWindow->m_bIsFloating && !pDraggedWindow->m_bDraggingTiled; + const bool FLOATEDINTOTILED = !m_pWindow->m_isFloating && !pDraggedWindow->m_draggingTiled; g_pInputManager->m_bWasDraggingWindow = false; if (!pDraggedWindow->canBeGroupedInto(m_pWindow.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR) || - (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_sGroupData.pNextWindow.lock() && m_pWindow->m_sGroupData.pNextWindow.lock())) { + (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_groupData.pNextWindow.lock() && m_pWindow->m_groupData.pNextWindow.lock())) { g_pInputManager->m_bWasDraggingWindow = true; return false; } @@ -434,49 +434,49 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND const int WINDOWINDEX = BARRELATIVE < 0 ? -1 : BARRELATIVE / BARSIZE; PHLWINDOW pWindowInsertAfter = m_pWindow->getGroupWindowByIndex(WINDOWINDEX); - PHLWINDOW pWindowInsertEnd = pWindowInsertAfter->m_sGroupData.pNextWindow.lock(); - PHLWINDOW pDraggedHead = pDraggedWindow->m_sGroupData.pNextWindow.lock() ? pDraggedWindow->getGroupHead() : pDraggedWindow; + PHLWINDOW pWindowInsertEnd = pWindowInsertAfter->m_groupData.pNextWindow.lock(); + PHLWINDOW pDraggedHead = pDraggedWindow->m_groupData.pNextWindow.lock() ? pDraggedWindow->getGroupHead() : pDraggedWindow; - if (!pDraggedWindow->m_sGroupData.pNextWindow.expired()) { + if (!pDraggedWindow->m_groupData.pNextWindow.expired()) { // stores group data std::vector members; PHLWINDOW curr = pDraggedHead; - const bool WASLOCKED = pDraggedHead->m_sGroupData.locked; + const bool WASLOCKED = pDraggedHead->m_groupData.locked; do { members.push_back(curr); - curr = curr->m_sGroupData.pNextWindow.lock(); + curr = curr->m_groupData.pNextWindow.lock(); } while (curr != members[0]); // removes all windows for (const PHLWINDOW& w : members) { - w->m_sGroupData.pNextWindow.reset(); - w->m_sGroupData.head = false; - w->m_sGroupData.locked = false; + w->m_groupData.pNextWindow.reset(); + w->m_groupData.head = false; + w->m_groupData.locked = false; g_pLayoutManager->getCurrentLayout()->onWindowRemoved(w); } // restores the group for (auto it = members.begin(); it != members.end(); ++it) { - (*it)->m_bIsFloating = pWindowInsertAfter->m_bIsFloating; // match the floating state of group members - *(*it)->m_vRealSize = pWindowInsertAfter->m_vRealSize->goal(); // match the size of group members - *(*it)->m_vRealPosition = pWindowInsertAfter->m_vRealPosition->goal(); // match the position of group members + (*it)->m_isFloating = pWindowInsertAfter->m_isFloating; // match the floating state of group members + *(*it)->m_realSize = pWindowInsertAfter->m_realSize->goal(); // match the size of group members + *(*it)->m_realPosition = pWindowInsertAfter->m_realPosition->goal(); // match the position of group members if (std::next(it) != members.end()) - (*it)->m_sGroupData.pNextWindow = *std::next(it); + (*it)->m_groupData.pNextWindow = *std::next(it); else - (*it)->m_sGroupData.pNextWindow = members[0]; + (*it)->m_groupData.pNextWindow = members[0]; } - members[0]->m_sGroupData.head = true; - members[0]->m_sGroupData.locked = WASLOCKED; + members[0]->m_groupData.head = true; + members[0]->m_groupData.locked = WASLOCKED; } else g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pDraggedWindow); - pDraggedWindow->m_bIsFloating = pWindowInsertAfter->m_bIsFloating; // match the floating state of the window + pDraggedWindow->m_isFloating = pWindowInsertAfter->m_isFloating; // match the floating state of the window pWindowInsertAfter->insertWindowToGroup(pDraggedWindow); if (WINDOWINDEX == -1) - std::swap(pDraggedHead->m_sGroupData.head, pWindowInsertEnd->m_sGroupData.head); + std::swap(pDraggedHead->m_groupData.head, pWindowInsertEnd->m_groupData.head); m_pWindow->setGroupCurrent(pDraggedWindow); pDraggedWindow->applyGroupRules(); @@ -533,7 +533,7 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo if (!g_pCompositor->isWindowActive(pWindow) && *PFOLLOWMOUSE != 3) g_pCompositor->focusWindow(pWindow); - if (pWindow->m_bIsFloating) + if (pWindow->m_isFloating) g_pCompositor->changeWindowZOrder(pWindow, true); return true; @@ -542,11 +542,11 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo bool CHyprGroupBarDecoration::onScrollOnDeco(const Vector2D& pos, const IPointer::SAxisEvent e) { static auto PGROUPBARSCROLLING = CConfigValue("group:groupbar:scrolling"); - if (!*PGROUPBARSCROLLING || m_pWindow->m_sGroupData.pNextWindow.expired()) + if (!*PGROUPBARSCROLLING || m_pWindow->m_groupData.pNextWindow.expired()) return false; if (e.delta > 0) - m_pWindow->setGroupCurrent(m_pWindow->m_sGroupData.pNextWindow.lock()); + m_pWindow->setGroupCurrent(m_pWindow->m_groupData.pNextWindow.lock()); else m_pWindow->setGroupCurrent(m_pWindow->getGroupPrevious()); @@ -579,9 +579,9 @@ CBox CHyprGroupBarDecoration::assignedBoxGlobal() { CBox box = m_bAssignedBox; box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, m_pWindow.lock())); - const auto PWORKSPACE = m_pWindow->m_pWorkspace; + const auto PWORKSPACE = m_pWindow->m_workspace; - if (PWORKSPACE && !m_pWindow->m_bPinned) + if (PWORKSPACE && !m_pWindow->m_pinned) box.translate(PWORKSPACE->m_renderOffset->value()); return box.round(); diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp index b2d32ad0..cb70304f 100644 --- a/src/render/decorations/DecorationPositioner.cpp +++ b/src/render/decorations/DecorationPositioner.cpp @@ -91,8 +91,8 @@ void CDecorationPositioner::sanitizeDatas() { std::erase_if(m_vWindowPositioningDatas, [](const auto& other) { if (!validMapped(other->pWindow)) return true; - if (std::find_if(other->pWindow->m_dWindowDecorations.begin(), other->pWindow->m_dWindowDecorations.end(), - [&](const auto& el) { return el.get() == other->pDecoration; }) == other->pWindow->m_dWindowDecorations.end()) + if (std::find_if(other->pWindow->m_windowDecorations.begin(), other->pWindow->m_windowDecorations.end(), [&](const auto& el) { return el.get() == other->pDecoration; }) == + other->pWindow->m_windowDecorations.end()) return true; return false; }); @@ -123,13 +123,13 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { // std::vector datas; // reserve to avoid reallocations - datas.reserve(pWindow->m_dWindowDecorations.size()); + datas.reserve(pWindow->m_windowDecorations.size()); - for (auto const& wd : pWindow->m_dWindowDecorations) { + for (auto const& wd : pWindow->m_windowDecorations) { datas.push_back(getDataFor(wd.get(), pWindow)); } - if (WINDOWDATA->lastWindowSize == pWindow->m_vRealSize->value() /* position not changed */ + if (WINDOWDATA->lastWindowSize == pWindow->m_realSize->value() /* position not changed */ && std::all_of(m_vWindowPositioningDatas.begin(), m_vWindowPositioningDatas.end(), [pWindow](const auto& data) { return pWindow != data->pWindow.lock() || !data->needsReposition; }) /* all window datas are either not for this window or don't need a reposition */ @@ -141,9 +141,9 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { wd->positioningInfo = wd->pDecoration->getPositioningInfo(); } - WINDOWDATA->lastWindowSize = pWindow->m_vRealSize->value(); + WINDOWDATA->lastWindowSize = pWindow->m_realSize->value(); WINDOWDATA->needsRecalc = false; - const bool EPHEMERAL = pWindow->m_vRealSize->isBeingAnimated(); + const bool EPHEMERAL = pWindow->m_realSize->isBeingAnimated(); std::sort(datas.begin(), datas.end(), [](const auto& a, const auto& b) { return a->positioningInfo.priority > b->positioningInfo.priority; }); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 16d94785..6a56eea8 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -241,7 +241,7 @@ void CRenderPass::renderDebugData() { renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); renderHLSurface(debugData.pointerFocusText, g_pSeatManager->state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); if (g_pCompositor->m_lastWindow) - renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_pWLSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); + renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); if (g_pSeatManager->state.pointerFocus) { if (g_pSeatManager->state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->state.pointerFocus->current.size}).getExtents().size() != diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index 252c0924..c47c76ce 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -75,7 +75,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->scale) != data.pMonitor->scale /* Fractional */ && data.surface->current.scale == 1 /* fs protocol */ && windowBox.size() != data.surface->current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, data.surface->current.bufferSize.x, 3) && DELTALESSTHAN(windowBox.height, data.surface->current.bufferSize.y, 3) /* off by one-or-two */ && - (!data.pWindow || (!data.pWindow->m_vRealSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; + (!data.pWindow || (!data.pWindow->m_realSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; if (data.surface->colorManagement.valid()) Debug::log(TRACE, "FIXME: rendering surface with color management enabled, should apply necessary transformations"); @@ -103,7 +103,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { roundingPower = 2.0f; } - const bool WINDOWOPAQUE = data.pWindow && data.pWindow->m_pWLSurface->resource() == data.surface ? data.pWindow->opaque() : false; + const bool WINDOWOPAQUE = data.pWindow && data.pWindow->m_wlSurface->resource() == data.surface ? data.pWindow->opaque() : false; const bool CANDISABLEBLEND = ALPHA >= 1.f && OVERALL_ALPHA >= 1.f && rounding == 0 && WINDOWOPAQUE; if (CANDISABLEBLEND) @@ -153,8 +153,8 @@ CBox CSurfacePassElement::getTexBox() { if (!INTERACTIVERESIZEINPROGRESS) { windowBox.translate(CORRECT); - windowBox.width = SIZE.x * (PWINDOW->m_vRealSize->value().x / PWINDOW->m_vReportedSize.x); - windowBox.height = SIZE.y * (PWINDOW->m_vRealSize->value().y / PWINDOW->m_vReportedSize.y); + windowBox.width = SIZE.x * (PWINDOW->m_realSize->value().x / PWINDOW->m_reportedSize.x); + windowBox.height = SIZE.y * (PWINDOW->m_realSize->value().y / PWINDOW->m_reportedSize.y); } else { windowBox.width = SIZE.x; windowBox.height = SIZE.y; @@ -164,10 +164,10 @@ CBox CSurfacePassElement::getTexBox() { } else { // here we clamp to 2, these might be some tiny specks windowBox = {(int)outputX + data.pos.x + data.localPos.x, (int)outputY + data.pos.y + data.localPos.y, std::max((float)data.surface->current.size.x, 2.F), std::max((float)data.surface->current.size.y, 2.F)}; - if (data.pWindow && data.pWindow->m_vRealSize->isBeingAnimated() && data.surface && !data.mainSurface && data.squishOversized /* subsurface */) { + if (data.pWindow && data.pWindow->m_realSize->isBeingAnimated() && data.surface && !data.mainSurface && data.squishOversized /* subsurface */) { // adjust subsurfaces to the window - windowBox.width = (windowBox.width / data.pWindow->m_vReportedSize.x) * data.pWindow->m_vRealSize->value().x; - windowBox.height = (windowBox.height / data.pWindow->m_vReportedSize.y) * data.pWindow->m_vRealSize->value().y; + windowBox.width = (windowBox.width / data.pWindow->m_reportedSize.x) * data.pWindow->m_realSize->value().x; + windowBox.height = (windowBox.height / data.pWindow->m_reportedSize.y) * data.pWindow->m_realSize->value().y; } } diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index f0fad928..613ec5f9 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -46,7 +46,7 @@ void CXWM::handleCreate(xcb_create_notify_event_t* e) { const auto WINDOW = CWindow::create(XSURF); g_pCompositor->m_windows.emplace_back(WINDOW); - WINDOW->m_pSelf = WINDOW; + WINDOW->m_self = WINDOW; Debug::log(LOG, "[xwm] New XWayland window at {:x} for surf {:x}", (uintptr_t)WINDOW.get(), (uintptr_t)XSURF.get()); } @@ -1000,7 +1000,7 @@ void CXWM::activateSurface(SP surf, bool activate) { if ((surf == focusedSurface && activate) || (surf && surf->overrideRedirect)) return; - if (!surf || (!activate && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_bIsX11)) { + if (!surf || (!activate && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_isX11)) { setActiveWindow((uint32_t)XCB_WINDOW_NONE); focusWindow(nullptr); } else { diff --git a/src/xwayland/XWayland.cpp b/src/xwayland/XWayland.cpp index 041cf87c..1f78231f 100644 --- a/src/xwayland/XWayland.cpp +++ b/src/xwayland/XWayland.cpp @@ -9,7 +9,7 @@ CXWayland::CXWayland(const bool wantsEnabled) { if (!wantsEnabled) { Debug::log(LOG, "XWayland has been disabled, cleaning up..."); for (auto& w : g_pCompositor->m_windows) { - if (!w->m_bIsX11) + if (!w->m_isX11) continue; g_pCompositor->closeWindow(w); } From 5bd7ff884dc613ad22ecd227d41ce6ad7ee336df Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:59:43 +0200 Subject: [PATCH 0113/1077] permissions: add perms for plugin loading (#10184) Adds permission management for loading plugins --------- Co-authored-by: Jan Beich --- example/hyprland.conf | 1 + hyprpm/src/core/HyprlandSocket.cpp | 85 +++++++++++ hyprpm/src/core/HyprlandSocket.hpp | 7 + hyprpm/src/core/PluginManager.cpp | 13 +- src/config/ConfigManager.cpp | 13 +- src/config/defaultConfig.hpp | 1 + src/debug/HyprCtl.cpp | 91 +++++++++--- src/debug/HyprCtl.hpp | 8 +- .../permissions/DynamicPermissionManager.cpp | 132 ++++++++++++++++-- .../permissions/DynamicPermissionManager.hpp | 10 +- src/plugins/PluginSystem.cpp | 117 ++++++++++++---- src/plugins/PluginSystem.hpp | 29 ++-- 12 files changed, 416 insertions(+), 91 deletions(-) create mode 100644 hyprpm/src/core/HyprlandSocket.cpp create mode 100644 hyprpm/src/core/HyprlandSocket.hpp diff --git a/example/hyprland.conf b/example/hyprland.conf index e21b7844..b1240c71 100644 --- a/example/hyprland.conf +++ b/example/hyprland.conf @@ -64,6 +64,7 @@ env = HYPRCURSOR_SIZE,24 # permission = /usr/(bin|local/bin)/grim, screencopy, allow # permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow +# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow ##################### diff --git a/hyprpm/src/core/HyprlandSocket.cpp b/hyprpm/src/core/HyprlandSocket.cpp new file mode 100644 index 00000000..4d86192c --- /dev/null +++ b/hyprpm/src/core/HyprlandSocket.cpp @@ -0,0 +1,85 @@ +#include "HyprlandSocket.hpp" +#include +#include +#include "../helpers/StringUtils.hpp" +#include +#include +#include + +static int getUID() { + const auto UID = getuid(); + const auto PWUID = getpwuid(UID); + return PWUID ? PWUID->pw_uid : UID; +} + +static std::string getRuntimeDir() { + const auto XDG = getenv("XDG_RUNTIME_DIR"); + + if (!XDG) { + const std::string USERID = std::to_string(getUID()); + return "/run/user/" + USERID + "/hypr"; + } + + return std::string{XDG} + "/hypr"; +} + +std::string NHyprlandSocket::send(const std::string& cmd) { + const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0); + + if (SERVERSOCKET < 0) { + std::println("{}", failureString("Couldn't open a socket (1)")); + return ""; + } + + const auto HIS = getenv("HYPRLAND_INSTANCE_SIGNATURE"); + + if (!HIS) { + std::println("{}", failureString("HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?) (3)")); + return ""; + } + + sockaddr_un serverAddress = {0}; + serverAddress.sun_family = AF_UNIX; + + std::string socketPath = getRuntimeDir() + "/" + HIS + "/.socket.sock"; + + strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1); + + if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) { + std::println("{}", failureString("Couldn't connect to " + socketPath + ". (4)")); + return ""; + } + + auto sizeWritten = write(SERVERSOCKET, cmd.c_str(), cmd.length()); + + if (sizeWritten < 0) { + std::println("{}", failureString("Couldn't write (5)")); + return ""; + } + + std::string reply = ""; + constexpr size_t BUFFER_SIZE = 8192; + char buffer[BUFFER_SIZE] = {0}; + + sizeWritten = read(SERVERSOCKET, buffer, BUFFER_SIZE); + + if (sizeWritten < 0) { + std::println("{}", failureString("Couldn't read (6)")); + return ""; + } + + reply += std::string(buffer, sizeWritten); + + while (sizeWritten == BUFFER_SIZE) { + sizeWritten = read(SERVERSOCKET, buffer, BUFFER_SIZE); + if (sizeWritten < 0) { + std::println("{}", failureString("Couldn't read (7)")); + return ""; + } + reply += std::string(buffer, sizeWritten); + } + + close(SERVERSOCKET); + + return reply; +} diff --git a/hyprpm/src/core/HyprlandSocket.hpp b/hyprpm/src/core/HyprlandSocket.hpp new file mode 100644 index 00000000..e33be5ca --- /dev/null +++ b/hyprpm/src/core/HyprlandSocket.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include + +namespace NHyprlandSocket { + std::string send(const std::string& cmd); +}; \ No newline at end of file diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 22954996..ee7d8e8f 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -4,6 +4,7 @@ #include "../progress/CProgressBar.hpp" #include "Manifest.hpp" #include "DataState.hpp" +#include "HyprlandSocket.hpp" #include #include @@ -66,7 +67,7 @@ SHyprlandVersion CPluginManager::getHyprlandVersion(bool running) { else onceInstalled = true; - const auto HLVERCALL = running ? execAndGet("hyprctl version") : execAndGet("Hyprland --version"); + const auto HLVERCALL = running ? NHyprlandSocket::send("/version") : execAndGet("Hyprland --version"); if (m_bVerbose) std::println("{}", verboseString("{} version returned: {}", running ? "running" : "installed", HLVERCALL)); @@ -797,9 +798,9 @@ ePluginLoadStateReturn CPluginManager::ensurePluginsLoadState(bool forceReload) } const auto HYPRPMPATH = DataState::getDataStatePath(); - const auto json = glz::read_json(execAndGet("hyprctl plugins list -j")); + const auto json = glz::read_json(NHyprlandSocket::send("j/plugins list")); if (!json) { - std::println(stderr, "PluginManager: couldn't parse hyprctl output"); + std::println(stderr, "PluginManager: couldn't parse plugin list output"); return LOADSTATE_FAIL; } @@ -888,9 +889,9 @@ bool CPluginManager::loadUnloadPlugin(const std::string& path, bool load) { } if (load) - execAndGet("hyprctl plugin load " + path); + NHyprlandSocket::send("/plugin load " + path); else - execAndGet("hyprctl plugin unload " + path); + NHyprlandSocket::send("/plugin unload " + path); return true; } @@ -915,7 +916,7 @@ void CPluginManager::listAllPlugins() { } void CPluginManager::notify(const eNotifyIcons icon, uint32_t color, int durationMs, const std::string& message) { - execAndGet("hyprctl notify " + std::to_string((int)icon) + " " + std::to_string(durationMs) + " " + std::to_string(color) + " " + message); + NHyprlandSocket::send("/notify " + std::to_string((int)icon) + " " + std::to_string(durationMs) + " " + std::to_string(color) + " " + message); } std::string CPluginManager::headerError(const eHeadersErrors err) { diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 26b14dda..790e8484 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1789,18 +1789,7 @@ void CConfigManager::handlePluginLoads() { return; bool pluginsChanged = false; - auto failedPlugins = g_pPluginSystem->updateConfigPlugins(m_declaredPlugins, pluginsChanged); - - if (!failedPlugins.empty()) { - std::stringstream error; - error << "Failed to load the following plugins:"; - - for (const auto& path : failedPlugins) { - error << "\n" << path; - } - - g_pHyprError->queueCreate(error.str(), CHyprColor(1.0, 50.0 / 255.0, 50.0 / 255.0, 1.0)); - } + g_pPluginSystem->updateConfigPlugins(m_declaredPlugins, pluginsChanged); if (pluginsChanged) { g_pHyprError->destroy(); diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp index 01ad1e72..22fc9f00 100644 --- a/src/config/defaultConfig.hpp +++ b/src/config/defaultConfig.hpp @@ -77,6 +77,7 @@ env = HYPRCURSOR_SIZE,24 # permission = /usr/(bin|local/bin)/grim, screencopy, allow # permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow +# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow ##################### diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 762f5d84..49325887 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -24,6 +25,7 @@ #include #include +#include using namespace Hyprutils::String; using namespace Hyprutils::OS; #include @@ -53,6 +55,28 @@ using namespace Hyprutils::OS; #include "../render/Renderer.hpp" #include "../render/OpenGL.hpp" +#if defined(__DragonFly__) || defined(__FreeBSD__) +#include +#define CRED_T xucred +#define CRED_LVL SOL_LOCAL +#define CRED_OPT LOCAL_PEERCRED +#define CRED_PID cr_pid +#elif defined(__NetBSD__) +#define CRED_T unpcbid +#define CRED_LVL SOL_LOCAL +#define CRED_OPT LOCAL_PEEREID +#define CRED_PID unp_pid +#else +#if defined(__OpenBSD__) +#define CRED_T sockpeercred +#else +#define CRED_T ucred +#endif +#define CRED_LVL SOL_SOCKET +#define CRED_OPT SO_PEERCRED +#define CRED_PID pid +#endif + static void trimTrailingComma(std::string& str) { if (!str.empty() && str.back() == ',') str.pop_back(); @@ -1480,10 +1504,18 @@ static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string reque if (vars.size() < 3) return "not enough args"; - const auto PLUGIN = g_pPluginSystem->loadPlugin(PATH); + g_pHyprCtl->m_currentRequestParams.pendingPromise = CPromise::make([PATH](SP> resolver) { + g_pPluginSystem->loadPlugin(PATH)->then([resolver, PATH](SP> result) { + if (result->hasError()) { + resolver->reject(result->error()); + return; + } - if (!PLUGIN) - return "error in loading plugin, last error: " + g_pPluginSystem->m_szLastError; + resolver->resolve("ok"); + }); + }); + + return "ok"; } else if (OPERATION == "unload") { if (vars.size() < 3) return "not enough args"; @@ -1712,9 +1744,10 @@ void CHyprCtl::unregisterCommand(const SP& cmd) { } std::string CHyprCtl::getReply(std::string request) { - auto format = eHyprCtlOutputFormat::FORMAT_NORMAL; - bool reloadAll = false; - m_currentRequestParams = {}; + auto format = eHyprCtlOutputFormat::FORMAT_NORMAL; + bool reloadAll = false; + m_currentRequestParams.all = false; + m_currentRequestParams.sysInfoConfig = false; // process flags for non-batch requests if (!request.starts_with("[[BATCH]]") && request.contains("/")) { @@ -1867,6 +1900,16 @@ static int hyprCtlFDTick(int fd, uint32_t mask, void* data) { std::array readBuffer; + // try to get creds + CRED_T creds; + uint32_t len = sizeof(creds); + if (getsockopt(ACCEPTEDCONNECTION, CRED_LVL, CRED_OPT, &creds, &len) == -1) + Debug::log(ERR, "Hyprctl: failed to get peer creds"); + else { + g_pHyprCtl->m_currentRequestParams.pid = creds.CRED_PID; + Debug::log(LOG, "Hyprctl: new connection from pid {}", creds.CRED_PID); + } + // pollfd pollfds[1] = { { @@ -1903,18 +1946,34 @@ static int hyprCtlFDTick(int fd, uint32_t mask, void* data) { reply = "Err: " + std::string(e.what()); } - successWrite(ACCEPTEDCONNECTION, reply); + if (g_pHyprCtl->m_currentRequestParams.pendingPromise) { + // we have a promise pending + g_pHyprCtl->m_currentRequestParams.pendingPromise->then([ACCEPTEDCONNECTION, request](SP> result) { + const auto RES = result->hasError() ? result->error() : result->result(); + successWrite(ACCEPTEDCONNECTION, RES); - if (isFollowUpRollingLogRequest(request)) { - Debug::log(LOG, "Followup rollinglog request received. Starting thread to write to socket."); - Debug::SRollingLogFollow::get().startFor(ACCEPTEDCONNECTION); - runWritingDebugLogThread(ACCEPTEDCONNECTION); - Debug::log(LOG, Debug::SRollingLogFollow::get().debugInfo()); - } else - close(ACCEPTEDCONNECTION); + // No rollinglog or ensureMonitor here. These are only for plugins for now. - if (g_pConfigManager->m_wantsMonitorReload) - g_pConfigManager->ensureMonitorStatus(); + close(ACCEPTEDCONNECTION); + }); + + g_pHyprCtl->m_currentRequestParams.pendingPromise.reset(); + } else { + successWrite(ACCEPTEDCONNECTION, reply); + + if (isFollowUpRollingLogRequest(request)) { + Debug::log(LOG, "Followup rollinglog request received. Starting thread to write to socket."); + Debug::SRollingLogFollow::get().startFor(ACCEPTEDCONNECTION); + runWritingDebugLogThread(ACCEPTEDCONNECTION); + Debug::log(LOG, Debug::SRollingLogFollow::get().debugInfo()); + } else + close(ACCEPTEDCONNECTION); + + if (g_pConfigManager->m_wantsMonitorReload) + g_pConfigManager->ensureMonitorStatus(); + + g_pHyprCtl->m_currentRequestParams.pid = 0; + } return 0; } diff --git a/src/debug/HyprCtl.hpp b/src/debug/HyprCtl.hpp index a62dd665..b4f3d690 100644 --- a/src/debug/HyprCtl.hpp +++ b/src/debug/HyprCtl.hpp @@ -2,8 +2,10 @@ #include #include "../helpers/MiscFunctions.hpp" +#include "../helpers/defer/Promise.hpp" #include "../desktop/Window.hpp" #include +#include #include // exposed for main.cpp @@ -23,8 +25,10 @@ class CHyprCtl { Hyprutils::OS::CFileDescriptor m_socketFD; struct { - bool all = false; - bool sysInfoConfig = false; + bool all = false; + bool sysInfoConfig = false; + pid_t pid = 0; + SP> pendingPromise; } m_currentRequestParams; static std::string getWindowData(PHLWINDOW w, eHyprCtlOutputFormat format); diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp index c23f1fdb..e111343e 100644 --- a/src/managers/permissions/DynamicPermissionManager.cpp +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -7,6 +7,9 @@ #include "../../Compositor.hpp" #include "../../config/ConfigValue.hpp" +#include +using namespace Hyprutils::String; + #if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) #include #endif @@ -64,10 +67,7 @@ static const char* permissionToHumanString(eDynamicPermissionType type) { return "error"; } -static std::expected binaryNameForWlClient(wl_client* client) { - pid_t pid = 0; - wl_client_get_credentials(client, &pid, nullptr, nullptr); - +static std::expected binaryNameForPid(pid_t pid) { if (pid <= 0) return std::unexpected("No pid for client"); @@ -102,6 +102,13 @@ static std::expected binaryNameForWlClient(wl_client* return fullPath; } +static std::expected binaryNameForWlClient(wl_client* client) { + pid_t pid = 0; + wl_client_get_credentials(client, &pid, nullptr, nullptr); + + return binaryNameForPid(pid); +} + void CDynamicPermissionManager::clearConfigPermissions() { std::erase_if(m_rules, [](const auto& e) { return e->m_source == PERMISSION_RULE_SOURCE_CONFIG; }); } @@ -183,22 +190,99 @@ eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionMode(wl_c return PERMISSION_RULE_ALLOW_MODE_PENDING; } -void CDynamicPermissionManager::askForPermission(wl_client* client, const std::string& binaryPath, eDynamicPermissionType type) { - auto rule = m_rules.emplace_back(SP(new CDynamicPermissionRule(client, type, PERMISSION_RULE_ALLOW_MODE_PENDING))); +eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionModeWithString(pid_t pid, const std::string& str, eDynamicPermissionType permission) { + static auto PPERM = CConfigValue("ecosystem:enforce_permissions"); + + if (*PPERM == 0) + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + + const auto LOOKUP = binaryNameForPid(pid); + + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: checking permission {} for key {} (binary {})", permissionToString(permission), str, + LOOKUP.has_value() ? LOOKUP.value() : "lookup failed: " + LOOKUP.error()); + + // first, check if we have the client + perm combo in our cache. + auto it = std::ranges::find_if(m_rules, [str, permission, pid](const auto& e) { return e->m_keyString == str && pid && pid == e->m_pid && e->m_type == permission; }); + if (it == m_rules.end()) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission not cached, checking key"); + + it = std::ranges::find_if(m_rules, [key = str, permission, &LOOKUP](const auto& e) { + if (e->m_type != permission) + return false; // wrong perm + + if (!e->m_binaryRegex) + return false; // no regex + + // regex match + if (RE2::FullMatch(key, *e->m_binaryRegex) || (LOOKUP.has_value() && RE2::FullMatch(LOOKUP.value(), *e->m_binaryRegex))) + return true; + + return false; + }); + + if (it == m_rules.end()) + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: no rule for key"); + else { + if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission allowed by config rule"); + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_DENY) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission denied by config rule"); + return PERMISSION_RULE_ALLOW_MODE_DENY; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_PENDING) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission pending by config rule"); + return PERMISSION_RULE_ALLOW_MODE_PENDING; + } else + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission ask by config rule"); + } + + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_ALLOW) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission allowed before by user"); + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_DENY) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission denied before by user"); + return PERMISSION_RULE_ALLOW_MODE_DENY; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_PENDING) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission pending before by user"); + return PERMISSION_RULE_ALLOW_MODE_PENDING; + } + + // if we are here, we need to ask. + askForPermission(nullptr, str, permission, pid); + + return PERMISSION_RULE_ALLOW_MODE_PENDING; +} + +void CDynamicPermissionManager::askForPermission(wl_client* client, const std::string& binaryPath, eDynamicPermissionType type, pid_t pid) { + auto rule = m_rules.emplace_back(SP(new CDynamicPermissionRule(client, type, PERMISSION_RULE_ALLOW_MODE_PENDING))); + + if (!client) + rule->m_keyString = binaryPath; + + rule->m_pid = pid; std::string description = ""; if (binaryPath.empty()) description = std::format("An unknown application (wayland client ID 0x{:x}) is {}.", (uintptr_t)client, permissionToHumanString(type)); - else { + else if (client) { std::string binaryName = binaryPath.contains("/") ? binaryPath.substr(binaryPath.find_last_of('/') + 1) : binaryPath; description = std::format("An application {} ({}) is {}.", binaryName, binaryPath, permissionToHumanString(type)); - } + } else if (pid >= 0) { + if (type == PERMISSION_TYPE_PLUGIN) { + const auto LOOKUP = binaryNameForPid(pid); + description = std::format("An application {} is {}:
{}", LOOKUP.value_or("Unknown"), permissionToHumanString(type), binaryPath); + } else { + const auto LOOKUP = binaryNameForPid(pid); + description = std::format("An application {} ({}) is {}.", LOOKUP.value_or("Unknown"), binaryPath, permissionToHumanString(type)); + } + } else + description = std::format("An application is {}:
{}", permissionToHumanString(type), binaryPath); description += "

Do you want to allow this?"; std::vector options; - if (!binaryPath.empty()) { + if (!binaryPath.empty() && client) { description += "

Hint: you can set persistent rules for these in the Hyprland config file."; options = {"Deny", "Allow and remember app", "Allow once"}; } else @@ -250,7 +334,35 @@ void CDynamicPermissionManager::askForPermission(wl_client* client, const std::s } SP> CDynamicPermissionManager::promiseFor(wl_client* client, eDynamicPermissionType permission) { - auto rule = std::ranges::find_if(m_rules, [client, permission](const auto& e) { return e->m_client == client && e->m_type == permission; }); + auto rule = std::ranges::find_if(m_rules, [&client, &permission](const auto& e) { return e->m_client == client && e->m_type == permission; }); + if (rule == m_rules.end()) + return nullptr; + + if (!(*rule)->m_promise) + return nullptr; + + if ((*rule)->m_promiseResolverForExternal) + return nullptr; + + return CPromise::make([rule](SP> r) { (*rule)->m_promiseResolverForExternal = r; }); +} + +SP> CDynamicPermissionManager::promiseFor(const std::string& key, eDynamicPermissionType permission) { + auto rule = std::ranges::find_if(m_rules, [&key, &permission](const auto& e) { return e->m_keyString == key && e->m_type == permission; }); + if (rule == m_rules.end()) + return nullptr; + + if (!(*rule)->m_promise) + return nullptr; + + if ((*rule)->m_promiseResolverForExternal) + return nullptr; + + return CPromise::make([rule](SP> r) { (*rule)->m_promiseResolverForExternal = r; }); +} + +SP> CDynamicPermissionManager::promiseFor(pid_t pid, const std::string& key, eDynamicPermissionType permission) { + auto rule = std::ranges::find_if(m_rules, [&pid, &permission, &key](const auto& e) { return e->m_pid == pid && e->m_keyString == key && e->m_type == permission; }); if (rule == m_rules.end()) return nullptr; diff --git a/src/managers/permissions/DynamicPermissionManager.hpp b/src/managers/permissions/DynamicPermissionManager.hpp index 79dc56a6..f8cfe3ad 100644 --- a/src/managers/permissions/DynamicPermissionManager.hpp +++ b/src/managers/permissions/DynamicPermissionManager.hpp @@ -5,6 +5,7 @@ #include "../../helpers/AsyncDialogBox.hpp" #include #include +#include #include "../../helpers/defer/Promise.hpp" // NOLINTNEXTLINE @@ -56,6 +57,8 @@ class CDynamicPermissionRule { wl_client* const m_client = nullptr; std::string m_binaryPath = ""; UP m_binaryRegex; + std::string m_keyString = ""; + pid_t m_pid = 0; eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; SP m_dialogBox; // for pending @@ -76,14 +79,19 @@ class CDynamicPermissionManager { // (will continue returning false if the user does not agree, of course.) eDynamicPermissionAllowMode clientPermissionMode(wl_client* client, eDynamicPermissionType permission); + // for plugins for now. Pid 0 means unknown + eDynamicPermissionAllowMode clientPermissionModeWithString(pid_t pid, const std::string& str, eDynamicPermissionType permission); + // get a promise for the result. Returns null if there already was one requested for the client. // Returns null if state is not pending SP> promiseFor(wl_client* client, eDynamicPermissionType permission); + SP> promiseFor(const std::string& str, eDynamicPermissionType permission); + SP> promiseFor(pid_t pid, const std::string& key, eDynamicPermissionType permission); void removeRulesForClient(wl_client* client); private: - void askForPermission(wl_client* client, const std::string& binaryName, eDynamicPermissionType type); + void askForPermission(wl_client* client, const std::string& binaryName, eDynamicPermissionType type, pid_t pid = 0); // std::vector> m_rules; diff --git a/src/plugins/PluginSystem.cpp b/src/plugins/PluginSystem.cpp index 87b9e8ef..2bed8dbd 100644 --- a/src/plugins/PluginSystem.cpp +++ b/src/plugins/PluginSystem.cpp @@ -3,22 +3,75 @@ #include #include #include "../config/ConfigManager.hpp" +#include "../debug/HyprCtl.hpp" #include "../managers/LayoutManager.hpp" #include "../managers/HookSystemManager.hpp" #include "../managers/eventLoop/EventLoopManager.hpp" +#include "../managers/permissions/DynamicPermissionManager.hpp" +#include "../debug/HyprNotificationOverlay.hpp" CPluginSystem::CPluginSystem() { g_pFunctionHookSystem = makeUnique(); } -CPlugin* CPluginSystem::loadPlugin(const std::string& path) { +SP> CPluginSystem::loadPlugin(const std::string& path) { - m_szLastError = ""; + pid_t pid = 0; + if (g_pHyprCtl->m_currentRequestParams.pid > 0) + pid = g_pHyprCtl->m_currentRequestParams.pid; + + return CPromise::make([path, pid, this](SP> resolver) { + const auto PERM = g_pDynamicPermissionManager->clientPermissionModeWithString(pid, path, PERMISSION_TYPE_PLUGIN); + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) { + Debug::log(LOG, "CPluginSystem: Waiting for user confirmation to load {}", path); + + auto promise = g_pDynamicPermissionManager->promiseFor(pid, path, PERMISSION_TYPE_PLUGIN); + if (!promise) { // already awaiting or something? + resolver->reject("Failed to get a promise for permission"); + return; + } + + promise->then([this, path, resolver](SP> result) { + if (result->hasError()) { + Debug::log(ERR, "CPluginSystem: Error spawning permission prompt"); + resolver->reject("Error spawning permission prompt"); + return; + } + + if (result->result() != PERMISSION_RULE_ALLOW_MODE_ALLOW) { + Debug::log(ERR, "CPluginSystem: Rejecting plugin load of {}, user denied", path); + resolver->reject("user denied"); + return; + } + + Debug::log(LOG, "CPluginSystem: Loading {}, user allowed", path); + + const auto RESULT = loadPluginInternal(path); + if (RESULT.has_value()) + resolver->resolve(RESULT.value()); + else + resolver->reject(RESULT.error()); + }); + return; + } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { + Debug::log(LOG, "CPluginSystem: Rejecting plugin load, permission is disabled"); + resolver->reject("permission is disabled"); + return; + } + + const auto RESULT = loadPluginInternal(path); + if (RESULT.has_value()) + resolver->resolve(RESULT.value()); + else + resolver->reject(RESULT.error()); + }); +} + +std::expected CPluginSystem::loadPluginInternal(const std::string& path) { if (getPluginByPath(path)) { - m_szLastError = "Cannot load a plugin twice!"; Debug::log(ERR, " [PluginSystem] Cannot load a plugin twice!"); - return nullptr; + return std::unexpected("Cannot load a plugin twice!"); } auto* const PLUGIN = m_vLoadedPlugins.emplace_back(makeUnique()).get(); @@ -29,10 +82,9 @@ CPlugin* CPluginSystem::loadPlugin(const std::string& path) { if (!MODULE) { std::string strerr = dlerror(); - m_szLastError = std::format("Plugin {} could not be loaded: {}", path, strerr); Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded: {}", path, strerr); m_vLoadedPlugins.pop_back(); - return nullptr; + return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, strerr)); } PLUGIN->m_pHandle = MODULE; @@ -41,21 +93,19 @@ CPlugin* CPluginSystem::loadPlugin(const std::string& path) { PPLUGIN_INIT_FUNC initFunc = (PPLUGIN_INIT_FUNC)dlsym(MODULE, PLUGIN_INIT_FUNC_STR); if (!apiVerFunc || !initFunc) { - m_szLastError = std::format("Plugin {} could not be loaded: {}", path, "missing apiver/init func"); Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded. (No apiver/init func)", path); dlclose(MODULE); m_vLoadedPlugins.pop_back(); - return nullptr; + return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, "missing apiver/init func")); } const std::string PLUGINAPIVER = apiVerFunc(); if (PLUGINAPIVER != HYPRLAND_API_VERSION) { - m_szLastError = std::format("Plugin {} could not be loaded: {}", path, "API version mismatch"); Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded. (API version mismatch)", path); dlclose(MODULE); m_vLoadedPlugins.pop_back(); - return nullptr; + return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, "API version mismatch")); } PLUGIN_DESCRIPTION_INFO PLUGINDATA; @@ -70,10 +120,9 @@ CPlugin* CPluginSystem::loadPlugin(const std::string& path) { } } catch (std::exception& e) { m_bAllowConfigVars = false; - m_szLastError = std::format("Plugin {} could not be loaded: plugin crashed/threw in main: {}", path, e.what()); Debug::log(ERR, " [PluginSystem] Plugin {} (Handle {:x}) crashed in init. Unloading.", path, (uintptr_t)MODULE); unloadPlugin(PLUGIN, true); // Plugin could've already hooked/done something - return nullptr; + return std::unexpected(std::format("Plugin {} could not be loaded: plugin crashed/threw in main: {}", path, e.what())); } m_bAllowConfigVars = false; @@ -146,33 +195,39 @@ void CPluginSystem::unloadAllPlugins() { unloadPlugin(p.get(), false); // Unload remaining plugins gracefully } -std::vector CPluginSystem::updateConfigPlugins(const std::vector& plugins, bool& changed) { - std::vector failures; - +void CPluginSystem::updateConfigPlugins(const std::vector& plugins, bool& changed) { // unload all plugins that are no longer present for (auto const& p : m_vLoadedPlugins | std::views::reverse) { - if (p->m_bLoadedWithConfig && std::find(plugins.begin(), plugins.end(), p->path) == plugins.end()) { - Debug::log(LOG, "Unloading plugin {} which is no longer present in config", p->path); - unloadPlugin(p.get(), false); - changed = true; - } + if (!p->m_bLoadedWithConfig || std::ranges::find(plugins, p->path) != plugins.end()) + continue; + + Debug::log(LOG, "Unloading plugin {} which is no longer present in config", p->path); + unloadPlugin(p.get(), false); + changed = true; } // load all new plugins for (auto const& path : plugins) { - if (std::find_if(m_vLoadedPlugins.begin(), m_vLoadedPlugins.end(), [&](const auto& other) { return other->path == path; }) == m_vLoadedPlugins.end()) { - Debug::log(LOG, "Loading plugin {} which is now present in config", path); - const auto plugin = loadPlugin(path); + if (std::ranges::find_if(m_vLoadedPlugins, [&](const auto& other) { return other->path == path; }) != m_vLoadedPlugins.end()) + continue; - if (plugin) { - plugin->m_bLoadedWithConfig = true; - changed = true; - } else - failures.push_back(path); - } + Debug::log(LOG, "Loading plugin {} which is now present in config", path); + + changed = true; + + loadPlugin(path)->then([path](SP> result) { + if (result->hasError()) { + const auto NAME = path.contains('/') ? path.substr(path.find_last_of('/') + 1) : path; + Debug::log(ERR, "CPluginSystem::updateConfigPlugins: failed to load plugin {}: {}", NAME, result->error()); + g_pHyprNotificationOverlay->addNotification(std::format("Failed to load plugin {}: {}", NAME, result->error()), CHyprColor{0, 0, 0, 0}, 5000, ICON_ERROR); + return; + } + + result->result()->m_bLoadedWithConfig = true; + + Debug::log(LOG, "CPluginSystem::updateConfigPlugins: loaded {}", path); + }); } - - return failures; } CPlugin* CPluginSystem::getPluginByPath(const std::string& path) { diff --git a/src/plugins/PluginSystem.hpp b/src/plugins/PluginSystem.hpp index 95841bef..ba1dafc0 100644 --- a/src/plugins/PluginSystem.hpp +++ b/src/plugins/PluginSystem.hpp @@ -1,8 +1,10 @@ #pragma once #include "../defines.hpp" +#include "../helpers/defer/Promise.hpp" #include "PluginAPI.hpp" #include +#include class IHyprWindowDecoration; @@ -30,23 +32,24 @@ class CPluginSystem { public: CPluginSystem(); - CPlugin* loadPlugin(const std::string& path); - void unloadPlugin(const CPlugin* plugin, bool eject = false); - void unloadAllPlugins(); - std::vector updateConfigPlugins(const std::vector& plugins, bool& changed); - CPlugin* getPluginByPath(const std::string& path); - CPlugin* getPluginByHandle(HANDLE handle); - std::vector getAllPlugins(); - size_t pluginCount(); - void sigGetPlugins(CPlugin** data, size_t len); + SP> loadPlugin(const std::string& path); + void unloadPlugin(const CPlugin* plugin, bool eject = false); + void unloadAllPlugins(); + void updateConfigPlugins(const std::vector& plugins, bool& changed); + CPlugin* getPluginByPath(const std::string& path); + CPlugin* getPluginByHandle(HANDLE handle); + std::vector getAllPlugins(); + size_t pluginCount(); + void sigGetPlugins(CPlugin** data, size_t len); - bool m_bAllowConfigVars = false; - std::string m_szLastError = ""; + bool m_bAllowConfigVars = false; private: - std::vector> m_vLoadedPlugins; + std::vector> m_vLoadedPlugins; - jmp_buf m_jbPluginFaultJumpBuf; + jmp_buf m_jbPluginFaultJumpBuf; + + std::expected loadPluginInternal(const std::string& path); }; inline UP g_pPluginSystem; From b10a43dabc0d65a03a3a169ff292f0f18d9c6640 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 18:14:02 +0100 Subject: [PATCH 0114/1077] windowrules: add noclosefor fixes #10027 --- src/Compositor.cpp | 3 +-- src/desktop/Window.hpp | 3 +++ src/desktop/WindowRule.cpp | 8 +++++--- src/desktop/WindowRule.hpp | 3 ++- src/events/Windows.cpp | 6 ++++++ src/managers/KeybindManager.cpp | 6 ++++++ 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index be03edac..212e514b 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2547,9 +2547,8 @@ void CCompositor::warpCursorTo(const Vector2D& pos, bool force) { } void CCompositor::closeWindow(PHLWINDOW pWindow) { - if (pWindow && validMapped(pWindow)) { + if (pWindow && validMapped(pWindow)) g_pXWaylandManager->sendCloseWindow(pWindow); - } } PHLLS CCompositor::getLayerSurfaceFromSurface(SP pSurface) { diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 8a6590bd..cc62dd3b 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -311,6 +311,9 @@ class CWindow { // ANR PHLANIMVAR m_notRespondingTint; + // For the noclosefor windowrule + Time::steady_tp m_closeableSince = Time::steadyNow(); + // For the list lookup bool operator==(const CWindow& rhs) const { return m_xdgSurface == rhs.m_xdgSurface && m_xwaylandSurface == rhs.m_xwaylandSurface && m_position == rhs.m_position && m_size == rhs.m_size && diff --git a/src/desktop/WindowRule.cpp b/src/desktop/WindowRule.cpp index 245d1583..db1b0dde 100644 --- a/src/desktop/WindowRule.cpp +++ b/src/desktop/WindowRule.cpp @@ -8,9 +8,9 @@ static const auto RULES = std::unordered_set{ "float", "fullscreen", "maximize", "noinitialfocus", "pin", "stayfocused", "tile", "renderunfocused", "persistentsize", }; static const auto RULES_PREFIX = std::unordered_set{ - "animation", "bordercolor", "bordersize", "center", "content", "fullscreenstate", "group", "idleinhibit", "maxsize", "minsize", - "monitor", "move", "opacity", "plugin:", "prop", "pseudo", "rounding", "roundingpower", "scrollmouse", "scrolltouchpad", - "size", "suppressevent", "tag", "workspace", "xray", + "animation", "bordercolor", "bordersize", "center", "content", "fullscreenstate", "group", "idleinhibit", "maxsize", "minsize", "monitor", + "move", "noclosefor", "opacity", "plugin:", "prop", "pseudo", "rounding", "roundingpower", "scrollmouse", "scrolltouchpad", "size", + "suppressevent", "tag", "workspace", "xray", }; CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool isV2, bool isExecRule) : m_value(value), m_rule(rule), m_v2(isV2), m_execRule(isExecRule) { @@ -79,6 +79,8 @@ CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool m_ruleType = RULE_PROP; else if (rule.starts_with("content")) m_ruleType = RULE_CONTENT; + else if (rule.starts_with("noclosefor")) + m_ruleType = RULE_NOCLOSEFOR; else { // check if this is a prop. const CVarList VARS(rule, 0, 's', true); diff --git a/src/desktop/WindowRule.hpp b/src/desktop/WindowRule.hpp index 084c67f9..9af3909a 100644 --- a/src/desktop/WindowRule.hpp +++ b/src/desktop/WindowRule.hpp @@ -37,7 +37,8 @@ class CWindowRule { RULE_WORKSPACE, RULE_PROP, RULE_CONTENT, - RULE_PERSISTENTSIZE + RULE_PERSISTENTSIZE, + RULE_NOCLOSEFOR, }; eRuleType m_ruleType = RULE_INVALID; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 3cff2516..9e0d2be5 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -315,6 +315,12 @@ void Events::listener_mapWindow(void* owner, void* data) { } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } break; } + case CWindowRule::RULE_NOCLOSEFOR: { + const CVarList VARS(r->m_rule, 0, ' '); + try { + PWINDOW->m_closeableSince = Time::steadyNow() + std::chrono::milliseconds(std::stoull(VARS[1])); + } catch (std::exception& e) { Debug::log(ERR, "Rule \"{}\" failed with: {}", r->m_rule, e.what()); } + } default: break; } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index f30f65a1..7f0045e0 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1037,6 +1037,9 @@ SDispatchResult CKeybindManager::killActive(std::string args) { } SDispatchResult CKeybindManager::closeActive(std::string args) { + if (g_pCompositor->m_lastWindow && g_pCompositor->m_lastWindow->m_closeableSince > Time::steadyNow()) + return {.success = false, .error = "can't close window, it's not closeable yet (noclosefor)"}; + g_pCompositor->closeWindow(g_pCompositor->m_lastWindow.lock()); return {}; @@ -1050,6 +1053,9 @@ SDispatchResult CKeybindManager::closeWindow(std::string args) { return {.success = false, .error = "closeWindow: no window found"}; } + if (PWINDOW->m_closeableSince > Time::steadyNow()) + return {.success = false, .error = "can't close window, it's not closeable yet (noclosefor)"}; + g_pCompositor->closeWindow(PWINDOW); return {}; From 465e3d979d72da90ea4f715393a0d6d3098830b1 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 18:20:06 +0100 Subject: [PATCH 0115/1077] window: make AsyncDialogBoxes not closeable we don't want the user to accidentally close a popup for permissions or ANR. They can dismiss them by clicking an appropriate option. --- src/events/Windows.cpp | 6 ++++++ src/helpers/AsyncDialogBox.cpp | 9 +++++++++ src/helpers/AsyncDialogBox.hpp | 1 + 3 files changed, 16 insertions(+) diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 9e0d2be5..f476c6e8 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -2,6 +2,7 @@ #include "../Compositor.hpp" #include "../helpers/WLClasses.hpp" +#include "../helpers/AsyncDialogBox.hpp" #include "../managers/input/InputManager.hpp" #include "../managers/TokenManager.hpp" #include "../managers/SeatManager.hpp" @@ -327,6 +328,11 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->applyDynamicRule(r); } + // make it uncloseable if it's a Hyprland dialog + // TODO: make some closeable? + if (CAsyncDialogBox::isAsyncDialogBox(PWINDOW->getPID())) + PWINDOW->m_closeableSince = Time::steadyNow() + std::chrono::years(10 /* Should be enough, no? */); + // disallow tiled pinned if (PWINDOW->m_pinned && !PWINDOW->m_isFloating) PWINDOW->m_pinned = false; diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 86eb9e1f..6cda0d44 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -6,6 +6,9 @@ using namespace Hyprutils::OS; +static std::vector asyncDialogBoxes; + +// SP CAsyncDialogBox::create(const std::string& title, const std::string& description, std::vector buttons) { if (!NFsUtils::executableExistsInPath("hyprland-dialog")) { Debug::log(ERR, "CAsyncDialogBox: cannot create, no hyprland-dialog"); @@ -19,6 +22,10 @@ SP CAsyncDialogBox::create(const std::string& title, const std: return dialog; } +bool CAsyncDialogBox::isAsyncDialogBox(pid_t pid) { + return std::ranges::contains(asyncDialogBoxes, pid); +} + CAsyncDialogBox::CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons) : m_title(title), m_description(description), m_buttons(buttons) { ; @@ -60,6 +67,7 @@ void CAsyncDialogBox::onWrite(int fd, uint32_t mask) { Debug::log(LOG, "CAsyncDialogBox: dialog {:x} hung up, closed."); m_promiseResolver->resolve(m_stdout); + std::erase(asyncDialogBoxes, m_dialogPid); wl_event_source_remove(m_readEventSource); m_selfReference.reset(); @@ -103,6 +111,7 @@ SP> CAsyncDialogBox::open() { } m_dialogPid = proc.pid(); + asyncDialogBoxes.emplace_back(m_dialogPid); // close the write fd, only the dialog owns it now close(outPipe[1]); diff --git a/src/helpers/AsyncDialogBox.hpp b/src/helpers/AsyncDialogBox.hpp index 0cb95846..4018a857 100644 --- a/src/helpers/AsyncDialogBox.hpp +++ b/src/helpers/AsyncDialogBox.hpp @@ -15,6 +15,7 @@ struct wl_event_source; class CAsyncDialogBox { public: static SP create(const std::string& title, const std::string& description, std::vector buttons); + static bool isAsyncDialogBox(pid_t pid); CAsyncDialogBox(const CAsyncDialogBox&) = delete; CAsyncDialogBox(CAsyncDialogBox&&) = delete; From 23ecce0e7a2f21b4048a84d469c0d956aff46ce7 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 18:32:21 +0100 Subject: [PATCH 0116/1077] protocols: add support for xdg-system-bell-v1 --- CMakeLists.txt | 1 + protocols/meson.build | 1 + src/managers/ProtocolManager.cpp | 6 ++- src/protocols/XDGBell.cpp | 64 ++++++++++++++++++++++++++++++++ src/protocols/XDGBell.hpp | 34 +++++++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/protocols/XDGBell.cpp create mode 100644 src/protocols/XDGBell.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 54048a44..8e21e949 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -384,6 +384,7 @@ protocolnew("staging/security-context" "security-context-v1" false) protocolnew("staging/content-type" "content-type-v1" false) protocolnew("staging/color-management" "color-management-v1" false) protocolnew("staging/xdg-toplevel-tag" "xdg-toplevel-tag-v1" false) +protocolnew("staging/xdg-system-bell" "xdg-system-bell-v1" false) protocolwayland() diff --git a/protocols/meson.build b/protocols/meson.build index a0cad39b..348ce8a3 100644 --- a/protocols/meson.build +++ b/protocols/meson.build @@ -74,6 +74,7 @@ protocols = [ wayland_protocol_dir / 'staging/content-type/content-type-v1.xml', wayland_protocol_dir / 'staging/color-management/color-management-v1.xml', wayland_protocol_dir / 'staging/xdg-toplevel-tag/xdg-toplevel-tag-v1.xml', + wayland_protocol_dir / 'staging/xdg-system-bell/xdg-system-bell-v1.xml', ] wl_protocols = [] diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index 8ebe8010..7f51d09f 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -61,6 +61,7 @@ #include "../protocols/FrogColorManagement.hpp" #include "../protocols/ContentType.hpp" #include "../protocols/XDGTag.hpp" +#include "../protocols/XDGBell.hpp" #include "../helpers/Monitor.hpp" #include "../render/Renderer.hpp" @@ -186,6 +187,7 @@ CProtocolManager::CProtocolManager() { PROTO::hyprlandSurface = makeUnique(&hyprland_surface_manager_v1_interface, 2, "HyprlandSurface"); PROTO::contentType = makeUnique(&wp_content_type_manager_v1_interface, 1, "ContentType"); PROTO::xdgTag = makeUnique(&xdg_toplevel_tag_manager_v1_interface, 1, "XDGTag"); + PROTO::xdgBell = makeUnique(&xdg_system_bell_v1_interface, 1, "XDGBell"); if (*PENABLECM) PROTO::colorManagement = makeUnique(&wp_color_manager_v1_interface, 1, "ColorManagement", *PDEBUGCM); @@ -277,6 +279,7 @@ CProtocolManager::~CProtocolManager() { PROTO::xxColorManagement.reset(); PROTO::frogColorManagement.reset(); PROTO::xdgTag.reset(); + PROTO::xdgBell.reset(); PROTO::lease.reset(); PROTO::sync.reset(); @@ -329,11 +332,12 @@ bool CProtocolManager::isGlobalPrivileged(const wl_global* global) { PROTO::primarySelection->getGlobal(), PROTO::hyprlandSurface->getGlobal(), PROTO::xdgTag->getGlobal(), + PROTO::xdgBell->getGlobal(), PROTO::sync ? PROTO::sync->getGlobal() : nullptr, PROTO::mesaDRM ? PROTO::mesaDRM->getGlobal() : nullptr, PROTO::linuxDma ? PROTO::linuxDma->getGlobal() : nullptr, }; // clang-format on - return std::find(ALLOWED_WHITELIST.begin(), ALLOWED_WHITELIST.end(), global) == ALLOWED_WHITELIST.end(); + return std::ranges::find(ALLOWED_WHITELIST, global) == ALLOWED_WHITELIST.end(); } diff --git a/src/protocols/XDGBell.cpp b/src/protocols/XDGBell.cpp new file mode 100644 index 00000000..42fd6040 --- /dev/null +++ b/src/protocols/XDGBell.cpp @@ -0,0 +1,64 @@ +#include "XDGBell.hpp" +#include "XDGShell.hpp" +#include "../desktop/Window.hpp" +#include "../managers/EventManager.hpp" +#include "../Compositor.hpp" + +CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UP&& resource) : m_resource(std::move(resource)) { + if UNLIKELY (!good()) + return; + + m_resource->setDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); + + resource->setRing([](CXdgSystemBellV1* r, wl_resource* toplevel) { + auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); + + if (!TOPLEVEL) { + g_pEventManager->postEvent(SHyprIPCEvent{ + .event = "bell", + .data = "", + }); + return; + } + + for (const auto& w : g_pCompositor->m_windows) { + if (!w->m_isMapped || w->m_isX11 || !w->m_xdgSurface) + continue; + + if (w->m_xdgSurface == TOPLEVEL->owner) { + g_pEventManager->postEvent(SHyprIPCEvent{ + .event = "bell", + .data = std::format("{:x}", (uintptr_t)w.get()), + }); + return; + } + } + + g_pEventManager->postEvent(SHyprIPCEvent{ + .event = "bell", + .data = "", + }); + }); +} + +bool CXDGSystemBellManagerResource::good() { + return m_resource->resource(); +} + +CXDGSystemBellProtocol::CXDGSystemBellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { + ; +} + +void CXDGSystemBellProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { + const auto RESOURCE = WP{m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; + + if UNLIKELY (!RESOURCE->good()) { + wl_client_post_no_memory(client); + return; + } +} + +void CXDGSystemBellProtocol::destroyResource(CXDGSystemBellManagerResource* res) { + std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); +} diff --git a/src/protocols/XDGBell.hpp b/src/protocols/XDGBell.hpp new file mode 100644 index 00000000..ff385059 --- /dev/null +++ b/src/protocols/XDGBell.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include +#include "WaylandProtocol.hpp" +#include "xdg-system-bell-v1.hpp" + +class CXDGSystemBellManagerResource { + public: + CXDGSystemBellManagerResource(UP&& resource); + + bool good(); + + private: + UP m_resource; +}; + +class CXDGSystemBellProtocol : public IWaylandProtocol { + public: + CXDGSystemBellProtocol(const wl_interface* iface, const int& ver, const std::string& name); + + virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); + + private: + void destroyResource(CXDGSystemBellManagerResource* res); + + // + std::vector> m_vManagers; + + friend class CXDGSystemBellManagerResource; +}; + +namespace PROTO { + inline UP xdgBell; +}; From 40147d3a3f0843b548769e79e4a345d67b9e3c04 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 18:37:21 +0100 Subject: [PATCH 0117/1077] asyncdialogbox: fix missing header --- src/helpers/AsyncDialogBox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 6cda0d44..da625fea 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -1,6 +1,7 @@ #include "AsyncDialogBox.hpp" #include "./fs/FsUtils.hpp" #include +#include #include #include "../managers/eventLoop/EventLoopManager.hpp" From e9c3fcbb64c2df147a176052fb219f0f8a7b89ec Mon Sep 17 00:00:00 2001 From: davc0n Date: Tue, 29 Apr 2025 19:51:07 +0200 Subject: [PATCH 0118/1077] devices: refactor class member vars (#10206) --- src/debug/HyprCtl.cpp | 51 +++--- src/devices/IHID.hpp | 5 +- src/devices/IKeyboard.cpp | 238 ++++++++++++++-------------- src/devices/IKeyboard.hpp | 50 +++--- src/devices/IPointer.hpp | 14 +- src/devices/ITouch.hpp | 6 +- src/devices/Keyboard.cpp | 30 ++-- src/devices/Keyboard.hpp | 4 +- src/devices/Mouse.cpp | 74 ++++----- src/devices/Mouse.hpp | 4 +- src/devices/Tablet.cpp | 130 +++++++-------- src/devices/Tablet.hpp | 48 +++--- src/devices/TouchDevice.cpp | 36 ++--- src/devices/TouchDevice.hpp | 4 +- src/devices/VirtualKeyboard.cpp | 44 ++--- src/devices/VirtualKeyboard.hpp | 4 +- src/devices/VirtualPointer.cpp | 48 +++--- src/devices/VirtualPointer.hpp | 4 +- src/managers/KeybindManager.cpp | 20 +-- src/managers/PointerManager.cpp | 84 +++++----- src/managers/SeatManager.cpp | 8 +- src/managers/input/InputManager.cpp | 141 ++++++++-------- src/managers/input/Tablets.cpp | 78 ++++----- src/managers/input/Touch.cpp | 2 +- src/protocols/InputMethodV2.cpp | 14 +- src/protocols/Tablet.cpp | 14 +- src/protocols/core/Seat.cpp | 8 +- 27 files changed, 585 insertions(+), 578 deletions(-) diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 49325887..3e6a3f08 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -603,12 +603,12 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque std::string result = ""; auto getModState = [](SP keyboard, const char* xkbModName) -> bool { - auto IDX = xkb_keymap_mod_get_index(keyboard->xkbKeymap, xkbModName); + auto IDX = xkb_keymap_mod_get_index(keyboard->m_xkbKeymap, xkbModName); if (IDX == XKB_MOD_INVALID) return false; - return (keyboard->modifiersState.locked & (1 << IDX)) > 0; + return (keyboard->m_modifiersState.locked & (1 << IDX)) > 0; }; if (format == eHyprCtlOutputFormat::FORMAT_JSON) { @@ -622,7 +622,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque "name": "{}", "defaultSpeed": {:.5f} }},)#", - (uintptr_t)m.get(), escapeJSONStrings(m->hlName), + (uintptr_t)m.get(), escapeJSONStrings(m->m_hlName), m->aq() && m->aq()->getLibinputHandle() ? libinput_device_config_accel_get_default_speed(m->aq()->getLibinputHandle()) : 0.f); } @@ -646,9 +646,9 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque "numLock": {}, "main": {} }},)#", - (uintptr_t)k.get(), escapeJSONStrings(k->hlName), escapeJSONStrings(k->currentRules.rules), escapeJSONStrings(k->currentRules.model), - escapeJSONStrings(k->currentRules.layout), escapeJSONStrings(k->currentRules.variant), escapeJSONStrings(k->currentRules.options), escapeJSONStrings(KM), - (getModState(k, XKB_MOD_NAME_CAPS) ? "true" : "false"), (getModState(k, XKB_MOD_NAME_NUM) ? "true" : "false"), (k->active ? "true" : "false")); + (uintptr_t)k.get(), escapeJSONStrings(k->m_hlName), escapeJSONStrings(k->m_currentRules.rules), escapeJSONStrings(k->m_currentRules.model), + escapeJSONStrings(k->m_currentRules.layout), escapeJSONStrings(k->m_currentRules.variant), escapeJSONStrings(k->m_currentRules.options), escapeJSONStrings(KM), + (getModState(k, XKB_MOD_NAME_CAPS) ? "true" : "false"), (getModState(k, XKB_MOD_NAME_NUM) ? "true" : "false"), (k->m_active ? "true" : "false")); } trimTrailingComma(result); @@ -666,7 +666,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque "name": "{}" }} }},)#", - (uintptr_t)d.get(), (uintptr_t)d->parent.get(), escapeJSONStrings(d->parent ? d->parent->hlName : "")); + (uintptr_t)d.get(), (uintptr_t)d->m_parent.get(), escapeJSONStrings(d->m_parent ? d->m_parent->m_hlName : "")); } for (auto const& d : g_pInputManager->m_vTablets) { @@ -675,7 +675,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque "address": "0x{:x}", "name": "{}" }},)#", - (uintptr_t)d.get(), escapeJSONStrings(d->hlName)); + (uintptr_t)d.get(), escapeJSONStrings(d->m_hlName)); } for (auto const& d : g_pInputManager->m_vTabletTools) { @@ -698,7 +698,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque "address": "0x{:x}", "name": "{}" }},)#", - (uintptr_t)d.get(), escapeJSONStrings(d->hlName)); + (uintptr_t)d.get(), escapeJSONStrings(d->m_hlName)); } trimTrailingComma(result); @@ -724,7 +724,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "mice:\n"; for (auto const& m : g_pInputManager->m_vPointers) { - result += std::format("\tMouse at {:x}:\n\t\t{}\n\t\t\tdefault speed: {:.5f}\n", (uintptr_t)m.get(), m->hlName, + result += std::format("\tMouse at {:x}:\n\t\t{}\n\t\t\tdefault speed: {:.5f}\n", (uintptr_t)m.get(), m->m_hlName, (m->aq() && m->aq()->getLibinputHandle() ? libinput_device_config_accel_get_default_speed(m->aq()->getLibinputHandle()) : 0.f)); } @@ -732,21 +732,21 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque for (auto const& k : g_pInputManager->m_vKeyboards) { const auto KM = k->getActiveLayout(); - result += - std::format("\tKeyboard at {:x}:\n\t\t{}\n\t\t\trules: r \"{}\", m \"{}\", l \"{}\", v \"{}\", o \"{}\"\n\t\t\tactive keymap: {}\n\t\t\tcapsLock: " - "{}\n\t\t\tnumLock: {}\n\t\t\tmain: {}\n", - (uintptr_t)k.get(), k->hlName, k->currentRules.rules, k->currentRules.model, k->currentRules.layout, k->currentRules.variant, k->currentRules.options, - KM, (getModState(k, XKB_MOD_NAME_CAPS) ? "yes" : "no"), (getModState(k, XKB_MOD_NAME_NUM) ? "yes" : "no"), (k->active ? "yes" : "no")); + result += std::format("\tKeyboard at {:x}:\n\t\t{}\n\t\t\trules: r \"{}\", m \"{}\", l \"{}\", v \"{}\", o \"{}\"\n\t\t\tactive keymap: {}\n\t\t\tcapsLock: " + "{}\n\t\t\tnumLock: {}\n\t\t\tmain: {}\n", + (uintptr_t)k.get(), k->m_hlName, k->m_currentRules.rules, k->m_currentRules.model, k->m_currentRules.layout, k->m_currentRules.variant, + k->m_currentRules.options, KM, (getModState(k, XKB_MOD_NAME_CAPS) ? "yes" : "no"), (getModState(k, XKB_MOD_NAME_NUM) ? "yes" : "no"), + (k->m_active ? "yes" : "no")); } result += "\n\nTablets:\n"; for (auto const& d : g_pInputManager->m_vTabletPads) { - result += std::format("\tTablet Pad at {:x} (belongs to {:x} -> {})\n", (uintptr_t)d.get(), (uintptr_t)d->parent.get(), d->parent ? d->parent->hlName : ""); + result += std::format("\tTablet Pad at {:x} (belongs to {:x} -> {})\n", (uintptr_t)d.get(), (uintptr_t)d->m_parent.get(), d->m_parent ? d->m_parent->m_hlName : ""); } for (auto const& d : g_pInputManager->m_vTablets) { - result += std::format("\tTablet at {:x}:\n\t\t{}\n\t\t\tsize: {}x{}mm\n", (uintptr_t)d.get(), d->hlName, d->aq()->physicalSize.x, d->aq()->physicalSize.y); + result += std::format("\tTablet at {:x}:\n\t\t{}\n\t\t\tsize: {}x{}mm\n", (uintptr_t)d.get(), d->m_hlName, d->aq()->physicalSize.x, d->aq()->physicalSize.y); } for (auto const& d : g_pInputManager->m_vTabletTools) { @@ -756,7 +756,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\n\nTouch:\n"; for (auto const& d : g_pInputManager->m_vTouches) { - result += std::format("\tTouch Device at {:x}:\n\t\t{}\n", (uintptr_t)d.get(), d->hlName); + result += std::format("\tTouch Device at {:x}:\n\t\t{}\n", (uintptr_t)d.get(), d->m_hlName); } result += "\n\nSwitches:\n"; @@ -1254,19 +1254,20 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri SP pKeyboard; auto updateKeyboard = [](const SP KEEB, const std::string& CMD) -> std::optional { - const auto LAYOUTS = xkb_keymap_num_layouts(KEEB->xkbKeymap); + const auto LAYOUTS = xkb_keymap_num_layouts(KEEB->m_xkbKeymap); xkb_layout_index_t activeLayout = 0; while (activeLayout < LAYOUTS) { - if (xkb_state_layout_index_is_active(KEEB->xkbState, activeLayout, XKB_STATE_LAYOUT_EFFECTIVE) == 1) + if (xkb_state_layout_index_is_active(KEEB->m_xkbState, activeLayout, XKB_STATE_LAYOUT_EFFECTIVE) == 1) break; activeLayout++; } if (CMD == "next") - KEEB->updateModifiers(KEEB->modifiersState.depressed, KEEB->modifiersState.latched, KEEB->modifiersState.locked, activeLayout > LAYOUTS ? 0 : activeLayout + 1); + KEEB->updateModifiers(KEEB->m_modifiersState.depressed, KEEB->m_modifiersState.latched, KEEB->m_modifiersState.locked, activeLayout > LAYOUTS ? 0 : activeLayout + 1); else if (CMD == "prev") - KEEB->updateModifiers(KEEB->modifiersState.depressed, KEEB->modifiersState.latched, KEEB->modifiersState.locked, activeLayout == 0 ? LAYOUTS - 1 : activeLayout - 1); + KEEB->updateModifiers(KEEB->m_modifiersState.depressed, KEEB->m_modifiersState.latched, KEEB->m_modifiersState.locked, + activeLayout == 0 ? LAYOUTS - 1 : activeLayout - 1); else { int requestedLayout = 0; try { @@ -1277,7 +1278,7 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri return "layout idx out of range of " + std::to_string(LAYOUTS); } - KEEB->updateModifiers(KEEB->modifiersState.depressed, KEEB->modifiersState.latched, KEEB->modifiersState.locked, requestedLayout); + KEEB->updateModifiers(KEEB->m_modifiersState.depressed, KEEB->m_modifiersState.latched, KEEB->m_modifiersState.locked, requestedLayout); } return std::nullopt; @@ -1285,7 +1286,7 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri if (KB == "main" || KB == "active" || KB == "current") { for (auto const& k : g_pInputManager->m_vKeyboards) { - if (!k->active) + if (!k->m_active) continue; pKeyboard = k; @@ -1301,7 +1302,7 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri return result.empty() ? "ok" : result; } else { auto k = std::find_if(g_pInputManager->m_vKeyboards.begin(), g_pInputManager->m_vKeyboards.end(), - [&](const auto& other) { return other->hlName == g_pInputManager->deviceNameToInternalString(KB); }); + [&](const auto& other) { return other->m_hlName == g_pInputManager->deviceNameToInternalString(KB); }); if (k == g_pInputManager->m_vKeyboards.end()) return "device not found"; diff --git a/src/devices/IHID.hpp b/src/devices/IHID.hpp index b9cc4212..4de5abe6 100644 --- a/src/devices/IHID.hpp +++ b/src/devices/IHID.hpp @@ -34,7 +34,8 @@ class IHID { struct { CSignal destroy; - } events; + } m_events; - std::string deviceName, hlName; + std::string m_deviceName; + std::string m_hlName; }; \ No newline at end of file diff --git a/src/devices/IKeyboard.cpp b/src/devices/IKeyboard.cpp index b8f9c7dd..597724a6 100644 --- a/src/devices/IKeyboard.cpp +++ b/src/devices/IKeyboard.cpp @@ -28,38 +28,38 @@ eHIDType IKeyboard::getType() { } IKeyboard::~IKeyboard() { - events.destroy.emit(); + m_events.destroy.emit(); clearManuallyAllocd(); } void IKeyboard::clearManuallyAllocd() { - if (xkbStaticState) - xkb_state_unref(xkbStaticState); + if (m_xkbStaticState) + xkb_state_unref(m_xkbStaticState); - if (xkbState) - xkb_state_unref(xkbState); + if (m_xkbState) + xkb_state_unref(m_xkbState); - if (xkbKeymap) - xkb_keymap_unref(xkbKeymap); + if (m_xkbKeymap) + xkb_keymap_unref(m_xkbKeymap); - if (xkbSymState) - xkb_state_unref(xkbSymState); + if (m_xkbSymState) + xkb_state_unref(m_xkbSymState); - xkbSymState = nullptr; - xkbKeymap = nullptr; - xkbState = nullptr; - xkbStaticState = nullptr; - xkbKeymapFD.reset(); + m_xkbSymState = nullptr; + m_xkbKeymap = nullptr; + m_xkbState = nullptr; + m_xkbStaticState = nullptr; + m_xkbKeymapFD.reset(); } void IKeyboard::setKeymap(const SStringRuleNames& rules) { - if (keymapOverridden) { + if (m_keymapOverridden) { Debug::log(LOG, "Ignoring setKeymap: keymap is overridden"); return; } - currentRules = rules; + m_currentRules = rules; xkb_rule_names XKBRULES = { .rules = rules.rules.c_str(), .model = rules.model.c_str(), @@ -80,21 +80,21 @@ void IKeyboard::setKeymap(const SStringRuleNames& rules) { Debug::log(LOG, "Attempting to create a keymap for layout {} with variant {} (rules: {}, model: {}, options: {})", rules.layout, rules.variant, rules.rules, rules.model, rules.options); - if (!xkbFilePath.empty()) { - auto path = absolutePath(xkbFilePath, g_pConfigManager->m_configCurrentPath); + if (!m_xkbFilePath.empty()) { + auto path = absolutePath(m_xkbFilePath, g_pConfigManager->m_configCurrentPath); if (FILE* const KEYMAPFILE = fopen(path.c_str(), "r"); !KEYMAPFILE) Debug::log(ERR, "Cannot open input:kb_file= file for reading"); else { - xkbKeymap = xkb_keymap_new_from_file(CONTEXT, KEYMAPFILE, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); + m_xkbKeymap = xkb_keymap_new_from_file(CONTEXT, KEYMAPFILE, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); fclose(KEYMAPFILE); } } - if (!xkbKeymap) - xkbKeymap = xkb_keymap_new_from_names(CONTEXT, &XKBRULES, XKB_KEYMAP_COMPILE_NO_FLAGS); + if (!m_xkbKeymap) + m_xkbKeymap = xkb_keymap_new_from_names(CONTEXT, &XKBRULES, XKB_KEYMAP_COMPILE_NO_FLAGS); - if (!xkbKeymap) { + if (!m_xkbKeymap) { g_pConfigManager->addParseError("Invalid keyboard layout passed. ( rules: " + rules.rules + ", model: " + rules.model + ", variant: " + rules.variant + ", options: " + rules.options + ", layout: " + rules.layout + " )"); @@ -102,38 +102,38 @@ void IKeyboard::setKeymap(const SStringRuleNames& rules) { rules.options); memset(&XKBRULES, 0, sizeof(XKBRULES)); - currentRules.rules = ""; - currentRules.model = ""; - currentRules.variant = ""; - currentRules.options = ""; - currentRules.layout = "us"; + m_currentRules.rules = ""; + m_currentRules.model = ""; + m_currentRules.variant = ""; + m_currentRules.options = ""; + m_currentRules.layout = "us"; - xkbKeymap = xkb_keymap_new_from_names(CONTEXT, &XKBRULES, XKB_KEYMAP_COMPILE_NO_FLAGS); + m_xkbKeymap = xkb_keymap_new_from_names(CONTEXT, &XKBRULES, XKB_KEYMAP_COMPILE_NO_FLAGS); } - updateXKBTranslationState(xkbKeymap); + updateXKBTranslationState(m_xkbKeymap); - const auto NUMLOCKON = g_pConfigManager->getDeviceInt(hlName, "numlock_by_default", "input:numlock_by_default"); + const auto NUMLOCKON = g_pConfigManager->getDeviceInt(m_hlName, "numlock_by_default", "input:numlock_by_default"); if (NUMLOCKON == 1) { // lock numlock - const auto IDX = xkb_map_mod_get_index(xkbKeymap, XKB_MOD_NAME_NUM); + const auto IDX = xkb_map_mod_get_index(m_xkbKeymap, XKB_MOD_NAME_NUM); if (IDX != XKB_MOD_INVALID) - modifiersState.locked |= (uint32_t)1 << IDX; + m_modifiersState.locked |= (uint32_t)1 << IDX; // 0 to avoid mods getting stuck if depressed during reload - updateModifiers(0, 0, modifiersState.locked, modifiersState.group); + updateModifiers(0, 0, m_modifiersState.locked, m_modifiersState.group); } - for (size_t i = 0; i < std::min(LEDNAMES.size(), ledIndexes.size()); ++i) { - ledIndexes[i] = xkb_map_led_get_index(xkbKeymap, LEDNAMES[i]); - Debug::log(LOG, "xkb: LED index {} (name {}) got index {}", i, LEDNAMES[i], ledIndexes[i]); + for (size_t i = 0; i < std::min(LEDNAMES.size(), m_ledIndexes.size()); ++i) { + m_ledIndexes[i] = xkb_map_led_get_index(m_xkbKeymap, LEDNAMES[i]); + Debug::log(LOG, "xkb: LED index {} (name {}) got index {}", i, LEDNAMES[i], m_ledIndexes[i]); } - for (size_t i = 0; i < std::min(MODNAMES.size(), modIndexes.size()); ++i) { - modIndexes[i] = xkb_map_mod_get_index(xkbKeymap, MODNAMES[i]); - Debug::log(LOG, "xkb: Mod index {} (name {}) got index {}", i, MODNAMES[i], modIndexes[i]); + for (size_t i = 0; i < std::min(MODNAMES.size(), m_modIndexes.size()); ++i) { + m_modIndexes[i] = xkb_map_mod_get_index(m_xkbKeymap, MODNAMES[i]); + Debug::log(LOG, "xkb: Mod index {} (name {}) got index {}", i, MODNAMES[i], m_modIndexes[i]); } updateKeymapFD(); @@ -144,59 +144,59 @@ void IKeyboard::setKeymap(const SStringRuleNames& rules) { } void IKeyboard::updateKeymapFD() { - Debug::log(LOG, "Updating keymap fd for keyboard {}", deviceName); + Debug::log(LOG, "Updating keymap fd for keyboard {}", m_deviceName); - if (xkbKeymapFD.isValid()) - xkbKeymapFD.reset(); + if (m_xkbKeymapFD.isValid()) + m_xkbKeymapFD.reset(); - auto cKeymapStr = xkb_keymap_get_as_string(xkbKeymap, XKB_KEYMAP_FORMAT_TEXT_V1); - xkbKeymapString = cKeymapStr; + auto cKeymapStr = xkb_keymap_get_as_string(m_xkbKeymap, XKB_KEYMAP_FORMAT_TEXT_V1); + m_xkbKeymapString = cKeymapStr; free(cKeymapStr); CFileDescriptor rw, ro; - if (!allocateSHMFilePair(xkbKeymapString.length() + 1, rw, ro)) + if (!allocateSHMFilePair(m_xkbKeymapString.length() + 1, rw, ro)) Debug::log(ERR, "IKeyboard: failed to allocate shm pair for the keymap"); else { - auto keymapFDDest = mmap(nullptr, xkbKeymapString.length() + 1, PROT_READ | PROT_WRITE, MAP_SHARED, rw.get(), 0); + auto keymapFDDest = mmap(nullptr, m_xkbKeymapString.length() + 1, PROT_READ | PROT_WRITE, MAP_SHARED, rw.get(), 0); rw.reset(); if (keymapFDDest == MAP_FAILED) { Debug::log(ERR, "IKeyboard: failed to mmap a shm pair for the keymap"); ro.reset(); } else { - memcpy(keymapFDDest, xkbKeymapString.c_str(), xkbKeymapString.length()); - munmap(keymapFDDest, xkbKeymapString.length() + 1); - xkbKeymapFD = std::move(ro); + memcpy(keymapFDDest, m_xkbKeymapString.c_str(), m_xkbKeymapString.length()); + munmap(keymapFDDest, m_xkbKeymapString.length() + 1); + m_xkbKeymapFD = std::move(ro); } } - Debug::log(LOG, "Updated keymap fd to {}", xkbKeymapFD.get()); + Debug::log(LOG, "Updated keymap fd to {}", m_xkbKeymapFD.get()); } void IKeyboard::updateXKBTranslationState(xkb_keymap* const keymap) { - if (xkbStaticState) - xkb_state_unref(xkbStaticState); + if (m_xkbStaticState) + xkb_state_unref(m_xkbStaticState); - if (xkbState) - xkb_state_unref(xkbState); + if (m_xkbState) + xkb_state_unref(m_xkbState); - if (xkbSymState) - xkb_state_unref(xkbSymState); + if (m_xkbSymState) + xkb_state_unref(m_xkbSymState); - xkbState = nullptr; - xkbStaticState = nullptr; - xkbSymState = nullptr; + m_xkbState = nullptr; + m_xkbStaticState = nullptr; + m_xkbSymState = nullptr; if (keymap) { Debug::log(LOG, "Updating keyboard {:x}'s translation state from a provided keymap", (uintptr_t)this); - xkbStaticState = xkb_state_new(keymap); - xkbState = xkb_state_new(keymap); - xkbSymState = xkb_state_new(keymap); + m_xkbStaticState = xkb_state_new(keymap); + m_xkbState = xkb_state_new(keymap); + m_xkbSymState = xkb_state_new(keymap); return; } - const auto KEYMAP = xkbKeymap; - const auto STATE = xkbState; + const auto KEYMAP = m_xkbKeymap; + const auto STATE = m_xkbState; const auto LAYOUTSNUM = xkb_keymap_num_layouts(KEYMAP); const auto PCONTEXT = xkb_context_new(XKB_CONTEXT_NO_FLAGS); @@ -205,9 +205,9 @@ void IKeyboard::updateXKBTranslationState(xkb_keymap* const keymap) { if (xkb_state_layout_index_is_active(STATE, i, XKB_STATE_LAYOUT_EFFECTIVE) == 1) { Debug::log(LOG, "Updating keyboard {:x}'s translation state from an active index {}", (uintptr_t)this, i); - CVarList keyboardLayouts(currentRules.layout, 0, ','); - CVarList keyboardModels(currentRules.model, 0, ','); - CVarList keyboardVariants(currentRules.variant, 0, ','); + CVarList keyboardLayouts(m_currentRules.layout, 0, ','); + CVarList keyboardModels(m_currentRules.model, 0, ','); + CVarList keyboardVariants(m_currentRules.variant, 0, ','); xkb_rule_names rules = {.rules = "", .model = "", .layout = "", .variant = "", .options = ""}; @@ -235,9 +235,9 @@ void IKeyboard::updateXKBTranslationState(xkb_keymap* const keymap) { KEYMAP = xkb_keymap_new_from_names(PCONTEXT, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); } - xkbState = xkb_state_new(KEYMAP); - xkbStaticState = xkb_state_new(KEYMAP); - xkbSymState = xkb_state_new(KEYMAP); + m_xkbState = xkb_state_new(KEYMAP); + m_xkbStaticState = xkb_state_new(KEYMAP); + m_xkbSymState = xkb_state_new(KEYMAP); xkb_keymap_unref(KEYMAP); xkb_context_unref(PCONTEXT); @@ -249,26 +249,26 @@ void IKeyboard::updateXKBTranslationState(xkb_keymap* const keymap) { Debug::log(LOG, "Updating keyboard {:x}'s translation state from an unknown index", (uintptr_t)this); xkb_rule_names rules = { - .rules = currentRules.rules.c_str(), - .model = currentRules.model.c_str(), - .layout = currentRules.layout.c_str(), - .variant = currentRules.variant.c_str(), - .options = currentRules.options.c_str(), + .rules = m_currentRules.rules.c_str(), + .model = m_currentRules.model.c_str(), + .layout = m_currentRules.layout.c_str(), + .variant = m_currentRules.variant.c_str(), + .options = m_currentRules.options.c_str(), }; const auto NEWKEYMAP = xkb_keymap_new_from_names(PCONTEXT, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); - xkbState = xkb_state_new(NEWKEYMAP); - xkbStaticState = xkb_state_new(NEWKEYMAP); - xkbSymState = xkb_state_new(NEWKEYMAP); + m_xkbState = xkb_state_new(NEWKEYMAP); + m_xkbStaticState = xkb_state_new(NEWKEYMAP); + m_xkbSymState = xkb_state_new(NEWKEYMAP); xkb_keymap_unref(NEWKEYMAP); xkb_context_unref(PCONTEXT); } std::string IKeyboard::getActiveLayout() { - const auto KEYMAP = xkbKeymap; - const auto STATE = xkbState; + const auto KEYMAP = m_xkbKeymap; + const auto STATE = m_xkbState; const auto LAYOUTSNUM = xkb_keymap_num_layouts(KEYMAP); for (uint32_t i = 0; i < LAYOUTSNUM; ++i) { @@ -285,12 +285,12 @@ std::string IKeyboard::getActiveLayout() { } std::optional IKeyboard::getLEDs() { - if (xkbState == nullptr) + if (m_xkbState == nullptr) return {}; uint32_t leds = 0; - for (uint32_t i = 0; i < std::min((size_t)LED_COUNT, ledIndexes.size()); ++i) { - if (xkb_state_led_index_is_active(xkbState, ledIndexes[i])) + for (uint32_t i = 0; i < std::min((size_t)LED_COUNT, m_ledIndexes.size()); ++i) { + if (xkb_state_led_index_is_active(m_xkbState, m_ledIndexes[i])) leds |= (1 << i); } @@ -307,10 +307,10 @@ void IKeyboard::updateLEDs() { } void IKeyboard::updateLEDs(uint32_t leds) { - if (!xkbState) + if (!m_xkbState) return; - if (isVirtual() && g_pInputManager->shouldIgnoreVirtualKeyboard(self.lock())) + if (isVirtual() && g_pInputManager->shouldIgnoreVirtualKeyboard(m_self.lock())) return; if (!aq()) @@ -320,13 +320,13 @@ void IKeyboard::updateLEDs(uint32_t leds) { } uint32_t IKeyboard::getModifiers() { - uint32_t modMask = modifiersState.depressed | modifiersState.latched; + uint32_t modMask = m_modifiersState.depressed | m_modifiersState.latched; uint32_t mods = 0; - for (size_t i = 0; i < modIndexes.size(); ++i) { - if (modIndexes[i] == XKB_MOD_INVALID) + for (size_t i = 0; i < m_modIndexes.size(); ++i) { + if (m_modIndexes[i] == XKB_MOD_INVALID) continue; - if (!(modMask & (1 << modIndexes[i]))) + if (!(modMask & (1 << m_modIndexes[i]))) continue; mods |= (1 << i); @@ -336,50 +336,50 @@ uint32_t IKeyboard::getModifiers() { } void IKeyboard::updateModifiers(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - if (!xkbState) + if (!m_xkbState) return; - xkb_state_update_mask(xkbState, depressed, latched, locked, 0, 0, group); + xkb_state_update_mask(m_xkbState, depressed, latched, locked, 0, 0, group); - if (xkbSymState) - xkb_state_update_mask(xkbSymState, 0, 0, 0, 0, 0, group); + if (m_xkbSymState) + xkb_state_update_mask(m_xkbSymState, 0, 0, 0, 0, 0, group); if (!updateModifiersState()) return; - keyboardEvents.modifiers.emit(SModifiersEvent{ - .depressed = modifiersState.depressed, - .latched = modifiersState.latched, - .locked = modifiersState.locked, - .group = modifiersState.group, + m_keyboardEvents.modifiers.emit(SModifiersEvent{ + .depressed = m_modifiersState.depressed, + .latched = m_modifiersState.latched, + .locked = m_modifiersState.locked, + .group = m_modifiersState.group, }); updateLEDs(); } bool IKeyboard::updateModifiersState() { - if (!xkbState) + if (!m_xkbState) return false; - auto depressed = xkb_state_serialize_mods(xkbState, XKB_STATE_MODS_DEPRESSED); - auto latched = xkb_state_serialize_mods(xkbState, XKB_STATE_MODS_LATCHED); - auto locked = xkb_state_serialize_mods(xkbState, XKB_STATE_MODS_LOCKED); - auto group = xkb_state_serialize_layout(xkbState, XKB_STATE_LAYOUT_EFFECTIVE); + auto depressed = xkb_state_serialize_mods(m_xkbState, XKB_STATE_MODS_DEPRESSED); + auto latched = xkb_state_serialize_mods(m_xkbState, XKB_STATE_MODS_LATCHED); + auto locked = xkb_state_serialize_mods(m_xkbState, XKB_STATE_MODS_LOCKED); + auto group = xkb_state_serialize_layout(m_xkbState, XKB_STATE_LAYOUT_EFFECTIVE); - if (depressed == modifiersState.depressed && latched == modifiersState.latched && locked == modifiersState.locked && group == modifiersState.group) + if (depressed == m_modifiersState.depressed && latched == m_modifiersState.latched && locked == m_modifiersState.locked && group == m_modifiersState.group) return false; - modifiersState.depressed = depressed; - modifiersState.latched = latched; - modifiersState.locked = locked; - modifiersState.group = group; + m_modifiersState.depressed = depressed; + m_modifiersState.latched = latched; + m_modifiersState.locked = locked; + m_modifiersState.group = group; return true; } void IKeyboard::updateXkbStateWithKey(uint32_t xkbKey, bool pressed) { - const auto contains = std::find(pressedXKB.begin(), pressedXKB.end(), xkbKey) != pressedXKB.end(); + const auto contains = std::find(m_pressedXKB.begin(), m_pressedXKB.end(), xkbKey) != m_pressedXKB.end(); if (contains && pressed) return; @@ -387,21 +387,21 @@ void IKeyboard::updateXkbStateWithKey(uint32_t xkbKey, bool pressed) { return; if (contains) - std::erase(pressedXKB, xkbKey); + std::erase(m_pressedXKB, xkbKey); else - pressedXKB.emplace_back(xkbKey); + m_pressedXKB.emplace_back(xkbKey); - xkb_state_update_key(xkbState, xkbKey, pressed ? XKB_KEY_DOWN : XKB_KEY_UP); + xkb_state_update_key(m_xkbState, xkbKey, pressed ? XKB_KEY_DOWN : XKB_KEY_UP); if (updateModifiersState()) { - if (xkbSymState) - xkb_state_update_mask(xkbSymState, 0, 0, 0, 0, 0, modifiersState.group); + if (m_xkbSymState) + xkb_state_update_mask(m_xkbSymState, 0, 0, 0, 0, 0, m_modifiersState.group); - keyboardEvents.modifiers.emit(SModifiersEvent{ - .depressed = modifiersState.depressed, - .latched = modifiersState.latched, - .locked = modifiersState.locked, - .group = modifiersState.group, + m_keyboardEvents.modifiers.emit(SModifiersEvent{ + .depressed = m_modifiersState.depressed, + .latched = m_modifiersState.latched, + .locked = m_modifiersState.locked, + .group = m_modifiersState.group, }); } } diff --git a/src/devices/IKeyboard.hpp b/src/devices/IKeyboard.hpp index 7ac71172..3d7b2dd1 100644 --- a/src/devices/IKeyboard.hpp +++ b/src/devices/IKeyboard.hpp @@ -52,7 +52,7 @@ class IKeyboard : public IHID { CSignal modifiers; CSignal keymap; CSignal repeatInfo; - } keyboardEvents; + } m_keyboardEvents; struct SStringRuleNames { std::string layout = ""; @@ -74,42 +74,46 @@ class IKeyboard : public IHID { void updateXkbStateWithKey(uint32_t xkbKey, bool pressed); void updateKeymapFD(); - bool active = false; - bool enabled = true; - bool allowBinds = true; + bool m_active = false; + bool m_enabled = true; + bool m_allowBinds = true; // if the keymap is overridden by the implementation, // don't try to set keyboard rules anymore, to avoid overwriting the requested one. // e.g. Virtual keyboards with custom maps. - bool keymapOverridden = false; + bool m_keymapOverridden = false; - xkb_layout_index_t activeLayout = 0; - xkb_state * xkbState = nullptr, *xkbStaticState /* Static state: never gets modifiers or layout changes sent, used for keybinds. */ = nullptr, - *xkbSymState = nullptr /* Same as static but gets layouts */; - xkb_keymap* xkbKeymap = nullptr; + xkb_layout_index_t m_activeLayout = 0; + xkb_state* m_xkbState = nullptr; + + // never gets modifiers or layout changes sent, used for keybinds + xkb_state* m_xkbStaticState = nullptr; + xkb_state* m_xkbSymState = nullptr; // same as static but gets layouts + + xkb_keymap* m_xkbKeymap = nullptr; struct { uint32_t depressed = 0, latched = 0, locked = 0, group = 0; - } modifiersState; + } m_modifiersState; - std::array ledIndexes = {XKB_MOD_INVALID}; - std::array modIndexes = {XKB_MOD_INVALID}; - uint32_t leds = 0; + std::array m_ledIndexes = {XKB_MOD_INVALID}; + std::array m_modIndexes = {XKB_MOD_INVALID}; + uint32_t m_leds = 0; - std::string xkbFilePath = ""; - std::string xkbKeymapString = ""; - Hyprutils::OS::CFileDescriptor xkbKeymapFD; + std::string m_xkbFilePath = ""; + std::string m_xkbKeymapString = ""; + Hyprutils::OS::CFileDescriptor m_xkbKeymapFD; - SStringRuleNames currentRules; - int repeatRate = 0; - int repeatDelay = 0; - int numlockOn = -1; - bool resolveBindsBySym = false; + SStringRuleNames m_currentRules; + int m_repeatRate = 0; + int m_repeatDelay = 0; + int m_numlockOn = -1; + bool m_resolveBindsBySym = false; - WP self; + WP m_self; private: void clearManuallyAllocd(); - std::vector pressedXKB; + std::vector m_pressedXKB; }; diff --git a/src/devices/IPointer.hpp b/src/devices/IPointer.hpp index d5541222..993095e0 100644 --- a/src/devices/IPointer.hpp +++ b/src/devices/IPointer.hpp @@ -106,13 +106,13 @@ class IPointer : public IHID { CSignal holdBegin; CSignal holdEnd; - } pointerEvents; + } m_pointerEvents; - bool connected = false; // means connected to the cursor - std::string boundOutput = ""; - bool flipX = false; // decide to invert horizontal movement - bool flipY = false; // decide to invert vertical movement - bool isTouchpad = false; + bool m_connected = false; // means connected to the cursor + std::string m_boundOutput = ""; + bool m_flipX = false; // decide to invert horizontal movement + bool m_flipY = false; // decide to invert vertical movement + bool m_isTouchpad = false; - WP self; + WP m_self; }; diff --git a/src/devices/ITouch.hpp b/src/devices/ITouch.hpp index 766c0510..e5230394 100644 --- a/src/devices/ITouch.hpp +++ b/src/devices/ITouch.hpp @@ -42,9 +42,9 @@ class ITouch : public IHID { CSignal motion; CSignal cancel; CSignal frame; - } touchEvents; + } m_touchEvents; - std::string boundOutput = ""; + std::string m_boundOutput = ""; - WP self; + WP m_self; }; \ No newline at end of file diff --git a/src/devices/Keyboard.cpp b/src/devices/Keyboard.cpp index 191cc6b2..70abe54d 100644 --- a/src/devices/Keyboard.cpp +++ b/src/devices/Keyboard.cpp @@ -6,7 +6,7 @@ SP CKeyboard::create(SP keeb) { SP pKeeb = SP(new CKeyboard(keeb)); - pKeeb->self = pKeeb; + pKeeb->m_self = pKeeb; return pKeeb; } @@ -16,22 +16,22 @@ bool CKeyboard::isVirtual() { } SP CKeyboard::aq() { - return keyboard.lock(); + return m_keyboard.lock(); } -CKeyboard::CKeyboard(SP keeb) : keyboard(keeb) { +CKeyboard::CKeyboard(SP keeb) : m_keyboard(keeb) { if (!keeb) return; - listeners.destroy = keeb->events.destroy.registerListener([this](std::any d) { - keyboard.reset(); - events.destroy.emit(); + m_listeners.destroy = keeb->events.destroy.registerListener([this](std::any d) { + m_keyboard.reset(); + m_events.destroy.emit(); }); - listeners.key = keeb->events.key.registerListener([this](std::any d) { + m_listeners.key = keeb->events.key.registerListener([this](std::any d) { auto E = std::any_cast(d); - keyboardEvents.key.emit(SKeyEvent{ + m_keyboardEvents.key.emit(SKeyEvent{ .timeMs = E.timeMs, .keycode = E.key, .state = E.pressed ? WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED, @@ -40,16 +40,16 @@ CKeyboard::CKeyboard(SP keeb) : keyboard(keeb) { updateXkbStateWithKey(E.key + 8, E.pressed); }); - listeners.modifiers = keeb->events.modifiers.registerListener([this](std::any d) { + m_listeners.modifiers = keeb->events.modifiers.registerListener([this](std::any d) { updateModifiersState(); - keyboardEvents.modifiers.emit(SModifiersEvent{ - .depressed = modifiersState.depressed, - .latched = modifiersState.latched, - .locked = modifiersState.locked, - .group = modifiersState.group, + m_keyboardEvents.modifiers.emit(SModifiersEvent{ + .depressed = m_modifiersState.depressed, + .latched = m_modifiersState.latched, + .locked = m_modifiersState.locked, + .group = m_modifiersState.group, }); }); - deviceName = keeb->getName(); + m_deviceName = keeb->getName(); } diff --git a/src/devices/Keyboard.hpp b/src/devices/Keyboard.hpp index f6de43cb..2ba4626d 100644 --- a/src/devices/Keyboard.hpp +++ b/src/devices/Keyboard.hpp @@ -12,11 +12,11 @@ class CKeyboard : public IKeyboard { private: CKeyboard(SP keeb); - WP keyboard; + WP m_keyboard; struct { CHyprSignalListener destroy; CHyprSignalListener key; CHyprSignalListener modifiers; - } listeners; + } m_listeners; }; \ No newline at end of file diff --git a/src/devices/Mouse.cpp b/src/devices/Mouse.cpp index 600ae5a8..539aecf7 100644 --- a/src/devices/Mouse.cpp +++ b/src/devices/Mouse.cpp @@ -5,51 +5,51 @@ SP CMouse::create(SP mouse) { SP pMouse = SP(new CMouse(mouse)); - pMouse->self = pMouse; + pMouse->m_self = pMouse; return pMouse; } -CMouse::CMouse(SP mouse_) : mouse(mouse_) { - if (!mouse) +CMouse::CMouse(SP mouse_) : m_mouse(mouse_) { + if (!m_mouse) return; - if (auto handle = mouse->getLibinputHandle()) { + if (auto handle = m_mouse->getLibinputHandle()) { double w = 0, h = 0; - isTouchpad = libinput_device_has_capability(handle, LIBINPUT_DEVICE_CAP_POINTER) && libinput_device_get_size(handle, &w, &h) == 0; + m_isTouchpad = libinput_device_has_capability(handle, LIBINPUT_DEVICE_CAP_POINTER) && libinput_device_get_size(handle, &w, &h) == 0; } - listeners.destroy = mouse->events.destroy.registerListener([this](std::any d) { - mouse.reset(); - events.destroy.emit(); + m_listeners.destroy = m_mouse->events.destroy.registerListener([this](std::any d) { + m_mouse.reset(); + m_events.destroy.emit(); }); - listeners.motion = mouse->events.move.registerListener([this](std::any d) { + m_listeners.motion = m_mouse->events.move.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.motion.emit(SMotionEvent{ + m_pointerEvents.motion.emit(SMotionEvent{ .timeMs = E.timeMs, .delta = E.delta, .unaccel = E.unaccel, .mouse = true, - .device = self.lock(), + .device = m_self.lock(), }); }); - listeners.motionAbsolute = mouse->events.warp.registerListener([this](std::any d) { + m_listeners.motionAbsolute = m_mouse->events.warp.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.motionAbsolute.emit(SMotionAbsoluteEvent{ + m_pointerEvents.motionAbsolute.emit(SMotionAbsoluteEvent{ .timeMs = E.timeMs, .absolute = E.absolute, - .device = self.lock(), + .device = m_self.lock(), }); }); - listeners.button = mouse->events.button.registerListener([this](std::any d) { + m_listeners.button = m_mouse->events.button.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.button.emit(SButtonEvent{ + m_pointerEvents.button.emit(SButtonEvent{ .timeMs = E.timeMs, .button = E.button, .state = E.pressed ? WL_POINTER_BUTTON_STATE_PRESSED : WL_POINTER_BUTTON_STATE_RELEASED, @@ -57,10 +57,10 @@ CMouse::CMouse(SP mouse_) : mouse(mouse_) { }); }); - listeners.axis = mouse->events.axis.registerListener([this](std::any d) { + m_listeners.axis = m_mouse->events.axis.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.axis.emit(SAxisEvent{ + m_pointerEvents.axis.emit(SAxisEvent{ .timeMs = E.timeMs, .source = (wl_pointer_axis_source)E.source, .axis = (wl_pointer_axis)E.axis, @@ -71,58 +71,58 @@ CMouse::CMouse(SP mouse_) : mouse(mouse_) { }); }); - listeners.frame = mouse->events.frame.registerListener([this](std::any d) { pointerEvents.frame.emit(); }); + m_listeners.frame = m_mouse->events.frame.registerListener([this](std::any d) { m_pointerEvents.frame.emit(); }); - listeners.swipeBegin = mouse->events.swipeBegin.registerListener([this](std::any d) { + m_listeners.swipeBegin = m_mouse->events.swipeBegin.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.swipeBegin.emit(SSwipeBeginEvent{ + m_pointerEvents.swipeBegin.emit(SSwipeBeginEvent{ .timeMs = E.timeMs, .fingers = E.fingers, }); }); - listeners.swipeEnd = mouse->events.swipeEnd.registerListener([this](std::any d) { + m_listeners.swipeEnd = m_mouse->events.swipeEnd.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.swipeEnd.emit(SSwipeEndEvent{ + m_pointerEvents.swipeEnd.emit(SSwipeEndEvent{ .timeMs = E.timeMs, .cancelled = E.cancelled, }); }); - listeners.swipeUpdate = mouse->events.swipeUpdate.registerListener([this](std::any d) { + m_listeners.swipeUpdate = m_mouse->events.swipeUpdate.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.swipeUpdate.emit(SSwipeUpdateEvent{ + m_pointerEvents.swipeUpdate.emit(SSwipeUpdateEvent{ .timeMs = E.timeMs, .fingers = E.fingers, .delta = E.delta, }); }); - listeners.pinchBegin = mouse->events.pinchBegin.registerListener([this](std::any d) { + m_listeners.pinchBegin = m_mouse->events.pinchBegin.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.pinchBegin.emit(SPinchBeginEvent{ + m_pointerEvents.pinchBegin.emit(SPinchBeginEvent{ .timeMs = E.timeMs, .fingers = E.fingers, }); }); - listeners.pinchEnd = mouse->events.pinchEnd.registerListener([this](std::any d) { + m_listeners.pinchEnd = m_mouse->events.pinchEnd.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.pinchEnd.emit(SPinchEndEvent{ + m_pointerEvents.pinchEnd.emit(SPinchEndEvent{ .timeMs = E.timeMs, .cancelled = E.cancelled, }); }); - listeners.pinchUpdate = mouse->events.pinchUpdate.registerListener([this](std::any d) { + m_listeners.pinchUpdate = m_mouse->events.pinchUpdate.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.pinchUpdate.emit(SPinchUpdateEvent{ + m_pointerEvents.pinchUpdate.emit(SPinchUpdateEvent{ .timeMs = E.timeMs, .fingers = E.fingers, .delta = E.delta, @@ -131,25 +131,25 @@ CMouse::CMouse(SP mouse_) : mouse(mouse_) { }); }); - listeners.holdBegin = mouse->events.holdBegin.registerListener([this](std::any d) { + m_listeners.holdBegin = m_mouse->events.holdBegin.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.holdBegin.emit(SHoldBeginEvent{ + m_pointerEvents.holdBegin.emit(SHoldBeginEvent{ .timeMs = E.timeMs, .fingers = E.fingers, }); }); - listeners.holdEnd = mouse->events.holdEnd.registerListener([this](std::any d) { + m_listeners.holdEnd = m_mouse->events.holdEnd.registerListener([this](std::any d) { auto E = std::any_cast(d); - pointerEvents.holdEnd.emit(SHoldEndEvent{ + m_pointerEvents.holdEnd.emit(SHoldEndEvent{ .timeMs = E.timeMs, .cancelled = E.cancelled, }); }); - deviceName = mouse->getName(); + m_deviceName = m_mouse->getName(); } bool CMouse::isVirtual() { @@ -157,5 +157,5 @@ bool CMouse::isVirtual() { } SP CMouse::aq() { - return mouse.lock(); + return m_mouse.lock(); } diff --git a/src/devices/Mouse.hpp b/src/devices/Mouse.hpp index 2b51fbe9..f99b663e 100644 --- a/src/devices/Mouse.hpp +++ b/src/devices/Mouse.hpp @@ -12,7 +12,7 @@ class CMouse : public IPointer { private: CMouse(SP mouse); - WP mouse; + WP m_mouse; struct { CHyprSignalListener destroy; @@ -33,5 +33,5 @@ class CMouse : public IPointer { CHyprSignalListener holdBegin; CHyprSignalListener holdEnd; - } listeners; + } m_listeners; }; diff --git a/src/devices/Tablet.cpp b/src/devices/Tablet.cpp index 99e436fb..e4c399c9 100644 --- a/src/devices/Tablet.cpp +++ b/src/devices/Tablet.cpp @@ -7,7 +7,7 @@ SP CTablet::create(SP tablet) { SP pTab = SP(new CTablet(tablet)); - pTab->self = pTab; + pTab->m_self = pTab; PROTO::tablet->registerDevice(pTab); @@ -17,7 +17,7 @@ SP CTablet::create(SP tablet) { SP CTabletTool::create(SP tablet) { SP pTab = SP(new CTabletTool(tablet)); - pTab->self = pTab; + pTab->m_self = pTab; PROTO::tablet->registerDevice(pTab); @@ -27,7 +27,7 @@ SP CTabletTool::create(SP tablet) { SP CTabletPad::create(SP tablet) { SP pTab = SP(new CTabletPad(tablet)); - pTab->self = pTab; + pTab->m_self = pTab; PROTO::tablet->registerDevice(pTab); @@ -62,24 +62,24 @@ uint32_t CTablet::getCapabilities() { } SP CTablet::aq() { - return tablet.lock(); + return m_tablet.lock(); } -CTablet::CTablet(SP tablet_) : tablet(tablet_) { - if (!tablet) +CTablet::CTablet(SP tablet_) : m_tablet(tablet_) { + if (!m_tablet) return; - listeners.destroy = tablet->events.destroy.registerListener([this](std::any d) { - tablet.reset(); - events.destroy.emit(); + m_listeners.destroy = m_tablet->events.destroy.registerListener([this](std::any d) { + m_tablet.reset(); + m_events.destroy.emit(); }); - listeners.axis = tablet->events.axis.registerListener([this](std::any d) { + m_listeners.axis = m_tablet->events.axis.registerListener([this](std::any d) { auto E = std::any_cast(d); - tabletEvents.axis.emit(SAxisEvent{ + m_tabletEvents.axis.emit(SAxisEvent{ .tool = E.tool, - .tablet = self.lock(), + .tablet = m_self.lock(), .timeMs = E.timeMs, .updatedAxes = aqUpdateToHl(E.updatedAxes), .axis = E.absolute, @@ -93,43 +93,43 @@ CTablet::CTablet(SP tablet_) : tablet(tablet_) { }); }); - listeners.proximity = tablet->events.proximity.registerListener([this](std::any d) { + m_listeners.proximity = m_tablet->events.proximity.registerListener([this](std::any d) { auto E = std::any_cast(d); - tabletEvents.proximity.emit(SProximityEvent{ + m_tabletEvents.proximity.emit(SProximityEvent{ .tool = E.tool, - .tablet = self.lock(), + .tablet = m_self.lock(), .timeMs = E.timeMs, .proximity = E.absolute, .in = E.in, }); }); - listeners.tip = tablet->events.tip.registerListener([this](std::any d) { + m_listeners.tip = m_tablet->events.tip.registerListener([this](std::any d) { auto E = std::any_cast(d); - tabletEvents.tip.emit(STipEvent{ + m_tabletEvents.tip.emit(STipEvent{ .tool = E.tool, - .tablet = self.lock(), + .tablet = m_self.lock(), .timeMs = E.timeMs, .tip = E.absolute, .in = E.down, }); }); - listeners.button = tablet->events.button.registerListener([this](std::any d) { + m_listeners.button = m_tablet->events.button.registerListener([this](std::any d) { auto E = std::any_cast(d); - tabletEvents.button.emit(SButtonEvent{ + m_tabletEvents.button.emit(SButtonEvent{ .tool = E.tool, - .tablet = self.lock(), + .tablet = m_self.lock(), .timeMs = E.timeMs, .button = E.button, .down = E.down, }); }); - deviceName = tablet->getName(); + m_deviceName = m_tablet->getName(); } CTablet::~CTablet() { @@ -145,26 +145,26 @@ uint32_t CTabletPad::getCapabilities() { } SP CTabletPad::aq() { - return pad.lock(); + return m_pad.lock(); } eHIDType CTabletPad::getType() { return HID_TYPE_TABLET_PAD; } -CTabletPad::CTabletPad(SP pad_) : pad(pad_) { - if (!pad) +CTabletPad::CTabletPad(SP pad_) : m_pad(pad_) { + if (!m_pad) return; - listeners.destroy = pad->events.destroy.registerListener([this](std::any d) { - pad.reset(); - events.destroy.emit(); + m_listeners.destroy = m_pad->events.destroy.registerListener([this](std::any d) { + m_pad.reset(); + m_events.destroy.emit(); }); - listeners.button = pad->events.button.registerListener([this](std::any d) { + m_listeners.button = m_pad->events.button.registerListener([this](std::any d) { auto E = std::any_cast(d); - padEvents.button.emit(SButtonEvent{ + m_padEvents.button.emit(SButtonEvent{ .timeMs = E.timeMs, .button = E.button, .down = E.down, @@ -173,10 +173,10 @@ CTabletPad::CTabletPad(SP pad_) : pad(pad_) { }); }); - listeners.ring = pad->events.ring.registerListener([this](std::any d) { + m_listeners.ring = m_pad->events.ring.registerListener([this](std::any d) { auto E = std::any_cast(d); - padEvents.ring.emit(SRingEvent{ + m_padEvents.ring.emit(SRingEvent{ .timeMs = E.timeMs, .finger = E.source == Aquamarine::ITabletPad::AQ_TABLET_PAD_RING_SOURCE_FINGER, .ring = E.ring, @@ -185,10 +185,10 @@ CTabletPad::CTabletPad(SP pad_) : pad(pad_) { }); }); - listeners.strip = pad->events.strip.registerListener([this](std::any d) { + m_listeners.strip = m_pad->events.strip.registerListener([this](std::any d) { auto E = std::any_cast(d); - padEvents.strip.emit(SStripEvent{ + m_padEvents.strip.emit(SStripEvent{ .timeMs = E.timeMs, .finger = E.source == Aquamarine::ITabletPad::AQ_TABLET_PAD_STRIP_SOURCE_FINGER, .strip = E.strip, @@ -197,11 +197,11 @@ CTabletPad::CTabletPad(SP pad_) : pad(pad_) { }); }); - listeners.attach = pad->events.attach.registerListener([](std::any d) { + m_listeners.attach = m_pad->events.attach.registerListener([](std::any d) { ; // TODO: this doesn't do anything in aq atm }); - deviceName = pad->getName(); + m_deviceName = m_pad->getName(); } CTabletPad::~CTabletPad() { @@ -213,36 +213,36 @@ uint32_t CTabletTool::getCapabilities() { } SP CTabletTool::aq() { - return tool.lock(); + return m_tool.lock(); } eHIDType CTabletTool::getType() { return HID_TYPE_TABLET_TOOL; } -CTabletTool::CTabletTool(SP tool_) : tool(tool_) { - if (!tool) +CTabletTool::CTabletTool(SP tool_) : m_tool(tool_) { + if (!m_tool) return; - listeners.destroyTool = tool->events.destroy.registerListener([this](std::any d) { - tool.reset(); - events.destroy.emit(); + m_listeners.destroyTool = m_tool->events.destroy.registerListener([this](std::any d) { + m_tool.reset(); + m_events.destroy.emit(); }); - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_TILT) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_TILT; - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_PRESSURE) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_PRESSURE; - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_DISTANCE) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_DISTANCE; - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_ROTATION) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_ROTATION; - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_SLIDER) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_SLIDER; - if (tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_WHEEL) - toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_WHEEL; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_TILT) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_TILT; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_PRESSURE) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_PRESSURE; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_DISTANCE) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_DISTANCE; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_ROTATION) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_ROTATION; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_SLIDER) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_SLIDER; + if (m_tool->capabilities & Aquamarine::ITabletTool::AQ_TABLET_TOOL_CAPABILITY_WHEEL) + m_toolCapabilities |= HID_TABLET_TOOL_CAPABILITY_WHEEL; - deviceName = std::format("{:x}-{:x}", tool->serial, tool->id); + m_deviceName = std::format("{:x}-{:x}", m_tool->serial, m_tool->id); } CTabletTool::~CTabletTool() { @@ -250,25 +250,25 @@ CTabletTool::~CTabletTool() { } SP CTabletTool::getSurface() { - return pSurface.lock(); + return m_surface.lock(); } void CTabletTool::setSurface(SP surf) { - if (surf == pSurface) + if (surf == m_surface) return; - if (pSurface) { - listeners.destroySurface.reset(); - pSurface.reset(); + if (m_surface) { + m_listeners.destroySurface.reset(); + m_surface.reset(); } - pSurface = surf; + m_surface = surf; if (surf) { - listeners.destroySurface = surf->events.destroy.registerListener([this](std::any d) { - PROTO::tablet->proximityOut(self.lock()); - pSurface.reset(); - listeners.destroySurface.reset(); + m_listeners.destroySurface = surf->events.destroy.registerListener([this](std::any d) { + PROTO::tablet->proximityOut(m_self.lock()); + m_surface.reset(); + m_listeners.destroySurface.reset(); }); } } diff --git a/src/devices/Tablet.hpp b/src/devices/Tablet.hpp index c3a9a2c9..b98c7f85 100644 --- a/src/devices/Tablet.hpp +++ b/src/devices/Tablet.hpp @@ -86,20 +86,20 @@ class CTablet : public IHID { CSignal proximity; CSignal tip; CSignal button; - } tabletEvents; + } m_tabletEvents; - WP self; + WP m_self; - bool relativeInput = false; - bool absolutePos = false; - std::string boundOutput = ""; - CBox activeArea; - CBox boundBox; + bool m_relativeInput = false; + bool m_absolutePos = false; + std::string m_boundOutput = ""; + CBox m_activeArea; + CBox m_boundBox; private: CTablet(SP tablet); - WP tablet; + WP m_tablet; struct { CHyprSignalListener destroy; @@ -107,7 +107,7 @@ class CTablet : public IHID { CHyprSignalListener proximity; CHyprSignalListener tip; CHyprSignalListener button; - } listeners; + } m_listeners; }; class CTabletPad : public IHID { @@ -148,15 +148,15 @@ class CTabletPad : public IHID { CSignal ring; CSignal strip; CSignal attach; - } padEvents; + } m_padEvents; - WP self; - WP parent; + WP m_self; + WP m_parent; private: CTabletPad(SP pad); - WP pad; + WP m_pad; struct { CHyprSignalListener destroy; @@ -164,7 +164,7 @@ class CTabletPad : public IHID { CHyprSignalListener strip; CHyprSignalListener button; CHyprSignalListener attach; - } listeners; + } m_listeners; }; class CTabletTool : public IHID { @@ -198,23 +198,23 @@ class CTabletTool : public IHID { SP getSurface(); void setSurface(SP); - WP self; - Vector2D tilt; - bool active = false; // true if in proximity - uint32_t toolCapabilities = 0; + WP m_self; + Vector2D m_tilt; + bool m_active = false; // true if in proximity + uint32_t m_toolCapabilities = 0; - bool isDown = false; - std::vector buttonsDown; - Vector2D absolutePos; // last known absolute position. + bool m_isDown = false; + std::vector m_buttonsDown; + Vector2D m_absolutePos; // last known absolute position. private: CTabletTool(SP tool); - WP pSurface; - WP tool; + WP m_surface; + WP m_tool; struct { CHyprSignalListener destroySurface; CHyprSignalListener destroyTool; - } listeners; + } m_listeners; }; \ No newline at end of file diff --git a/src/devices/TouchDevice.cpp b/src/devices/TouchDevice.cpp index 25b7b503..c2ff4d6f 100644 --- a/src/devices/TouchDevice.cpp +++ b/src/devices/TouchDevice.cpp @@ -5,62 +5,62 @@ SP CTouchDevice::create(SP touch) { SP pTouch = SP(new CTouchDevice(touch)); - pTouch->self = pTouch; + pTouch->m_self = pTouch; return pTouch; } -CTouchDevice::CTouchDevice(SP touch_) : touch(touch_) { - if (!touch) +CTouchDevice::CTouchDevice(SP touch_) : m_touch(touch_) { + if (!m_touch) return; - listeners.destroy = touch->events.destroy.registerListener([this](std::any d) { - events.destroy.emit(); - touch.reset(); + m_listeners.destroy = m_touch->events.destroy.registerListener([this](std::any d) { + m_events.destroy.emit(); + m_touch.reset(); }); - listeners.down = touch->events.down.registerListener([this](std::any d) { + m_listeners.down = m_touch->events.down.registerListener([this](std::any d) { auto E = std::any_cast(d); - touchEvents.down.emit(SDownEvent{ + m_touchEvents.down.emit(SDownEvent{ .timeMs = E.timeMs, .touchID = E.touchID, .pos = E.pos, - .device = self.lock(), + .device = m_self.lock(), }); }); - listeners.up = touch->events.up.registerListener([this](std::any d) { + m_listeners.up = m_touch->events.up.registerListener([this](std::any d) { auto E = std::any_cast(d); - touchEvents.up.emit(SUpEvent{ + m_touchEvents.up.emit(SUpEvent{ .timeMs = E.timeMs, .touchID = E.touchID, }); }); - listeners.motion = touch->events.move.registerListener([this](std::any d) { + m_listeners.motion = m_touch->events.move.registerListener([this](std::any d) { auto E = std::any_cast(d); - touchEvents.motion.emit(SMotionEvent{ + m_touchEvents.motion.emit(SMotionEvent{ .timeMs = E.timeMs, .touchID = E.touchID, .pos = E.pos, }); }); - listeners.cancel = touch->events.cancel.registerListener([this](std::any d) { + m_listeners.cancel = m_touch->events.cancel.registerListener([this](std::any d) { auto E = std::any_cast(d); - touchEvents.cancel.emit(SCancelEvent{ + m_touchEvents.cancel.emit(SCancelEvent{ .timeMs = E.timeMs, .touchID = E.touchID, }); }); - listeners.frame = touch->events.frame.registerListener([this](std::any d) { touchEvents.frame.emit(); }); + m_listeners.frame = m_touch->events.frame.registerListener([this](std::any d) { m_touchEvents.frame.emit(); }); - deviceName = touch->getName(); + m_deviceName = m_touch->getName(); } bool CTouchDevice::isVirtual() { @@ -68,5 +68,5 @@ bool CTouchDevice::isVirtual() { } SP CTouchDevice::aq() { - return touch.lock(); + return m_touch.lock(); } diff --git a/src/devices/TouchDevice.hpp b/src/devices/TouchDevice.hpp index b18df2d0..9b32077d 100644 --- a/src/devices/TouchDevice.hpp +++ b/src/devices/TouchDevice.hpp @@ -12,7 +12,7 @@ class CTouchDevice : public ITouch { private: CTouchDevice(SP touch); - WP touch; + WP m_touch; struct { CHyprSignalListener destroy; @@ -21,5 +21,5 @@ class CTouchDevice : public ITouch { CHyprSignalListener motion; CHyprSignalListener cancel; CHyprSignalListener frame; - } listeners; + } m_listeners; }; \ No newline at end of file diff --git a/src/devices/VirtualKeyboard.cpp b/src/devices/VirtualKeyboard.cpp index 548711c2..4fb25b5b 100644 --- a/src/devices/VirtualKeyboard.cpp +++ b/src/devices/VirtualKeyboard.cpp @@ -5,43 +5,43 @@ SP CVirtualKeyboard::create(SP keeb) { SP pKeeb = SP(new CVirtualKeyboard(keeb)); - pKeeb->self = pKeeb; + pKeeb->m_self = pKeeb; return pKeeb; } -CVirtualKeyboard::CVirtualKeyboard(SP keeb_) : keyboard(keeb_) { +CVirtualKeyboard::CVirtualKeyboard(SP keeb_) : m_keyboard(keeb_) { if (!keeb_) return; - listeners.destroy = keeb_->events.destroy.registerListener([this](std::any d) { - keyboard.reset(); - events.destroy.emit(); + m_listeners.destroy = keeb_->events.destroy.registerListener([this](std::any d) { + m_keyboard.reset(); + m_events.destroy.emit(); }); - listeners.key = keeb_->events.key.registerListener([this](std::any d) { keyboardEvents.key.emit(d); }); - listeners.modifiers = keeb_->events.modifiers.registerListener([this](std::any d) { + m_listeners.key = keeb_->events.key.registerListener([this](std::any d) { m_keyboardEvents.key.emit(d); }); + m_listeners.modifiers = keeb_->events.modifiers.registerListener([this](std::any d) { auto E = std::any_cast(d); updateModifiers(E.depressed, E.latched, E.locked, E.group); - keyboardEvents.modifiers.emit(SModifiersEvent{ - .depressed = modifiersState.depressed, - .latched = modifiersState.latched, - .locked = modifiersState.locked, - .group = modifiersState.group, + m_keyboardEvents.modifiers.emit(SModifiersEvent{ + .depressed = m_modifiersState.depressed, + .latched = m_modifiersState.latched, + .locked = m_modifiersState.locked, + .group = m_modifiersState.group, }); }); - listeners.keymap = keeb_->events.keymap.registerListener([this](std::any d) { + m_listeners.keymap = keeb_->events.keymap.registerListener([this](std::any d) { auto E = std::any_cast(d); - if (xkbKeymap) - xkb_keymap_unref(xkbKeymap); - xkbKeymap = xkb_keymap_ref(E.keymap); - keymapOverridden = true; - updateXKBTranslationState(xkbKeymap); + if (m_xkbKeymap) + xkb_keymap_unref(m_xkbKeymap); + m_xkbKeymap = xkb_keymap_ref(E.keymap); + m_keymapOverridden = true; + updateXKBTranslationState(m_xkbKeymap); updateKeymapFD(); - keyboardEvents.keymap.emit(d); + m_keyboardEvents.keymap.emit(d); }); - deviceName = keeb_->name; + m_deviceName = keeb_->name; } bool CVirtualKeyboard::isVirtual() { @@ -53,7 +53,7 @@ SP CVirtualKeyboard::aq() { } wl_client* CVirtualKeyboard::getClient() { - if (keyboard.expired()) + if (m_keyboard.expired()) return nullptr; - return keyboard->client(); + return m_keyboard->client(); } diff --git a/src/devices/VirtualKeyboard.hpp b/src/devices/VirtualKeyboard.hpp index 12a3907c..05e0a255 100644 --- a/src/devices/VirtualKeyboard.hpp +++ b/src/devices/VirtualKeyboard.hpp @@ -16,12 +16,12 @@ class CVirtualKeyboard : public IKeyboard { private: CVirtualKeyboard(SP keeb); - WP keyboard; + WP m_keyboard; struct { CHyprSignalListener destroy; CHyprSignalListener key; CHyprSignalListener modifiers; CHyprSignalListener keymap; - } listeners; + } m_listeners; }; diff --git a/src/devices/VirtualPointer.cpp b/src/devices/VirtualPointer.cpp index e98acd04..1aaf8b10 100644 --- a/src/devices/VirtualPointer.cpp +++ b/src/devices/VirtualPointer.cpp @@ -5,46 +5,46 @@ SP CVirtualPointer::create(SP resource) { SP pPointer = SP(new CVirtualPointer(resource)); - pPointer->self = pPointer; + pPointer->m_self = pPointer; return pPointer; } -CVirtualPointer::CVirtualPointer(SP resource) : pointer(resource) { +CVirtualPointer::CVirtualPointer(SP resource) : m_pointer(resource) { if UNLIKELY (!resource->good()) return; - listeners.destroy = pointer->events.destroy.registerListener([this](std::any d) { - pointer.reset(); - events.destroy.emit(); + m_listeners.destroy = m_pointer->events.destroy.registerListener([this](std::any d) { + m_pointer.reset(); + m_events.destroy.emit(); }); - listeners.motion = pointer->events.move.registerListener([this](std::any d) { + m_listeners.motion = m_pointer->events.move.registerListener([this](std::any d) { auto E = std::any_cast(d); - E.device = self.lock(); - pointerEvents.motion.emit(E); + E.device = m_self.lock(); + m_pointerEvents.motion.emit(E); }); - listeners.motionAbsolute = pointer->events.warp.registerListener([this](std::any d) { + m_listeners.motionAbsolute = m_pointer->events.warp.registerListener([this](std::any d) { // we need to unpack the event and add our device here because it's required to calculate the position correctly auto E = std::any_cast(d); - E.device = self.lock(); - pointerEvents.motionAbsolute.emit(E); + E.device = m_self.lock(); + m_pointerEvents.motionAbsolute.emit(E); }); - listeners.button = pointer->events.button.registerListener([this](std::any d) { pointerEvents.button.emit(d); }); - listeners.axis = pointer->events.axis.registerListener([this](std::any d) { pointerEvents.axis.emit(d); }); - listeners.frame = pointer->events.frame.registerListener([this](std::any d) { pointerEvents.frame.emit(); }); - listeners.swipeBegin = pointer->events.swipeBegin.registerListener([this](std::any d) { pointerEvents.swipeBegin.emit(d); }); - listeners.swipeEnd = pointer->events.swipeEnd.registerListener([this](std::any d) { pointerEvents.swipeEnd.emit(d); }); - listeners.swipeUpdate = pointer->events.swipeUpdate.registerListener([this](std::any d) { pointerEvents.swipeUpdate.emit(d); }); - listeners.pinchBegin = pointer->events.pinchBegin.registerListener([this](std::any d) { pointerEvents.pinchBegin.emit(d); }); - listeners.pinchEnd = pointer->events.pinchEnd.registerListener([this](std::any d) { pointerEvents.pinchEnd.emit(d); }); - listeners.pinchUpdate = pointer->events.pinchUpdate.registerListener([this](std::any d) { pointerEvents.pinchUpdate.emit(d); }); - listeners.holdBegin = pointer->events.holdBegin.registerListener([this](std::any d) { pointerEvents.holdBegin.emit(d); }); - listeners.holdEnd = pointer->events.holdEnd.registerListener([this](std::any d) { pointerEvents.holdEnd.emit(d); }); + m_listeners.button = m_pointer->events.button.registerListener([this](std::any d) { m_pointerEvents.button.emit(d); }); + m_listeners.axis = m_pointer->events.axis.registerListener([this](std::any d) { m_pointerEvents.axis.emit(d); }); + m_listeners.frame = m_pointer->events.frame.registerListener([this](std::any d) { m_pointerEvents.frame.emit(); }); + m_listeners.swipeBegin = m_pointer->events.swipeBegin.registerListener([this](std::any d) { m_pointerEvents.swipeBegin.emit(d); }); + m_listeners.swipeEnd = m_pointer->events.swipeEnd.registerListener([this](std::any d) { m_pointerEvents.swipeEnd.emit(d); }); + m_listeners.swipeUpdate = m_pointer->events.swipeUpdate.registerListener([this](std::any d) { m_pointerEvents.swipeUpdate.emit(d); }); + m_listeners.pinchBegin = m_pointer->events.pinchBegin.registerListener([this](std::any d) { m_pointerEvents.pinchBegin.emit(d); }); + m_listeners.pinchEnd = m_pointer->events.pinchEnd.registerListener([this](std::any d) { m_pointerEvents.pinchEnd.emit(d); }); + m_listeners.pinchUpdate = m_pointer->events.pinchUpdate.registerListener([this](std::any d) { m_pointerEvents.pinchUpdate.emit(d); }); + m_listeners.holdBegin = m_pointer->events.holdBegin.registerListener([this](std::any d) { m_pointerEvents.holdBegin.emit(d); }); + m_listeners.holdEnd = m_pointer->events.holdEnd.registerListener([this](std::any d) { m_pointerEvents.holdEnd.emit(d); }); - boundOutput = resource->boundOutput ? resource->boundOutput->szName : ""; + m_boundOutput = resource->boundOutput ? resource->boundOutput->szName : ""; - deviceName = pointer->name; + m_deviceName = m_pointer->name; } bool CVirtualPointer::isVirtual() { diff --git a/src/devices/VirtualPointer.hpp b/src/devices/VirtualPointer.hpp index 1ecfd842..9eacbd5f 100644 --- a/src/devices/VirtualPointer.hpp +++ b/src/devices/VirtualPointer.hpp @@ -14,7 +14,7 @@ class CVirtualPointer : public IPointer { private: CVirtualPointer(SP); - WP pointer; + WP m_pointer; struct { CHyprSignalListener destroy; @@ -35,5 +35,5 @@ class CVirtualPointer : public IPointer { CHyprSignalListener holdBegin; CHyprSignalListener holdEnd; - } listeners; + } m_listeners; }; \ No newline at end of file diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 7f0045e0..7d07a717 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -151,7 +151,7 @@ CKeybindManager::CKeybindManager() { return; const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); - if (!PACTIVEKEEB->allowBinds) + if (!PACTIVEKEEB->m_allowBinds) return; const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(m_pLastLongPressKeybind->handler); @@ -168,7 +168,7 @@ CKeybindManager::CKeybindManager() { return; const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); - if (!PACTIVEKEEB->allowBinds) + if (!PACTIVEKEEB->m_allowBinds) return; for (const auto& k : m_vActiveKeybinds) { @@ -178,7 +178,7 @@ CKeybindManager::CKeybindManager() { DISPATCHER->second(k->arg); } - self->updateTimeout(std::chrono::milliseconds(1000 / PACTIVEKEEB->repeatRate)); + self->updateTimeout(std::chrono::milliseconds(1000 / PACTIVEKEEB->m_repeatRate)); }, nullptr); @@ -431,7 +431,7 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { return true; } - if (!pKeyboard->allowBinds) + if (!pKeyboard->m_allowBinds) return true; if (!m_pXKBTranslationState) { @@ -446,8 +446,8 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput - const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->resolveBindsBySym ? pKeyboard->xkbSymState : m_pXKBTranslationState, KEYCODE); - const xkb_keysym_t internalKeysym = xkb_state_key_get_one_sym(pKeyboard->xkbState, KEYCODE); + const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->m_resolveBindsBySym ? pKeyboard->m_xkbSymState : m_pXKBTranslationState, KEYCODE); + const xkb_keysym_t internalKeysym = xkb_state_key_get_one_sym(pKeyboard->m_xkbState, KEYCODE); if (keysym == XKB_KEY_Escape || internalKeysym == XKB_KEY_Escape) PROTO::data->abortDndIfPresent(); @@ -764,7 +764,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP if (k->longPress) { const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); - m_pLongPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->repeatDelay)); + m_pLongPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); m_pLastLongPressKeybind = k; continue; @@ -804,7 +804,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); m_vActiveKeybinds.emplace_back(k); - m_pRepeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->repeatDelay)); + m_pRepeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); } if (!k->nonConsuming) @@ -2541,8 +2541,8 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { const auto KEYPAIRSTRING = std::format("{}{}", (uintptr_t)KB.get(), KEY); if (!g_pKeybindManager->m_mKeyToCodeCache.contains(KEYPAIRSTRING)) { - xkb_keymap* km = KB->xkbKeymap; - xkb_state* ks = KB->xkbState; + xkb_keymap* km = KB->m_xkbKeymap; + xkb_state* ks = KB->m_xkbState; xkb_keycode_t keycode_min, keycode_max; keycode_min = xkb_keymap_min_keycode(km); diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index e8d71e1a..1c9036bf 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -805,31 +805,31 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { switch (dev->getType()) { case HID_TYPE_TABLET: { CTablet* TAB = reinterpret_cast(dev.get()); - if (!TAB->boundOutput.empty()) { - mappedArea = outputMappedArea(TAB->boundOutput); - mappedArea.translate(TAB->boundBox.pos()); - } else if (TAB->absolutePos) { - mappedArea.x = TAB->boundBox.x; - mappedArea.y = TAB->boundBox.y; + if (!TAB->m_boundOutput.empty()) { + mappedArea = outputMappedArea(TAB->m_boundOutput); + mappedArea.translate(TAB->m_boundBox.pos()); + } else if (TAB->m_absolutePos) { + mappedArea.x = TAB->m_boundBox.x; + mappedArea.y = TAB->m_boundBox.y; } else - mappedArea.translate(TAB->boundBox.pos()); + mappedArea.translate(TAB->m_boundBox.pos()); - if (!TAB->boundBox.empty()) { - mappedArea.w = TAB->boundBox.w; - mappedArea.h = TAB->boundBox.h; + if (!TAB->m_boundBox.empty()) { + mappedArea.w = TAB->m_boundBox.w; + mappedArea.h = TAB->m_boundBox.h; } break; } case HID_TYPE_TOUCH: { ITouch* TOUCH = reinterpret_cast(dev.get()); - if (!TOUCH->boundOutput.empty()) - mappedArea = outputMappedArea(TOUCH->boundOutput); + if (!TOUCH->m_boundOutput.empty()) + mappedArea = outputMappedArea(TOUCH->m_boundOutput); break; } case HID_TYPE_POINTER: { IPointer* POINTER = reinterpret_cast(dev.get()); - if (!POINTER->boundOutput.empty()) - mappedArea = outputMappedArea(POINTER->boundOutput); + if (!POINTER->m_boundOutput.empty()) + mappedArea = outputMappedArea(POINTER->m_boundOutput); break; } default: break; @@ -892,11 +892,11 @@ void CPointerManager::attachPointer(SP pointer) { listener->pointer = pointer; // clang-format off - listener->destroy = pointer->events.destroy.registerListener([this] (std::any d) { + listener->destroy = pointer->m_events.destroy.registerListener([this] (std::any d) { detachPointer(nullptr); }); - listener->motion = pointer->pointerEvents.motion.registerListener([] (std::any e) { + listener->motion = pointer->m_pointerEvents.motion.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onMouseMoved(E); @@ -907,7 +907,7 @@ void CPointerManager::attachPointer(SP pointer) { g_pKeybindManager->dpms("on"); }); - listener->motionAbsolute = pointer->pointerEvents.motionAbsolute.registerListener([] (std::any e) { + listener->motionAbsolute = pointer->m_pointerEvents.motionAbsolute.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onMouseWarp(E); @@ -918,7 +918,7 @@ void CPointerManager::attachPointer(SP pointer) { g_pKeybindManager->dpms("on"); }); - listener->button = pointer->pointerEvents.button.registerListener([] (std::any e) { + listener->button = pointer->m_pointerEvents.button.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onMouseButton(E); @@ -926,7 +926,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->axis = pointer->pointerEvents.axis.registerListener([] (std::any e) { + listener->axis = pointer->m_pointerEvents.axis.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onMouseWheel(E); @@ -934,7 +934,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->frame = pointer->pointerEvents.frame.registerListener([] (std::any e) { + listener->frame = pointer->m_pointerEvents.frame.registerListener([] (std::any e) { bool shouldSkip = false; if (!g_pSeatManager->mouse.expired() && g_pInputManager->isLocked()) { auto PMONITOR = g_pCompositor->m_lastMonitor.get(); @@ -945,7 +945,7 @@ void CPointerManager::attachPointer(SP pointer) { g_pSeatManager->sendPointerFrame(); }); - listener->swipeBegin = pointer->pointerEvents.swipeBegin.registerListener([] (std::any e) { + listener->swipeBegin = pointer->m_pointerEvents.swipeBegin.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onSwipeBegin(E); @@ -956,7 +956,7 @@ void CPointerManager::attachPointer(SP pointer) { g_pKeybindManager->dpms("on"); }); - listener->swipeEnd = pointer->pointerEvents.swipeEnd.registerListener([] (std::any e) { + listener->swipeEnd = pointer->m_pointerEvents.swipeEnd.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onSwipeEnd(E); @@ -964,7 +964,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->swipeUpdate = pointer->pointerEvents.swipeUpdate.registerListener([] (std::any e) { + listener->swipeUpdate = pointer->m_pointerEvents.swipeUpdate.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onSwipeUpdate(E); @@ -972,7 +972,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->pinchBegin = pointer->pointerEvents.pinchBegin.registerListener([] (std::any e) { + listener->pinchBegin = pointer->m_pointerEvents.pinchBegin.registerListener([] (std::any e) { auto E = std::any_cast(e); PROTO::pointerGestures->pinchBegin(E.timeMs, E.fingers); @@ -983,7 +983,7 @@ void CPointerManager::attachPointer(SP pointer) { g_pKeybindManager->dpms("on"); }); - listener->pinchEnd = pointer->pointerEvents.pinchEnd.registerListener([] (std::any e) { + listener->pinchEnd = pointer->m_pointerEvents.pinchEnd.registerListener([] (std::any e) { auto E = std::any_cast(e); PROTO::pointerGestures->pinchEnd(E.timeMs, E.cancelled); @@ -991,7 +991,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->pinchUpdate = pointer->pointerEvents.pinchUpdate.registerListener([] (std::any e) { + listener->pinchUpdate = pointer->m_pointerEvents.pinchUpdate.registerListener([] (std::any e) { auto E = std::any_cast(e); PROTO::pointerGestures->pinchUpdate(E.timeMs, E.delta, E.scale, E.rotation); @@ -999,7 +999,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->holdBegin = pointer->pointerEvents.holdBegin.registerListener([] (std::any e) { + listener->holdBegin = pointer->m_pointerEvents.holdBegin.registerListener([] (std::any e) { auto E = std::any_cast(e); PROTO::pointerGestures->holdBegin(E.timeMs, E.fingers); @@ -1007,7 +1007,7 @@ void CPointerManager::attachPointer(SP pointer) { PROTO::idle->onActivity(); }); - listener->holdEnd = pointer->pointerEvents.holdEnd.registerListener([] (std::any e) { + listener->holdEnd = pointer->m_pointerEvents.holdEnd.registerListener([] (std::any e) { auto E = std::any_cast(e); PROTO::pointerGestures->holdEnd(E.timeMs, E.cancelled); @@ -1016,7 +1016,7 @@ void CPointerManager::attachPointer(SP pointer) { }); // clang-format on - Debug::log(LOG, "Attached pointer {} to global", pointer->hlName); + Debug::log(LOG, "Attached pointer {} to global", pointer->m_hlName); } void CPointerManager::attachTouch(SP touch) { @@ -1031,11 +1031,11 @@ void CPointerManager::attachTouch(SP touch) { listener->touch = touch; // clang-format off - listener->destroy = touch->events.destroy.registerListener([this] (std::any d) { + listener->destroy = touch->m_events.destroy.registerListener([this] (std::any d) { detachTouch(nullptr); }); - listener->down = touch->touchEvents.down.registerListener([] (std::any e) { + listener->down = touch->m_touchEvents.down.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTouchDown(E); @@ -1046,7 +1046,7 @@ void CPointerManager::attachTouch(SP touch) { g_pKeybindManager->dpms("on"); }); - listener->up = touch->touchEvents.up.registerListener([] (std::any e) { + listener->up = touch->m_touchEvents.up.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTouchUp(E); @@ -1054,7 +1054,7 @@ void CPointerManager::attachTouch(SP touch) { PROTO::idle->onActivity(); }); - listener->motion = touch->touchEvents.motion.registerListener([] (std::any e) { + listener->motion = touch->m_touchEvents.motion.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTouchMove(E); @@ -1062,16 +1062,16 @@ void CPointerManager::attachTouch(SP touch) { PROTO::idle->onActivity(); }); - listener->cancel = touch->touchEvents.cancel.registerListener([] (std::any e) { + listener->cancel = touch->m_touchEvents.cancel.registerListener([] (std::any e) { // }); - listener->frame = touch->touchEvents.frame.registerListener([] (std::any e) { + listener->frame = touch->m_touchEvents.frame.registerListener([] (std::any e) { g_pSeatManager->sendTouchFrame(); }); // clang-format on - Debug::log(LOG, "Attached touch {} to global", touch->hlName); + Debug::log(LOG, "Attached touch {} to global", touch->m_hlName); } void CPointerManager::attachTablet(SP tablet) { @@ -1086,11 +1086,11 @@ void CPointerManager::attachTablet(SP tablet) { listener->tablet = tablet; // clang-format off - listener->destroy = tablet->events.destroy.registerListener([this] (std::any d) { + listener->destroy = tablet->m_events.destroy.registerListener([this] (std::any d) { detachTablet(nullptr); }); - listener->axis = tablet->tabletEvents.axis.registerListener([] (std::any e) { + listener->axis = tablet->m_tabletEvents.axis.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTabletAxis(E); @@ -1101,7 +1101,7 @@ void CPointerManager::attachTablet(SP tablet) { g_pKeybindManager->dpms("on"); }); - listener->proximity = tablet->tabletEvents.proximity.registerListener([] (std::any e) { + listener->proximity = tablet->m_tabletEvents.proximity.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTabletProximity(E); @@ -1109,7 +1109,7 @@ void CPointerManager::attachTablet(SP tablet) { PROTO::idle->onActivity(); }); - listener->tip = tablet->tabletEvents.tip.registerListener([] (std::any e) { + listener->tip = tablet->m_tabletEvents.tip.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTabletTip(E); @@ -1120,7 +1120,7 @@ void CPointerManager::attachTablet(SP tablet) { g_pKeybindManager->dpms("on"); }); - listener->button = tablet->tabletEvents.button.registerListener([] (std::any e) { + listener->button = tablet->m_tabletEvents.button.registerListener([] (std::any e) { auto E = std::any_cast(e); g_pInputManager->onTabletButton(E); @@ -1129,7 +1129,7 @@ void CPointerManager::attachTablet(SP tablet) { }); // clang-format on - Debug::log(LOG, "Attached tablet {} to global", tablet->hlName); + Debug::log(LOG, "Attached tablet {} to global", tablet->m_hlName); } void CPointerManager::detachPointer(SP pointer) { diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 6ea441e8..3fe407b3 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -87,18 +87,18 @@ void CSeatManager::setKeyboard(SP KEEB) { return; if (keyboard) - keyboard->active = false; + keyboard->m_active = false; keyboard = KEEB; if (KEEB) - KEEB->active = true; + KEEB->m_active = true; updateActiveKeyboardData(); } void CSeatManager::updateActiveKeyboardData() { if (keyboard) - PROTO::seat->updateRepeatInfo(keyboard->repeatRate, keyboard->repeatDelay); + PROTO::seat->updateRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay); PROTO::seat->updateKeymap(); } @@ -147,7 +147,7 @@ void CSeatManager::setKeyboardFocus(SP surf) { continue; k->sendEnter(surf); - k->sendMods(keyboard->modifiersState.depressed, keyboard->modifiersState.latched, keyboard->modifiersState.locked, keyboard->modifiersState.group); + k->sendMods(keyboard->m_modifiersState.depressed, keyboard->m_modifiersState.latched, keyboard->m_modifiersState.locked, keyboard->m_modifiersState.group); } } diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 319196ee..3c9c59b9 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -98,12 +98,12 @@ void CInputManager::onMouseMoved(IPointer::SMotionEvent e) { Vector2D unaccel = e.unaccel; if (e.device) { - if (e.device->isTouchpad) { - if (e.device->flipX) { + if (e.device->m_isTouchpad) { + if (e.device->m_flipX) { delta.x = -delta.x; unaccel.x = -unaccel.x; } - if (e.device->flipY) { + if (e.device->m_flipY) { delta.y = -delta.y; unaccel.y = -unaccel.y; } @@ -945,14 +945,14 @@ void CInputManager::setupKeyboard(SP keeb) { m_vHIDs.emplace_back(keeb); try { - keeb->hlName = getNameForNewDevice(keeb->deviceName); + keeb->m_hlName = getNameForNewDevice(keeb->m_deviceName); } catch (std::exception& e) { Debug::log(ERR, "Keyboard had no name???"); // logic error } - keeb->events.destroy.registerStaticListener( + keeb->m_events.destroy.registerStaticListener( [this](void* owner, std::any data) { - auto PKEEB = ((IKeyboard*)owner)->self.lock(); + auto PKEEB = ((IKeyboard*)owner)->m_self.lock(); if (!PKEEB) return; @@ -962,37 +962,37 @@ void CInputManager::setupKeyboard(SP keeb) { }, keeb.get()); - keeb->keyboardEvents.key.registerStaticListener( + keeb->m_keyboardEvents.key.registerStaticListener( [this](void* owner, std::any data) { - auto PKEEB = ((IKeyboard*)owner)->self.lock(); + auto PKEEB = ((IKeyboard*)owner)->m_self.lock(); onKeyboardKey(data, PKEEB); - if (PKEEB->enabled) + if (PKEEB->m_enabled) PROTO::idle->onActivity(); - if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) + if (PKEEB->m_enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) g_pKeybindManager->dpms("on"); }, keeb.get()); - keeb->keyboardEvents.modifiers.registerStaticListener( + keeb->m_keyboardEvents.modifiers.registerStaticListener( [this](void* owner, std::any data) { - auto PKEEB = ((IKeyboard*)owner)->self.lock(); + auto PKEEB = ((IKeyboard*)owner)->m_self.lock(); onKeyboardMod(PKEEB); - if (PKEEB->enabled) + if (PKEEB->m_enabled) PROTO::idle->onActivity(); - if (PKEEB->enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) + if (PKEEB->m_enabled && *PDPMS && !g_pCompositor->m_dpmsStateOn) g_pKeybindManager->dpms("on"); }, keeb.get()); - keeb->keyboardEvents.keymap.registerStaticListener( + keeb->m_keyboardEvents.keymap.registerStaticListener( [](void* owner, std::any data) { - auto PKEEB = ((IKeyboard*)owner)->self.lock(); + auto PKEEB = ((IKeyboard*)owner)->m_self.lock(); const auto LAYOUT = PKEEB->getActiveLayout(); if (PKEEB == g_pSeatManager->keyboard) { @@ -1000,7 +1000,7 @@ void CInputManager::setupKeyboard(SP keeb) { g_pKeybindManager->m_mKeyToCodeCache.clear(); } - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEEB->hlName + "," + LAYOUT}); + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEEB->m_hlName + "," + LAYOUT}); EMIT_HOOK_EVENT("activeLayout", (std::vector{PKEEB, LAYOUT})); }, keeb.get()); @@ -1022,7 +1022,7 @@ void CInputManager::setKeyboardLayout() { } void CInputManager::applyConfigToKeyboard(SP pKeyboard) { - auto devname = pKeyboard->hlName; + auto devname = pKeyboard->m_hlName; const auto HASCONFIG = g_pConfigManager->deviceConfigExists(devname); @@ -1044,14 +1044,14 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true; const auto ALLOWBINDS = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "keybinds") : true; - pKeyboard->enabled = ENABLED; - pKeyboard->resolveBindsBySym = RESOLVEBINDSBYSYM; - pKeyboard->allowBinds = ALLOWBINDS; + pKeyboard->m_enabled = ENABLED; + pKeyboard->m_resolveBindsBySym = RESOLVEBINDSBYSYM; + pKeyboard->m_allowBinds = ALLOWBINDS; try { - if (NUMLOCKON == pKeyboard->numlockOn && REPEATDELAY == pKeyboard->repeatDelay && REPEATRATE == pKeyboard->repeatRate && RULES != "" && - RULES == pKeyboard->currentRules.rules && MODEL == pKeyboard->currentRules.model && LAYOUT == pKeyboard->currentRules.layout && - VARIANT == pKeyboard->currentRules.variant && OPTIONS == pKeyboard->currentRules.options && FILEPATH == pKeyboard->xkbFilePath) { + if (NUMLOCKON == pKeyboard->m_numlockOn && REPEATDELAY == pKeyboard->m_repeatDelay && REPEATRATE == pKeyboard->m_repeatRate && RULES != "" && + RULES == pKeyboard->m_currentRules.rules && MODEL == pKeyboard->m_currentRules.model && LAYOUT == pKeyboard->m_currentRules.layout && + VARIANT == pKeyboard->m_currentRules.variant && OPTIONS == pKeyboard->m_currentRules.options && FILEPATH == pKeyboard->m_xkbFilePath) { Debug::log(LOG, "Not applying config to keyboard, it did not change."); return; } @@ -1060,19 +1060,20 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { // we can ignore those and just apply } - pKeyboard->repeatRate = std::max(0, REPEATRATE); - pKeyboard->repeatDelay = std::max(0, REPEATDELAY); - pKeyboard->numlockOn = NUMLOCKON; - pKeyboard->xkbFilePath = FILEPATH; + pKeyboard->m_repeatRate = std::max(0, REPEATRATE); + pKeyboard->m_repeatDelay = std::max(0, REPEATDELAY); + pKeyboard->m_numlockOn = NUMLOCKON; + pKeyboard->m_xkbFilePath = FILEPATH; pKeyboard->setKeymap(IKeyboard::SStringRuleNames{LAYOUT, MODEL, VARIANT, OPTIONS, RULES}); const auto LAYOUTSTR = pKeyboard->getActiveLayout(); - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->hlName + "," + LAYOUTSTR}); + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->m_hlName + "," + LAYOUTSTR}); EMIT_HOOK_EVENT("activeLayout", (std::vector{pKeyboard, LAYOUTSTR})); - Debug::log(LOG, "Set the keyboard layout to {} and variant to {} for keyboard \"{}\"", pKeyboard->currentRules.layout, pKeyboard->currentRules.variant, pKeyboard->hlName); + Debug::log(LOG, "Set the keyboard layout to {} and variant to {} for keyboard \"{}\"", pKeyboard->m_currentRules.layout, pKeyboard->m_currentRules.variant, + pKeyboard->m_hlName); } void CInputManager::newVirtualMouse(SP mouse) { @@ -1095,7 +1096,7 @@ void CInputManager::setupMouse(SP mauz) { m_vHIDs.emplace_back(mauz); try { - mauz->hlName = getNameForNewDevice(mauz->deviceName); + mauz->m_hlName = getNameForNewDevice(mauz->m_deviceName); } catch (std::exception& e) { Debug::log(ERR, "Mouse had no name???"); // logic error } @@ -1110,18 +1111,18 @@ void CInputManager::setupMouse(SP mauz) { g_pPointerManager->attachPointer(mauz); - mauz->connected = true; + mauz->m_connected = true; setPointerConfigs(); - mauz->events.destroy.registerStaticListener( + mauz->m_events.destroy.registerStaticListener( [this](void* mouse, std::any data) { const auto PMOUSE = (IPointer*)mouse; if (!PMOUSE) return; - destroyPointer(PMOUSE->self.lock()); + destroyPointer(PMOUSE->m_self.lock()); }, mauz.get()); @@ -1132,18 +1133,18 @@ void CInputManager::setupMouse(SP mauz) { void CInputManager::setPointerConfigs() { for (auto const& m : m_vPointers) { - auto devname = m->hlName; + auto devname = m->m_hlName; const auto HASCONFIG = g_pConfigManager->deviceConfigExists(devname); if (HASCONFIG) { const auto ENABLED = g_pConfigManager->getDeviceInt(devname, "enabled"); - if (ENABLED && !m->connected) { + if (ENABLED && !m->m_connected) { g_pPointerManager->attachPointer(m); - m->connected = true; - } else if (!ENABLED && m->connected) { + m->m_connected = true; + } else if (!ENABLED && m->m_connected) { g_pPointerManager->detachPointer(m); - m->connected = false; + m->m_connected = false; } } @@ -1227,8 +1228,8 @@ void CInputManager::setPointerConfigs() { const auto LIBINPUTSENS = std::clamp(g_pConfigManager->getDeviceFloat(devname, "sensitivity", "input:sensitivity"), -1.f, 1.f); libinput_device_config_accel_set_speed(LIBINPUTDEV, LIBINPUTSENS); - m->flipX = g_pConfigManager->getDeviceInt(devname, "flip_x", "input:touchpad:flip_x") != 0; - m->flipY = g_pConfigManager->getDeviceInt(devname, "flip_y", "input:touchpad:flip_y") != 0; + m->m_flipX = g_pConfigManager->getDeviceInt(devname, "flip_x", "input:touchpad:flip_x") != 0; + m->m_flipY = g_pConfigManager->getDeviceInt(devname, "flip_y", "input:touchpad:flip_y") != 0; const auto ACCELPROFILE = g_pConfigManager->getDeviceString(devname, "accel_profile", "input:accel_profile"); const auto SCROLLPOINTS = g_pConfigManager->getDeviceString(devname, "scroll_points", "input:scroll_points"); @@ -1281,7 +1282,7 @@ void CInputManager::setPointerConfigs() { libinput_device_config_scroll_set_button_lock(LIBINPUTDEV, SCROLLBUTTONLOCK == 0 ? LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_DISABLED : LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_ENABLED); - Debug::log(LOG, "Applied config to mouse {}, sens {:.2f}", m->hlName, LIBINPUTSENS); + Debug::log(LOG, "Applied config to mouse {}, sens {:.2f}", m->m_hlName, LIBINPUTSENS); } } } @@ -1375,7 +1376,7 @@ void CInputManager::updateKeyboardsLeds(SP pKeyboard) { } void CInputManager::onKeyboardKey(std::any event, SP pKeyboard) { - if (!pKeyboard->enabled) + if (!pKeyboard->m_enabled) return; const bool DISALLOWACTION = pKeyboard->isVirtual() && shouldIgnoreVirtualKeyboard(pKeyboard); @@ -1403,14 +1404,14 @@ void CInputManager::onKeyboardKey(std::any event, SP pKeyboard) { } void CInputManager::onKeyboardMod(SP pKeyboard) { - if (!pKeyboard->enabled) + if (!pKeyboard->m_enabled) return; const bool DISALLOWACTION = pKeyboard->isVirtual() && shouldIgnoreVirtualKeyboard(pKeyboard); const auto ALLMODS = accumulateModsFromAllKBs(); - auto MODS = pKeyboard->modifiersState; + auto MODS = pKeyboard->m_modifiersState; MODS.depressed = ALLMODS; const auto IME = m_sIMERelay.m_pIME.lock(); @@ -1425,14 +1426,14 @@ void CInputManager::onKeyboardMod(SP pKeyboard) { updateKeyboardsLeds(pKeyboard); - if (pKeyboard->modifiersState.group != pKeyboard->activeLayout) { - pKeyboard->activeLayout = pKeyboard->modifiersState.group; + if (pKeyboard->m_modifiersState.group != pKeyboard->m_activeLayout) { + pKeyboard->m_activeLayout = pKeyboard->m_modifiersState.group; const auto LAYOUT = pKeyboard->getActiveLayout(); Debug::log(LOG, "LAYOUT CHANGED TO {} GROUP {}", LAYOUT, MODS.group); - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->hlName + "," + LAYOUT}); + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->m_hlName + "," + LAYOUT}); EMIT_HOOK_EVENT("activeLayout", (std::vector{pKeyboard, LAYOUT})); } } @@ -1556,7 +1557,7 @@ uint32_t CInputManager::accumulateModsFromAllKBs() { if (kb->isVirtual() && shouldIgnoreVirtualKeyboard(kb)) continue; - if (!kb->enabled) + if (!kb->m_enabled) continue; finalMask |= kb->getModifiers(); @@ -1571,7 +1572,7 @@ void CInputManager::disableAllKeyboards(bool virt) { if (k->isVirtual() != virt) continue; - k->active = false; + k->m_active = false; } } @@ -1580,7 +1581,7 @@ void CInputManager::newTouchDevice(SP pDevice) { m_vHIDs.emplace_back(PNEWDEV); try { - PNEWDEV->hlName = getNameForNewDevice(PNEWDEV->deviceName); + PNEWDEV->m_hlName = getNameForNewDevice(PNEWDEV->m_deviceName); } catch (std::exception& e) { Debug::log(ERR, "Touch Device had no name???"); // logic error } @@ -1588,9 +1589,9 @@ void CInputManager::newTouchDevice(SP pDevice) { setTouchDeviceConfigs(PNEWDEV); g_pPointerManager->attachTouch(PNEWDEV); - PNEWDEV->events.destroy.registerStaticListener( + PNEWDEV->m_events.destroy.registerStaticListener( [this](void* owner, std::any data) { - auto PDEV = ((ITouch*)owner)->self.lock(); + auto PDEV = ((ITouch*)owner)->m_self.lock(); if (!PDEV) return; @@ -1607,20 +1608,20 @@ void CInputManager::setTouchDeviceConfigs(SP dev) { if (PTOUCHDEV->aq() && PTOUCHDEV->aq()->getLibinputHandle()) { const auto LIBINPUTDEV = PTOUCHDEV->aq()->getLibinputHandle(); - const auto ENABLED = g_pConfigManager->getDeviceInt(PTOUCHDEV->hlName, "enabled", "input:touchdevice:enabled"); + const auto ENABLED = g_pConfigManager->getDeviceInt(PTOUCHDEV->m_hlName, "enabled", "input:touchdevice:enabled"); const auto mode = ENABLED ? LIBINPUT_CONFIG_SEND_EVENTS_ENABLED : LIBINPUT_CONFIG_SEND_EVENTS_DISABLED; if (libinput_device_config_send_events_get_mode(LIBINPUTDEV) != mode) libinput_device_config_send_events_set_mode(LIBINPUTDEV, mode); if (libinput_device_config_calibration_has_matrix(LIBINPUTDEV)) { - Debug::log(LOG, "Setting calibration matrix for device {}", PTOUCHDEV->hlName); + Debug::log(LOG, "Setting calibration matrix for device {}", PTOUCHDEV->m_hlName); // default value of transform being -1 means it's unset. - const int ROTATION = std::clamp(g_pConfigManager->getDeviceInt(PTOUCHDEV->hlName, "transform", "input:touchdevice:transform"), -1, 7); + const int ROTATION = std::clamp(g_pConfigManager->getDeviceInt(PTOUCHDEV->m_hlName, "transform", "input:touchdevice:transform"), -1, 7); if (ROTATION > -1) libinput_device_config_calibration_set_matrix(LIBINPUTDEV, MATRICES[ROTATION]); } - auto output = g_pConfigManager->getDeviceString(PTOUCHDEV->hlName, "output", "input:touchdevice:output"); + auto output = g_pConfigManager->getDeviceString(PTOUCHDEV->m_hlName, "output", "input:touchdevice:output"); bool bound = !output.empty() && output != STRVAL_EMPTY; const bool AUTODETECT = output == "[[Auto]]"; if (!bound && AUTODETECT) { @@ -1631,13 +1632,13 @@ void CInputManager::setTouchDeviceConfigs(SP dev) { // bound = true; // } } - PTOUCHDEV->boundOutput = bound ? output : ""; - const auto PMONITOR = bound ? g_pCompositor->getMonitorFromName(output) : nullptr; + PTOUCHDEV->m_boundOutput = bound ? output : ""; + const auto PMONITOR = bound ? g_pCompositor->getMonitorFromName(output) : nullptr; if (PMONITOR) { - Debug::log(LOG, "Binding touch device {} to output {}", PTOUCHDEV->hlName, PMONITOR->szName); + Debug::log(LOG, "Binding touch device {} to output {}", PTOUCHDEV->m_hlName, PMONITOR->szName); // wlr_cursor_map_input_to_output(g_pCompositor->m_sWLRCursor, &PTOUCHDEV->wlr()->base, PMONITOR->output); } else if (bound) - Debug::log(ERR, "Failed to bind touch device {} to output '{}': monitor not found", PTOUCHDEV->hlName, output); + Debug::log(ERR, "Failed to bind touch device {} to output '{}': monitor not found", PTOUCHDEV->m_hlName, output); } }; @@ -1654,11 +1655,11 @@ void CInputManager::setTouchDeviceConfigs(SP dev) { void CInputManager::setTabletConfigs() { for (auto const& t : m_vTablets) { if (t->aq()->getLibinputHandle()) { - const auto NAME = t->hlName; + const auto NAME = t->m_hlName; const auto LIBINPUTDEV = t->aq()->getLibinputHandle(); const auto RELINPUT = g_pConfigManager->getDeviceInt(NAME, "relative_input", "input:tablet:relative_input"); - t->relativeInput = RELINPUT; + t->m_relativeInput = RELINPUT; const int ROTATION = std::clamp(g_pConfigManager->getDeviceInt(NAME, "transform", "input:tablet:transform"), -1, 7); Debug::log(LOG, "Setting calibration matrix for device {}", NAME); @@ -1673,22 +1674,22 @@ void CInputManager::setTabletConfigs() { const auto OUTPUT = g_pConfigManager->getDeviceString(NAME, "output", "input:tablet:output"); if (OUTPUT != STRVAL_EMPTY) { Debug::log(LOG, "Binding tablet {} to output {}", NAME, OUTPUT); - t->boundOutput = OUTPUT; + t->m_boundOutput = OUTPUT; } else - t->boundOutput = ""; + t->m_boundOutput = ""; const auto REGION_POS = g_pConfigManager->getDeviceVec(NAME, "region_position", "input:tablet:region_position"); const auto REGION_SIZE = g_pConfigManager->getDeviceVec(NAME, "region_size", "input:tablet:region_size"); - t->boundBox = {REGION_POS, REGION_SIZE}; + t->m_boundBox = {REGION_POS, REGION_SIZE}; const auto ABSOLUTE_REGION_POS = g_pConfigManager->getDeviceInt(NAME, "absolute_region_position", "input:tablet:absolute_region_position"); - t->absolutePos = ABSOLUTE_REGION_POS; + t->m_absolutePos = ABSOLUTE_REGION_POS; const auto ACTIVE_AREA_SIZE = g_pConfigManager->getDeviceVec(NAME, "active_area_size", "input:tablet:active_area_size"); const auto ACTIVE_AREA_POS = g_pConfigManager->getDeviceVec(NAME, "active_area_position", "input:tablet:active_area_position"); if (ACTIVE_AREA_SIZE.x != 0 || ACTIVE_AREA_SIZE.y != 0) { - t->activeArea = CBox{ACTIVE_AREA_POS.x / t->aq()->physicalSize.x, ACTIVE_AREA_POS.y / t->aq()->physicalSize.y, - (ACTIVE_AREA_POS.x + ACTIVE_AREA_SIZE.x) / t->aq()->physicalSize.x, (ACTIVE_AREA_POS.y + ACTIVE_AREA_SIZE.y) / t->aq()->physicalSize.y}; + t->m_activeArea = CBox{ACTIVE_AREA_POS.x / t->aq()->physicalSize.x, ACTIVE_AREA_POS.y / t->aq()->physicalSize.y, + (ACTIVE_AREA_POS.x + ACTIVE_AREA_SIZE.x) / t->aq()->physicalSize.x, (ACTIVE_AREA_POS.y + ACTIVE_AREA_SIZE.y) / t->aq()->physicalSize.y}; } } } @@ -1752,7 +1753,7 @@ std::string CInputManager::getNameForNewDevice(std::string internalName) { auto makeNewName = [&]() { return (proposedNewName.empty() ? "unknown-device" : proposedNewName) + (dupeno == 0 ? "" : ("-" + std::to_string(dupeno))); }; - while (std::find_if(m_vHIDs.begin(), m_vHIDs.end(), [&](const auto& other) { return other->hlName == makeNewName(); }) != m_vHIDs.end()) + while (std::find_if(m_vHIDs.begin(), m_vHIDs.end(), [&](const auto& other) { return other->m_hlName == makeNewName(); }) != m_vHIDs.end()) dupeno++; return makeNewName(); diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 5cbfed46..347ea6c7 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -11,9 +11,9 @@ static void unfocusTool(SP tool) { return; tool->setSurface(nullptr); - if (tool->isDown) + if (tool->m_isDown) PROTO::tablet->up(tool); - for (auto const& b : tool->buttonsDown) { + for (auto const& b : tool->m_buttonsDown) { PROTO::tablet->buttonTool(tool, b, false); } PROTO::tablet->proximityOut(tool); @@ -28,9 +28,9 @@ static void focusTool(SP tool, SP tablet, SPsetSurface(surf); PROTO::tablet->proximityIn(tool, tablet, surf); - if (tool->isDown) + if (tool->m_isDown) PROTO::tablet->down(tool); - for (auto const& b : tool->buttonsDown) { + for (auto const& b : tool->m_buttonsDown) { PROTO::tablet->buttonTool(tool, b, true); } } @@ -38,7 +38,7 @@ static void focusTool(SP tool, SP tablet, SP tab, SP tool, bool motion = false) { const auto LASTHLSURFACE = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); - if (!LASTHLSURFACE || !tool->active) { + if (!LASTHLSURFACE || !tool->m_active) { if (tool->getSurface()) unfocusTool(tool); @@ -69,9 +69,9 @@ static void refocusTablet(SP tab, SP tool, bool motion = f // yes, this technically ignores any regions set by the app. Too bad! if (LASTHLSURFACE->getWindow()) - local = tool->absolutePos * LASTHLSURFACE->getWindow()->m_realSize->goal(); + local = tool->m_absolutePos * LASTHLSURFACE->getWindow()->m_realSize->goal(); else - local = tool->absolutePos * BOX->size(); + local = tool->m_absolutePos * BOX->size(); if (LASTHLSURFACE->getWindow() && LASTHLSURFACE->getWindow()->m_isX11) local = local * LASTHLSURFACE->getWindow()->m_X11SurfaceScaledBy; @@ -106,7 +106,7 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); - if (PTOOL->active && (e.updatedAxes & (CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_X | CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_Y))) { + if (PTOOL->m_active && (e.updatedAxes & (CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_X | CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_Y))) { double x = (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_X) ? e.axis.x : NAN; double dx = (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_X) ? e.axisDelta.x : NAN; double y = (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_Y) ? e.axis.y : NAN; @@ -121,14 +121,14 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { } default: { if (!std::isnan(x)) - PTOOL->absolutePos.x = x; + PTOOL->m_absolutePos.x = x; if (!std::isnan(y)) - PTOOL->absolutePos.y = y; + PTOOL->m_absolutePos.y = y; - if (PTAB->relativeInput) + if (PTAB->m_relativeInput) g_pPointerManager->move(delta); else - g_pPointerManager->warpAbsolute(transformToActiveRegion({x, y}, PTAB->activeArea), PTAB); + g_pPointerManager->warpAbsolute(transformToActiveRegion({x, y}, PTAB->m_activeArea), PTAB); break; } @@ -155,13 +155,13 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { PROTO::tablet->wheel(PTOOL, e.wheelDelta); if (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_TILT_X) - PTOOL->tilt.x = e.tilt.x; + PTOOL->m_tilt.x = e.tilt.x; if (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_TILT_Y) - PTOOL->tilt.y = e.tilt.y; + PTOOL->m_tilt.y = e.tilt.y; if (e.updatedAxes & (CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_TILT_X | CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_TILT_Y)) - PROTO::tablet->tilt(PTOOL, PTOOL->tilt); + PROTO::tablet->tilt(PTOOL, PTOOL->m_tilt); } void CInputManager::onTabletTip(CTablet::STipEvent e) { @@ -169,10 +169,10 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { const auto PTOOL = ensureTabletToolPresent(e.tool); const auto POS = e.tip; - if (PTAB->relativeInput) + if (PTAB->m_relativeInput) g_pPointerManager->move({0, 0}); else - g_pPointerManager->warpAbsolute(transformToActiveRegion(POS, PTAB->activeArea), PTAB); + g_pPointerManager->warpAbsolute(transformToActiveRegion(POS, PTAB->m_activeArea), PTAB); if (e.in) refocus(); @@ -184,7 +184,7 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { else PROTO::tablet->up(PTOOL); - PTOOL->isDown = e.in; + PTOOL->m_isDown = e.in; } void CInputManager::onTabletButton(CTablet::SButtonEvent e) { @@ -196,16 +196,16 @@ void CInputManager::onTabletButton(CTablet::SButtonEvent e) { PROTO::tablet->buttonTool(PTOOL, e.button, e.down); if (e.down) - PTOOL->buttonsDown.push_back(e.button); + PTOOL->m_buttonsDown.push_back(e.button); else - std::erase(PTOOL->buttonsDown, e.button); + std::erase(PTOOL->m_buttonsDown, e.button); } void CInputManager::onTabletProximity(CTablet::SProximityEvent e) { const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); - PTOOL->active = e.in; + PTOOL->m_active = e.in; if (!e.in) { if (PTOOL->getSurface()) @@ -221,16 +221,16 @@ void CInputManager::newTablet(SP pDevice) { m_vHIDs.emplace_back(PNEWTABLET); try { - PNEWTABLET->hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); + PNEWTABLET->m_hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); } catch (std::exception& e) { Debug::log(ERR, "Tablet had no name???"); // logic error } g_pPointerManager->attachTablet(PNEWTABLET); - PNEWTABLET->events.destroy.registerStaticListener( + PNEWTABLET->m_events.destroy.registerStaticListener( [this](void* owner, std::any d) { - auto TABLET = ((CTablet*)owner)->self; + auto TABLET = ((CTablet*)owner)->m_self; destroyTablet(TABLET.lock()); }, PNEWTABLET.get()); @@ -249,14 +249,14 @@ SP CInputManager::ensureTabletToolPresent(SPhlName = g_pInputManager->getNameForNewDevice(pTool->getName()); + PTOOL->m_hlName = g_pInputManager->getNameForNewDevice(pTool->getName()); } catch (std::exception& e) { Debug::log(ERR, "Tablet had no name???"); // logic error } - PTOOL->events.destroy.registerStaticListener( + PTOOL->m_events.destroy.registerStaticListener( [this](void* owner, std::any d) { - auto TOOL = ((CTabletTool*)owner)->self; + auto TOOL = ((CTabletTool*)owner)->m_self; destroyTabletTool(TOOL.lock()); }, PTOOL.get()); @@ -269,44 +269,44 @@ void CInputManager::newTabletPad(SP pDevice) { m_vHIDs.emplace_back(PNEWPAD); try { - PNEWPAD->hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); + PNEWPAD->m_hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); } catch (std::exception& e) { Debug::log(ERR, "Pad had no name???"); // logic error } // clang-format off - PNEWPAD->events.destroy.registerStaticListener([this](void* owner, std::any d) { - auto PAD = ((CTabletPad*)owner)->self; + PNEWPAD->m_events.destroy.registerStaticListener([this](void* owner, std::any d) { + auto PAD = ((CTabletPad*)owner)->m_self; destroyTabletPad(PAD.lock()); }, PNEWPAD.get()); - PNEWPAD->padEvents.button.registerStaticListener([](void* owner, std::any e) { + PNEWPAD->m_padEvents.button.registerStaticListener([](void* owner, std::any e) { const auto E = std::any_cast(e); - const auto PPAD = ((CTabletPad*)owner)->self.lock(); + const auto PPAD = ((CTabletPad*)owner)->m_self.lock(); PROTO::tablet->mode(PPAD, 0, E.mode, E.timeMs); PROTO::tablet->buttonPad(PPAD, E.button, E.timeMs, E.down); }, PNEWPAD.get()); - PNEWPAD->padEvents.strip.registerStaticListener([](void* owner, std::any e) { + PNEWPAD->m_padEvents.strip.registerStaticListener([](void* owner, std::any e) { const auto E = std::any_cast(e); - const auto PPAD = ((CTabletPad*)owner)->self.lock(); + const auto PPAD = ((CTabletPad*)owner)->m_self.lock(); PROTO::tablet->strip(PPAD, E.strip, E.position, E.finger, E.timeMs); }, PNEWPAD.get()); - PNEWPAD->padEvents.ring.registerStaticListener([](void* owner, std::any e) { + PNEWPAD->m_padEvents.ring.registerStaticListener([](void* owner, std::any e) { const auto E = std::any_cast(e); - const auto PPAD = ((CTabletPad*)owner)->self.lock(); + const auto PPAD = ((CTabletPad*)owner)->m_self.lock(); PROTO::tablet->ring(PPAD, E.ring, E.position, E.finger, E.timeMs); }, PNEWPAD.get()); - PNEWPAD->padEvents.attach.registerStaticListener([](void* owner, std::any e) { - const auto PPAD = ((CTabletPad*)owner)->self.lock(); + PNEWPAD->m_padEvents.attach.registerStaticListener([](void* owner, std::any e) { + const auto PPAD = ((CTabletPad*)owner)->m_self.lock(); const auto TOOL = std::any_cast>(e); - PPAD->parent = TOOL; + PPAD->m_parent = TOOL; }, PNEWPAD.get()); // clang-format on } diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 71fd27d8..eab01528 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -23,7 +23,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { static auto PSWIPEINVR = CConfigValue("gestures:workspace_swipe_touch_invert"); EMIT_HOOK_EVENT_CANCELLABLE("touchDown", e); - auto PMONITOR = g_pCompositor->getMonitorFromName(!e.device->boundOutput.empty() ? e.device->boundOutput : ""); + auto PMONITOR = g_pCompositor->getMonitorFromName(!e.device->m_boundOutput.empty() ? e.device->m_boundOutput : ""); PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_lastMonitor.lock(); diff --git a/src/protocols/InputMethodV2.cpp b/src/protocols/InputMethodV2.cpp index db925757..6b022601 100644 --- a/src/protocols/InputMethodV2.cpp +++ b/src/protocols/InputMethodV2.cpp @@ -33,26 +33,26 @@ void CInputMethodKeyboardGrabV2::sendKeyboardData(SP keyboard) { pLastKeyboard = keyboard; - auto keymapFD = allocateSHMFile(keyboard->xkbKeymapString.length() + 1); + auto keymapFD = allocateSHMFile(keyboard->m_xkbKeymapString.length() + 1); if UNLIKELY (!keymapFD.isValid()) { LOGM(ERR, "Failed to create a keymap file for keyboard grab"); return; } - void* data = mmap(nullptr, keyboard->xkbKeymapString.length() + 1, PROT_READ | PROT_WRITE, MAP_SHARED, keymapFD.get(), 0); + void* data = mmap(nullptr, keyboard->m_xkbKeymapString.length() + 1, PROT_READ | PROT_WRITE, MAP_SHARED, keymapFD.get(), 0); if UNLIKELY (data == MAP_FAILED) { LOGM(ERR, "Failed to mmap a keymap file for keyboard grab"); return; } - memcpy(data, keyboard->xkbKeymapString.c_str(), keyboard->xkbKeymapString.length()); - munmap(data, keyboard->xkbKeymapString.length() + 1); + memcpy(data, keyboard->m_xkbKeymapString.c_str(), keyboard->m_xkbKeymapString.length()); + munmap(data, keyboard->m_xkbKeymapString.length() + 1); - resource->sendKeymap(WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymapFD.get(), keyboard->xkbKeymapString.length() + 1); + resource->sendKeymap(WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymapFD.get(), keyboard->m_xkbKeymapString.length() + 1); - sendMods(keyboard->modifiersState.depressed, keyboard->modifiersState.latched, keyboard->modifiersState.locked, keyboard->modifiersState.group); + sendMods(keyboard->m_modifiersState.depressed, keyboard->m_modifiersState.latched, keyboard->m_modifiersState.locked, keyboard->m_modifiersState.group); - resource->sendRepeatInfo(keyboard->repeatRate, keyboard->repeatDelay); + resource->sendRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay); } void CInputMethodKeyboardGrabV2::sendKey(uint32_t time, uint32_t key, wl_keyboard_key_state state) { diff --git a/src/protocols/Tablet.cpp b/src/protocols/Tablet.cpp index 843703f0..0aec67e1 100644 --- a/src/protocols/Tablet.cpp +++ b/src/protocols/Tablet.cpp @@ -139,7 +139,7 @@ bool CTabletV2Resource::good() { } void CTabletV2Resource::sendData() { - resource->sendName(tablet->deviceName.c_str()); + resource->sendName(tablet->m_deviceName.c_str()); resource->sendId(tablet->aq()->usbVendorID, tablet->aq()->usbProductID); for (auto const& p : tablet->aq()->paths) { @@ -191,17 +191,17 @@ void CTabletToolV2Resource::sendData() { resource->sendType(AQ_TYPE_TO_PROTO(tool->aq()->type)); resource->sendHardwareSerial(tool->aq()->serial >> 32, tool->aq()->serial & 0xFFFFFFFF); resource->sendHardwareIdWacom(tool->aq()->id >> 32, tool->aq()->id & 0xFFFFFFFF); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_DISTANCE) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_DISTANCE) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_PRESSURE) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_PRESSURE) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_ROTATION) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_ROTATION) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_SLIDER) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_SLIDER) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_TILT) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_TILT) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_TILT); - if (tool->toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_WHEEL) + if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_WHEEL) resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL); resource->sendDone(); } diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 5faabedc..5a704717 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -303,7 +303,7 @@ CWLKeyboardResource::CWLKeyboardResource(SP resource_, SPkeyboard.lock()); - repeatInfo(g_pSeatManager->keyboard->repeatRate, g_pSeatManager->keyboard->repeatDelay); + repeatInfo(g_pSeatManager->keyboard->m_repeatRate, g_pSeatManager->keyboard->m_repeatDelay); if (g_pSeatManager->state.keyboardFocus && g_pSeatManager->state.keyboardFocus->client() == resource->client()) sendEnter(g_pSeatManager->state.keyboardFocus.lock()); @@ -320,9 +320,9 @@ void CWLKeyboardResource::sendKeymap(SP keyboard) { if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - std::string_view keymap = keyboard->xkbKeymapString; - Hyprutils::OS::CFileDescriptor& fd = keyboard->xkbKeymapFD; - uint32_t size = keyboard->xkbKeymapString.length() + 1; + std::string_view keymap = keyboard->m_xkbKeymapString; + Hyprutils::OS::CFileDescriptor& fd = keyboard->m_xkbKeymapFD; + uint32_t size = keyboard->m_xkbKeymapString.length() + 1; if (keymap == lastKeymap) return; From 94bc1320843e4f45c4b8d3fd3cd08f8914b5fa13 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 19:48:52 +0100 Subject: [PATCH 0119/1077] xdg-bell/xdg-tag: fix moved resource usage --- src/protocols/XDGBell.cpp | 2 +- src/protocols/XDGTag.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/protocols/XDGBell.cpp b/src/protocols/XDGBell.cpp index 42fd6040..61f070ff 100644 --- a/src/protocols/XDGBell.cpp +++ b/src/protocols/XDGBell.cpp @@ -11,7 +11,7 @@ CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UPsetDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); m_resource->setOnDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); - resource->setRing([](CXdgSystemBellV1* r, wl_resource* toplevel) { + m_resource->setRing([](CXdgSystemBellV1* r, wl_resource* toplevel) { auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); if (!TOPLEVEL) { diff --git a/src/protocols/XDGTag.cpp b/src/protocols/XDGTag.cpp index 9176882e..1b62918d 100644 --- a/src/protocols/XDGTag.cpp +++ b/src/protocols/XDGTag.cpp @@ -8,7 +8,7 @@ CXDGToplevelTagManagerResource::CXDGToplevelTagManagerResource(UPsetDestroy([this](CXdgToplevelTagManagerV1* r) { PROTO::xdgTag->destroyResource(this); }); m_resource->setOnDestroy([this](CXdgToplevelTagManagerV1* r) { PROTO::xdgTag->destroyResource(this); }); - resource->setSetToplevelTag([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* tag) { + m_resource->setSetToplevelTag([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* tag) { auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); if (!TOPLEVEL) { @@ -19,7 +19,7 @@ CXDGToplevelTagManagerResource::CXDGToplevelTagManagerResource(UPm_toplevelTag = tag; }); - resource->setSetToplevelDescription([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* description) { + m_resource->setSetToplevelDescription([](CXdgToplevelTagManagerV1* r, wl_resource* toplevel, const char* description) { auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); if (!TOPLEVEL) { From 49974d5e34292ede24351c8638fe060b382bbda0 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Tue, 29 Apr 2025 22:29:40 +0300 Subject: [PATCH 0120/1077] cm: Use precomputed primaries conversion (#9814) --- src/protocols/ColorManagement.cpp | 22 ++-- src/protocols/types/ColorManagement.cpp | 28 ++++- src/protocols/types/ColorManagement.hpp | 62 ++++++++--- src/render/OpenGL.cpp | 31 ++++-- src/render/Shader.hpp | 4 +- src/render/shaders/glsl/CM.frag | 3 +- src/render/shaders/glsl/CM.glsl | 128 +++++++++-------------- src/render/shaders/glsl/blurprepare.frag | 16 +-- src/render/shaders/glsl/border.frag | 3 +- src/render/shaders/glsl/shadow.frag | 3 +- 10 files changed, 164 insertions(+), 136 deletions(-) diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 91dc0eac..29d9d248 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -8,8 +8,6 @@ using namespace NColorManagement; -static uint64_t lastImageID = 0; // FIXME use for deduplication - CColorManager::CColorManager(SP resource) : m_resource(resource) { if UNLIKELY (!good()) return; @@ -191,14 +189,13 @@ CColorManager::CColorManager(SP resource) : m_resource(resour } RESOURCE->self = RESOURCE; - RESOURCE->settings.id = ++lastImageID; RESOURCE->settings.windowsScRGB = true; RESOURCE->settings.primariesNamed = NColorManagement::CM_PRIMARIES_SRGB; RESOURCE->settings.primariesNameSet = true; RESOURCE->settings.primaries = NColorPrimaries::BT709; RESOURCE->settings.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_EXT_LINEAR; RESOURCE->settings.luminances.reference = 203; - RESOURCE->resource()->sendReady(RESOURCE->settings.id); + RESOURCE->resource()->sendReady(RESOURCE->settings.updateId()); }); m_resource->setOnDestroy([this](CWpColorManagerV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -239,9 +236,7 @@ CColorManagementOutput::CColorManagementOutput(SP re RESOURCE->m_resource->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_NO_OUTPUT, "No output"); else { RESOURCE->settings = m_monitor->imageDescription; - if (RESOURCE->settings.id) - RESOURCE->settings.id = ++lastImageID; - RESOURCE->m_resource->sendReady(RESOURCE->settings.id); // FIXME: create correct id + RESOURCE->m_resource->sendReady(RESOURCE->settings.updateId()); } }); } @@ -383,10 +378,7 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SPsettings = g_pCompositor->getPreferredImageDescription(); - if (!m_currentPreferred->settings.id) - m_currentPreferred->settings.id = ++lastImageID; - - RESOURCE->resource()->sendReady(++lastImageID); // FIXME: create correct id + RESOURCE->resource()->sendReady(m_currentPreferred->settings.updateId()); }); m_resource->setGetPreferredParametric([this](CWpColorManagementSurfaceFeedbackV1* r, uint32_t id) { @@ -419,7 +411,7 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SPresource()->sendReady(++lastImageID); // FIXME: create correct id + RESOURCE->resource()->sendReady(m_currentPreferred->settings.updateId()); }); } @@ -467,8 +459,7 @@ CColorManagementIccCreator::CColorManagementIccCreator(SPself = RESOURCE; RESOURCE->settings = settings; - settings.id = ++lastImageID; - RESOURCE->resource()->sendReady(settings.id); // FIXME: create correct id + RESOURCE->resource()->sendReady(settings.updateId()); PROTO::colorManagement->destroyResource(this); }); @@ -522,8 +513,7 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPself = RESOURCE; RESOURCE->settings = settings; - settings.id = ++lastImageID; - RESOURCE->resource()->sendReady(settings.id); // FIXME: create correct id + RESOURCE->resource()->sendReady(settings.updateId()); PROTO::colorManagement->destroyResource(this); }); diff --git a/src/protocols/types/ColorManagement.cpp b/src/protocols/types/ColorManagement.cpp index 9daff1e2..e6b470d0 100644 --- a/src/protocols/types/ColorManagement.cpp +++ b/src/protocols/types/ColorManagement.cpp @@ -1,7 +1,11 @@ #include "ColorManagement.hpp" +#include namespace NColorManagement { - const SPCPRimaries& getPrimaries(ePrimaries name) { + static uint32_t lastImageID = 0; + static std::map knownDescriptionIds; // expected to be small + + const SPCPRimaries& getPrimaries(ePrimaries name) { switch (name) { case CM_PRIMARIES_SRGB: return NColorPrimaries::BT709; case CM_PRIMARIES_BT2020: return NColorPrimaries::BT2020; @@ -17,4 +21,26 @@ namespace NColorManagement { } } + // TODO make image descriptions immutable and always set an id + + uint32_t SImageDescription::findId() const { + for (auto it = knownDescriptionIds.begin(); it != knownDescriptionIds.end(); ++it) { + if (it->second == *this) + return it->first; + } + + const auto newId = ++lastImageID; + knownDescriptionIds.insert(std::make_pair(newId, *this)); + return newId; + } + + uint32_t SImageDescription::getId() const { + return id > 0 ? id : findId(); + } + + uint32_t SImageDescription::updateId() { + id = 0; + id = findId(); + return id; + } } \ No newline at end of file diff --git a/src/protocols/types/ColorManagement.hpp b/src/protocols/types/ColorManagement.hpp index 143f47ca..48d8dd31 100644 --- a/src/protocols/types/ColorManagement.hpp +++ b/src/protocols/types/ColorManagement.hpp @@ -1,6 +1,13 @@ #pragma once #include "color-management-v1.hpp" +#include + +#define SDR_MIN_LUMINANCE 0.2 +#define SDR_MAX_LUMINANCE 80.0 +#define HDR_MIN_LUMINANCE 0.005 +#define HDR_MAX_LUMINANCE 10000.0 +#define HLG_MAX_LUMINANCE 1000.0 namespace NColorManagement { enum ePrimaries : uint8_t { @@ -47,19 +54,7 @@ namespace NColorManagement { return (eTransferFunction)tf; } - struct SPCPRimaries { - struct xy { //NOLINT(readability-identifier-naming) - float x = 0; - float y = 0; - - bool operator==(const xy& p2) const { - return x == p2.x && y == p2.y; - } - } red, green, blue, white; - bool operator==(const SPCPRimaries& p2) const { - return red == p2.red && green == p2.green && blue == p2.blue && white == p2.white; - } - }; + typedef Hyprgraphics::SPCPRimaries SPCPRimaries; namespace NColorPrimaries { static const auto DEFAULT_PRIMARIES = SPCPRimaries{}; @@ -185,5 +180,46 @@ namespace NColorManagement { return NColorManagement::getPrimaries(primariesNamed); return primaries; } + + float getTFMinLuminance() const { + switch (transferFunction) { + case CM_TRANSFER_FUNCTION_EXT_LINEAR: return 0; + case CM_TRANSFER_FUNCTION_ST2084_PQ: + case CM_TRANSFER_FUNCTION_HLG: return HDR_MIN_LUMINANCE; + case CM_TRANSFER_FUNCTION_GAMMA22: + case CM_TRANSFER_FUNCTION_GAMMA28: + case CM_TRANSFER_FUNCTION_BT1886: + case CM_TRANSFER_FUNCTION_ST240: + case CM_TRANSFER_FUNCTION_LOG_100: + case CM_TRANSFER_FUNCTION_LOG_316: + case CM_TRANSFER_FUNCTION_XVYCC: + case CM_TRANSFER_FUNCTION_EXT_SRGB: + case CM_TRANSFER_FUNCTION_ST428: + case CM_TRANSFER_FUNCTION_SRGB: + default: return SDR_MIN_LUMINANCE; + } + }; + + float getTFMaxLuminance() const { + switch (transferFunction) { + case CM_TRANSFER_FUNCTION_ST2084_PQ: return HDR_MAX_LUMINANCE; + case CM_TRANSFER_FUNCTION_HLG: return HLG_MAX_LUMINANCE; + case CM_TRANSFER_FUNCTION_GAMMA22: + case CM_TRANSFER_FUNCTION_GAMMA28: + case CM_TRANSFER_FUNCTION_BT1886: + case CM_TRANSFER_FUNCTION_ST240: + case CM_TRANSFER_FUNCTION_LOG_100: + case CM_TRANSFER_FUNCTION_LOG_316: + case CM_TRANSFER_FUNCTION_XVYCC: + case CM_TRANSFER_FUNCTION_EXT_SRGB: + case CM_TRANSFER_FUNCTION_ST428: + case CM_TRANSFER_FUNCTION_SRGB: + default: return SDR_MAX_LUMINANCE; + } + }; + + uint32_t findId() const; + uint32_t getId() const; + uint32_t updateId(); }; } \ No newline at end of file diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index a6ddb519..a6cc176a 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include #include @@ -908,13 +910,15 @@ static void getCMShaderUniforms(CShader& shader) { shader.skipCM = glGetUniformLocation(shader.program, "skipCM"); shader.sourceTF = glGetUniformLocation(shader.program, "sourceTF"); shader.targetTF = glGetUniformLocation(shader.program, "targetTF"); - shader.sourcePrimaries = glGetUniformLocation(shader.program, "sourcePrimaries"); + shader.srcTFRange = glGetUniformLocation(shader.program, "srcTFRange"); + shader.dstTFRange = glGetUniformLocation(shader.program, "dstTFRange"); shader.targetPrimaries = glGetUniformLocation(shader.program, "targetPrimaries"); shader.maxLuminance = glGetUniformLocation(shader.program, "maxLuminance"); shader.dstMaxLuminance = glGetUniformLocation(shader.program, "dstMaxLuminance"); shader.dstRefLuminance = glGetUniformLocation(shader.program, "dstRefLuminance"); shader.sdrSaturation = glGetUniformLocation(shader.program, "sdrSaturation"); shader.sdrBrightness = glGetUniformLocation(shader.program, "sdrBrightnessMultiplier"); + shader.convertMatrix = glGetUniformLocation(shader.program, "convertMatrix"); } // shader has #include "rounding.glsl" @@ -1437,27 +1441,26 @@ void CHyprOpenGLImpl::renderTextureWithDamage(SP tex, const CBox& box, scissor(nullptr); } +static std::map, std::array> primariesConversionCache; + void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, bool modifySDR) { glUniform1i(shader.sourceTF, imageDescription.transferFunction); glUniform1i(shader.targetTF, targetImageDescription.transferFunction); - const auto sourcePrimaries = - imageDescription.primariesNameSet || imageDescription.primaries == SPCPRimaries{} ? getPrimaries(imageDescription.primariesNamed) : imageDescription.primaries; + const auto targetPrimaries = targetImageDescription.primariesNameSet || targetImageDescription.primaries == SPCPRimaries{} ? getPrimaries(targetImageDescription.primariesNamed) : targetImageDescription.primaries; - const GLfloat glSourcePrimaries[8] = { - sourcePrimaries.red.x, sourcePrimaries.red.y, sourcePrimaries.green.x, sourcePrimaries.green.y, - sourcePrimaries.blue.x, sourcePrimaries.blue.y, sourcePrimaries.white.x, sourcePrimaries.white.y, - }; const GLfloat glTargetPrimaries[8] = { targetPrimaries.red.x, targetPrimaries.red.y, targetPrimaries.green.x, targetPrimaries.green.y, targetPrimaries.blue.x, targetPrimaries.blue.y, targetPrimaries.white.x, targetPrimaries.white.y, }; - glUniformMatrix4x2fv(shader.sourcePrimaries, 1, false, glSourcePrimaries); glUniformMatrix4x2fv(shader.targetPrimaries, 1, false, glTargetPrimaries); + glUniform2f(shader.srcTFRange, imageDescription.getTFMinLuminance(), imageDescription.getTFMaxLuminance()); + glUniform2f(shader.dstTFRange, targetImageDescription.getTFMinLuminance(), targetImageDescription.getTFMaxLuminance()); + const float maxLuminance = imageDescription.luminances.max > 0 ? imageDescription.luminances.max : imageDescription.luminances.reference; glUniform1f(shader.maxLuminance, maxLuminance * targetImageDescription.luminances.reference / imageDescription.luminances.reference); glUniform1f(shader.dstMaxLuminance, targetImageDescription.luminances.max > 0 ? targetImageDescription.luminances.max : 10000); @@ -1469,7 +1472,19 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme glUniform1f(shader.sdrBrightness, modifySDR && m_RenderData.pMonitor->sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? m_RenderData.pMonitor->sdrBrightness : + 1.0f); + const auto cacheKey = std::make_pair(imageDescription.getId(), targetImageDescription.getId()); + if (!primariesConversionCache.contains(cacheKey)) { + const auto mat = imageDescription.getPrimaries().convertMatrix(targetImageDescription.getPrimaries()).mat(); + const std::array glConvertMatrix = { + mat[0][0], mat[1][0], mat[2][0], // + mat[0][1], mat[1][1], mat[2][1], // + mat[0][2], mat[1][2], mat[2][2], // + }; + primariesConversionCache.insert(std::make_pair(cacheKey, glConvertMatrix)); + } + glUniformMatrix3fv(shader.convertMatrix, 1, false, &primariesConversionCache[cacheKey][0]); } void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const SImageDescription& imageDescription) { diff --git a/src/render/Shader.hpp b/src/render/Shader.hpp index 1d21894c..cd9b6f22 100644 --- a/src/render/Shader.hpp +++ b/src/render/Shader.hpp @@ -15,13 +15,15 @@ class CShader { GLint skipCM = -1; GLint sourceTF = -1; GLint targetTF = -1; - GLint sourcePrimaries = -1; + GLint srcTFRange = -1; + GLint dstTFRange = -1; GLint targetPrimaries = -1; GLint maxLuminance = -1; GLint dstMaxLuminance = -1; GLint dstRefLuminance = -1; GLint sdrSaturation = -1; // sdr -> hdr saturation GLint sdrBrightness = -1; // sdr -> hdr brightness multiplier + GLint convertMatrix = -1; GLint tex = -1; GLint alpha = -1; GLint posAttrib = -1; diff --git a/src/render/shaders/glsl/CM.frag b/src/render/shaders/glsl/CM.frag index 369e9cf0..031fe7f3 100644 --- a/src/render/shaders/glsl/CM.frag +++ b/src/render/shaders/glsl/CM.frag @@ -11,7 +11,6 @@ uniform int texType; // eTextureType: 0 - rgba, 1 - rgbx, 2 - ext // uniform int skipCM; uniform int sourceTF; // eTransferFunction uniform int targetTF; // eTransferFunction -uniform mat4x2 sourcePrimaries; uniform mat4x2 targetPrimaries; uniform float alpha; @@ -43,7 +42,7 @@ void main() { discard; // this shader shouldn't be used when skipCM == 1 - pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + pixColor = doColorManagement(pixColor, sourceTF, targetTF, targetPrimaries); if (applyTint == 1) pixColor = vec4(pixColor.rgb * tint.rgb, pixColor[3]); diff --git a/src/render/shaders/glsl/CM.glsl b/src/render/shaders/glsl/CM.glsl index 4cf2745c..8c505ee5 100644 --- a/src/render/shaders/glsl/CM.glsl +++ b/src/render/shaders/glsl/CM.glsl @@ -1,8 +1,12 @@ +uniform vec2 srcTFRange; +uniform vec2 dstTFRange; + uniform float maxLuminance; uniform float dstMaxLuminance; uniform float dstRefLuminance; uniform float sdrSaturation; uniform float sdrBrightnessMultiplier; +uniform mat3 convertMatrix; //enum eTransferFunction #define CM_TRANSFER_FUNCTION_BT1886 1 @@ -117,30 +121,8 @@ vec4 toLinear(vec4 color, int tf) { return color; } -vec4 toNit(vec4 color, int tf) { - if (tf == CM_TRANSFER_FUNCTION_EXT_LINEAR) - color.rgb = color.rgb * SDR_MAX_LUMINANCE; - else { - - switch (tf) { - case CM_TRANSFER_FUNCTION_ST2084_PQ: - color.rgb = color.rgb * (HDR_MAX_LUMINANCE - HDR_MIN_LUMINANCE) + HDR_MIN_LUMINANCE; break; - case CM_TRANSFER_FUNCTION_HLG: - color.rgb = color.rgb * (HLG_MAX_LUMINANCE - HDR_MIN_LUMINANCE) + HDR_MIN_LUMINANCE; break; - case CM_TRANSFER_FUNCTION_GAMMA22: - case CM_TRANSFER_FUNCTION_GAMMA28: - case CM_TRANSFER_FUNCTION_BT1886: - case CM_TRANSFER_FUNCTION_ST240: - case CM_TRANSFER_FUNCTION_LOG_100: - case CM_TRANSFER_FUNCTION_LOG_316: - case CM_TRANSFER_FUNCTION_XVYCC: - case CM_TRANSFER_FUNCTION_EXT_SRGB: - case CM_TRANSFER_FUNCTION_ST428: - case CM_TRANSFER_FUNCTION_SRGB: - default: - color.rgb = color.rgb * (SDR_MAX_LUMINANCE - SDR_MIN_LUMINANCE) + SDR_MIN_LUMINANCE; break; - } - } +vec4 toNit(vec4 color, vec2 range) { + color.rgb = color.rgb * (range[1] - range[0]) + range[0]; return color; } @@ -195,33 +177,13 @@ vec4 fromLinear(vec4 color, int tf) { return color; } -vec4 fromLinearNit(vec4 color, int tf) { +vec4 fromLinearNit(vec4 color, int tf, vec2 range) { if (tf == CM_TRANSFER_FUNCTION_EXT_LINEAR) color.rgb = color.rgb / SDR_MAX_LUMINANCE; else { color.rgb /= max(color.a, 0.001); - - switch (tf) { - case CM_TRANSFER_FUNCTION_ST2084_PQ: - color.rgb = (color.rgb - HDR_MIN_LUMINANCE) / (HDR_MAX_LUMINANCE - HDR_MIN_LUMINANCE); break; - case CM_TRANSFER_FUNCTION_HLG: - color.rgb = (color.rgb - HDR_MIN_LUMINANCE) / (HLG_MAX_LUMINANCE - HDR_MIN_LUMINANCE); break; - case CM_TRANSFER_FUNCTION_GAMMA22: - case CM_TRANSFER_FUNCTION_GAMMA28: - case CM_TRANSFER_FUNCTION_BT1886: - case CM_TRANSFER_FUNCTION_ST240: - case CM_TRANSFER_FUNCTION_LOG_100: - case CM_TRANSFER_FUNCTION_LOG_316: - case CM_TRANSFER_FUNCTION_XVYCC: - case CM_TRANSFER_FUNCTION_EXT_SRGB: - case CM_TRANSFER_FUNCTION_ST428: - case CM_TRANSFER_FUNCTION_SRGB: - default: - color.rgb = (color.rgb - SDR_MIN_LUMINANCE) / (SDR_MAX_LUMINANCE - SDR_MIN_LUMINANCE); break; - } - + color.rgb = (color.rgb - range[0]) / (range[1] - range[0]); color.rgb = fromLinearRGB(color.rgb, tf); - color.rgb *= color.a; } return color; @@ -250,13 +212,6 @@ mat3 primaries2xyz(mat4x2 primaries) { ); } -// const vec2 D65 = vec2(0.3127, 0.3290); -const mat3 Bradford = mat3( - 0.8951, 0.2664, -0.1614, - -0.7502, 1.7135, 0.0367, - 0.0389, -0.0685, 1.0296 -); -const mat3 BradfordInv = inverse(Bradford); mat3 adaptWhite(vec2 src, vec2 dst) { if (src == dst) @@ -266,6 +221,13 @@ mat3 adaptWhite(vec2 src, vec2 dst) { 0.0, 0.0, 1.0 ); + // const vec2 D65 = vec2(0.3127, 0.3290); + const mat3 Bradford = mat3( + 0.8951, 0.2664, -0.1614, + -0.7502, 1.7135, 0.0367, + 0.0389, -0.0685, 1.0296 + ); + mat3 BradfordInv = inverse(Bradford); vec3 srcXYZ = xy2xyz(src); vec3 dstXYZ = xy2xyz(dst); vec3 factors = (Bradford * dstXYZ) / (Bradford * srcXYZ); @@ -287,21 +249,37 @@ const mat3 BT2020toLMS = mat3( -0.1922, 1.1004, 0.0755, 0.0070, 0.0749, 0.8434 ); -const mat3 LMStoBT2020 = inverse(BT2020toLMS); +//const mat3 LMStoBT2020 = inverse(BT2020toLMS); +const mat3 LMStoBT2020 = mat3( + 2.0701800566956135096, -1.3264568761030210255, 0.20661600684785517081, + 0.36498825003265747974, 0.68046736285223514102, -0.045421753075853231409, + -0.049595542238932107896, -0.049421161186757487412, 1.1879959417328034394 +); -const mat3 ICtCpPQ = transpose(mat3( - 2048.0, 2048.0, 0.0, - 6610.0, -13613.0, 7003.0, - 17933.0, -17390.0, -543.0 -) / 4096.0); -const mat3 ICtCpPQInv = inverse(ICtCpPQ); +// const mat3 ICtCpPQ = transpose(mat3( +// 2048.0, 2048.0, 0.0, +// 6610.0, -13613.0, 7003.0, +// 17933.0, -17390.0, -543.0 +// ) / 4096.0); +const mat3 ICtCpPQ = mat3( + 0.5, 1.61376953125, 4.378173828125, + 0.5, -3.323486328125, -4.24560546875, + 0.0, 1.709716796875, -0.132568359375 +); +//const mat3 ICtCpPQInv = inverse(ICtCpPQ); +const mat3 ICtCpPQInv = mat3( + 1.0, 1.0, 1.0, + 0.0086090370379327566, -0.0086090370379327566, 0.560031335710679118, + 0.11102962500302595656, -0.11102962500302595656, -0.32062717498731885185 +); -const mat3 ICtCpHLG = transpose(mat3( - 2048.0, 2048.0, 0.0, - 3625.0, -7465.0, 3840.0, - 9500.0, -9212.0, -288.0 -) / 4096.0); -const mat3 ICtCpHLGInv = inverse(ICtCpHLG); +// unused for now +// const mat3 ICtCpHLG = transpose(mat3( +// 2048.0, 2048.0, 0.0, +// 3625.0, -7465.0, 3840.0, +// 9500.0, -9212.0, -288.0 +// ) / 4096.0); +// const mat3 ICtCpHLGInv = inverse(ICtCpHLG); vec4 tonemap(vec4 color, mat3 dstXYZ) { if (maxLuminance < dstMaxLuminance * 1.01) @@ -339,23 +317,17 @@ vec4 tonemap(vec4 color, mat3 dstXYZ) { return vec4(fromLMS * toLinear(vec4(ICtCpPQInv * ICtCp, 1.0), CM_TRANSFER_FUNCTION_ST2084_PQ).rgb * HDR_MAX_LUMINANCE, color[3]); } -vec4 doColorManagement(vec4 pixColor, int srcTF, mat4x2 srcPrimaries, int dstTF, mat4x2 dstPrimaries) { +vec4 doColorManagement(vec4 pixColor, int srcTF, int dstTF, mat4x2 dstPrimaries) { pixColor.rgb /= max(pixColor.a, 0.001); pixColor.rgb = toLinearRGB(pixColor.rgb, srcTF); - mat3 srcxyz = primaries2xyz(srcPrimaries); - mat3 dstxyz; - if (srcPrimaries == dstPrimaries) - dstxyz = srcxyz; - else { - dstxyz = primaries2xyz(dstPrimaries); - pixColor = convertPrimaries(pixColor, srcxyz, srcPrimaries[3], dstxyz, dstPrimaries[3]); - } - pixColor = toNit(pixColor, srcTF); + pixColor.rgb = convertMatrix * pixColor.rgb; + pixColor = toNit(pixColor, srcTFRange); pixColor.rgb *= pixColor.a; + mat3 dstxyz = primaries2xyz(dstPrimaries); pixColor = tonemap(pixColor, dstxyz); - pixColor = fromLinearNit(pixColor, dstTF); + pixColor = fromLinearNit(pixColor, dstTF, dstTFRange); if (srcTF == CM_TRANSFER_FUNCTION_SRGB && dstTF == CM_TRANSFER_FUNCTION_ST2084_PQ) { - pixColor = saturate(pixColor, srcxyz, sdrSaturation); + pixColor = saturate(pixColor, dstxyz, sdrSaturation); pixColor.rgb /= pixColor.a; pixColor.rgb *= sdrBrightnessMultiplier; pixColor.rgb *= pixColor.a; diff --git a/src/render/shaders/glsl/blurprepare.frag b/src/render/shaders/glsl/blurprepare.frag index 0be2d53a..548289c3 100644 --- a/src/render/shaders/glsl/blurprepare.frag +++ b/src/render/shaders/glsl/blurprepare.frag @@ -11,8 +11,6 @@ uniform float brightness; uniform int skipCM; uniform int sourceTF; // eTransferFunction uniform int targetTF; // eTransferFunction -uniform mat4x2 sourcePrimaries; -uniform mat4x2 targetPrimaries; #include "CM.glsl" @@ -29,17 +27,9 @@ void main() { if (sourceTF == CM_TRANSFER_FUNCTION_ST2084_PQ) { pixColor.rgb /= sdrBrightnessMultiplier; } - pixColor.rgb = toLinearRGB(pixColor.rgb, sourceTF); - mat3 srcxyz = primaries2xyz(sourcePrimaries); - mat3 dstxyz; - if (sourcePrimaries == targetPrimaries) - dstxyz = srcxyz; - else { - dstxyz = primaries2xyz(targetPrimaries); - pixColor = convertPrimaries(pixColor, srcxyz, sourcePrimaries[3], dstxyz, targetPrimaries[3]); - } - pixColor = toNit(pixColor, sourceTF); - pixColor = fromLinearNit(pixColor, targetTF); + pixColor.rgb = convertMatrix * toLinearRGB(pixColor.rgb, sourceTF); + pixColor = toNit(pixColor, srcTFRange); + pixColor = fromLinearNit(pixColor, targetTF, dstTFRange); } // contrast diff --git a/src/render/shaders/glsl/border.frag b/src/render/shaders/glsl/border.frag index 68541e14..38ae24c0 100644 --- a/src/render/shaders/glsl/border.frag +++ b/src/render/shaders/glsl/border.frag @@ -7,7 +7,6 @@ in vec2 v_texcoord; uniform int skipCM; uniform int sourceTF; // eTransferFunction uniform int targetTF; // eTransferFunction -uniform mat4x2 sourcePrimaries; uniform mat4x2 targetPrimaries; uniform vec2 fullSizeUntransformed; @@ -175,7 +174,7 @@ void main() { pixColor.rgb *= pixColor[3]; if (skipCM == 0) - pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + pixColor = doColorManagement(pixColor, sourceTF, targetTF, targetPrimaries); pixColor *= alpha * additionalAlpha; diff --git a/src/render/shaders/glsl/shadow.frag b/src/render/shaders/glsl/shadow.frag index 7a930f96..b6fdf6ee 100644 --- a/src/render/shaders/glsl/shadow.frag +++ b/src/render/shaders/glsl/shadow.frag @@ -8,7 +8,6 @@ in vec2 v_texcoord; uniform int skipCM; uniform int sourceTF; // eTransferFunction uniform int targetTF; // eTransferFunction -uniform mat4x2 sourcePrimaries; uniform mat4x2 targetPrimaries; uniform vec2 topLeft; @@ -94,7 +93,7 @@ void main() { pixColor.rgb *= pixColor[3]; if (skipCM == 0) - pixColor = doColorManagement(pixColor, sourceTF, sourcePrimaries, targetTF, targetPrimaries); + pixColor = doColorManagement(pixColor, sourceTF, targetTF, targetPrimaries); fragColor = pixColor; } \ No newline at end of file From ae1fe860ff73071cd14803c4495049a8969bb8f9 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Tue, 29 Apr 2025 23:09:14 +0300 Subject: [PATCH 0121/1077] renderer: add render:send_content_type setting (#9851) --- src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/render/Renderer.cpp | 13 ++++++++----- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 236f4d6e..39c1b522 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1444,6 +1444,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, + SConfigOptionDescription{ + .value = "render:send_content_type", + .description = "Report content type to allow monitor profile autoswitch (may result in a black screen during the switch)", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, /* * cursor: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 790e8484..0c45186e 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -739,6 +739,7 @@ CConfigManager::CConfigManager() { registerConfigVar("render:ctm_animation", Hyprlang::INT{2}); registerConfigVar("render:cm_fs_passthrough", Hyprlang::INT{2}); registerConfigVar("render:cm_enabled", Hyprlang::INT{1}); + registerConfigVar("render:send_content_type", Hyprlang::INT{1}); registerConfigVar("ecosystem:no_update_news", Hyprlang::INT{0}); registerConfigVar("ecosystem:no_donation_nag", Hyprlang::INT{0}); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 813aec08..0db305af 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1477,6 +1477,7 @@ static hdr_output_metadata createHDRMetadata(SImageDescription settings, A } bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { + static auto PCT = CConfigValue("render:send_content_type"); static auto PPASS = CConfigValue("render:cm_fs_passthrough"); const bool PHDR = pMonitor->imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ; @@ -1540,11 +1541,13 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { } } - if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); - pMonitor->output->state->setContentType(NContentType::toDRM(WINDOW->getContentType())); - } else - pMonitor->output->state->setContentType(NContentType::toDRM(CONTENT_TYPE_NONE)); + if (*PCT) { + if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { + const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); + pMonitor->output->state->setContentType(NContentType::toDRM(WINDOW->getContentType())); + } else + pMonitor->output->state->setContentType(NContentType::toDRM(CONTENT_TYPE_NONE)); + } if (pMonitor->ctmUpdated) { pMonitor->ctmUpdated = false; From 6483f4ec220a301ea3eb9a61124bc5fcb8259ed2 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 29 Apr 2025 22:02:50 +0100 Subject: [PATCH 0122/1077] screencopy: don't render cursor when frame doesn't want it --- src/protocols/Screencopy.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 6b60abfd..3862dddd 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -208,8 +208,9 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); - g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), - true); + if (overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, + g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { @@ -263,8 +264,9 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); - g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), - true); + if (overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, + g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { From 450687131047a666ca5540f47e0d0b80d29db774 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 00:10:07 +0100 Subject: [PATCH 0123/1077] xdg-bell: avoid crashes on null toplevel --- src/protocols/XDGBell.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/protocols/XDGBell.cpp b/src/protocols/XDGBell.cpp index 61f070ff..593d78fc 100644 --- a/src/protocols/XDGBell.cpp +++ b/src/protocols/XDGBell.cpp @@ -12,6 +12,14 @@ CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UPsetOnDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); m_resource->setRing([](CXdgSystemBellV1* r, wl_resource* toplevel) { + if (!toplevel) { + g_pEventManager->postEvent(SHyprIPCEvent{ + .event = "bell", + .data = "", + }); + return; + } + auto TOPLEVEL = CXDGToplevelResource::fromResource(toplevel); if (!TOPLEVEL) { From 208f4c48dbe081b00262a834e083bab1b0c9fbf8 Mon Sep 17 00:00:00 2001 From: Sander Date: Wed, 30 Apr 2025 01:10:47 +0200 Subject: [PATCH 0124/1077] config: use natural increase and decrease of brightness for default cfg (#10210) * feat(config): hyprland natural brightness * feat(config): natural increase and decrease of brightness --- example/hyprland.conf | 4 ++-- src/config/defaultConfig.hpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example/hyprland.conf b/example/hyprland.conf index b1240c71..3b63f6a8 100644 --- a/example/hyprland.conf +++ b/example/hyprland.conf @@ -275,8 +275,8 @@ bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- # Requires playerctl bindl = , XF86AudioNext, exec, playerctl next diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp index 22fc9f00..62611470 100644 --- a/src/config/defaultConfig.hpp +++ b/src/config/defaultConfig.hpp @@ -288,8 +288,8 @@ bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- # Requires playerctl bindl = , XF86AudioNext, exec, playerctl next From 9868b18378e99c8123a24fa4b152a58d5c0bfe67 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 00:31:15 +0100 Subject: [PATCH 0125/1077] input: don't use pointer hold logic for unmapped surfs fixes #10215 --- src/desktop/LayerSurface.cpp | 2 +- src/managers/input/InputManager.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 96c6200e..dcbf35fe 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -199,7 +199,7 @@ void CLayerSurface::onUnmap() { g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->layerNamespace}); EMIT_HOOK_EVENT("closeLayer", m_self.lock()); - std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); + std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other || other == m_self; }); if (!m_monitor || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Layersurface unmapping on invalid monitor (removed?) ignoring."); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 3c9c59b9..ab5e59a0 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -289,7 +289,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // if we are holding a pointer button, // and we're not dnd-ing, don't refocus. Keep focus on last surface. - if (!PROTO::data->dndActive() && !m_lCurrentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pSeatManager->state.pointerFocus && !m_bHardInput) { + if (!PROTO::data->dndActive() && !m_lCurrentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->state.pointerFocus && + !m_bHardInput) { foundSurface = g_pSeatManager->state.pointerFocus.lock(); // IME popups aren't desktop-like elements From 72cb5d24b6894334da021157c626556a8e99b6ff Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 00:35:32 +0100 Subject: [PATCH 0126/1077] permissions: disable automatic reloading of permissions from cfg security reasons, avoid reading them live. Ideally we'd lock them behind sudo, but we can't do that. --- example/hyprland.conf | 2 ++ src/config/ConfigManager.cpp | 5 ++--- src/config/defaultConfig.hpp | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/example/hyprland.conf b/example/hyprland.conf index 3b63f6a8..da9625bf 100644 --- a/example/hyprland.conf +++ b/example/hyprland.conf @@ -57,6 +57,8 @@ env = HYPRCURSOR_SIZE,24 ################### # See https://wiki.hyprland.org/Configuring/Permissions/ +# Please note permission changes here require a Hyprland restart and are not applied on-the-fly +# for security reasons # ecosystem { # enforce_permissions = 1 diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 0c45186e..3c0f2cf8 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -989,8 +989,6 @@ std::optional CConfigManager::resetHLConfig() { m_failedPluginConfigValues.clear(); m_finalExecRequests.clear(); - g_pDynamicPermissionManager->clearConfigPermissions(); - // paths m_configPaths.clear(); std::string mainConfigPath = getMainConfigPath(); @@ -2911,7 +2909,8 @@ std::optional CConfigManager::handlePermission(const std::string& c if (mode == PERMISSION_RULE_ALLOW_MODE_UNKNOWN) return "unknown permission allow mode"; - g_pDynamicPermissionManager->addConfigPermissionRule(data[0], type, mode); + if (m_isFirstLaunch) + g_pDynamicPermissionManager->addConfigPermissionRule(data[0], type, mode); return {}; } diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp index 62611470..a9ea6694 100644 --- a/src/config/defaultConfig.hpp +++ b/src/config/defaultConfig.hpp @@ -70,6 +70,8 @@ env = HYPRCURSOR_SIZE,24 ################### # See https://wiki.hyprland.org/Configuring/Permissions/ +# Please note permission changes here require a Hyprland restart and are not applied on-the-fly +# for security reasons # ecosystem { # enforce_permissions = 1 From b2ad21a65c9801012cdb4cb49a94257c0e44adf6 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Wed, 30 Apr 2025 09:26:58 +0300 Subject: [PATCH 0127/1077] flake.lock: update --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 3ca17433..2fcbdf9e 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1744289235, - "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", + "lastModified": 1745357003, + "narHash": "sha256-jYwzQkv1r7HN/4qrAuKp+NR4YYNp2xDrOX5O9YVqkWo=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", + "rev": "a19cf76ee1a15c1c12083fa372747ce46387289f", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1742215578, - "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", + "lastModified": 1745948457, + "narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", + "rev": "ac903e80b33ba6a88df83d02232483d99f327573", "type": "github" }, "original": { @@ -189,11 +189,11 @@ ] }, "locked": { - "lastModified": 1739048983, - "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "lastModified": 1745951494, + "narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e", "type": "github" }, "original": { @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1744468525, - "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", + "lastModified": 1745357019, + "narHash": "sha256-q/C3qj9FWHQenObXuw/nGIT8iIsWFjgmcQYcA+ZfpPs=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", + "rev": "397600c42b8d7a443a5b4e92aa15f46650a90f18", "type": "github" }, "original": { @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1743950287, - "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", + "lastModified": 1745975815, + "narHash": "sha256-s3GzsRxBL/N/xYgUXZhQh4t62uR1BN4zxXgWBtJ3lWM=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", + "rev": "05878d9470c9e5cbc8807813f9ec2006627a0ca0", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1745930157, + "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", "type": "github" }, "original": { @@ -365,11 +365,11 @@ ] }, "locked": { - "lastModified": 1744644585, - "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", + "lastModified": 1745871725, + "narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", + "rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e", "type": "github" }, "original": { From 54c89104de0fca8d2e1df411bfb53d5c09a5fc5e Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Wed, 30 Apr 2025 14:47:35 +0200 Subject: [PATCH 0128/1077] DonationNag: ask after each major update (#10213) This changes how the donation nag timing works. The donation nag will now appear: - after a major update (e.g. 48 -> 49)* - once in late july - once in december however, a donation nag will never pop up more than once a month. So, if there is an update on the 26th of November, and you get a popup on the 28th, you will not get one in december. This is of course still disableable in your config. --- src/managers/DonationNagManager.cpp | 92 +++++++++++++++++++++-------- src/managers/DonationNagManager.hpp | 11 +++- 2 files changed, 78 insertions(+), 25 deletions(-) diff --git a/src/managers/DonationNagManager.cpp b/src/managers/DonationNagManager.cpp index d7eab9ae..454a02a0 100644 --- a/src/managers/DonationNagManager.cpp +++ b/src/managers/DonationNagManager.cpp @@ -10,7 +10,9 @@ #include "../helpers/fs/FsUtils.hpp" #include +#include using namespace Hyprutils::OS; +using namespace Hyprutils::String; constexpr const char* LAST_NAG_FILE_NAME = "lastNag"; constexpr uint64_t DAY_IN_SECONDS = 3600ULL * 24; @@ -46,29 +48,28 @@ CDonationNagManager::CDonationNagManager() { const auto EPOCH = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); - const auto LASTNAGSTR = NFsUtils::readFileAsString(*DATAROOT + "/" + LAST_NAG_FILE_NAME); - - if (!LASTNAGSTR) { - const auto EPOCHSTR = std::format("{}", EPOCH); - NFsUtils::writeToFile(*DATAROOT + "/" + LAST_NAG_FILE_NAME, EPOCHSTR); + uint64_t currentMajor = 0; + try { + CVarList vl(HYPRLAND_VERSION, 0, '.'); + currentMajor = std::stoull(vl[1]); + } catch (...) { + // ???? return; } - uint64_t LAST_EPOCH = 0; + auto state = getState(); - try { - LAST_EPOCH = std::stoull(*LASTNAGSTR); - } catch (std::exception& e) { - Debug::log(ERR, "DonationNag: Last epoch invalid? Failed to parse \"{}\". Setting to today.", *LASTNAGSTR); - const auto EPOCHSTR = std::format("{}", EPOCH); - NFsUtils::writeToFile(*DATAROOT + "/" + LAST_NAG_FILE_NAME, EPOCHSTR); + if ((!state.major && currentMajor <= 48) || !state.epoch) { + state.major = currentMajor; + state.epoch = state.epoch == 0 ? EPOCH : state.epoch; + writeState(state); return; } // don't nag if the last nag was less than a month ago. This is // mostly for first-time nags, as other nags happen in specific time frames shorter than a month - if (EPOCH - LAST_EPOCH < MONTH_IN_SECONDS) { - Debug::log(LOG, "DonationNag: last nag was {} days ago, too early for a nag.", (int)std::round((EPOCH - LAST_EPOCH) / (double)MONTH_IN_SECONDS)); + if (EPOCH - state.epoch < MONTH_IN_SECONDS) { + Debug::log(LOG, "DonationNag: last nag was {} days ago, too early for a nag.", (int)std::round((EPOCH - state.epoch) / (double)DAY_IN_SECONDS)); return; } @@ -92,23 +93,66 @@ CDonationNagManager::CDonationNagManager() { Debug::log(LOG, "DonationNag: hit nag month {} days {}-{}, it's {} today, nagging", MONTH, nagPoint.dayStart, nagPoint.dayEnd, DAY); - m_bFired = true; + fire(); - const auto EPOCHSTR = std::format("{}", EPOCH); - NFsUtils::writeToFile(*DATAROOT + "/" + LAST_NAG_FILE_NAME, EPOCHSTR); - - g_pEventLoopManager->doLater([] { - CProcess proc("hyprland-donate-screen", {}); - proc.runAsync(); - }); + state.major = currentMajor; + state.epoch = EPOCH; + writeState(state); break; } if (!m_bFired) - Debug::log(LOG, "DonationNag: didn't hit any nagging periods"); + Debug::log(LOG, "DonationNag: didn't hit any nagging periods, checking update"); + + if (state.major < currentMajor) { + Debug::log(LOG, "DonationNag: hit nag for major update {} -> {}", state.major, currentMajor); + + fire(); + + state.major = currentMajor; + state.epoch = EPOCH; + writeState(state); + } + + if (!m_bFired) + Debug::log(LOG, "DonationNag: didn't hit nagging conditions"); } bool CDonationNagManager::fired() { return m_bFired; -} \ No newline at end of file +} + +void CDonationNagManager::fire() { + static const auto DATAROOT = NFsUtils::getDataHome(); + + m_bFired = true; + + g_pEventLoopManager->doLater([] { + CProcess proc("hyprland-donate-screen", {}); + proc.runAsync(); + }); +} + +CDonationNagManager::SStateData CDonationNagManager::getState() { + static const auto DATAROOT = NFsUtils::getDataHome(); + const auto STR = NFsUtils::readFileAsString(*DATAROOT + "/" + LAST_NAG_FILE_NAME); + + if (!STR.has_value()) + return {}; + + CVarList lines(*STR, 0, '\n'); + CDonationNagManager::SStateData state; + + try { + state.epoch = std::stoull(lines[0]); + state.major = std::stoull(lines[1]); + } catch (...) { ; } + + return state; +} + +void CDonationNagManager::writeState(const SStateData& s) { + static const auto DATAROOT = NFsUtils::getDataHome(); + NFsUtils::writeToFile(*DATAROOT + "/" + LAST_NAG_FILE_NAME, std::format("{}\n{}", s.epoch, s.major)); +} diff --git a/src/managers/DonationNagManager.hpp b/src/managers/DonationNagManager.hpp index 357f979f..ce6015de 100644 --- a/src/managers/DonationNagManager.hpp +++ b/src/managers/DonationNagManager.hpp @@ -10,7 +10,16 @@ class CDonationNagManager { bool fired(); private: - bool m_bFired = false; + struct SStateData { + uint64_t epoch = 0; + uint64_t major = 0; + }; + + SStateData getState(); + void writeState(const SStateData& s); + void fire(); + + bool m_bFired = false; }; inline UP g_pDonationNagManager; \ No newline at end of file From 5d005f11fa218d26ed2cf6ce75cd9aac9c2c00e5 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 14:07:23 +0100 Subject: [PATCH 0129/1077] xdg-bell: fix wrong resource cast --- src/protocols/XDGBell.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/protocols/XDGBell.cpp b/src/protocols/XDGBell.cpp index 593d78fc..f2cedf66 100644 --- a/src/protocols/XDGBell.cpp +++ b/src/protocols/XDGBell.cpp @@ -1,5 +1,5 @@ #include "XDGBell.hpp" -#include "XDGShell.hpp" +#include "core/Compositor.hpp" #include "../desktop/Window.hpp" #include "../managers/EventManager.hpp" #include "../Compositor.hpp" @@ -11,8 +11,8 @@ CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UPsetDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); m_resource->setOnDestroy([this](CXdgSystemBellV1* r) { PROTO::xdgBell->destroyResource(this); }); - m_resource->setRing([](CXdgSystemBellV1* r, wl_resource* toplevel) { - if (!toplevel) { + m_resource->setRing([](CXdgSystemBellV1* r, wl_resource* surface) { + if (!surface) { g_pEventManager->postEvent(SHyprIPCEvent{ .event = "bell", .data = "", @@ -20,9 +20,9 @@ CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UPpostEvent(SHyprIPCEvent{ .event = "bell", .data = "", @@ -31,10 +31,10 @@ CXDGSystemBellManagerResource::CXDGSystemBellManagerResource(UPm_windows) { - if (!w->m_isMapped || w->m_isX11 || !w->m_xdgSurface) + if (!w->m_isMapped || w->m_isX11 || !w->m_xdgSurface || !w->m_wlSurface) continue; - if (w->m_xdgSurface == TOPLEVEL->owner) { + if (w->m_wlSurface->resource() == SURFACE) { g_pEventManager->postEvent(SHyprIPCEvent{ .event = "bell", .data = std::format("{:x}", (uintptr_t)w.get()), From 2ee5118d7a4a59d3ccfaed305bfc05c79cea7637 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Wed, 30 Apr 2025 11:35:25 -0500 Subject: [PATCH 0130/1077] render: properly release rendered buffers (#9807) * cleanup eglSync * properly release buffers in renderer * add renderingDoneCallback and use it in screencopy * use static constructor for CEGLSync --- src/helpers/Monitor.cpp | 5 -- src/helpers/Monitor.hpp | 5 +- src/helpers/sync/SyncReleaser.cpp | 13 +++-- src/helpers/sync/SyncReleaser.hpp | 7 +-- src/protocols/DRMSyncobj.cpp | 6 +- src/protocols/Screencopy.cpp | 18 ++---- src/protocols/core/Compositor.cpp | 10 +--- src/protocols/types/Buffer.cpp | 16 ++++-- src/protocols/types/Buffer.hpp | 8 +-- src/render/OpenGL.cpp | 79 ++++++++++++-------------- src/render/OpenGL.hpp | 12 ++-- src/render/Renderer.cpp | 74 ++++++++++-------------- src/render/Renderer.hpp | 22 +++---- src/render/pass/SurfacePassElement.cpp | 5 ++ 14 files changed, 119 insertions(+), 161 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index cd394c19..4ee0166f 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -3,7 +3,6 @@ #include "../macros.hpp" #include "math/Math.hpp" #include "../protocols/ColorManagement.hpp" -#include "sync/SyncReleaser.hpp" #include "../Compositor.hpp" #include "../config/ConfigValue.hpp" #include "../config/ConfigManager.hpp" @@ -61,10 +60,6 @@ void CMonitor::onConnect(bool noRule) { g_pEventLoopManager->doLater([] { g_pConfigManager->ensurePersistentWorkspacesPresent(); }); - if (output->supportsExplicit) { - inTimeline = CSyncTimeline::create(output->getBackend()->drmFD()); - } - listeners.frame = output->events.frame.registerListener([this](std::any d) { onMonitorFrame(); }); listeners.commit = output->events.commit.registerListener([this](std::any d) { if (true) { // FIXME: E->state->committed & WLR_OUTPUT_STATE_BUFFER diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 2ce6b626..88252ab4 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -139,10 +139,7 @@ class CMonitor { SMonitorRule activeMonitorRule; // explicit sync - SP inTimeline; - Hyprutils::OS::CFileDescriptor inFence; - SP eglSync; - uint64_t inTimelinePoint = 0; + Hyprutils::OS::CFileDescriptor inFence; // TODO: remove when aq uses CFileDescriptor PHLMONITORREF self; diff --git a/src/helpers/sync/SyncReleaser.cpp b/src/helpers/sync/SyncReleaser.cpp index fca7d7c2..66d7667f 100644 --- a/src/helpers/sync/SyncReleaser.cpp +++ b/src/helpers/sync/SyncReleaser.cpp @@ -35,7 +35,10 @@ CSyncReleaser::~CSyncReleaser() { m_timeline->signal(m_point); } -CFileDescriptor CSyncReleaser::mergeSyncFds(const CFileDescriptor& fd1, const CFileDescriptor& fd2) { +static CFileDescriptor mergeSyncFds(const CFileDescriptor& fd1, const CFileDescriptor& fd2) { + // combines the fences of both sync_fds into a dma_fence_array (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html#c.dma_fence_array_create) + // with the signal_on_any param set to false, so the new sync_fd will "signal when all fences in the array signal." + struct sync_merge_data data{ .name = "merged release fence", .fd2 = fd2.get(), @@ -51,13 +54,11 @@ CFileDescriptor CSyncReleaser::mergeSyncFds(const CFileDescriptor& fd1, const CF return CFileDescriptor(data.fence); } -void CSyncReleaser::addReleaseSync(SP sync) { +void CSyncReleaser::addSyncFileFd(const Hyprutils::OS::CFileDescriptor& syncFd) { if (m_fd.isValid()) - m_fd = mergeSyncFds(m_fd, sync->takeFD()); + m_fd = mergeSyncFds(m_fd, syncFd); else - m_fd = sync->fd().duplicate(); - - m_sync = sync; + m_fd = syncFd.duplicate(); } void CSyncReleaser::drop() { diff --git a/src/helpers/sync/SyncReleaser.hpp b/src/helpers/sync/SyncReleaser.hpp index f04e85c1..0063171d 100644 --- a/src/helpers/sync/SyncReleaser.hpp +++ b/src/helpers/sync/SyncReleaser.hpp @@ -12,7 +12,6 @@ */ class CSyncTimeline; -class CEGLSync; class CSyncReleaser { public: @@ -22,13 +21,11 @@ class CSyncReleaser { // drops the releaser, will never signal anymore void drop(); - // wait for this gpu job to finish before releasing - Hyprutils::OS::CFileDescriptor mergeSyncFds(const Hyprutils::OS::CFileDescriptor& fd1, const Hyprutils::OS::CFileDescriptor& fd2); - void addReleaseSync(SP sync); + // wait for this sync_fd to signal before releasing + void addSyncFileFd(const Hyprutils::OS::CFileDescriptor& syncFd); private: SP m_timeline; uint64_t m_point = 0; Hyprutils::OS::CFileDescriptor m_fd; - SP m_sync; }; diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index 5d04d53f..48a80dcc 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -105,10 +105,8 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UPpending.acquire = pendingAcquire; pendingAcquire = {}; - surface->pending.buffer.release = pendingRelease; - pendingRelease = {}; - - surface->pending.buffer->syncReleaser = surface->pending.buffer.release.createSyncRelease(); + surface->pending.buffer->addReleasePoint(pendingRelease); + pendingRelease = {}; }); } diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 3862dddd..6727bcf4 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -221,21 +221,11 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } g_pHyprOpenGL->m_RenderData.blockScreenShader = true; - g_pHyprRenderer->endRender(); - auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(pMonitor->output); - if (pMonitor->inTimeline && explicitOptions.explicitEnabled) { - if (pMonitor->inTimeline->addWaiter( - [callback, sync = pMonitor->eglSync]() { - LOGM(TRACE, "Copied frame via dma with explicit sync"); - callback(true); - }, - pMonitor->inTimelinePoint, 0)) - return; - // on explicit sync failure, fallthrough to immediate callback - } - LOGM(TRACE, "Copied frame via dma"); - callback(true); + g_pHyprRenderer->endRender([callback]() { + LOGM(TRACE, "Copied frame via dma"); + callback(true); + }); } bool CScreencopyFrame::copyShm() { diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 23b14dd3..cf28b240 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -7,7 +7,6 @@ #include "Subcompositor.hpp" #include "../Viewporter.hpp" #include "../../helpers/Monitor.hpp" -#include "../../helpers/sync/SyncReleaser.hpp" #include "../PresentationTime.hpp" #include "../DRMSyncobj.hpp" #include "../types/DMABuffer.hpp" @@ -518,8 +517,7 @@ void CWLSurfaceResource::commitState(SSurfaceState& state) { nullptr); } - // release the buffer if it's synchronous (SHM) as update() has done everything thats needed - // so we can let the app know we're done. + // release the buffer if it's synchronous (SHM) as updateSynchronousTexture() has copied the buffer data to a GPU tex // if it doesn't have a role, we can't release it yet, in case it gets turned into a cursor. if (current.buffer && current.buffer->isSynchronous() && role->role() != SURFACE_ROLE_UNASSIGNED) dropCurrentBuffer(); @@ -572,12 +570,6 @@ void CWLSurfaceResource::presentFeedback(const Time::steady_tp& when, PHLMONITOR else FEEDBACK->presented(); PROTO::presentation->queueData(FEEDBACK); - - if (!pMonitor || !pMonitor->inTimeline || !syncobj) - return; - - // attach explicit sync - g_pHyprRenderer->explicitPresented.emplace_back(self.lock()); } CWLCompositorResource::CWLCompositorResource(SP resource_) : resource(resource_) { diff --git a/src/protocols/types/Buffer.cpp b/src/protocols/types/Buffer.cpp index 22745c06..73155c29 100644 --- a/src/protocols/types/Buffer.cpp +++ b/src/protocols/types/Buffer.cpp @@ -7,6 +7,7 @@ IHLBuffer::~IHLBuffer() { void IHLBuffer::sendRelease() { resource->sendRelease(); + syncReleasers.clear(); } void IHLBuffer::lock() { @@ -18,10 +19,8 @@ void IHLBuffer::unlock() { ASSERT(nLocks >= 0); - if (nLocks == 0) { + if (nLocks == 0) sendRelease(); - syncReleaser.reset(); - } } bool IHLBuffer::locked() { @@ -40,11 +39,17 @@ void IHLBuffer::onBackendRelease(const std::function& fn) { }); } +void IHLBuffer::addReleasePoint(CDRMSyncPointState& point) { + ASSERT(locked()); + if (point) + syncReleasers.emplace_back(point.createSyncRelease()); +} + CHLBufferReference::CHLBufferReference() : buffer(nullptr) { ; } -CHLBufferReference::CHLBufferReference(const CHLBufferReference& other) : release(other.release), buffer(other.buffer) { +CHLBufferReference::CHLBufferReference(const CHLBufferReference& other) : buffer(other.buffer) { if (buffer) buffer->lock(); } @@ -64,8 +69,7 @@ CHLBufferReference& CHLBufferReference::operator=(const CHLBufferReference& othe other.buffer->lock(); if (buffer) buffer->unlock(); - buffer = other.buffer; - release = other.release; + buffer = other.buffer; return *this; } diff --git a/src/protocols/types/Buffer.hpp b/src/protocols/types/Buffer.hpp index 1bf7583c..e4821ac0 100644 --- a/src/protocols/types/Buffer.hpp +++ b/src/protocols/types/Buffer.hpp @@ -24,11 +24,12 @@ class IHLBuffer : public Aquamarine::IBuffer { virtual bool locked(); void onBackendRelease(const std::function& fn); + void addReleasePoint(CDRMSyncPointState& point); SP texture; bool opaque = false; SP resource; - UP syncReleaser; + std::vector> syncReleasers; struct { CHyprSignalListener backendRelease; @@ -57,8 +58,7 @@ class CHLBufferReference { operator bool() const; // unlock and drop the buffer without sending release - void drop(); + void drop(); - CDRMSyncPointState release; - SP buffer; + SP buffer; }; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index a6cc176a..2a0cbe5a 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -3090,44 +3090,6 @@ std::vector CHyprOpenGLImpl::getDRMFormats() { return drmFormats; } -SP CHyprOpenGLImpl::createEGLSync(int fenceFD) { - std::vector attribs; - CFileDescriptor dupFd; - if (fenceFD >= 0) { - dupFd = CFileDescriptor{fcntl(fenceFD, F_DUPFD_CLOEXEC, 0)}; - if (!dupFd.isValid()) { - Debug::log(ERR, "createEGLSync: dup failed"); - return nullptr; - } - // reserve number of elements to avoid reallocations - attribs.reserve(3); - attribs.push_back(EGL_SYNC_NATIVE_FENCE_FD_ANDROID); - attribs.push_back(dupFd.get()); - attribs.push_back(EGL_NONE); - } - - EGLSyncKHR sync = m_sProc.eglCreateSyncKHR(m_pEglDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, attribs.data()); - if (sync == EGL_NO_SYNC_KHR) { - Debug::log(ERR, "eglCreateSyncKHR failed"); - return nullptr; - } else - dupFd.take(); // eglCreateSyncKHR only takes ownership on success - - // we need to flush otherwise we might not get a valid fd - glFlush(); - - int fd = g_pHyprOpenGL->m_sProc.eglDupNativeFenceFDANDROID(g_pHyprOpenGL->m_pEglDisplay, sync); - if (fd == EGL_NO_NATIVE_FENCE_FD_ANDROID) { - Debug::log(ERR, "eglDupNativeFenceFDANDROID failed"); - return nullptr; - } - - auto eglsync = SP(new CEGLSync); - eglsync->sync = sync; - eglsync->m_iFd = CFileDescriptor{fd}; - return eglsync; -} - void SRenderModifData::applyToBox(CBox& box) { if (!enabled) return; @@ -3189,18 +3151,47 @@ float SRenderModifData::combinedScale() { return scale; } +UP CEGLSync::create() { + EGLSyncKHR sync = g_pHyprOpenGL->m_sProc.eglCreateSyncKHR(g_pHyprOpenGL->m_pEglDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, nullptr); + + if (sync == EGL_NO_SYNC_KHR) { + Debug::log(ERR, "eglCreateSyncKHR failed"); + return nullptr; + } + + // we need to flush otherwise we might not get a valid fd + glFlush(); + + int fd = g_pHyprOpenGL->m_sProc.eglDupNativeFenceFDANDROID(g_pHyprOpenGL->m_pEglDisplay, sync); + if (fd == EGL_NO_NATIVE_FENCE_FD_ANDROID) { + Debug::log(ERR, "eglDupNativeFenceFDANDROID failed"); + return nullptr; + } + + UP eglSync(new CEGLSync); + eglSync->m_fd = CFileDescriptor(fd); + eglSync->m_sync = sync; + eglSync->m_valid = true; + + return eglSync; +} + CEGLSync::~CEGLSync() { - if (sync == EGL_NO_SYNC_KHR) + if (m_sync == EGL_NO_SYNC_KHR) return; - if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE) + if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, m_sync) != EGL_TRUE) Debug::log(ERR, "eglDestroySyncKHR failed"); } -CFileDescriptor&& CEGLSync::takeFD() { - return std::move(m_iFd); +CFileDescriptor& CEGLSync::fd() { + return m_fd; } -CFileDescriptor& CEGLSync::fd() { - return m_iFd; +CFileDescriptor&& CEGLSync::takeFd() { + return std::move(m_fd); +} + +bool CEGLSync::isValid() { + return m_valid && m_sync != EGL_NO_SYNC_KHR && m_fd.isValid(); } diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 414ba103..21602d07 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -150,17 +150,20 @@ struct SCurrentRenderData { class CEGLSync { public: + static UP create(); + ~CEGLSync(); - EGLSyncKHR sync = nullptr; - - Hyprutils::OS::CFileDescriptor&& takeFD(); Hyprutils::OS::CFileDescriptor& fd(); + Hyprutils::OS::CFileDescriptor&& takeFd(); + bool isValid(); private: CEGLSync() = default; - Hyprutils::OS::CFileDescriptor m_iFd; + Hyprutils::OS::CFileDescriptor m_fd; + EGLSyncKHR m_sync = EGL_NO_SYNC_KHR; + bool m_valid = false; friend class CHyprOpenGLImpl; }; @@ -234,7 +237,6 @@ class CHyprOpenGLImpl { uint32_t getPreferredReadFormat(PHLMONITOR pMonitor); std::vector getDRMFormats(); EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); - SP createEGLSync(int fence = -1); bool initShaders(); bool m_bShadersInitialized = false; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 0db305af..93d3620f 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1,7 +1,6 @@ #include "Renderer.hpp" #include "../Compositor.hpp" #include "../helpers/math/Math.hpp" -#include "../helpers/sync/SyncReleaser.hpp" #include #include #include @@ -1571,25 +1570,6 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { } } - auto explicitOptions = getExplicitSyncSettings(pMonitor->output); - if (!explicitOptions.explicitEnabled) - return ok; - - Debug::log(TRACE, "Explicit: {} presented", explicitPresented.size()); - - if (!pMonitor->eglSync) - Debug::log(TRACE, "Explicit: can't add sync, monitor has no EGLSync"); - else { - for (auto const& e : explicitPresented) { - if (!e->current.buffer || !e->current.buffer->syncReleaser) - continue; - - e->current.buffer->syncReleaser->addReleaseSync(pMonitor->eglSync); - } - } - - explicitPresented.clear(); - return ok; } @@ -2275,7 +2255,7 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod return true; } -void CHyprRenderer::endRender() { +void CHyprRenderer::endRender(const std::function& renderingDoneCallback) { const auto PMONITOR = g_pHyprOpenGL->m_RenderData.pMonitor; static auto PNVIDIAANTIFLICKER = CConfigValue("opengl:nvidia_anti_flicker"); @@ -2296,42 +2276,48 @@ void CHyprRenderer::endRender() { g_pHyprOpenGL->m_RenderData.mouseZoomUseMouse = true; } + // send all queued opengl commands so rendering starts happening immediately + glFlush(); + if (m_eRenderMode == RENDER_MODE_FULL_FAKE) return; if (m_eRenderMode == RENDER_MODE_NORMAL) PMONITOR->output->state->setBuffer(m_pCurrentBuffer); - auto explicitOptions = getExplicitSyncSettings(PMONITOR->output); - - if (PMONITOR->inTimeline && explicitOptions.explicitEnabled) { - PMONITOR->eglSync = g_pHyprOpenGL->createEGLSync(); - if (!PMONITOR->eglSync) { - Debug::log(ERR, "renderer: couldn't create an EGLSync for out in endRender"); - return; - } - - PMONITOR->inTimelinePoint++; - bool ok = PMONITOR->inTimeline->importFromSyncFileFD(PMONITOR->inTimelinePoint, PMONITOR->eglSync->fd()); - if (!ok) { - Debug::log(ERR, "renderer: couldn't import from sync file fd in endRender"); - return; - } - - if (m_eRenderMode == RENDER_MODE_NORMAL && explicitOptions.explicitKMSEnabled) { - PMONITOR->inFence = CFileDescriptor{PMONITOR->inTimeline->exportAsSyncFileFD(PMONITOR->inTimelinePoint)}; - if (!PMONITOR->inFence.isValid()) { - Debug::log(ERR, "renderer: couldn't export from sync timeline in endRender"); - return; + UP eglSync = CEGLSync::create(); + if (eglSync && eglSync->isValid()) { + for (auto const& buf : usedAsyncBuffers) { + for (const auto& releaser : buf->syncReleasers) { + releaser->addSyncFileFd(eglSync->fd()); } + } + // release buffer refs with release points now, since syncReleaser handles actual buffer release based on EGLSync + std::erase_if(usedAsyncBuffers, [](const auto& buf) { return !buf->syncReleasers.empty(); }); + + // release buffer refs without release points when EGLSync sync_file/fence is signalled + g_pEventLoopManager->doOnReadable(eglSync->fd().duplicate(), [renderingDoneCallback, prevbfs = std::move(usedAsyncBuffers)]() mutable { + prevbfs.clear(); + if (renderingDoneCallback) + renderingDoneCallback(); + }); + usedAsyncBuffers.clear(); + + if (m_eRenderMode == RENDER_MODE_NORMAL) { + PMONITOR->inFence = eglSync->takeFd(); PMONITOR->output->state->setExplicitInFence(PMONITOR->inFence.get()); } } else { + Debug::log(ERR, "renderer: couldn't use EGLSync for explicit gpu synchronization"); + + // nvidia doesn't have implicit sync, so we have to explicitly wait here if (isNvidia() && *PNVIDIAANTIFLICKER) glFinish(); - else - glFlush(); + + usedAsyncBuffers.clear(); // release all buffer refs and hope implicit sync works + if (renderingDoneCallback) + renderingDoneCallback(); } } diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 553965a4..37e1e91f 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -87,24 +87,24 @@ class CHyprRenderer { // if RENDER_MODE_NORMAL, provided damage will be written to. // otherwise, it will be the one used. bool beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMode mode = RENDER_MODE_NORMAL, SP buffer = {}, CFramebuffer* fb = nullptr, bool simple = false); - void endRender(); + void endRender(const std::function& renderingDoneCallback = {}); bool m_bBlockSurfaceFeedback = false; bool m_bRenderingSnapshot = false; - PHLMONITORREF m_pMostHzMonitor; - bool m_bDirectScanoutBlocked = false; + PHLMONITORREF m_pMostHzMonitor; + bool m_bDirectScanoutBlocked = false; - void setSurfaceScanoutMode(SP surface, PHLMONITOR monitor); // nullptr monitor resets - void initiateManualCrash(); + void setSurfaceScanoutMode(SP surface, PHLMONITOR monitor); // nullptr monitor resets + void initiateManualCrash(); - bool m_bCrashingInProgress = false; - float m_fCrashingDistort = 0.5f; - wl_event_source* m_pCrashingLoop = nullptr; - wl_event_source* m_pCursorTicker = nullptr; + bool m_bCrashingInProgress = false; + float m_fCrashingDistort = 0.5f; + wl_event_source* m_pCrashingLoop = nullptr; + wl_event_source* m_pCursorTicker = nullptr; - CTimer m_tRenderTimer; + CTimer m_tRenderTimer; - std::vector> explicitPresented; + std::vector usedAsyncBuffers; struct { int hotspotX = 0; diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index c47c76ce..22e61a23 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -129,6 +129,11 @@ void CSurfacePassElement::draw(const CRegion& damage) { if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) data.surface->presentFeedback(data.when, data.pMonitor->self.lock()); + // add async (dmabuf) buffers to usedBuffers so we can handle release later + // sync (shm) buffers will be released in commitState, so no need to track them here + if (data.surface->current.buffer && !data.surface->current.buffer->isSynchronous()) + g_pHyprRenderer->usedAsyncBuffers.emplace_back(data.surface->current.buffer); + g_pHyprOpenGL->blend(true); } From b8a204c21d6b36a5b3ccf4c125553c61a9fd6b90 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 22:34:09 +0100 Subject: [PATCH 0131/1077] ci: minor fixes to glaze --- .github/actions/setup_base/action.yml | 10 +--------- hyprpm/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/actions/setup_base/action.yml b/.github/actions/setup_base/action.yml index b4c9cf78..7eab5649 100644 --- a/.github/actions/setup_base/action.yml +++ b/.github/actions/setup_base/action.yml @@ -20,6 +20,7 @@ runs: clang \ cmake \ git \ + glaze \ glm \ glslang \ go \ @@ -64,15 +65,6 @@ runs: librsvg \ re2 - - name: Get glaze - shell: bash - run: | - git clone https://github.com/stephenberry/glaze.git - cd glaze - cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build - cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` - cmake --install build - - name: Get hyprwayland-scanner-git shell: bash run: | diff --git a/hyprpm/CMakeLists.txt b/hyprpm/CMakeLists.txt index d744ac16..b3028d0a 100644 --- a/hyprpm/CMakeLists.txt +++ b/hyprpm/CMakeLists.txt @@ -13,7 +13,7 @@ pkg_check_modules(hyprpm_deps REQUIRED IMPORTED_TARGET tomlplusplus hyprutils>=0 find_package(glaze QUIET) if (NOT glaze_FOUND) - set(GLAZE_VERSION v4.2.3) + set(GLAZE_VERSION v5.1.1) message(STATUS "glaze dependency not found, retrieving ${GLAZE_VERSION} with FetchContent") include(FetchContent) FetchContent_Declare( From 50e1bec85f8febdd78f50d94f140d07f9b34148d Mon Sep 17 00:00:00 2001 From: davc0n Date: Wed, 30 Apr 2025 23:45:20 +0200 Subject: [PATCH 0132/1077] helpers: refactor class member vars (#10218) --- src/Compositor.cpp | 237 +++-- src/config/ConfigManager.cpp | 82 +- src/debug/HyprCtl.cpp | 71 +- src/debug/HyprDebugOverlay.cpp | 18 +- src/debug/HyprNotificationOverlay.cpp | 10 +- src/desktop/LayerSurface.cpp | 72 +- src/desktop/Popup.cpp | 4 +- src/desktop/Window.cpp | 86 +- src/desktop/Workspace.cpp | 22 +- src/devices/VirtualPointer.cpp | 2 +- src/events/Windows.cpp | 74 +- src/helpers/Color.cpp | 10 +- src/helpers/Color.hpp | 2 +- src/helpers/DamageRing.cpp | 26 +- src/helpers/DamageRing.hpp | 8 +- src/helpers/MiscFunctions.cpp | 14 +- src/helpers/Monitor.cpp | 911 +++++++++--------- src/helpers/Monitor.hpp | 132 ++- src/helpers/sync/SyncTimeline.cpp | 58 +- src/helpers/sync/SyncTimeline.hpp | 8 +- src/hyprerror/HyprError.cpp | 24 +- src/layout/DwindleLayout.cpp | 56 +- src/layout/IHyprLayout.cpp | 58 +- src/layout/MasterLayout.cpp | 86 +- src/managers/AnimationManager.cpp | 28 +- src/managers/CursorManager.cpp | 6 +- src/managers/KeybindManager.cpp | 84 +- src/managers/PointerManager.cpp | 119 +-- src/managers/ProtocolManager.cpp | 28 +- src/managers/SessionLockManager.cpp | 6 +- src/managers/XWaylandManager.cpp | 20 +- src/managers/input/InputManager.cpp | 33 +- src/managers/input/InputMethodPopup.cpp | 14 +- src/managers/input/Swipe.cpp | 18 +- src/managers/input/Touch.cpp | 20 +- src/protocols/CTMControl.cpp | 8 +- src/protocols/ColorManagement.cpp | 2 +- src/protocols/DRMLease.cpp | 28 +- src/protocols/ForeignToplevelWlr.cpp | 16 +- src/protocols/GammaControl.cpp | 32 +- src/protocols/LayerShell.cpp | 2 +- src/protocols/LinuxDMABUF.cpp | 6 +- src/protocols/OutputManagement.cpp | 112 +-- src/protocols/OutputPower.cpp | 20 +- src/protocols/PresentationTime.cpp | 6 +- src/protocols/Screencopy.cpp | 26 +- src/protocols/SessionLock.cpp | 6 +- src/protocols/ToplevelExport.cpp | 46 +- src/protocols/XDGOutput.cpp | 14 +- src/protocols/XDGShell.cpp | 2 +- src/protocols/core/Compositor.cpp | 12 +- src/protocols/core/DataDevice.cpp | 2 +- src/protocols/core/Output.cpp | 24 +- src/render/Framebuffer.cpp | 2 +- src/render/OpenGL.cpp | 237 ++--- src/render/Renderer.cpp | 371 +++---- .../decorations/CHyprBorderDecoration.cpp | 6 +- .../decorations/CHyprDropShadowDecoration.cpp | 30 +- .../decorations/CHyprGroupBarDecoration.cpp | 28 +- src/render/pass/Pass.cpp | 30 +- src/render/pass/RectPassElement.cpp | 2 +- src/render/pass/SurfacePassElement.cpp | 18 +- src/render/pass/TexPassElement.cpp | 4 +- 63 files changed, 1770 insertions(+), 1769 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 212e514b..154ec135 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -476,7 +476,7 @@ void CCompositor::initAllSignals() { for (auto const& m : m_monitors) { scheduleFrameForMonitor(m); - m->applyMonitorRule(&m->activeMonitorRule, true); + m->applyMonitorRule(&m->m_activeMonitorRule, true); } g_pConfigManager->m_wantsMonitorReload = true; @@ -558,8 +558,8 @@ void CCompositor::cleanup() { for (auto const& m : m_monitors) { g_pHyprOpenGL->destroyMonitorResources(m); - m->output->state->setEnabled(false); - m->state.commit(); + m->m_output->state->setEnabled(false); + m->m_state.commit(); } g_pXWayland.reset(); @@ -783,7 +783,7 @@ void CCompositor::startCompositor() { PHLMONITOR CCompositor::getMonitorFromID(const MONITORID& id) { for (auto const& m : m_monitors) { - if (m->ID == id) { + if (m->m_id == id) { return m; } } @@ -793,7 +793,7 @@ PHLMONITOR CCompositor::getMonitorFromID(const MONITORID& id) { PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) { for (auto const& m : m_monitors) { - if (m->szName == name) { + if (m->m_name == name) { return m; } } @@ -802,7 +802,7 @@ PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) { PHLMONITOR CCompositor::getMonitorFromDesc(const std::string& desc) { for (auto const& m : m_monitors) { - if (m->szDescription.starts_with(desc)) + if (m->m_description.starts_with(desc)) return m; } return nullptr; @@ -820,7 +820,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { PHLMONITOR mon; for (auto const& m : m_monitors) { - if (CBox{m->vecPosition, m->vecSize}.containsPoint(point)) { + if (CBox{m->m_position, m->m_size}.containsPoint(point)) { mon = m; break; } @@ -831,7 +831,7 @@ PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) { PHLMONITOR pBestMon; for (auto const& m : m_monitors) { - float dist = vecToRectDistanceSquared(point, m->vecPosition, m->vecPosition + m->vecSize); + float dist = vecToRectDistanceSquared(point, m->m_position, m->m_position + m->m_size); if (dist < bestDistance || !pBestMon) { bestDistance = dist; @@ -901,11 +901,10 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper const auto PWINDOWMONITOR = w->m_monitor.lock(); // to avoid focusing windows behind special workspaces from other monitors - if (!*PSPECIALFALLTHRU && PWINDOWMONITOR && PWINDOWMONITOR->activeSpecialWorkspace && w->m_workspace != PWINDOWMONITOR->activeSpecialWorkspace) { + if (!*PSPECIALFALLTHRU && PWINDOWMONITOR && PWINDOWMONITOR->m_activeSpecialWorkspace && w->m_workspace != PWINDOWMONITOR->m_activeSpecialWorkspace) { const auto BB = w->getWindowBoxUnified(properties); - if (BB.x >= PWINDOWMONITOR->vecPosition.x && BB.y >= PWINDOWMONITOR->vecPosition.y && - BB.x + BB.width <= PWINDOWMONITOR->vecPosition.x + PWINDOWMONITOR->vecSize.x && - BB.y + BB.height <= PWINDOWMONITOR->vecPosition.y + PWINDOWMONITOR->vecSize.y) + if (BB.x >= PWINDOWMONITOR->m_position.x && BB.y >= PWINDOWMONITOR->m_position.y && + BB.x + BB.width <= PWINDOWMONITOR->m_position.x + PWINDOWMONITOR->m_size.x && BB.y + BB.height <= PWINDOWMONITOR->m_position.y + PWINDOWMONITOR->m_size.y) continue; } @@ -992,10 +991,10 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper }; // special workspace - if (PMONITOR->activeSpecialWorkspace && !*PSPECIALFALLTHRU) + if (PMONITOR->m_activeSpecialWorkspace && !*PSPECIALFALLTHRU) return windowForWorkspace(true); - if (PMONITOR->activeSpecialWorkspace) { + if (PMONITOR->m_activeSpecialWorkspace) { const auto PWINDOW = windowForWorkspace(true); if (PWINDOW) @@ -1061,7 +1060,7 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo PHLMONITOR CCompositor::getMonitorFromOutput(SP out) { for (auto const& m : m_monitors) { - if (m->output == out) { + if (m->m_output == out) { return m; } } @@ -1071,7 +1070,7 @@ PHLMONITOR CCompositor::getMonitorFromOutput(SP out) { PHLMONITOR CCompositor::getRealMonitorFromOutput(SP out) { for (auto const& m : m_realMonitors) { - if (m->output == out) { + if (m->m_output == out) { return m; } } @@ -1137,7 +1136,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; if (pWindow->m_pinned) - pWindow->m_workspace = m_lastMonitor->activeWorkspace; + pWindow->m_workspace = m_lastMonitor->m_activeWorkspace; const auto PMONITOR = pWindow->m_monitor.lock(); @@ -1145,8 +1144,8 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface const auto PWORKSPACE = pWindow->m_workspace; // This is to fix incorrect feedback on the focus history. PWORKSPACE->m_lastFocusedWindow = pWindow; - if (m_lastMonitor->activeWorkspace) - PWORKSPACE->rememberPrevWorkspace(m_lastMonitor->activeWorkspace); + if (m_lastMonitor->m_activeWorkspace) + PWORKSPACE->rememberPrevWorkspace(m_lastMonitor->m_activeWorkspace); if (PWORKSPACE->m_isSpecialWorkspace) m_lastMonitor->changeWorkspace(PWORKSPACE, false, true); // if special ws, open on current monitor else if (PMONITOR) @@ -1160,7 +1159,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface /* If special fallthrough is enabled, this behavior will be disabled, as I have no better idea of nicely tracking which window focuses are "via keybinds" and which ones aren't. */ - if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace != pWindow->m_workspace && !pWindow->m_pinned && !*PSPECIALFALLTHROUGH) + if (PMONITOR && PMONITOR->m_activeSpecialWorkspace && PMONITOR->m_activeSpecialWorkspace != pWindow->m_workspace && !pWindow->m_pinned && !*PSPECIALFALLTHROUGH) PMONITOR->setSpecialWorkspace(nullptr); // we need to make the PLASTWINDOW not equal to m_pLastWindow so that RENDERDATA is correct for an unfocused window @@ -1267,7 +1266,7 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo } SP CCompositor::vectorToLayerPopupSurface(const Vector2D& pos, PHLMONITOR monitor, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) { - for (auto const& lsl : monitor->m_aLayerSurfaceLayers | std::views::reverse) { + for (auto const& lsl : monitor->m_layerSurfaceLayers | std::views::reverse) { for (auto const& ls : lsl | std::views::reverse) { if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->mapped) || ls->m_alpha->value() == 0.f) continue; @@ -1474,7 +1473,7 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { if (ls->m_fadingOut && ls->m_readyToDelete && ls->isFadedOut()) { for (auto const& m : m_monitors) { - for (auto& lsl : m->m_aLayerSurfaceLayers) { + for (auto& lsl : m->m_layerSurfaceLayers) { if (!lsl.empty() && std::ranges::find_if(lsl, [&](auto& other) { return other == ls; }) != lsl.end()) { std::erase_if(lsl, [&](auto& other) { return other == ls || !other; }); } @@ -1528,7 +1527,7 @@ PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, char dir) { if (!PMONITOR) return nullptr; // ?? - const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{PMONITOR->vecPosition, PMONITOR->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); + const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{PMONITOR->m_position, PMONITOR->m_size} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); const auto PWORKSPACE = pWindow->m_workspace; return getWindowInDirection(WINDOWIDEALBB, PWORKSPACE, dir, pWindow, pWindow->m_isFloating); @@ -1754,14 +1753,14 @@ PHLWORKSPACE CCompositor::getWorkspaceByString(const std::string& str) { bool CCompositor::isPointOnAnyMonitor(const Vector2D& point) { return std::ranges::any_of( - m_monitors, [&](const PHLMONITOR& m) { return VECINRECT(point, m->vecPosition.x, m->vecPosition.y, m->vecSize.x + m->vecPosition.x, m->vecSize.y + m->vecPosition.y); }); + m_monitors, [&](const PHLMONITOR& m) { return VECINRECT(point, m->m_position.x, m->m_position.y, m->m_size.x + m->m_position.x, m->m_size.y + m->m_position.y); }); } bool CCompositor::isPointOnReservedArea(const Vector2D& point, const PHLMONITOR pMonitor) { const auto PMONITOR = pMonitor ? pMonitor : getMonitorFromVector(point); - const auto XY1 = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; - const auto XY2 = PMONITOR->vecPosition + PMONITOR->vecSize - PMONITOR->vecReservedBottomRight; + const auto XY1 = PMONITOR->m_position + PMONITOR->m_reservedTopLeft; + const auto XY2 = PMONITOR->m_position + PMONITOR->m_size - PMONITOR->m_reservedBottomRight; return VECNOTINRECT(point, XY1.x, XY1.y, XY2.x, XY2.y); } @@ -1774,8 +1773,8 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c if (!pSourceMonitor) return nullptr; - const auto POSA = pSourceMonitor->vecPosition; - const auto SIZEA = pSourceMonitor->vecSize; + const auto POSA = pSourceMonitor->m_position; + const auto SIZEA = pSourceMonitor->m_size; auto longestIntersect = -1; PHLMONITOR longestIntersectMonitor = nullptr; @@ -1784,8 +1783,8 @@ PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor, const c if (m == pSourceMonitor) continue; - const auto POSB = m->vecPosition; - const auto SIZEB = m->vecSize; + const auto POSB = m->m_position; + const auto SIZEB = m->m_size; switch (dir) { case 'l': if (STICKS(POSA.x, POSB.x + SIZEB.x)) { @@ -1937,13 +1936,13 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { MONITORID CCompositor::getNextAvailableMonitorID(std::string const& name) { // reuse ID if it's already in the map, and the monitor with that ID is not being used by another monitor - if (m_monitorIDMap.contains(name) && !std::ranges::any_of(m_realMonitors, [&](auto m) { return m->ID == m_monitorIDMap[name]; })) + if (m_monitorIDMap.contains(name) && !std::ranges::any_of(m_realMonitors, [&](auto m) { return m->m_id == m_monitorIDMap[name]; })) return m_monitorIDMap[name]; // otherwise, find minimum available ID that is not in the map std::unordered_set usedIDs; for (auto const& monitor : m_realMonitors) { - usedIDs.insert(monitor->ID); + usedIDs.insert(monitor->m_id); } MONITORID nextID = 0; @@ -1955,11 +1954,11 @@ MONITORID CCompositor::getNextAvailableMonitorID(std::string const& name) { } void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitorB) { - const auto PWORKSPACEA = pMonitorA->activeWorkspace; - const auto PWORKSPACEB = pMonitorB->activeWorkspace; + const auto PWORKSPACEA = pMonitorA->m_activeWorkspace; + const auto PWORKSPACEB = pMonitorB->m_activeWorkspace; PWORKSPACEA->m_monitor = pMonitorB; - PWORKSPACEA->moveToMonitor(pMonitorB->ID); + PWORKSPACEA->moveToMonitor(pMonitorB->m_id); for (auto const& w : m_windows) { if (w->m_workspace == PWORKSPACEA) { @@ -1972,11 +1971,11 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor // additionally, move floating and fs windows manually if (w->m_isFloating) - *w->m_realPosition = w->m_realPosition->goal() - pMonitorA->vecPosition + pMonitorB->vecPosition; + *w->m_realPosition = w->m_realPosition->goal() - pMonitorA->m_position + pMonitorB->m_position; if (w->isFullscreen()) { - *w->m_realPosition = pMonitorB->vecPosition; - *w->m_realSize = pMonitorB->vecSize; + *w->m_realPosition = pMonitorB->m_position; + *w->m_realSize = pMonitorB->m_size; } w->updateToplevel(); @@ -1984,7 +1983,7 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor } PWORKSPACEB->m_monitor = pMonitorA; - PWORKSPACEB->moveToMonitor(pMonitorA->ID); + PWORKSPACEB->moveToMonitor(pMonitorA->m_id); for (auto const& w : m_windows) { if (w->m_workspace == PWORKSPACEB) { @@ -1997,46 +1996,46 @@ void CCompositor::swapActiveWorkspaces(PHLMONITOR pMonitorA, PHLMONITOR pMonitor // additionally, move floating and fs windows manually if (w->m_isFloating) - *w->m_realPosition = w->m_realPosition->goal() - pMonitorB->vecPosition + pMonitorA->vecPosition; + *w->m_realPosition = w->m_realPosition->goal() - pMonitorB->m_position + pMonitorA->m_position; if (w->isFullscreen()) { - *w->m_realPosition = pMonitorA->vecPosition; - *w->m_realSize = pMonitorA->vecSize; + *w->m_realPosition = pMonitorA->m_position; + *w->m_realSize = pMonitorA->m_size; } w->updateToplevel(); } } - pMonitorA->activeWorkspace = PWORKSPACEB; - pMonitorB->activeWorkspace = PWORKSPACEA; + pMonitorA->m_activeWorkspace = PWORKSPACEB; + pMonitorB->m_activeWorkspace = PWORKSPACEA; PWORKSPACEA->rememberPrevWorkspace(PWORKSPACEB); PWORKSPACEB->rememberPrevWorkspace(PWORKSPACEA); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitorA->ID); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitorB->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitorA->m_id); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitorB->m_id); updateFullscreenFadeOnWorkspace(PWORKSPACEB); updateFullscreenFadeOnWorkspace(PWORKSPACEA); - if (pMonitorA->ID == g_pCompositor->m_lastMonitor->ID || pMonitorB->ID == g_pCompositor->m_lastMonitor->ID) { - const auto LASTWIN = pMonitorA->ID == g_pCompositor->m_lastMonitor->ID ? PWORKSPACEB->getLastFocusedWindow() : PWORKSPACEA->getLastFocusedWindow(); + if (pMonitorA->m_id == g_pCompositor->m_lastMonitor->m_id || pMonitorB->m_id == g_pCompositor->m_lastMonitor->m_id) { + const auto LASTWIN = pMonitorA->m_id == g_pCompositor->m_lastMonitor->m_id ? PWORKSPACEB->getLastFocusedWindow() : PWORKSPACEA->getLastFocusedWindow(); g_pCompositor->focusWindow(LASTWIN ? LASTWIN : (g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING))); - const auto PNEWWORKSPACE = pMonitorA->ID == g_pCompositor->m_lastMonitor->ID ? PWORKSPACEB : PWORKSPACEA; + const auto PNEWWORKSPACE = pMonitorA->m_id == g_pCompositor->m_lastMonitor->m_id ? PWORKSPACEB : PWORKSPACEA; g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspace", .data = PNEWWORKSPACE->m_name}); g_pEventManager->postEvent(SHyprIPCEvent{.event = "workspacev2", .data = std::format("{},{}", PNEWWORKSPACE->m_id, PNEWWORKSPACE->m_name)}); EMIT_HOOK_EVENT("workspace", PNEWWORKSPACE); } // event - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEA->m_name + "," + pMonitorB->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEA->m_id, PWORKSPACEA->m_name, pMonitorB->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEA->m_name + "," + pMonitorB->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEA->m_id, PWORKSPACEA->m_name, pMonitorB->m_name)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{PWORKSPACEA, pMonitorB})); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEB->m_name + "," + pMonitorA->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEB->m_id, PWORKSPACEB->m_name, pMonitorA->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = PWORKSPACEB->m_name + "," + pMonitorA->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", PWORKSPACEB->m_id, PWORKSPACEB->m_name, pMonitorA->m_name)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{PWORKSPACEB, pMonitorA})); } @@ -2103,7 +2102,7 @@ PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) { } } else { for (auto const& m : m_monitors) { - if (!m->output) + if (!m->m_output) continue; if (m->matchesStaticSelector(name)) { @@ -2124,11 +2123,11 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo if (pWorkspace->m_monitor == pMonitor) return; - Debug::log(LOG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_id, pMonitor->ID); + Debug::log(LOG, "moveWorkspaceToMonitor: Moving {} to monitor {}", pWorkspace->m_id, pMonitor->m_id); const auto POLDMON = pWorkspace->m_monitor.lock(); - const bool SWITCHINGISACTIVE = POLDMON ? POLDMON->activeWorkspace == pWorkspace : false; + const bool SWITCHINGISACTIVE = POLDMON ? POLDMON->m_activeWorkspace == pWorkspace : false; // fix old mon WORKSPACEID nextWorkspaceOnMonitorID = WORKSPACE_INVALID; @@ -2154,7 +2153,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with new {}", nextWorkspaceOnMonitorID); if (POLDMON) - g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->ID); + g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->m_id); } Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing {}", nextWorkspaceOnMonitorID); @@ -2164,7 +2163,7 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo // move the workspace pWorkspace->m_monitor = pMonitor; - pWorkspace->moveToMonitor(pMonitor->ID); + pWorkspace->moveToMonitor(pMonitor->m_id); for (auto const& w : m_windows) { if (w->m_workspace == pWorkspace) { @@ -2179,16 +2178,16 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo if (w->m_isMapped && !w->isHidden()) { if (POLDMON) { if (w->m_isFloating) - *w->m_realPosition = w->m_realPosition->goal() - POLDMON->vecPosition + pMonitor->vecPosition; + *w->m_realPosition = w->m_realPosition->goal() - POLDMON->m_position + pMonitor->m_position; if (w->isFullscreen()) { - *w->m_realPosition = pMonitor->vecPosition; - *w->m_realSize = pMonitor->vecSize; + *w->m_realPosition = pMonitor->m_position; + *w->m_realSize = pMonitor->m_size; } } else *w->m_realPosition = Vector2D{ - (pMonitor->vecSize.x != 0) ? (int)w->m_realPosition->goal().x % (int)pMonitor->vecSize.x : 0, - (pMonitor->vecSize.y != 0) ? (int)w->m_realPosition->goal().y % (int)pMonitor->vecSize.y : 0, + (pMonitor->m_size.x != 0) ? (int)w->m_realPosition->goal().x % (int)pMonitor->m_size.x : 0, + (pMonitor->m_size.y != 0) ? (int)w->m_realPosition->goal().y % (int)pMonitor->m_size.y : 0, }; } @@ -2199,32 +2198,32 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo if (SWITCHINGISACTIVE && POLDMON == g_pCompositor->m_lastMonitor) { // if it was active, preserve its' status. If it wasn't, don't. Debug::log(LOG, "moveWorkspaceToMonitor: SWITCHINGISACTIVE, active {} -> {}", pMonitor->activeWorkspaceID(), pWorkspace->m_id); - if (valid(pMonitor->activeWorkspace)) { - pMonitor->activeWorkspace->m_visible = false; - pMonitor->activeWorkspace->startAnim(false, false); + if (valid(pMonitor->m_activeWorkspace)) { + pMonitor->m_activeWorkspace->m_visible = false; + pMonitor->m_activeWorkspace->startAnim(false, false); } if (*PHIDESPECIALONWORKSPACECHANGE) pMonitor->setSpecialWorkspace(nullptr); setActiveMonitor(pMonitor); - pMonitor->activeWorkspace = pWorkspace; - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->ID); + pMonitor->m_activeWorkspace = pWorkspace; + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->m_id); pWorkspace->startAnim(true, true, true); pWorkspace->m_visible = true; if (!noWarpCursor) - g_pPointerManager->warpTo(pMonitor->vecPosition + pMonitor->vecTransformedSize / 2.F); + g_pPointerManager->warpTo(pMonitor->m_position + pMonitor->m_transformedSize / 2.F); g_pInputManager->sendMotionEventsToFocused(); } // finalize if (POLDMON) { - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID); - if (valid(POLDMON->activeWorkspace)) - updateFullscreenFadeOnWorkspace(POLDMON->activeWorkspace); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->m_id); + if (valid(POLDMON->m_activeWorkspace)) + updateFullscreenFadeOnWorkspace(POLDMON->m_activeWorkspace); updateSuspendedStates(); } @@ -2232,8 +2231,8 @@ void CCompositor::moveWorkspaceToMonitor(PHLWORKSPACE pWorkspace, PHLMONITOR pMo updateSuspendedStates(); // event - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = pWorkspace->m_name + "," + pMonitor->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", pWorkspace->m_id, pWorkspace->m_name, pMonitor->szName)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspace", .data = pWorkspace->m_name + "," + pMonitor->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "moveworkspacev2", .data = std::format("{},{},{}", pWorkspace->m_id, pWorkspace->m_name, pMonitor->m_name)}); EMIT_HOOK_EVENT("moveWorkspace", (std::vector{pWorkspace, pMonitor})); } @@ -2274,7 +2273,7 @@ void CCompositor::updateFullscreenFadeOnWorkspace(PHLWORKSPACE pWorkspace) { const auto PMONITOR = pWorkspace->m_monitor.lock(); if (pWorkspace->m_id == PMONITOR->activeWorkspaceID() || pWorkspace->m_id == PMONITOR->activeSpecialWorkspaceID()) { - for (auto const& ls : PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { + for (auto const& ls : PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { if (!ls->m_fadingOut) *ls->m_alpha = FULLSCREEN && pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } @@ -2382,7 +2381,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS // send a scanout tranche if we are entering fullscreen, and send a regular one if we aren't. // ignore if DS is disabled. if (*PDIRECTSCANOUT == 1 || (*PDIRECTSCANOUT == 2 && PWINDOW->getContentType() == CONTENT_TYPE_GAME)) - g_pHyprRenderer->setSurfaceScanoutMode(PWINDOW->m_wlSurface->resource(), EFFECTIVE_MODE != FSMODE_NONE ? PMONITOR->self.lock() : nullptr); + g_pHyprRenderer->setSurfaceScanoutMode(PWINDOW->m_wlSurface->resource(), EFFECTIVE_MODE != FSMODE_NONE ? PMONITOR->m_self.lock() : nullptr); g_pConfigManager->ensureVRR(PMONITOR); } @@ -2406,13 +2405,13 @@ void CCompositor::scheduleFrameForMonitor(PHLMONITOR pMonitor, IOutput::schedule if ((m_aqBackend->hasSession() && !m_aqBackend->session->active) || !m_sessionActive) return; - if (!pMonitor->m_bEnabled) + if (!pMonitor->m_enabled) return; - if (pMonitor->renderingActive) - pMonitor->pendingFrame = true; + if (pMonitor->m_renderingActive) + pMonitor->m_pendingFrame = true; - pMonitor->output->scheduleFrame(reason); + pMonitor->m_output->scheduleFrame(reason); } PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) { @@ -2617,8 +2616,8 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con int Y = 0; if (isExact) { - X = xIsPercent ? std::stof(x) * 0.01 * PMONITOR->vecSize.x : std::stoi(x); - Y = yIsPercent ? std::stof(y) * 0.01 * PMONITOR->vecSize.y : std::stoi(y); + X = xIsPercent ? std::stof(x) * 0.01 * PMONITOR->m_size.x : std::stoi(x); + Y = yIsPercent ? std::stof(y) * 0.01 * PMONITOR->m_size.y : std::stoi(y); } else { X = xIsPercent ? (std::stof(x) * 0.01 * relativeTo.x) + relativeTo.x : std::stoi(x) + relativeTo.x; Y = yIsPercent ? (std::stof(y) * 0.01 * relativeTo.y) + relativeTo.y : std::stoi(y) + relativeTo.y; @@ -2633,7 +2632,7 @@ PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, const MONITO // check if bound if (const auto PMONITOR = g_pConfigManager->getBoundMonitorForWS(NAME); PMONITOR) - monID = PMONITOR->ID; + monID = PMONITOR->m_id; const bool SPECIAL = id >= SPECIAL_WORKSPACE_START && id <= -2; @@ -2659,16 +2658,16 @@ void CCompositor::setActiveMonitor(PHLMONITOR pMonitor) { return; } - const auto PWORKSPACE = pMonitor->activeWorkspace; + const auto PWORKSPACE = pMonitor->m_activeWorkspace; const auto WORKSPACE_ID = PWORKSPACE ? std::to_string(PWORKSPACE->m_id) : std::to_string(WORKSPACE_INVALID); const auto WORKSPACE_NAME = PWORKSPACE ? PWORKSPACE->m_name : "?"; - g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmon", .data = pMonitor->szName + "," + WORKSPACE_NAME}); - g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmonv2", .data = pMonitor->szName + "," + WORKSPACE_ID}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmon", .data = pMonitor->m_name + "," + WORKSPACE_NAME}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "focusedmonv2", .data = pMonitor->m_name + "," + WORKSPACE_ID}); EMIT_HOOK_EVENT("focusedMon", pMonitor); - m_lastMonitor = pMonitor->self; + m_lastMonitor = pMonitor->m_self; } bool CCompositor::isWorkspaceSpecial(const WORKSPACEID& id) { @@ -2733,7 +2732,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor const PHLWINDOW pFirstWindowOnWorkspace = pWorkspace->getFirstWindow(); const int visibleWindowsOnWorkspace = pWorkspace->getWindows(std::nullopt, true); - const auto POSTOMON = pWindow->m_realPosition->goal() - (pWindow->m_monitor ? pWindow->m_monitor->vecPosition : Vector2D{}); + const auto POSTOMON = pWindow->m_realPosition->goal() - (pWindow->m_monitor ? pWindow->m_monitor->m_position : Vector2D{}); const auto PWORKSPACEMONITOR = pWorkspace->m_monitor.lock(); if (!pWindow->m_isFloating) @@ -2770,7 +2769,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor g_pLayoutManager->getCurrentLayout()->onWindowCreatedTiling(pWindow); if (pWindow->m_isFloating) - *pWindow->m_realPosition = POSTOMON + PWORKSPACEMONITOR->vecPosition; + *pWindow->m_realPosition = POSTOMON + PWORKSPACEMONITOR->m_position; } pWindow->updateToplevel(); @@ -2826,11 +2825,11 @@ void CCompositor::arrangeMonitors() { for (auto it = toArrange.begin(); it != toArrange.end();) { auto m = *it; - if (m->activeMonitorRule.offset != Vector2D{-INT32_MAX, -INT32_MAX}) { + if (m->m_activeMonitorRule.offset != Vector2D{-INT32_MAX, -INT32_MAX}) { // explicit. - Debug::log(LOG, "arrangeMonitors: {} explicit {:j}", m->szName, m->activeMonitorRule.offset); + Debug::log(LOG, "arrangeMonitors: {} explicit {:j}", m->m_name, m->m_activeMonitorRule.offset); - m->moveTo(m->activeMonitorRule.offset); + m->moveTo(m->m_activeMonitorRule.offset); arranged.push_back(m); it = toArrange.erase(it); @@ -2857,10 +2856,10 @@ void CCompositor::arrangeMonitors() { // Finds the max and min values of explicitely placed monitors. for (auto const& m : arranged) { - maxXOffsetRight = std::max(m->vecPosition.x + m->vecSize.x, maxXOffsetRight); - maxXOffsetLeft = std::min(m->vecPosition.x, maxXOffsetLeft); - maxYOffsetDown = std::max(m->vecPosition.y + m->vecSize.y, maxYOffsetDown); - maxYOffsetUp = std::min(m->vecPosition.y, maxYOffsetUp); + maxXOffsetRight = std::max(m->m_position.x + m->m_size.x, maxXOffsetRight); + maxXOffsetLeft = std::min(m->m_position.x, maxXOffsetLeft); + maxYOffsetDown = std::max(m->m_position.y + m->m_size.y, maxYOffsetDown); + maxYOffsetUp = std::min(m->m_position.y, maxYOffsetUp); } }; @@ -2871,15 +2870,15 @@ void CCompositor::arrangeMonitors() { // Moves the monitor to their appropriate position on the x/y axis and // increments/decrements the corresponding max offset. Vector2D newPosition = {0, 0}; - switch (m->activeMonitorRule.autoDir) { - case eAutoDirs::DIR_AUTO_UP: newPosition.y = maxYOffsetUp - m->vecSize.y; break; + switch (m->m_activeMonitorRule.autoDir) { + case eAutoDirs::DIR_AUTO_UP: newPosition.y = maxYOffsetUp - m->m_size.y; break; case eAutoDirs::DIR_AUTO_DOWN: newPosition.y = maxYOffsetDown; break; - case eAutoDirs::DIR_AUTO_LEFT: newPosition.x = maxXOffsetLeft - m->vecSize.x; break; + case eAutoDirs::DIR_AUTO_LEFT: newPosition.x = maxXOffsetLeft - m->m_size.x; break; case eAutoDirs::DIR_AUTO_RIGHT: case eAutoDirs::DIR_AUTO_NONE: newPosition.x = maxXOffsetRight; break; default: UNREACHABLE(); } - Debug::log(LOG, "arrangeMonitors: {} auto {:j}", m->szName, m->vecPosition); + Debug::log(LOG, "arrangeMonitors: {} auto {:j}", m->m_name, m->m_position); m->moveTo(newPosition); arranged.emplace_back(m); } @@ -2888,14 +2887,14 @@ void CCompositor::arrangeMonitors() { // and set xwayland positions aka auto for all maxXOffsetRight = 0; for (auto const& m : m_monitors) { - Debug::log(LOG, "arrangeMonitors: {} xwayland [{}, {}]", m->szName, maxXOffsetRight, 0); - m->vecXWaylandPosition = {maxXOffsetRight, 0}; - maxXOffsetRight += (*PXWLFORCESCALEZERO ? m->vecTransformedSize.x : m->vecSize.x); + Debug::log(LOG, "arrangeMonitors: {} xwayland [{}, {}]", m->m_name, maxXOffsetRight, 0); + m->m_xwaylandPosition = {maxXOffsetRight, 0}; + maxXOffsetRight += (*PXWLFORCESCALEZERO ? m->m_transformedSize.x : m->m_size.x); if (*PXWLFORCESCALEZERO) - m->xwaylandScale = m->scale; + m->m_xwaylandScale = m->m_scale; else - m->xwaylandScale = 1.f; + m->m_xwaylandScale = 1.f; } PROTO::xdgOutput->updateAllOutputs(); @@ -2907,7 +2906,7 @@ void CCompositor::enterUnsafeState() { Debug::log(LOG, "Entering unsafe state"); - if (!m_unsafeOutput->m_bEnabled) + if (!m_unsafeOutput->m_enabled) m_unsafeOutput->onConnect(false); m_unsafeState = true; @@ -2925,7 +2924,7 @@ void CCompositor::leaveUnsafeState() { PHLMONITOR pNewMonitor = nullptr; for (auto const& pMonitor : m_monitors) { - if (pMonitor->output != m_unsafeOutput->output) { + if (pMonitor->m_output != m_unsafeOutput->m_output) { pNewMonitor = pMonitor; break; } @@ -2933,7 +2932,7 @@ void CCompositor::leaveUnsafeState() { RASSERT(pNewMonitor, "Tried to leave unsafe without a monitor"); - if (m_unsafeOutput->m_bEnabled) + if (m_unsafeOutput->m_enabled) m_unsafeOutput->onDisconnect(); for (auto const& m : m_monitors) { @@ -2993,7 +2992,7 @@ static void checkDefaultCursorWarp(PHLMONITOR monitor) { } if (!cursorDefaultDone && *PCURSORMONITOR != STRVAL_EMPTY) { - if (*PCURSORMONITOR == monitor->szName) { + if (*PCURSORMONITOR == monitor->m_name) { cursorDefaultDone = true; g_pCompositor->warpCursorTo(POS, true); g_pInputManager->refocus(); @@ -3018,23 +3017,23 @@ void CCompositor::onNewMonitor(SP output) { Debug::log(LOG, "New output with name {}", output->name); - PNEWMONITOR->szName = output->name; - PNEWMONITOR->self = PNEWMONITOR; - const bool FALLBACK = g_pCompositor->m_unsafeOutput ? output == g_pCompositor->m_unsafeOutput->output : false; - PNEWMONITOR->ID = FALLBACK ? MONITOR_INVALID : g_pCompositor->getNextAvailableMonitorID(output->name); - PNEWMONITOR->isUnsafeFallback = FALLBACK; + PNEWMONITOR->m_name = output->name; + PNEWMONITOR->m_self = PNEWMONITOR; + const bool FALLBACK = g_pCompositor->m_unsafeOutput ? output == g_pCompositor->m_unsafeOutput->m_output : false; + PNEWMONITOR->m_id = FALLBACK ? MONITOR_INVALID : g_pCompositor->getNextAvailableMonitorID(output->name); + PNEWMONITOR->m_isUnsafeFallback = FALLBACK; EMIT_HOOK_EVENT("newMonitor", PNEWMONITOR); if (!FALLBACK) PNEWMONITOR->onConnect(false); - if (!PNEWMONITOR->m_bEnabled || FALLBACK) + if (!PNEWMONITOR->m_enabled || FALLBACK) return; // ready to process if we have a real monitor - if ((!g_pHyprRenderer->m_pMostHzMonitor || PNEWMONITOR->refreshRate > g_pHyprRenderer->m_pMostHzMonitor->refreshRate) && PNEWMONITOR->m_bEnabled) + if ((!g_pHyprRenderer->m_pMostHzMonitor || PNEWMONITOR->m_refreshRate > g_pHyprRenderer->m_pMostHzMonitor->m_refreshRate) && PNEWMONITOR->m_enabled) g_pHyprRenderer->m_pMostHzMonitor = PNEWMONITOR; g_pCompositor->m_readyToProcess = true; @@ -3112,7 +3111,7 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorID : m_lastMonitor->ID, wsname, false); + createNewWorkspace(id, PMONITOR ? PMONITOR->m_id : m_lastMonitor->m_id, wsname, false); } if (PWORKSPACE) @@ -3125,12 +3124,12 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vectorm_monitor == PMONITOR) { - Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->szName); + Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->m_name); continue; } - Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} not on {}, moving", rule.workspaceString, PMONITOR->szName); + Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} not on {}, moving", rule.workspaceString, PMONITOR->m_name); moveWorkspaceToMonitor(PWORKSPACE, PMONITOR); continue; } diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 3c0f2cf8..f84b868f 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1016,7 +1016,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { } for (auto const& m : g_pCompositor->m_monitors) - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->m_id); // Update the keyboard layout to the cfg'd one if this is not the first launch if (!m_isFirstLaunch) { @@ -1113,11 +1113,11 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pCompositor->scheduleFrameForMonitor(m); // Force the compositor to fully re-render all monitors - m->forceFullFrames = 2; + m->m_forceFullFrames = 2; // also force mirrors, as the aspect ratio could've changed - for (auto const& mirror : m->mirrors) - mirror->forceFullFrames = 3; + for (auto const& mirror : m->m_mirrors) + mirror->m_forceFullFrames = 3; } // Reset no monitor reload @@ -1157,7 +1157,7 @@ std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std:: // invalidate layouts if they changed if (COMMAND == "monitor" || COMMAND.contains("gaps_") || COMMAND.starts_with("dwindle:") || COMMAND.starts_with("master:")) { for (auto const& m : g_pCompositor->m_monitors) - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->m_id); } if (COMMAND.contains("explicit")) { @@ -1225,7 +1225,7 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) { if (!CONFIG) return rule; - Debug::log(LOG, "CConfigManager::getMonitorRuleFor: found a wlr_output_manager override for {}", PMONITOR->szName); + Debug::log(LOG, "CConfigManager::getMonitorRuleFor: found a wlr_output_manager override for {}", PMONITOR->m_name); Debug::log(LOG, " > overriding enabled: {} -> {}", !rule.disabled, !CONFIG->enabled); rule.disabled = !CONFIG->enabled; @@ -1266,7 +1266,7 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) { } } - Debug::log(WARN, "No rule found for {}, trying to use the first.", PMONITOR->szName); + Debug::log(WARN, "No rule found for {}, trying to use the first.", PMONITOR->m_name); for (auto const& r : m_monitorRules) { if (r.name.empty()) { @@ -1605,7 +1605,7 @@ void CConfigManager::performMonitorReload() { bool overAgain = false; for (auto const& m : g_pCompositor->m_realMonitors) { - if (!m->output || m->isUnsafeFallback) + if (!m->m_output || m->m_isUnsafeFallback) continue; auto rule = getMonitorRuleFor(m); @@ -1618,7 +1618,7 @@ void CConfigManager::performMonitorReload() { // ensure mirror m->setMirror(rule.mirrorOf); - g_pHyprRenderer->arrangeLayersForMonitor(m->ID); + g_pHyprRenderer->arrangeLayersForMonitor(m->m_id); } if (overAgain) @@ -1662,12 +1662,12 @@ bool CConfigManager::shouldBlurLS(const std::string& ns) { void CConfigManager::ensureMonitorStatus() { for (auto const& rm : g_pCompositor->m_realMonitors) { - if (!rm->output || rm->isUnsafeFallback) + if (!rm->m_output || rm->m_isUnsafeFallback) continue; auto rule = getMonitorRuleFor(rm); - if (rule.disabled == rm->m_bEnabled) + if (rule.disabled == rm->m_enabled) rm->applyMonitorRule(&rule); } } @@ -1676,38 +1676,38 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { static auto PVRR = reinterpret_cast(getConfigValuePtr("misc:vrr")); static auto ensureVRRForDisplay = [&](PHLMONITOR m) -> void { - if (!m->output || m->createdByUser) + if (!m->m_output || m->m_createdByUser) return; - const auto USEVRR = m->activeMonitorRule.vrr.has_value() ? m->activeMonitorRule.vrr.value() : **PVRR; + const auto USEVRR = m->m_activeMonitorRule.vrr.has_value() ? m->m_activeMonitorRule.vrr.value() : **PVRR; if (USEVRR == 0) { - if (m->vrrActive) { - m->output->state->resetExplicitFences(); - m->output->state->setAdaptiveSync(false); + if (m->m_vrrActive) { + m->m_output->state->resetExplicitFences(); + m->m_output->state->setAdaptiveSync(false); - if (!m->state.commit()) - Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> false", m->output->name); + if (!m->m_state.commit()) + Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> false", m->m_output->name); } - m->vrrActive = false; + m->m_vrrActive = false; return; } else if (USEVRR == 1) { - if (!m->vrrActive) { - m->output->state->resetExplicitFences(); - m->output->state->setAdaptiveSync(true); + if (!m->m_vrrActive) { + m->m_output->state->resetExplicitFences(); + m->m_output->state->setAdaptiveSync(true); - if (!m->state.test()) { - Debug::log(LOG, "Pending output {} does not accept VRR.", m->output->name); - m->output->state->setAdaptiveSync(false); + if (!m->m_state.test()) { + Debug::log(LOG, "Pending output {} does not accept VRR.", m->m_output->name); + m->m_output->state->setAdaptiveSync(false); } - if (!m->state.commit()) - Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> true", m->output->name); + if (!m->m_state.commit()) + Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> true", m->m_output->name); } - m->vrrActive = true; + m->m_vrrActive = true; return; } else if (USEVRR == 2 || USEVRR == 3) { - const auto PWORKSPACE = m->activeWorkspace; + const auto PWORKSPACE = m->m_activeWorkspace; if (!PWORKSPACE) return; // ??? @@ -1720,20 +1720,20 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { if (wantVRR) { /* fullscreen */ - m->vrrActive = true; + m->m_vrrActive = true; - if (!m->output->state->state().adaptiveSync) { - m->output->state->setAdaptiveSync(true); + if (!m->m_output->state->state().adaptiveSync) { + m->m_output->state->setAdaptiveSync(true); - if (!m->state.test()) { - Debug::log(LOG, "Pending output {} does not accept VRR.", m->output->name); - m->output->state->setAdaptiveSync(false); + if (!m->m_state.test()) { + Debug::log(LOG, "Pending output {} does not accept VRR.", m->m_output->name); + m->m_output->state->setAdaptiveSync(false); } } } else { - m->vrrActive = false; + m->m_vrrActive = false; - m->output->state->setAdaptiveSync(false); + m->m_output->state->setAdaptiveSync(false); } } }; @@ -1840,7 +1840,7 @@ std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) { return other->workspaceString; if (other->monitor.starts_with("desc:")) { auto const monitor = g_pCompositor->getMonitorFromDesc(trim(other->monitor.substr(5))); - if (monitor && monitor->szName == name) + if (monitor && monitor->m_name == name) return other->workspaceString; } } @@ -2630,7 +2630,7 @@ std::optional CConfigManager::handleLayerRule(const std::string& co m_layerRules.emplace_back(rule); for (auto const& m : g_pCompositor->m_monitors) - for (auto const& lsl : m->m_aLayerSurfaceLayers) + for (auto const& lsl : m->m_layerSurfaceLayers) for (auto const& ls : lsl) ls->applyRules(); @@ -2645,7 +2645,7 @@ void CConfigManager::updateBlurredLS(const std::string& name, const bool forceBl matchName = matchName.substr(8); for (auto const& m : g_pCompositor->m_monitors) { - for (auto const& lsl : m->m_aLayerSurfaceLayers) { + for (auto const& lsl : m->m_layerSurfaceLayers) { for (auto const& ls : lsl) { if (BYADDRESS) { if (std::format("0x{:x}", (uintptr_t)ls.get()) == matchName) @@ -2925,7 +2925,7 @@ bool CConfigManager::shouldUseSoftwareCursors(PHLMONITOR pMonitor) { switch (*PNOHW) { case 0: return false; case 1: return true; - case 2: return pMonitor->tearingState.activelyTearing; + case 2: return pMonitor->m_tearingState.activelyTearing; default: break; } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 3e6a3f08..2ad182ab 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -97,7 +97,7 @@ static std::string formatToString(uint32_t drmFormat) { static std::string availableModesForOutput(PHLMONITOR pMonitor, eHyprCtlOutputFormat format) { std::string result; - for (auto const& m : pMonitor->output->modes) { + for (auto const& m : pMonitor->m_output->modes) { if (format == FORMAT_NORMAL) result += std::format("{}x{}@{:.2f}Hz ", m->pixelSize.x, m->pixelSize.y, m->refreshRate / 1000.0); else @@ -111,7 +111,7 @@ static std::string availableModesForOutput(PHLMONITOR pMonitor, eHyprCtlOutputFo std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer m, eHyprCtlOutputFormat format) { std::string result; - if (!m->output || m->ID == -1) + if (!m->m_output || m->m_id == -1) return ""; if (format == eHyprCtlOutputFormat::FORMAT_JSON) { @@ -152,27 +152,28 @@ std::string CHyprCtl::getMonitorData(Hyprutils::Memory::CSharedPointer "availableModes": [{}] }},)#", - m->ID, escapeJSONStrings(m->szName), escapeJSONStrings(m->szShortDescription), escapeJSONStrings(m->output->make), escapeJSONStrings(m->output->model), - escapeJSONStrings(m->output->serial), (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, - m->activeWorkspaceID(), (!m->activeWorkspace ? "" : escapeJSONStrings(m->activeWorkspace->m_name)), m->activeSpecialWorkspaceID(), - escapeJSONStrings(m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_name : ""), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, - (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m == g_pCompositor->m_lastMonitor ? "true" : "false"), - (m->dpmsStatus ? "true" : "false"), (m->output->state->state().adaptiveSync ? "true" : "false"), (uint64_t)m->solitaryClient.get(), - (m->tearingState.activelyTearing ? "true" : "false"), (uint64_t)m->lastScanout.get(), (m->m_bEnabled ? "false" : "true"), - formatToString(m->output->state->state().drmFormat), m->pMirrorOf ? std::format("{}", m->pMirrorOf->ID) : "none", availableModesForOutput(m, format)); + m->m_id, escapeJSONStrings(m->m_name), escapeJSONStrings(m->m_shortDescription), escapeJSONStrings(m->m_output->make), escapeJSONStrings(m->m_output->model), + escapeJSONStrings(m->m_output->serial), (int)m->m_pixelSize.x, (int)m->m_pixelSize.y, m->m_refreshRate, (int)m->m_position.x, (int)m->m_position.y, + m->activeWorkspaceID(), (!m->m_activeWorkspace ? "" : escapeJSONStrings(m->m_activeWorkspace->m_name)), m->activeSpecialWorkspaceID(), + escapeJSONStrings(m->m_activeSpecialWorkspace ? m->m_activeSpecialWorkspace->m_name : ""), (int)m->m_reservedTopLeft.x, (int)m->m_reservedTopLeft.y, + (int)m->m_reservedBottomRight.x, (int)m->m_reservedBottomRight.y, m->m_scale, (int)m->m_transform, (m == g_pCompositor->m_lastMonitor ? "true" : "false"), + (m->m_dpmsStatus ? "true" : "false"), (m->m_output->state->state().adaptiveSync ? "true" : "false"), (uint64_t)m->m_solitaryClient.get(), + (m->m_tearingState.activelyTearing ? "true" : "false"), (uint64_t)m->m_lastScanout.get(), (m->m_enabled ? "false" : "true"), + formatToString(m->m_output->state->state().drmFormat), m->m_mirrorOf ? std::format("{}", m->m_mirrorOf->m_id) : "none", availableModesForOutput(m, format)); } else { - result += std::format("Monitor {} (ID {}):\n\t{}x{}@{:.5f} at {}x{}\n\tdescription: {}\n\tmake: {}\n\tmodel: {}\n\tserial: {}\n\tactive workspace: {} ({})\n\t" - "special workspace: {} ({})\n\treserved: {} {} {} {}\n\tscale: {:.2f}\n\ttransform: {}\n\tfocused: {}\n\t" - "dpmsStatus: {}\n\tvrr: {}\n\tsolitary: {:x}\n\tactivelyTearing: {}\n\tdirectScanoutTo: {:x}\n\tdisabled: {}\n\tcurrentFormat: {}\n\tmirrorOf: " - "{}\n\tavailableModes: {}\n\n", - m->szName, m->ID, (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, m->szShortDescription, - m->output->make, m->output->model, m->output->serial, m->activeWorkspaceID(), (!m->activeWorkspace ? "" : m->activeWorkspace->m_name), - m->activeSpecialWorkspaceID(), (m->activeSpecialWorkspace ? m->activeSpecialWorkspace->m_name : ""), (int)m->vecReservedTopLeft.x, - (int)m->vecReservedTopLeft.y, (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, - (m == g_pCompositor->m_lastMonitor ? "yes" : "no"), (int)m->dpmsStatus, m->output->state->state().adaptiveSync, (uint64_t)m->solitaryClient.get(), - m->tearingState.activelyTearing, (uint64_t)m->lastScanout.get(), !m->m_bEnabled, formatToString(m->output->state->state().drmFormat), - m->pMirrorOf ? std::format("{}", m->pMirrorOf->ID) : "none", availableModesForOutput(m, format)); + result += + std::format("Monitor {} (ID {}):\n\t{}x{}@{:.5f} at {}x{}\n\tdescription: {}\n\tmake: {}\n\tmodel: {}\n\tserial: {}\n\tactive workspace: {} ({})\n\t" + "special workspace: {} ({})\n\treserved: {} {} {} {}\n\tscale: {:.2f}\n\ttransform: {}\n\tfocused: {}\n\t" + "dpmsStatus: {}\n\tvrr: {}\n\tsolitary: {:x}\n\tactivelyTearing: {}\n\tdirectScanoutTo: {:x}\n\tdisabled: {}\n\tcurrentFormat: {}\n\tmirrorOf: " + "{}\n\tavailableModes: {}\n\n", + m->m_name, m->m_id, (int)m->m_pixelSize.x, (int)m->m_pixelSize.y, m->m_refreshRate, (int)m->m_position.x, (int)m->m_position.y, m->m_shortDescription, + m->m_output->make, m->m_output->model, m->m_output->serial, m->activeWorkspaceID(), (!m->m_activeWorkspace ? "" : m->m_activeWorkspace->m_name), + m->activeSpecialWorkspaceID(), (m->m_activeSpecialWorkspace ? m->m_activeSpecialWorkspace->m_name : ""), (int)m->m_reservedTopLeft.x, + (int)m->m_reservedTopLeft.y, (int)m->m_reservedBottomRight.x, (int)m->m_reservedBottomRight.y, m->m_scale, (int)m->m_transform, + (m == g_pCompositor->m_lastMonitor ? "yes" : "no"), (int)m->m_dpmsStatus, m->m_output->state->state().adaptiveSync, (uint64_t)m->m_solitaryClient.get(), + m->m_tearingState.activelyTearing, (uint64_t)m->m_lastScanout.get(), !m->m_enabled, formatToString(m->m_output->state->state().drmFormat), + m->m_mirrorOf ? std::format("{}", m->m_mirrorOf->m_id) : "none", availableModesForOutput(m, format)); } return result; @@ -201,7 +202,7 @@ static std::string monitorsRequest(eHyprCtlOutputFormat format, std::string requ result += "]"; } else { for (auto const& m : allMonitors ? g_pCompositor->m_realMonitors : g_pCompositor->m_monitors) { - if (!m->output || m->ID == -1) + if (!m->m_output || m->m_id == -1) continue; result += CHyprCtl::getMonitorData(m, format); @@ -349,13 +350,13 @@ std::string CHyprCtl::getWorkspaceData(PHLWORKSPACE w, eHyprCtlOutputFormat form "lastwindowtitle": "{}", "ispersistent": {} }})#", - w->m_id, escapeJSONStrings(w->m_name), escapeJSONStrings(PMONITOR ? PMONITOR->szName : "?"), - escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->ID) : "null"), w->getWindows(), w->m_hasFullscreenWindow ? "true" : "false", + w->m_id, escapeJSONStrings(w->m_name), escapeJSONStrings(PMONITOR ? PMONITOR->m_name : "?"), + escapeJSONStrings(PMONITOR ? std::to_string(PMONITOR->m_id) : "null"), w->getWindows(), w->m_hasFullscreenWindow ? "true" : "false", (uintptr_t)PLASTW.get(), PLASTW ? escapeJSONStrings(PLASTW->m_title) : "", w->m_persistent ? "true" : "false"); } else { return std::format( "workspace ID {} ({}) on monitor {}:\n\tmonitorID: {}\n\twindows: {}\n\thasfullscreen: {}\n\tlastwindow: 0x{:x}\n\tlastwindowtitle: {}\n\tispersistent: {}\n\n", - w->m_id, w->m_name, PMONITOR ? PMONITOR->szName : "?", PMONITOR ? std::to_string(PMONITOR->ID) : "null", w->getWindows(), (int)w->m_hasFullscreenWindow, + w->m_id, w->m_name, PMONITOR ? PMONITOR->m_name : "?", PMONITOR ? std::to_string(PMONITOR->m_id) : "null", w->getWindows(), (int)w->m_hasFullscreenWindow, (uintptr_t)PLASTW.get(), PLASTW ? PLASTW->m_title : "", (int)w->m_persistent); } } @@ -415,7 +416,7 @@ static std::string activeWorkspaceRequest(eHyprCtlOutputFormat format, std::stri return "unsafe state"; std::string result = ""; - auto w = g_pCompositor->m_lastMonitor->activeWorkspace; + auto w = g_pCompositor->m_lastMonitor->m_activeWorkspace; if (!valid(w)) return "internal error"; @@ -489,10 +490,10 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques R"#("{}": {{ "levels": {{ )#", - escapeJSONStrings(mon->szName)); + escapeJSONStrings(mon->m_name)); int layerLevel = 0; - for (auto const& level : mon->m_aLayerSurfaceLayers) { + for (auto const& level : mon->m_layerSurfaceLayers) { result += std::format( R"#( "{}": [ @@ -534,10 +535,10 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques } else { for (auto const& mon : g_pCompositor->m_monitors) { - result += std::format("Monitor {}:\n", mon->szName); + result += std::format("Monitor {}:\n", mon->m_name); int layerLevel = 0; static const std::array levelNames = {"background", "bottom", "top", "overlay"}; - for (auto const& level : mon->m_aLayerSurfaceLayers) { + for (auto const& level : mon->m_layerSurfaceLayers) { result += std::format("\tLayer level {} ({}):\n", layerLevel, levelNames[layerLevel]); for (auto const& layer : level) { @@ -1143,7 +1144,7 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) COMMAND.starts_with("windowrule")) { for (auto const& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->m_id); } } @@ -1449,7 +1450,7 @@ static std::string dispatchOutput(eHyprCtlOutputFormat format, std::string reque if (!vars[3].empty()) { for (auto const& m : g_pCompositor->m_realMonitors) { - if (m->szName == vars[3]) + if (m->m_name == vars[3]) return "Name already taken"; } } @@ -1483,10 +1484,10 @@ static std::string dispatchOutput(eHyprCtlOutputFormat format, std::string reque if (!PMONITOR) return "output not found"; - if (!PMONITOR->createdByUser) + if (!PMONITOR->m_createdByUser) return "cannot remove a real display. Use the monitor keyword."; - PMONITOR->output->destroy(); + PMONITOR->m_output->destroy(); } return "ok"; @@ -1836,7 +1837,7 @@ std::string CHyprCtl::getReply(std::string request) { for (auto const& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->m_id); } } diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index d055ec90..874252d0 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -18,7 +18,7 @@ void CHyprMonitorDebugOverlay::renderData(PHLMONITOR pMonitor, float durationUs) m_lastRenderTimes.emplace_back(durationUs / 1000.f); - if (m_lastRenderTimes.size() > (long unsigned int)pMonitor->refreshRate) + if (m_lastRenderTimes.size() > (long unsigned int)pMonitor->m_refreshRate) m_lastRenderTimes.pop_front(); if (!m_monitor) @@ -33,7 +33,7 @@ void CHyprMonitorDebugOverlay::renderDataNoOverlay(PHLMONITOR pMonitor, float du m_lastRenderTimesNoOverlay.emplace_back(durationUs / 1000.f); - if (m_lastRenderTimesNoOverlay.size() > (long unsigned int)pMonitor->refreshRate) + if (m_lastRenderTimesNoOverlay.size() > (long unsigned int)pMonitor->m_refreshRate) m_lastRenderTimesNoOverlay.pop_front(); if (!m_monitor) @@ -48,7 +48,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { m_lastFrametimes.emplace_back(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - m_lastFrame).count() / 1000.f); - if (m_lastFrametimes.size() > (long unsigned int)pMonitor->refreshRate) + if (m_lastFrametimes.size() > (long unsigned int)pMonitor->m_refreshRate) m_lastFrametimes.pop_front(); m_lastFrame = std::chrono::high_resolution_clock::now(); @@ -59,7 +59,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { // anim data too const auto PMONITORFORTICKS = g_pHyprRenderer->m_pMostHzMonitor ? g_pHyprRenderer->m_pMostHzMonitor.lock() : g_pCompositor->m_lastMonitor.lock(); if (PMONITORFORTICKS) { - if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->refreshRate) + if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->m_refreshRate) m_lastAnimationTicks.pop_front(); m_lastAnimationTicks.push_back(g_pAnimationManager->m_fLastTickTime); @@ -166,7 +166,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 1.f, 1.f, 1.f, 1.f); std::string text; - showText(m_monitor->szName.c_str(), 10); + showText(m_monitor->m_name.c_str(), 10); if (FPS > idealFPS * 0.95f) cairo_set_source_rgba(g_pDebugOverlay->m_cairo, 0.2f, 1.f, 0.2f, 1.f); @@ -199,7 +199,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { cairo_get_current_point(cr, &posX, &posY); g_pHyprRenderer->damageBox(m_lastDrawnBox); - m_lastDrawnBox = {(int)g_pCompositor->m_monitors.front()->vecPosition.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_monitors.front()->vecPosition.y + offset + MARGIN_TOP - 1, + m_lastDrawnBox = {(int)g_pCompositor->m_monitors.front()->m_position.x + MARGIN_LEFT - 1, (int)g_pCompositor->m_monitors.front()->m_position.y + offset + MARGIN_TOP - 1, (int)maxTextW + 2, posY - offset - MARGIN_TOP + 2}; g_pHyprRenderer->damageBox(m_lastDrawnBox); @@ -238,7 +238,7 @@ void CHyprDebugOverlay::draw() { const auto PMONITOR = g_pCompositor->m_monitors.front(); if (!m_cairoSurface || !m_cairo) { - m_cairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); + m_cairoSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y); m_cairo = cairo_create(m_cairoSurface); } @@ -269,10 +269,10 @@ void CHyprDebugOverlay::draw() { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); #endif - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); CTexPassElement::SRenderData data; data.tex = m_texture; - data.box = {0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y}; + data.box = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y}; g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); } diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index ede5f8e2..1dc6e167 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -77,8 +77,8 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { float offsetY = 10; float maxWidth = 0; - const auto SCALE = pMonitor->scale; - const auto MONSIZE = pMonitor->vecTransformedSize; + const auto SCALE = pMonitor->m_scale; + const auto MONSIZE = pMonitor->m_transformedSize; static auto fontFamily = CConfigValue("misc:font_family"); @@ -94,7 +94,7 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { for (auto const& notif : m_notifications) { const auto ICONPADFORNOTIF = notif->icon == ICON_NONE ? 0 : ICON_PAD; - const auto FONTSIZE = std::clamp((int)(notif->fontSize * ((pMonitor->vecPixelSize.x * SCALE) / 1920.f)), 8, 40); + const auto FONTSIZE = std::clamp((int)(notif->fontSize * ((pMonitor->m_pixelSize.x * SCALE) / 1920.f)), 8, 40); // first rect (bg, col) const float FIRSTRECTANIMP = @@ -189,12 +189,12 @@ CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) { // cleanup notifs std::erase_if(m_notifications, [](const auto& notif) { return notif->started.getMillis() > notif->timeMs; }); - return CBox{(int)(pMonitor->vecPosition.x + pMonitor->vecSize.x - maxWidth - 20), (int)pMonitor->vecPosition.y, (int)maxWidth + 20, (int)offsetY + 10}; + return CBox{(int)(pMonitor->m_position.x + pMonitor->m_size.x - maxWidth - 20), (int)pMonitor->m_position.y, (int)maxWidth + 20, (int)offsetY + 10}; } void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { - const auto MONSIZE = pMonitor->vecTransformedSize; + const auto MONSIZE = pMonitor->m_transformedSize; if (m_lastMonitor != pMonitor || m_lastSize != MONSIZE || !m_cairo || !m_cairoSurface) { diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index dcbf35fe..5954a571 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -24,7 +24,7 @@ PHLLS CLayerSurface::create(SP resource) { return pLS; } - if (pMonitor->pMirrorOf) + if (pMonitor->m_mirrorOf) pMonitor = g_pCompositor->m_monitors.front(); pLS->m_self = pLS; @@ -34,7 +34,7 @@ PHLLS CLayerSurface::create(SP resource) { pLS->m_layer = resource->current.layer; pLS->m_popupHead = CPopup::create(pLS); pLS->m_monitor = pMonitor; - pMonitor->m_aLayerSurfaceLayers[resource->current.layer].emplace_back(pLS); + pMonitor->m_layerSurfaceLayers[resource->current.layer].emplace_back(pLS); pLS->m_forceBlur = g_pConfigManager->shouldBlurLS(pLS->m_namespace); @@ -46,7 +46,7 @@ PHLLS CLayerSurface::create(SP resource) { pLS->m_alpha->setValueAndWarp(0.f); - Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->m_layer, pMonitor->szName); + Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->m_layer, pMonitor->m_name); return pLS; } @@ -77,7 +77,7 @@ CLayerSurface::~CLayerSurface() { std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == m_self.lock(); }); for (auto const& mon : g_pCompositor->m_realMonitors) { - for (auto& lsl : mon->m_aLayerSurfaceLayers) { + for (auto& lsl : mon->m_layerSurfaceLayers) { std::erase_if(lsl, [this](auto& ls) { return ls.expired() || ls.get() == this; }); } } @@ -110,11 +110,11 @@ void CLayerSurface::onDestroy() { // rearrange to fix the reserved areas if (PMONITOR) { - g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); - PMONITOR->scheduledRecalc = true; + g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id); + PMONITOR->m_scheduledRecalc = true; // and damage - CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); } @@ -149,11 +149,11 @@ void CLayerSurface::onMap() { applyRules(); - PMONITOR->scheduledRecalc = true; + PMONITOR->m_scheduledRecalc = true; - g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); + g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id); - m_surface->resource()->enter(PMONITOR->self.lock()); + m_surface->resource()->enter(PMONITOR->m_self.lock()); const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; @@ -171,16 +171,16 @@ void CLayerSurface::onMap() { g_pInputManager->releaseAllMouseButtons(); g_pCompositor->focusSurface(m_surface->resource()); - const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y); + const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y); g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); g_pInputManager->m_bEmptyFocusCursorSet = false; } m_position = Vector2D(m_geometry.x, m_geometry.y); - CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - const bool FULLSCREEN = PMONITOR->activeWorkspace && PMONITOR->activeWorkspace->m_hasFullscreenWindow && PMONITOR->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN; + const bool FULLSCREEN = PMONITOR->m_activeWorkspace && PMONITOR->m_activeWorkspace->m_hasFullscreenWindow && PMONITOR->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN; startAnimation(!(m_layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP && FULLSCREEN && !GRABSFOCUS)); m_readyToDelete = false; @@ -189,8 +189,8 @@ void CLayerSurface::onMap() { g_pEventManager->postEvent(SHyprIPCEvent{"openlayer", m_namespace}); EMIT_HOOK_EVENT("openLayer", m_self.lock()); - g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->m_scale); + g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->m_transform); } void CLayerSurface::onUnmap() { @@ -244,16 +244,16 @@ void CLayerSurface::onUnmap() { } else if (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus != m_surface->resource()) g_pSeatManager->setKeyboardFocus(g_pCompositor->m_lastFocus.lock()); - CBox geomFixed = {m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y, m_geometry.width, m_geometry.height}; + CBox geomFixed = {m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - geomFixed = {m_geometry.x + (int)PMONITOR->vecPosition.x, m_geometry.y + (int)PMONITOR->vecPosition.y, (int)m_layerSurface->surface->current.size.x, + geomFixed = {m_geometry.x + (int)PMONITOR->m_position.x, m_geometry.y + (int)PMONITOR->m_position.y, (int)m_layerSurface->surface->current.size.x, (int)m_layerSurface->surface->current.size.y}; g_pHyprRenderer->damageBox(geomFixed); g_pInputManager->simulateMouseMovement(); - g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); + g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id); } void CLayerSurface::onCommit() { @@ -285,12 +285,12 @@ void CLayerSurface::onCommit() { if (m_layerSurface->current.committed != 0) { if (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_LAYER) { - for (auto it = PMONITOR->m_aLayerSurfaceLayers[m_layer].begin(); it != PMONITOR->m_aLayerSurfaceLayers[m_layer].end(); it++) { + for (auto it = PMONITOR->m_layerSurfaceLayers[m_layer].begin(); it != PMONITOR->m_layerSurfaceLayers[m_layer].end(); it++) { if (*it == m_self) { if (m_layerSurface->current.layer == m_layer) break; - PMONITOR->m_aLayerSurfaceLayers[m_layerSurface->current.layer].emplace_back(*it); - PMONITOR->m_aLayerSurfaceLayers[m_layer].erase(it); + PMONITOR->m_layerSurfaceLayers[m_layerSurface->current.layer].emplace_back(*it); + PMONITOR->m_layerSurfaceLayers[m_layer].erase(it); break; } } @@ -301,14 +301,14 @@ void CLayerSurface::onCommit() { g_pHyprOpenGL->markBlurDirtyForMonitor(PMONITOR); // so that blur is recalc'd } - g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); + g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id); - PMONITOR->scheduledRecalc = true; + PMONITOR->m_scheduledRecalc = true; } else { m_position = Vector2D(m_geometry.x, m_geometry.y); // update geom if it changed - if (m_layerSurface->surface->current.scale == 1 && PMONITOR->scale != 1.f && m_layerSurface->surface->current.viewport.hasDestination) { + if (m_layerSurface->surface->current.scale == 1 && PMONITOR->m_scale != 1.f && m_layerSurface->surface->current.viewport.hasDestination) { // fractional scaling. Dirty hack. m_geometry = {m_geometry.pos(), m_layerSurface->surface->current.viewport.destination}; } else { @@ -364,7 +364,7 @@ void CLayerSurface::onCommit() { g_pInputManager->releaseAllMouseButtons(); g_pCompositor->focusSurface(m_surface->resource()); - const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->vecPosition.x, m_geometry.y + PMONITOR->vecPosition.y); + const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y); g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); g_pInputManager->m_bEmptyFocusCursorSet = false; } @@ -374,8 +374,8 @@ void CLayerSurface::onCommit() { g_pHyprRenderer->damageSurface(m_surface->resource(), m_position.x, m_position.y); - g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->m_scale); + g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->m_transform); } void CLayerSurface::applyRules() { @@ -484,10 +484,10 @@ void CLayerSurface::startAnimation(bool in, bool instant) { } const std::array edgePoints = { - PMONITOR->vecPosition + Vector2D{PMONITOR->vecSize.x / 2, 0.0}, - PMONITOR->vecPosition + Vector2D{PMONITOR->vecSize.x / 2, PMONITOR->vecSize.y}, - PMONITOR->vecPosition + Vector2D{0.0, PMONITOR->vecSize.y}, - PMONITOR->vecPosition + Vector2D{PMONITOR->vecSize.x, PMONITOR->vecSize.y / 2}, + PMONITOR->m_position + Vector2D{PMONITOR->m_size.x / 2, 0.0}, + PMONITOR->m_position + Vector2D{PMONITOR->m_size.x / 2, PMONITOR->m_size.y}, + PMONITOR->m_position + Vector2D{0.0, PMONITOR->m_size.y}, + PMONITOR->m_position + Vector2D{PMONITOR->m_size.x, PMONITOR->m_size.y / 2}, }; float closest = std::numeric_limits::max(); @@ -511,19 +511,19 @@ void CLayerSurface::startAnimation(bool in, bool instant) { switch (leader) { case 0: // TOP - prePos = {m_geometry.x, PMONITOR->vecPosition.y - m_geometry.h}; + prePos = {m_geometry.x, PMONITOR->m_position.y - m_geometry.h}; break; case 1: // BOTTOM - prePos = {m_geometry.x, PMONITOR->vecPosition.y + PMONITOR->vecSize.y}; + prePos = {m_geometry.x, PMONITOR->m_position.y + PMONITOR->m_size.y}; break; case 2: // LEFT - prePos = {PMONITOR->vecPosition.x - m_geometry.w, m_geometry.y}; + prePos = {PMONITOR->m_position.x - m_geometry.w, m_geometry.y}; break; case 3: // RIGHT - prePos = {PMONITOR->vecPosition.x + PMONITOR->vecSize.x, m_geometry.y}; + prePos = {PMONITOR->m_position.x + PMONITOR->m_size.x, m_geometry.y}; break; default: UNREACHABLE(); } @@ -594,7 +594,7 @@ int CLayerSurface::popupsCount() { } MONITORID CLayerSurface::monitorID() { - return m_monitor ? m_monitor->ID : MONITOR_INVALID; + return m_monitor ? m_monitor->m_id : MONITOR_INVALID; } pid_t CLayerSurface::getPID() { diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 049db245..30cf966d 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -110,7 +110,7 @@ void CPopup::onMap() { //unconstrain(); sendScale(); - m_resource->surface->surface->enter(PMONITOR->self.lock()); + m_resource->surface->surface->enter(PMONITOR->m_self.lock()); if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_layerOwner->m_layer)); @@ -224,7 +224,7 @@ void CPopup::reposition() { if (!PMONITOR) return; - CBox box = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; + CBox box = {PMONITOR->m_position.x, PMONITOR->m_position.y, PMONITOR->m_size.x, PMONITOR->m_size.y}; m_resource->applyPositioning(box, COORDS); } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 899c260a..53ecf049 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -137,8 +137,8 @@ SBoxExtents CWindow::getFullWindowExtents() { if (m_windowData.dimAround.valueOrDefault()) { if (const auto PMONITOR = m_monitor.lock(); PMONITOR) - return {{m_realPosition->value().x - PMONITOR->vecPosition.x, m_realPosition->value().y - PMONITOR->vecPosition.y}, - {PMONITOR->vecSize.x - (m_realPosition->value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_realPosition->value().y - PMONITOR->vecPosition.y)}}; + return {{m_realPosition->value().x - PMONITOR->m_position.x, m_realPosition->value().y - PMONITOR->m_position.y}, + {PMONITOR->m_size.x - (m_realPosition->value().x - PMONITOR->m_position.x), PMONITOR->m_size.y - (m_realPosition->value().y - PMONITOR->m_position.y)}}; } SBoxExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}}; @@ -197,7 +197,7 @@ SBoxExtents CWindow::getFullWindowExtents() { CBox CWindow::getFullWindowBoundingBox() { if (m_windowData.dimAround.valueOrDefault()) { if (const auto PMONITOR = m_monitor.lock(); PMONITOR) - return {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; + return {PMONITOR->m_position.x, PMONITOR->m_position.y, PMONITOR->m_size.x, PMONITOR->m_size.y}; } auto maxExtents = getFullWindowExtents(); @@ -218,25 +218,25 @@ CBox CWindow::getWindowIdealBoundingBoxIgnoreReserved() { auto SIZE = m_size; if (isFullscreen()) { - POS = PMONITOR->vecPosition; - SIZE = PMONITOR->vecSize; + POS = PMONITOR->m_position; + SIZE = PMONITOR->m_size; return CBox{(int)POS.x, (int)POS.y, (int)SIZE.x, (int)SIZE.y}; } - if (DELTALESSTHAN(POS.y - PMONITOR->vecPosition.y, PMONITOR->vecReservedTopLeft.y, 1)) { - POS.y = PMONITOR->vecPosition.y; - SIZE.y += PMONITOR->vecReservedTopLeft.y; + if (DELTALESSTHAN(POS.y - PMONITOR->m_position.y, PMONITOR->m_reservedTopLeft.y, 1)) { + POS.y = PMONITOR->m_position.y; + SIZE.y += PMONITOR->m_reservedTopLeft.y; } - if (DELTALESSTHAN(POS.x - PMONITOR->vecPosition.x, PMONITOR->vecReservedTopLeft.x, 1)) { - POS.x = PMONITOR->vecPosition.x; - SIZE.x += PMONITOR->vecReservedTopLeft.x; + if (DELTALESSTHAN(POS.x - PMONITOR->m_position.x, PMONITOR->m_reservedTopLeft.x, 1)) { + POS.x = PMONITOR->m_position.x; + SIZE.x += PMONITOR->m_reservedTopLeft.x; } - if (DELTALESSTHAN(POS.x + SIZE.x - PMONITOR->vecPosition.x, PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x, 1)) { - SIZE.x += PMONITOR->vecReservedBottomRight.x; + if (DELTALESSTHAN(POS.x + SIZE.x - PMONITOR->m_position.x, PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x, 1)) { + SIZE.x += PMONITOR->m_reservedBottomRight.x; } - if (DELTALESSTHAN(POS.y + SIZE.y - PMONITOR->vecPosition.y, PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y, 1)) { - SIZE.y += PMONITOR->vecReservedBottomRight.y; + if (DELTALESSTHAN(POS.y + SIZE.y - PMONITOR->m_position.y, PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y, 1)) { + SIZE.y += PMONITOR->m_reservedBottomRight.y; } return CBox{(int)POS.x, (int)POS.y, (int)SIZE.x, (int)SIZE.y}; @@ -246,7 +246,7 @@ CBox CWindow::getWindowBoxUnified(uint64_t properties) { if (m_windowData.dimAround.valueOrDefault()) { const auto PMONITOR = m_monitor.lock(); if (PMONITOR) - return {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; + return {PMONITOR->m_position.x, PMONITOR->m_position.y, PMONITOR->m_size.x, PMONITOR->m_size.y}; } SBoxExtents EXTENTS = {{0, 0}, {0, 0}}; @@ -385,10 +385,10 @@ void CWindow::updateSurfaceScaleTransformDetails(bool force) { return; if (PNEWMONITOR != PLASTMONITOR || force) { - if (PLASTMONITOR && PLASTMONITOR->m_bEnabled && PNEWMONITOR != PLASTMONITOR) - m_wlSurface->resource()->breadthfirst([PLASTMONITOR](SP s, const Vector2D& offset, void* d) { s->leave(PLASTMONITOR->self.lock()); }, nullptr); + if (PLASTMONITOR && PLASTMONITOR->m_enabled && PNEWMONITOR != PLASTMONITOR) + m_wlSurface->resource()->breadthfirst([PLASTMONITOR](SP s, const Vector2D& offset, void* d) { s->leave(PLASTMONITOR->m_self.lock()); }, nullptr); - m_wlSurface->resource()->breadthfirst([PNEWMONITOR](SP s, const Vector2D& offset, void* d) { s->enter(PNEWMONITOR->self.lock()); }, nullptr); + m_wlSurface->resource()->breadthfirst([PNEWMONITOR](SP s, const Vector2D& offset, void* d) { s->enter(PNEWMONITOR->m_self.lock()); }, nullptr); } const auto PMONITOR = m_monitor.lock(); @@ -396,12 +396,12 @@ void CWindow::updateSurfaceScaleTransformDetails(bool force) { m_wlSurface->resource()->breadthfirst( [PMONITOR](SP s, const Vector2D& offset, void* d) { const auto PSURFACE = CWLSurface::fromResource(s); - if (PSURFACE && PSURFACE->m_lastScaleFloat == PMONITOR->scale) + if (PSURFACE && PSURFACE->m_lastScaleFloat == PMONITOR->m_scale) return; - PROTO::fractional->sendScale(s, PMONITOR->scale); - g_pCompositor->setPreferredScaleForSurface(s, PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(s, PMONITOR->transform); + PROTO::fractional->sendScale(s, PMONITOR->m_scale); + g_pCompositor->setPreferredScaleForSurface(s, PMONITOR->m_scale); + g_pCompositor->setPreferredTransformForSurface(s, PMONITOR->m_transform); }, nullptr); } @@ -520,14 +520,14 @@ void CWindow::onUnmap() { if (*PCLOSEONLASTSPECIAL && m_workspace && m_workspace->getWindows() == 0 && onSpecialWorkspace()) { const auto PMONITOR = m_monitor.lock(); - if (PMONITOR && PMONITOR->activeSpecialWorkspace && PMONITOR->activeSpecialWorkspace == m_workspace) + if (PMONITOR && PMONITOR->m_activeSpecialWorkspace && PMONITOR->m_activeSpecialWorkspace == m_workspace) PMONITOR->setSpecialWorkspace(nullptr); } const auto PMONITOR = m_monitor.lock(); - if (PMONITOR && PMONITOR->solitaryClient == m_self) - PMONITOR->solitaryClient.reset(); + if (PMONITOR && PMONITOR->m_solitaryClient == m_self) + PMONITOR->m_solitaryClient.reset(); if (m_workspace) { m_workspace->updateWindows(); @@ -1248,7 +1248,7 @@ void CWindow::setSuspended(bool suspend) { bool CWindow::visibleOnMonitor(PHLMONITOR pMonitor) { CBox wbox = {m_realPosition->value(), m_realSize->value()}; - return !wbox.intersection({pMonitor->vecPosition, pMonitor->vecSize}).empty(); + return !wbox.intersection({pMonitor->m_position, pMonitor->m_size}).empty(); } void CWindow::setAnimationsToMove() { @@ -1274,21 +1274,21 @@ void CWindow::onWorkspaceAnimUpdate() { const auto WINBB = getFullWindowBoundingBox(); if (PWORKSPACE->m_renderOffset->value().x != 0) { - const auto PROGRESS = PWORKSPACE->m_renderOffset->value().x / PWSMON->vecSize.x; + const auto PROGRESS = PWORKSPACE->m_renderOffset->value().x / PWSMON->m_size.x; - if (WINBB.x < PWSMON->vecPosition.x) - offset.x += (PWSMON->vecPosition.x - WINBB.x) * PROGRESS; + if (WINBB.x < PWSMON->m_position.x) + offset.x += (PWSMON->m_position.x - WINBB.x) * PROGRESS; - if (WINBB.x + WINBB.width > PWSMON->vecPosition.x + PWSMON->vecSize.x) - offset.x += (WINBB.x + WINBB.width - PWSMON->vecPosition.x - PWSMON->vecSize.x) * PROGRESS; + if (WINBB.x + WINBB.width > PWSMON->m_position.x + PWSMON->m_size.x) + offset.x += (WINBB.x + WINBB.width - PWSMON->m_position.x - PWSMON->m_size.x) * PROGRESS; } else if (PWORKSPACE->m_renderOffset->value().y != 0) { - const auto PROGRESS = PWORKSPACE->m_renderOffset->value().y / PWSMON->vecSize.y; + const auto PROGRESS = PWORKSPACE->m_renderOffset->value().y / PWSMON->m_size.y; - if (WINBB.y < PWSMON->vecPosition.y) - offset.y += (PWSMON->vecPosition.y - WINBB.y) * PROGRESS; + if (WINBB.y < PWSMON->m_position.y) + offset.y += (PWSMON->m_position.y - WINBB.y) * PROGRESS; - if (WINBB.y + WINBB.height > PWSMON->vecPosition.y + PWSMON->vecSize.y) - offset.y += (WINBB.y + WINBB.height - PWSMON->vecPosition.y - PWSMON->vecSize.y) * PROGRESS; + if (WINBB.y + WINBB.height > PWSMON->m_position.y + PWSMON->m_size.y) + offset.y += (WINBB.y + WINBB.height - PWSMON->m_position.y - PWSMON->m_size.y) * PROGRESS; } m_floatingOffset = offset; @@ -1342,7 +1342,7 @@ WORKSPACEID CWindow::workspaceID() { } MONITORID CWindow::monitorID() { - return m_monitor ? m_monitor->ID : MONITOR_INVALID; + return m_monitor ? m_monitor->m_id : MONITOR_INVALID; } bool CWindow::onSpecialWorkspace() { @@ -1426,7 +1426,7 @@ void CWindow::onUpdateState() { if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_suppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { if (m_isMapped) { const auto monitor = g_pCompositor->getMonitorFromID(requestsID.value()); - g_pCompositor->moveWindowToWorkspaceSafe(m_self.lock(), monitor->activeWorkspace); + g_pCompositor->moveWindowToWorkspaceSafe(m_self.lock(), monitor->m_activeWorkspace); g_pCompositor->setActiveMonitor(monitor); } @@ -1580,7 +1580,7 @@ void CWindow::onX11ConfigureRequest(CBox box) { if (!m_workspace || !m_workspace->isVisible()) return; // further things are only for visible windows - m_workspace = g_pCompositor->getMonitorFromVector(m_realPosition->goal() + m_realSize->goal() / 2.f)->activeWorkspace; + m_workspace = g_pCompositor->getMonitorFromVector(m_realPosition->goal() + m_realSize->goal() / 2.f)->m_activeWorkspace; g_pCompositor->changeWindowZOrder(m_self.lock(), true); @@ -1711,7 +1711,7 @@ Vector2D CWindow::realToReportSize() { const auto PMONITOR = m_monitor.lock(); if (*PXWLFORCESCALEZERO && PMONITOR) - return REPORTSIZE * PMONITOR->scale; + return REPORTSIZE * PMONITOR->m_scale; return REPORTSIZE; } @@ -1728,7 +1728,7 @@ Vector2D CWindow::xwaylandSizeToReal(Vector2D size) { const auto PMONITOR = m_monitor.lock(); const auto SIZE = size.clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); - const auto SCALE = *PXWLFORCESCALEZERO ? PMONITOR->scale : 1.0f; + const auto SCALE = *PXWLFORCESCALEZERO ? PMONITOR->m_scale : 1.0f; return SIZE / SCALE; } @@ -1743,7 +1743,7 @@ void CWindow::updateX11SurfaceScale() { m_X11SurfaceScaledBy = 1.0f; if (m_isX11 && *PXWLFORCESCALEZERO) { if (const auto PMONITOR = m_monitor.lock(); PMONITOR) - m_X11SurfaceScaledBy = PMONITOR->scale; + m_X11SurfaceScaledBy = PMONITOR->m_scale; } } diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 8bb7f7a0..fbbad118 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -110,24 +110,24 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { if (ANIMSTYLE.starts_with("slidefadevert")) { if (in) { m_alpha->setValueAndWarp(0.f); - m_renderOffset->setValueAndWarp(Vector2D(0.0, (left ? PMONITOR->vecSize.y : -PMONITOR->vecSize.y) * (movePerc / 100.f))); + m_renderOffset->setValueAndWarp(Vector2D(0.0, (left ? PMONITOR->m_size.y : -PMONITOR->m_size.y) * (movePerc / 100.f))); *m_alpha = 1.f; *m_renderOffset = Vector2D(0, 0); } else { m_alpha->setValueAndWarp(1.f); *m_alpha = 0.f; - *m_renderOffset = Vector2D(0.0, (left ? -PMONITOR->vecSize.y : PMONITOR->vecSize.y) * (movePerc / 100.f)); + *m_renderOffset = Vector2D(0.0, (left ? -PMONITOR->m_size.y : PMONITOR->m_size.y) * (movePerc / 100.f)); } } else { if (in) { m_alpha->setValueAndWarp(0.f); - m_renderOffset->setValueAndWarp(Vector2D((left ? PMONITOR->vecSize.x : -PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0)); + m_renderOffset->setValueAndWarp(Vector2D((left ? PMONITOR->m_size.x : -PMONITOR->m_size.x) * (movePerc / 100.f), 0.0)); *m_alpha = 1.f; *m_renderOffset = Vector2D(0, 0); } else { m_alpha->setValueAndWarp(1.f); *m_alpha = 0.f; - *m_renderOffset = Vector2D((left ? -PMONITOR->vecSize.x : PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0); + *m_renderOffset = Vector2D((left ? -PMONITOR->m_size.x : PMONITOR->m_size.x) * (movePerc / 100.f), 0.0); } } } else if (ANIMSTYLE == "fade") { @@ -143,7 +143,7 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { } else if (ANIMSTYLE == "slidevert") { // fallback is slide const auto PMONITOR = m_monitor.lock(); - const auto YDISTANCE = PMONITOR->vecSize.y + *PWORKSPACEGAP; + const auto YDISTANCE = PMONITOR->m_size.y + *PWORKSPACEGAP; m_alpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. @@ -156,7 +156,7 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) { } else { // fallback is slide const auto PMONITOR = m_monitor.lock(); - const auto XDISTANCE = PMONITOR->vecSize.x + *PWORKSPACEGAP; + const auto XDISTANCE = PMONITOR->m_size.x + *PWORKSPACEGAP; m_alpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide. @@ -520,7 +520,7 @@ bool CWorkspace::inert() { } MONITORID CWorkspace::monitorID() { - return m_monitor ? m_monitor->ID : MONITOR_INVALID; + return m_monitor ? m_monitor->m_id : MONITOR_INVALID; } PHLWINDOW CWorkspace::getFullscreenWindow() { @@ -538,10 +538,10 @@ bool CWorkspace::isVisible() { bool CWorkspace::isVisibleNotCovered() { const auto PMONITOR = m_monitor.lock(); - if (PMONITOR->activeSpecialWorkspace) - return PMONITOR->activeSpecialWorkspace->m_id == m_id; + if (PMONITOR->m_activeSpecialWorkspace) + return PMONITOR->m_activeSpecialWorkspace->m_id == m_id; - return PMONITOR->activeWorkspace->m_id == m_id; + return PMONITOR->m_activeWorkspace->m_id == m_id; } int CWorkspace::getWindows(std::optional onlyTiled, std::optional onlyPinned, std::optional onlyVisible) { @@ -597,7 +597,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { const auto WINDOWIDEALBB = w->getWindowIdealBoundingBoxIgnoreReserved(); - if (WINDOWIDEALBB.x <= PMONITOR->vecPosition.x + 1 && WINDOWIDEALBB.y <= PMONITOR->vecPosition.y + 1) + if (WINDOWIDEALBB.x <= PMONITOR->m_position.x + 1 && WINDOWIDEALBB.y <= PMONITOR->m_position.y + 1) return w; } return nullptr; diff --git a/src/devices/VirtualPointer.cpp b/src/devices/VirtualPointer.cpp index 1aaf8b10..bc45f035 100644 --- a/src/devices/VirtualPointer.cpp +++ b/src/devices/VirtualPointer.cpp @@ -42,7 +42,7 @@ CVirtualPointer::CVirtualPointer(SP resource) : m_poi m_listeners.holdBegin = m_pointer->events.holdBegin.registerListener([this](std::any d) { m_pointerEvents.holdBegin.emit(d); }); m_listeners.holdEnd = m_pointer->events.holdEnd.registerListener([this](std::any d) { m_pointerEvents.holdEnd.emit(d); }); - m_boundOutput = resource->boundOutput ? resource->boundOutput->szName : ""; + m_boundOutput = resource->boundOutput ? resource->boundOutput->m_name : ""; m_deviceName = m_pointer->name; } diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index f476c6e8..838839d3 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -63,7 +63,7 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pCompositor->setActiveMonitor(g_pCompositor->getMonitorFromVector({})); PMONITOR = g_pCompositor->m_lastMonitor.lock(); } - auto PWORKSPACE = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + auto PWORKSPACE = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; PWINDOW->m_monitor = PMONITOR; PWINDOW->m_workspace = PWORKSPACE; PWINDOW->m_isMapped = true; @@ -172,7 +172,7 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } - PWINDOW->m_workspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; PWORKSPACE = PWINDOW->m_workspace; Debug::log(LOG, "Rule monitor, applying to {:mw}", PWINDOW); @@ -356,7 +356,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_workspace = pWorkspace; PWINDOW->m_monitor = pWorkspace->m_monitor; - if (PWINDOW->m_monitor.lock()->activeSpecialWorkspace && !pWorkspace->m_isSpecialWorkspace) + if (PWINDOW->m_monitor.lock()->m_activeSpecialWorkspace && !pWorkspace->m_isSpecialWorkspace) workspaceSilent = true; if (!workspaceSilent) { @@ -385,7 +385,7 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } - PWINDOW->m_workspace = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace; + PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; PWORKSPACE = PWINDOW->m_workspace; Debug::log(LOG, "Requested monitor, applying to {:mw}", PWINDOW); @@ -432,11 +432,11 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto MAXSIZE = PWINDOW->requestedMaxSize(); - const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, PMONITOR->vecSize.x) : - stringToFloatClamp(SIZEXSTR, PWINDOW->m_realSize->goal().x, PMONITOR->vecSize.x); + const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, PMONITOR->m_size.x) : + stringToFloatClamp(SIZEXSTR, PWINDOW->m_realSize->goal().x, PMONITOR->m_size.x); - const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, PMONITOR->vecSize.y) : - stringToFloatClamp(SIZEYSTR, PWINDOW->m_realSize->goal().y, PMONITOR->vecSize.y); + const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, PMONITOR->m_size.y) : + stringToFloatClamp(SIZEYSTR, PWINDOW->m_realSize->goal().y, PMONITOR->m_size.y); Debug::log(LOG, "Rule size, applying to {}", PWINDOW); @@ -469,8 +469,8 @@ void Events::listener_mapWindow(void* owner, void* data) { if (POSXSTR.starts_with("100%-")) { const bool subtractWindow = POSXSTR.starts_with("100%-w-"); const auto POSXRAW = (subtractWindow) ? POSXSTR.substr(7) : POSXSTR.substr(5); - posX = PMONITOR->vecSize.x - - (!POSXRAW.contains('%') ? std::stoi(POSXRAW) : std::stof(POSXRAW.substr(0, POSXRAW.length() - 1)) * 0.01 * PMONITOR->vecSize.x); + posX = + PMONITOR->m_size.x - (!POSXRAW.contains('%') ? std::stoi(POSXRAW) : std::stof(POSXRAW.substr(0, POSXRAW.length() - 1)) * 0.01 * PMONITOR->m_size.x); if (subtractWindow) posX -= PWINDOW->m_realSize->goal().x; @@ -478,13 +478,13 @@ void Events::listener_mapWindow(void* owner, void* data) { if (CURSOR) Debug::log(ERR, "Cursor is not compatible with 100%-, ignoring cursor!"); } else if (!CURSOR) { - posX = !POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PMONITOR->vecSize.x; + posX = !POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PMONITOR->m_size.x; } else { // cursor if (POSXSTR == "cursor") { - posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x; + posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->m_position.x; } else { - posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x + + posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->m_position.x + (!POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PWINDOW->m_realSize->goal().x); } } @@ -492,8 +492,8 @@ void Events::listener_mapWindow(void* owner, void* data) { if (POSYSTR.starts_with("100%-")) { const bool subtractWindow = POSYSTR.starts_with("100%-w-"); const auto POSYRAW = (subtractWindow) ? POSYSTR.substr(7) : POSYSTR.substr(5); - posY = PMONITOR->vecSize.y - - (!POSYRAW.contains('%') ? std::stoi(POSYRAW) : std::stof(POSYRAW.substr(0, POSYRAW.length() - 1)) * 0.01 * PMONITOR->vecSize.y); + posY = + PMONITOR->m_size.y - (!POSYRAW.contains('%') ? std::stoi(POSYRAW) : std::stof(POSYRAW.substr(0, POSYRAW.length() - 1)) * 0.01 * PMONITOR->m_size.y); if (subtractWindow) posY -= PWINDOW->m_realSize->goal().y; @@ -501,13 +501,13 @@ void Events::listener_mapWindow(void* owner, void* data) { if (CURSOR) Debug::log(ERR, "Cursor is not compatible with 100%-, ignoring cursor!"); } else if (!CURSOR) { - posY = !POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PMONITOR->vecSize.y; + posY = !POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PMONITOR->m_size.y; } else { // cursor if (POSYSTR == "cursor") { - posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y; + posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->m_position.y; } else { - posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y + + posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->m_position.y + (!POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PWINDOW->m_realSize->goal().y); } } @@ -515,16 +515,16 @@ void Events::listener_mapWindow(void* owner, void* data) { if (ONSCREEN) { int borderSize = PWINDOW->getRealBorderSize(); - posX = std::clamp(posX, (int)(PMONITOR->vecReservedTopLeft.x + borderSize), - (int)(PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PWINDOW->m_realSize->goal().x - borderSize)); + posX = std::clamp(posX, (int)(PMONITOR->m_reservedTopLeft.x + borderSize), + (int)(PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PWINDOW->m_realSize->goal().x - borderSize)); - posY = std::clamp(posY, (int)(PMONITOR->vecReservedTopLeft.y + borderSize), - (int)(PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PWINDOW->m_realSize->goal().y - borderSize)); + posY = std::clamp(posY, (int)(PMONITOR->m_reservedTopLeft.y + borderSize), + (int)(PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PWINDOW->m_realSize->goal().y - borderSize)); } Debug::log(LOG, "Rule move, applying to {}", PWINDOW); - *PWINDOW->m_realPosition = Vector2D(posX, posY) + PMONITOR->vecPosition; + *PWINDOW->m_realPosition = Vector2D(posX, posY) + PMONITOR->m_position; PWINDOW->setHidden(false); } catch (...) { Debug::log(LOG, "Rule move failed, rule: {} -> {}", r->m_rule, r->m_value); } @@ -534,7 +534,7 @@ void Events::listener_mapWindow(void* owner, void* data) { auto RESERVEDOFFSET = Vector2D(); const auto ARGS = CVarList(r->m_rule, 2, ' '); if (ARGS[1] == "1") - RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f; + RESERVEDOFFSET = (PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight) / 2.f; *PWINDOW->m_realPosition = PMONITOR->middle() - PWINDOW->m_realSize->goal() / 2.f + RESERVEDOFFSET; break; @@ -565,9 +565,9 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto MAXSIZE = PWINDOW->requestedMaxSize(); - const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, PMONITOR->vecSize.x) : stringToPercentage(SIZEXSTR, PMONITOR->vecSize.x); + const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, PMONITOR->m_size.x) : stringToPercentage(SIZEXSTR, PMONITOR->m_size.x); - const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, PMONITOR->vecSize.y) : stringToPercentage(SIZEYSTR, PMONITOR->vecSize.y); + const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, PMONITOR->m_size.y) : stringToPercentage(SIZEYSTR, PMONITOR->m_size.y); Debug::log(LOG, "Rule size (tiled), applying to {}", PWINDOW); @@ -662,7 +662,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_firstMap = false; - Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_realPosition->goal(), PWINDOW->m_realSize->goal()); + Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->m_name, PWINDOW->m_realPosition->goal(), PWINDOW->m_realSize->goal()); auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name; g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, PWINDOW->m_class, PWINDOW->m_title)}); @@ -687,8 +687,8 @@ void Events::listener_mapWindow(void* owner, void* data) { if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen() && !PWINDOW->m_isFloating) PWINDOW->m_alpha->setValueAndWarp(0.f); - g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->scale); - g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->transform); + g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_scale); + g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_transform); if (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained()) g_pInputManager->sendMotionEventsToFocused(); @@ -700,7 +700,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_workspace->updateWindows(); if (PMONITOR && PWINDOW->isX11OverrideRedirect()) - PWINDOW->m_X11SurfaceScaledBy = PMONITOR->scale; + PWINDOW->m_X11SurfaceScaledBy = PMONITOR->m_scale; } void Events::listener_unmapWindow(void* owner, void* data) { @@ -721,7 +721,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { const auto PMONITOR = PWINDOW->m_monitor.lock(); if (PMONITOR) { - PWINDOW->m_originalClosedPos = PWINDOW->m_realPosition->value() - PMONITOR->vecPosition; + PWINDOW->m_originalClosedPos = PWINDOW->m_realPosition->value() - PMONITOR->m_position; PWINDOW->m_originalClosedSize = PWINDOW->m_realSize->value(); PWINDOW->m_originalClosedExtents = PWINDOW->getFullWindowExtents(); } @@ -892,14 +892,14 @@ void Events::listener_commitWindow(void* owner, void* data) { } // tearing: if solitary, redraw it. This still might be a single surface window - if (PMONITOR && PMONITOR->solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->tearingState.canTear && PWINDOW->m_wlSurface->resource()->current.texture) { + if (PMONITOR && PMONITOR->m_solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->m_tearingState.canTear && PWINDOW->m_wlSurface->resource()->current.texture) { CRegion damageBox{PWINDOW->m_wlSurface->resource()->current.accumulateBufferDamage()}; if (!damageBox.empty()) { - if (PMONITOR->tearingState.busy) { - PMONITOR->tearingState.frameScheduledWhileBusy = true; + if (PMONITOR->m_tearingState.busy) { + PMONITOR->m_tearingState.frameScheduledWhileBusy = true; } else { - PMONITOR->tearingState.nextRenderTorn = true; + PMONITOR->m_tearingState.nextRenderTorn = true; g_pHyprRenderer->renderMonitor(PMONITOR); } } @@ -998,14 +998,14 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) { if (*PXWLFORCESCALEZERO) { if (const auto PMONITOR = PWINDOW->m_monitor.lock(); PMONITOR) { - PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_realSize->goal() / PMONITOR->scale); + PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_realSize->goal() / PMONITOR->m_scale); } } PWINDOW->m_position = PWINDOW->m_realPosition->goal(); PWINDOW->m_size = PWINDOW->m_realSize->goal(); - PWINDOW->m_workspace = g_pCompositor->getMonitorFromVector(PWINDOW->m_realPosition->value() + PWINDOW->m_realSize->value() / 2.f)->activeWorkspace; + PWINDOW->m_workspace = g_pCompositor->getMonitorFromVector(PWINDOW->m_realPosition->value() + PWINDOW->m_realSize->value() / 2.f)->m_activeWorkspace; g_pCompositor->changeWindowZOrder(PWINDOW, true); PWINDOW->updateWindowDecos(); diff --git a/src/helpers/Color.cpp b/src/helpers/Color.cpp index 8dfefbbd..42ae1fd4 100644 --- a/src/helpers/Color.cpp +++ b/src/helpers/Color.cpp @@ -8,11 +8,11 @@ CHyprColor::CHyprColor() = default; CHyprColor::CHyprColor(float r_, float g_, float b_, float a_) : r(r_), g(g_), b(b_), a(a_) { - okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); + m_okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); } CHyprColor::CHyprColor(uint64_t hex) : r(RED(hex)), g(GREEN(hex)), b(BLUE(hex)), a(ALPHA(hex)) { - okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); + m_okLab = Hyprgraphics::CColor(Hyprgraphics::CColor::SSRGB{r, g, b}).asOkLab(); } CHyprColor::CHyprColor(const Hyprgraphics::CColor& color, float a_) : a(a_) { @@ -21,7 +21,7 @@ CHyprColor::CHyprColor(const Hyprgraphics::CColor& color, float a_) : a(a_) { g = SRGB.g; b = SRGB.b; - okLab = color.asOkLab(); + m_okLab = color.asOkLab(); } uint32_t CHyprColor::getAsHex() const { @@ -33,11 +33,11 @@ Hyprgraphics::CColor::SSRGB CHyprColor::asRGB() const { } Hyprgraphics::CColor::SOkLab CHyprColor::asOkLab() const { - return okLab; + return m_okLab; } Hyprgraphics::CColor::SHSL CHyprColor::asHSL() const { - return Hyprgraphics::CColor(okLab).asHSL(); + return Hyprgraphics::CColor(m_okLab).asHSL(); } CHyprColor CHyprColor::stripA() const { diff --git a/src/helpers/Color.hpp b/src/helpers/Color.hpp index 8050bebd..e72fcd58 100644 --- a/src/helpers/Color.hpp +++ b/src/helpers/Color.hpp @@ -43,7 +43,7 @@ class CHyprColor { double r = 0, g = 0, b = 0, a = 0; private: - Hyprgraphics::CColor::SOkLab okLab; // cache for the OkLab representation + Hyprgraphics::CColor::SOkLab m_okLab; // cache for the OkLab representation }; //NOLINTNEXTLINE diff --git a/src/helpers/DamageRing.cpp b/src/helpers/DamageRing.cpp index 093e7ca6..82c8894b 100644 --- a/src/helpers/DamageRing.cpp +++ b/src/helpers/DamageRing.cpp @@ -1,43 +1,43 @@ #include "DamageRing.hpp" void CDamageRing::setSize(const Vector2D& size_) { - if (size_ == size) + if (size_ == m_size) return; - size = size_; + m_size = size_; damageEntire(); } bool CDamageRing::damage(const CRegion& rg) { - CRegion clipped = rg.copy().intersect(CBox{{}, size}); + CRegion clipped = rg.copy().intersect(CBox{{}, m_size}); if (clipped.empty()) return false; - current.add(clipped); + m_current.add(clipped); return true; } void CDamageRing::damageEntire() { - damage(CBox{{}, size}); + damage(CBox{{}, m_size}); } void CDamageRing::rotate() { - previousIdx = (previousIdx + DAMAGE_RING_PREVIOUS_LEN - 1) % DAMAGE_RING_PREVIOUS_LEN; + m_previousIdx = (m_previousIdx + DAMAGE_RING_PREVIOUS_LEN - 1) % DAMAGE_RING_PREVIOUS_LEN; - previous[previousIdx] = current; - current.clear(); + m_previous[m_previousIdx] = m_current; + m_current.clear(); } CRegion CDamageRing::getBufferDamage(int age) { if (age <= 0 || age > DAMAGE_RING_PREVIOUS_LEN + 1) - return CBox{{}, size}; + return CBox{{}, m_size}; - CRegion damage = current; + CRegion damage = m_current; for (int i = 0; i < age - 1; ++i) { - int j = (previousIdx + i) % DAMAGE_RING_PREVIOUS_LEN; - damage.add(previous.at(j)); + int j = (m_previousIdx + i) % DAMAGE_RING_PREVIOUS_LEN; + damage.add(m_previous.at(j)); } // don't return a ludicrous amount of rects @@ -48,5 +48,5 @@ CRegion CDamageRing::getBufferDamage(int age) { } bool CDamageRing::hasChanged() { - return !current.empty(); + return !m_current.empty(); } diff --git a/src/helpers/DamageRing.hpp b/src/helpers/DamageRing.hpp index ae85c453..f53d6bf0 100644 --- a/src/helpers/DamageRing.hpp +++ b/src/helpers/DamageRing.hpp @@ -15,8 +15,8 @@ class CDamageRing { bool hasChanged(); private: - Vector2D size; - CRegion current; - std::array previous; - size_t previousIdx = 0; + Vector2D m_size; + CRegion m_current; + std::array m_previous; + size_t m_previousIdx = 0; }; diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index bb5510b6..ed67618e 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -148,7 +148,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (same_mon) { for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) { const auto PMONITOR = g_pCompositor->getMonitorFromName(rule.monitor); - if (PMONITOR && (PMONITOR->ID != g_pCompositor->m_lastMonitor->ID)) + if (PMONITOR && (PMONITOR->m_id != g_pCompositor->m_lastMonitor->m_id)) invalidWSes.insert(rule.workspaceId); } } @@ -165,7 +165,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { if (!g_pCompositor->m_lastMonitor) return {WORKSPACE_INVALID}; - const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; if (!valid(PWORKSPACE)) return {WORKSPACE_INVALID}; @@ -184,12 +184,12 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { return {PLASTWORKSPACE->m_id, PLASTWORKSPACE->m_name}; } else if (in == "next") { - if (!g_pCompositor->m_lastMonitor || !g_pCompositor->m_lastMonitor->activeWorkspace) { + if (!g_pCompositor->m_lastMonitor || !g_pCompositor->m_lastMonitor->m_activeWorkspace) { Debug::log(ERR, "no active monitor or workspace for 'next'"); return {WORKSPACE_INVALID}; } - auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; WORKSPACEID nextId = PCURRENTWORKSPACE->m_id + 1; @@ -227,7 +227,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) { const auto PMONITOR = g_pCompositor->getMonitorFromName(rule.monitor); - if (!PMONITOR || PMONITOR->ID == g_pCompositor->m_lastMonitor->ID) { + if (!PMONITOR || PMONITOR->m_id == g_pCompositor->m_lastMonitor->m_id) { // Can't be invalid continue; } @@ -265,7 +265,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } else { // Just take a blind guess at where we'll probably end up - WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_id : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->m_activeWorkspace ? g_pCompositor->m_lastMonitor->m_activeWorkspace->m_id : 1; WORKSPACEID predictedWSID = activeWSID + remains; int remainingWSes = 0; char walkDir = in[1]; @@ -407,7 +407,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { remains = remains < 0 ? -((-remains) % validWSes.size()) : remains % validWSes.size(); // get the current item - WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->activeWorkspace ? g_pCompositor->m_lastMonitor->activeWorkspace->m_id : 1; + WORKSPACEID activeWSID = g_pCompositor->m_lastMonitor->m_activeWorkspace ? g_pCompositor->m_lastMonitor->m_activeWorkspace->m_id : 1; for (ssize_t i = 0; i < (ssize_t)validWSes.size(); i++) { if (validWSes[i] == activeWSID) { currentItem = i; diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 4ee0166f..2edba78a 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -39,133 +39,133 @@ using namespace Hyprutils::OS; using enum NContentType::eContentType; static int ratHandler(void* data) { - g_pHyprRenderer->renderMonitor(((CMonitor*)data)->self.lock()); + g_pHyprRenderer->renderMonitor(((CMonitor*)data)->m_self.lock()); return 1; } -CMonitor::CMonitor(SP output_) : state(this), output(output_) { +CMonitor::CMonitor(SP output_) : m_state(this), m_output(output_) { ; } CMonitor::~CMonitor() { - events.destroy.emit(); + m_events.destroy.emit(); if (g_pHyprOpenGL) - g_pHyprOpenGL->destroyMonitorResources(self); + g_pHyprOpenGL->destroyMonitorResources(m_self); } void CMonitor::onConnect(bool noRule) { - EMIT_HOOK_EVENT("preMonitorAdded", self.lock()); + EMIT_HOOK_EVENT("preMonitorAdded", m_self.lock()); CScopeGuard x = {[]() { g_pCompositor->arrangeMonitors(); }}; g_pEventLoopManager->doLater([] { g_pConfigManager->ensurePersistentWorkspacesPresent(); }); - listeners.frame = output->events.frame.registerListener([this](std::any d) { onMonitorFrame(); }); - listeners.commit = output->events.commit.registerListener([this](std::any d) { + m_listeners.frame = m_output->events.frame.registerListener([this](std::any d) { onMonitorFrame(); }); + m_listeners.commit = m_output->events.commit.registerListener([this](std::any d) { if (true) { // FIXME: E->state->committed & WLR_OUTPUT_STATE_BUFFER - PROTO::screencopy->onOutputCommit(self.lock()); - PROTO::toplevelExport->onOutputCommit(self.lock()); + PROTO::screencopy->onOutputCommit(m_self.lock()); + PROTO::toplevelExport->onOutputCommit(m_self.lock()); } }); - listeners.needsFrame = - output->events.needsFrame.registerListener([this](std::any d) { g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEEDS_FRAME); }); + m_listeners.needsFrame = + m_output->events.needsFrame.registerListener([this](std::any d) { g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEEDS_FRAME); }); - listeners.presented = output->events.present.registerListener([this](std::any d) { + m_listeners.presented = m_output->events.present.registerListener([this](std::any d) { auto E = std::any_cast(d); timespec* ts = E.when; if (!ts) { timespec now; clock_gettime(CLOCK_MONOTONIC, &now); - PROTO::presentation->onPresented(self.lock(), Time::fromTimespec(&now), E.refresh, E.seq, E.flags); + PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(&now), E.refresh, E.seq, E.flags); } else - PROTO::presentation->onPresented(self.lock(), Time::fromTimespec(E.when), E.refresh, E.seq, E.flags); + PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(E.when), E.refresh, E.seq, E.flags); }); - listeners.destroy = output->events.destroy.registerListener([this](std::any d) { - Debug::log(LOG, "Destroy called for monitor {}", szName); + m_listeners.destroy = m_output->events.destroy.registerListener([this](std::any d) { + Debug::log(LOG, "Destroy called for monitor {}", m_name); onDisconnect(true); - output = nullptr; - m_bRenderingInitPassed = false; + m_output = nullptr; + m_renderingInitPassed = false; - Debug::log(LOG, "Removing monitor {} from realMonitors", szName); + Debug::log(LOG, "Removing monitor {} from realMonitors", m_name); std::erase_if(g_pCompositor->m_realMonitors, [&](PHLMONITOR& el) { return el.get() == this; }); }); - listeners.state = output->events.state.registerListener([this](std::any d) { + m_listeners.state = m_output->events.state.registerListener([this](std::any d) { auto E = std::any_cast(d); if (E.size == Vector2D{}) { // an indication to re-set state // we can't do much for createdByUser displays I think - if (createdByUser) + if (m_createdByUser) return; - Debug::log(LOG, "Reapplying monitor rule for {} from a state request", szName); - applyMonitorRule(&activeMonitorRule, true); + Debug::log(LOG, "Reapplying monitor rule for {} from a state request", m_name); + applyMonitorRule(&m_activeMonitorRule, true); return; } - if (!createdByUser) + if (!m_createdByUser) return; const auto SIZE = E.size; - forceSize = SIZE; + m_forceSize = SIZE; - SMonitorRule rule = activeMonitorRule; + SMonitorRule rule = m_activeMonitorRule; rule.resolution = SIZE; applyMonitorRule(&rule); }); - tearingState.canTear = output->getBackend()->type() == Aquamarine::AQ_BACKEND_DRM; + m_tearingState.canTear = m_output->getBackend()->type() == Aquamarine::AQ_BACKEND_DRM; - if (m_bEnabled) { - output->state->resetExplicitFences(); - output->state->setEnabled(true); - state.commit(); + if (m_enabled) { + m_output->state->resetExplicitFences(); + m_output->state->setEnabled(true); + m_state.commit(); return; } - szName = output->name; + m_name = m_output->name; - szDescription = output->description; + m_description = m_output->description; // remove comma character from description. This allow monitor specific rules to work on monitor with comma on their description - std::erase(szDescription, ','); + std::erase(m_description, ','); // field is backwards-compatible with intended usage of `szDescription` but excludes the parenthesized DRM node name suffix - szShortDescription = trim(std::format("{} {} {}", output->make, output->model, output->serial)); - std::erase(szShortDescription, ','); + m_shortDescription = trim(std::format("{} {} {}", m_output->make, m_output->model, m_output->serial)); + std::erase(m_shortDescription, ','); - if (output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) - createdByUser = true; // should be true. WL and Headless backends should be addable / removable + if (m_output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) + m_createdByUser = true; // should be true. WL and Headless backends should be addable / removable // get monitor rule that matches - SMonitorRule monitorRule = g_pConfigManager->getMonitorRuleFor(self.lock()); + SMonitorRule monitorRule = g_pConfigManager->getMonitorRuleFor(m_self.lock()); // if it's disabled, disable and ignore if (monitorRule.disabled) { - output->state->resetExplicitFences(); - output->state->setEnabled(false); + m_output->state->resetExplicitFences(); + m_output->state->setEnabled(false); - if (!state.commit()) - Debug::log(ERR, "Couldn't commit disabled state on output {}", output->name); + if (!m_state.commit()) + Debug::log(ERR, "Couldn't commit disabled state on output {}", m_output->name); - m_bEnabled = false; + m_enabled = false; - listeners.frame.reset(); + m_listeners.frame.reset(); return; } - if (output->nonDesktop) { + if (m_output->nonDesktop) { Debug::log(LOG, "Not configuring non-desktop output"); if (PROTO::lease) - PROTO::lease->offer(self.lock()); + PROTO::lease->offer(m_self.lock()); return; } @@ -174,7 +174,7 @@ void CMonitor::onConnect(bool noRule) { // find the wrap for (auto& m : g_pCompositor->m_realMonitors) { - if (m->ID == ID) { + if (m->m_id == m_id) { thisWrapper = &m; break; } @@ -185,21 +185,21 @@ void CMonitor::onConnect(bool noRule) { if (std::find_if(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) g_pCompositor->m_monitors.push_back(*thisWrapper); - m_bEnabled = true; + m_enabled = true; - output->state->resetExplicitFences(); - output->state->setEnabled(true); + m_output->state->resetExplicitFences(); + m_output->state->setEnabled(true); // set mode, also applies if (!noRule) applyMonitorRule(&monitorRule, true); - if (!state.commit()) + if (!m_state.commit()) Debug::log(WARN, "state.commit() failed in CMonitor::onCommit"); - damage.setSize(vecTransformedSize); + m_damage.setSize(m_transformedSize); - Debug::log(LOG, "Added new monitor with name {} at {:j0} with size {:j0}, pointer {:x}", output->name, vecPosition, vecPixelSize, (uintptr_t)output.get()); + Debug::log(LOG, "Added new monitor with name {} at {:j0} with size {:j0}, pointer {:x}", m_output->name, m_position, m_pixelSize, (uintptr_t)m_output.get()); setupDefaultWS(monitorRule); @@ -207,31 +207,31 @@ void CMonitor::onConnect(bool noRule) { if (!valid(ws)) continue; - if (ws->m_lastMonitor == szName || g_pCompositor->m_monitors.size() == 1 /* avoid lost workspaces on recover */) { - g_pCompositor->moveWorkspaceToMonitor(ws, self.lock()); + if (ws->m_lastMonitor == m_name || g_pCompositor->m_monitors.size() == 1 /* avoid lost workspaces on recover */) { + g_pCompositor->moveWorkspaceToMonitor(ws, m_self.lock()); ws->startAnim(true, true, true); ws->m_lastMonitor = ""; } } - scale = monitorRule.scale; - if (scale < 0.1) - scale = getDefaultScale(); + m_scale = monitorRule.scale; + if (m_scale < 0.1) + m_scale = getDefaultScale(); - forceFullFrames = 3; // force 3 full frames to make sure there is no blinking due to double-buffering. + m_forceFullFrames = 3; // force 3 full frames to make sure there is no blinking due to double-buffering. // - if (!activeMonitorRule.mirrorOf.empty()) - setMirror(activeMonitorRule.mirrorOf); + if (!m_activeMonitorRule.mirrorOf.empty()) + setMirror(m_activeMonitorRule.mirrorOf); if (!g_pCompositor->m_lastMonitor) // set the last monitor if it isnt set yet - g_pCompositor->setActiveMonitor(self.lock()); + g_pCompositor->setActiveMonitor(m_self.lock()); - g_pHyprRenderer->arrangeLayersForMonitor(ID); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); + g_pHyprRenderer->arrangeLayersForMonitor(m_id); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); // ensure VRR (will enable if necessary) - g_pConfigManager->ensureVRR(self.lock()); + g_pConfigManager->ensureVRR(m_self.lock()); // verify last mon valid bool found = false; @@ -242,63 +242,63 @@ void CMonitor::onConnect(bool noRule) { } } - Debug::log(LOG, "checking if we have seen this monitor before: {}", szName); + Debug::log(LOG, "checking if we have seen this monitor before: {}", m_name); // if we saw this monitor before, set it to the workspace it was on - if (g_pCompositor->m_seenMonitorWorkspaceMap.contains(szName)) { - auto workspaceID = g_pCompositor->m_seenMonitorWorkspaceMap[szName]; - Debug::log(LOG, "Monitor {} was on workspace {}, setting it to that", szName, workspaceID); + if (g_pCompositor->m_seenMonitorWorkspaceMap.contains(m_name)) { + auto workspaceID = g_pCompositor->m_seenMonitorWorkspaceMap[m_name]; + Debug::log(LOG, "Monitor {} was on workspace {}, setting it to that", m_name, workspaceID); auto ws = g_pCompositor->getWorkspaceByID(workspaceID); if (ws) { - g_pCompositor->moveWorkspaceToMonitor(ws, self.lock()); + g_pCompositor->moveWorkspaceToMonitor(ws, m_self.lock()); changeWorkspace(ws, true, false, false); } } else - Debug::log(LOG, "Monitor {} was not on any workspace", szName); + Debug::log(LOG, "Monitor {} was not on any workspace", m_name); if (!found) - g_pCompositor->setActiveMonitor(self.lock()); + g_pCompositor->setActiveMonitor(m_self.lock()); - renderTimer = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, ratHandler, this); + m_renderTimer = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, ratHandler, this); - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEW_MONITOR); + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_NEW_MONITOR); - PROTO::gamma->applyGammaToState(self.lock()); + PROTO::gamma->applyGammaToState(m_self.lock()); - events.connect.emit(); + m_events.connect.emit(); - g_pEventManager->postEvent(SHyprIPCEvent{"monitoradded", szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"monitoraddedv2", std::format("{},{},{}", ID, szName, szShortDescription)}); - EMIT_HOOK_EVENT("monitorAdded", self.lock()); + g_pEventManager->postEvent(SHyprIPCEvent{"monitoradded", m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"monitoraddedv2", std::format("{},{},{}", m_id, m_name, m_shortDescription)}); + EMIT_HOOK_EVENT("monitorAdded", m_self.lock()); } void CMonitor::onDisconnect(bool destroy) { - EMIT_HOOK_EVENT("preMonitorRemoved", self.lock()); + EMIT_HOOK_EVENT("preMonitorRemoved", m_self.lock()); CScopeGuard x = {[this]() { if (g_pCompositor->m_isShuttingDown) return; - g_pEventManager->postEvent(SHyprIPCEvent{"monitorremoved", szName}); - EMIT_HOOK_EVENT("monitorRemoved", self.lock()); + g_pEventManager->postEvent(SHyprIPCEvent{"monitorremoved", m_name}); + EMIT_HOOK_EVENT("monitorRemoved", m_self.lock()); g_pCompositor->arrangeMonitors(); }}; - if (renderTimer) { - wl_event_source_remove(renderTimer); - renderTimer = nullptr; + if (m_renderTimer) { + wl_event_source_remove(m_renderTimer); + m_renderTimer = nullptr; } - if (!m_bEnabled || g_pCompositor->m_isShuttingDown) + if (!m_enabled || g_pCompositor->m_isShuttingDown) return; - Debug::log(LOG, "onDisconnect called for {}", output->name); + Debug::log(LOG, "onDisconnect called for {}", m_output->name); - events.disconnect.emit(); + m_events.disconnect.emit(); if (g_pHyprOpenGL) - g_pHyprOpenGL->destroyMonitorResources(self); + g_pHyprOpenGL->destroyMonitorResources(m_self); // record what workspace this monitor was on - if (activeWorkspace) { - Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", szName, activeWorkspace->m_id); - g_pCompositor->m_seenMonitorWorkspaceMap[szName] = activeWorkspace->m_id; + if (m_activeWorkspace) { + Debug::log(LOG, "Disconnecting Monitor {} was on workspace {}", m_name, m_activeWorkspace->m_id); + g_pCompositor->m_seenMonitorWorkspaceMap[m_name] = m_activeWorkspace->m_id; } // Cleanup everything. Move windows back, snap cursor, shit. @@ -311,58 +311,58 @@ void CMonitor::onDisconnect(bool destroy) { } // remove mirror - if (pMirrorOf) { - pMirrorOf->mirrors.erase(std::find_if(pMirrorOf->mirrors.begin(), pMirrorOf->mirrors.end(), [&](const auto& other) { return other == self; })); + if (m_mirrorOf) { + m_mirrorOf->m_mirrors.erase(std::find_if(m_mirrorOf->m_mirrors.begin(), m_mirrorOf->m_mirrors.end(), [&](const auto& other) { return other == m_self; })); // unlock software for mirrored monitor - g_pPointerManager->unlockSoftwareForMonitor(pMirrorOf.lock()); - pMirrorOf.reset(); + g_pPointerManager->unlockSoftwareForMonitor(m_mirrorOf.lock()); + m_mirrorOf.reset(); } - if (!mirrors.empty()) { - for (auto const& m : mirrors) { + if (!m_mirrors.empty()) { + for (auto const& m : m_mirrors) { m->setMirror(""); } g_pConfigManager->m_wantsMonitorReload = true; } - listeners.frame.reset(); - listeners.presented.reset(); - listeners.needsFrame.reset(); - listeners.commit.reset(); + m_listeners.frame.reset(); + m_listeners.presented.reset(); + m_listeners.needsFrame.reset(); + m_listeners.commit.reset(); for (size_t i = 0; i < 4; ++i) { - for (auto const& ls : m_aLayerSurfaceLayers[i]) { + for (auto const& ls : m_layerSurfaceLayers[i]) { if (ls->m_layerSurface && !ls->m_fadingOut) ls->m_layerSurface->sendClosed(); } - m_aLayerSurfaceLayers[i].clear(); + m_layerSurfaceLayers[i].clear(); } - Debug::log(LOG, "Removed monitor {}!", szName); + Debug::log(LOG, "Removed monitor {}!", m_name); if (!BACKUPMON) { Debug::log(WARN, "Unplugged last monitor, entering an unsafe state. Good luck my friend."); g_pCompositor->enterUnsafeState(); } - m_bEnabled = false; - m_bRenderingInitPassed = false; + m_enabled = false; + m_renderingInitPassed = false; if (BACKUPMON) { // snap cursor - g_pCompositor->warpCursorTo(BACKUPMON->vecPosition + BACKUPMON->vecTransformedSize / 2.F, true); + g_pCompositor->warpCursorTo(BACKUPMON->m_position + BACKUPMON->m_transformedSize / 2.F, true); // move workspaces std::vector wspToMove; for (auto const& w : g_pCompositor->m_workspaces) { - if (w->m_monitor == self || !w->m_monitor) + if (w->m_monitor == m_self || !w->m_monitor) wspToMove.push_back(w); } for (auto const& w : wspToMove) { - w->m_lastMonitor = szName; + w->m_lastMonitor = m_name; g_pCompositor->moveWorkspaceToMonitor(w, BACKUPMON); w->startAnim(true, true, true); } @@ -372,28 +372,28 @@ void CMonitor::onDisconnect(bool destroy) { g_pCompositor->m_lastMonitor.reset(); } - if (activeWorkspace) - activeWorkspace->m_visible = false; - activeWorkspace.reset(); + if (m_activeWorkspace) + m_activeWorkspace->m_visible = false; + m_activeWorkspace.reset(); - output->state->resetExplicitFences(); - output->state->setAdaptiveSync(false); - output->state->setEnabled(false); + m_output->state->resetExplicitFences(); + m_output->state->setAdaptiveSync(false); + m_output->state->setEnabled(false); - if (!state.commit()) + if (!m_state.commit()) Debug::log(WARN, "state.commit() failed in CMonitor::onDisconnect"); - if (g_pCompositor->m_lastMonitor == self) + if (g_pCompositor->m_lastMonitor == m_self) g_pCompositor->setActiveMonitor(BACKUPMON ? BACKUPMON : g_pCompositor->m_unsafeOutput.lock()); - if (g_pHyprRenderer->m_pMostHzMonitor == self) { + if (g_pHyprRenderer->m_pMostHzMonitor == m_self) { int mostHz = 0; PHLMONITOR pMonitorMostHz = nullptr; for (auto const& m : g_pCompositor->m_monitors) { - if (m->refreshRate > mostHz && m != self) { + if (m->m_refreshRate > mostHz && m != m_self) { pMonitorMostHz = m; - mostHz = m->refreshRate; + mostHz = m->m_refreshRate; } } @@ -406,44 +406,44 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { static auto PDISABLESCALECHECKS = CConfigValue("debug:disable_scale_checks"); - Debug::log(LOG, "Applying monitor rule for {}", szName); + Debug::log(LOG, "Applying monitor rule for {}", m_name); - activeMonitorRule = *pMonitorRule; + m_activeMonitorRule = *pMonitorRule; - if (forceSize.has_value()) - activeMonitorRule.resolution = forceSize.value(); + if (m_forceSize.has_value()) + m_activeMonitorRule.resolution = m_forceSize.value(); - const auto RULE = &activeMonitorRule; + const auto RULE = &m_activeMonitorRule; // if it's disabled, disable and ignore if (RULE->disabled) { - if (m_bEnabled) + if (m_enabled) onDisconnect(); - events.modeChanged.emit(); + m_events.modeChanged.emit(); return true; } // don't touch VR headsets - if (output->nonDesktop) + if (m_output->nonDesktop) return true; - if (!m_bEnabled) { + if (!m_enabled) { onConnect(true); // enable it. - Debug::log(LOG, "Monitor {} is disabled but is requested to be enabled", szName); + Debug::log(LOG, "Monitor {} is disabled but is requested to be enabled", m_name); force = true; } // Check if the rule isn't already applied // TODO: clean this up lol - if (!force && DELTALESSTHAN(vecPixelSize.x, RULE->resolution.x, 1) && DELTALESSTHAN(vecPixelSize.y, RULE->resolution.y, 1) && - DELTALESSTHAN(refreshRate, RULE->refreshRate, 1) && setScale == RULE->scale && - ((DELTALESSTHAN(vecPosition.x, RULE->offset.x, 1) && DELTALESSTHAN(vecPosition.y, RULE->offset.y, 1)) || RULE->offset == Vector2D(-INT32_MAX, -INT32_MAX)) && - transform == RULE->transform && RULE->enable10bit == enabled10bit && RULE->cmType == cmType && RULE->sdrSaturation == sdrSaturation && - RULE->sdrBrightness == sdrBrightness && !std::memcmp(&customDrmMode, &RULE->drmMode, sizeof(customDrmMode))) { + if (!force && DELTALESSTHAN(m_pixelSize.x, RULE->resolution.x, 1) && DELTALESSTHAN(m_pixelSize.y, RULE->resolution.y, 1) && + DELTALESSTHAN(m_refreshRate, RULE->refreshRate, 1) && m_setScale == RULE->scale && + ((DELTALESSTHAN(m_position.x, RULE->offset.x, 1) && DELTALESSTHAN(m_position.y, RULE->offset.y, 1)) || RULE->offset == Vector2D(-INT32_MAX, -INT32_MAX)) && + m_transform == RULE->transform && RULE->enable10bit == m_enabled10bit && RULE->cmType == m_cmType && RULE->sdrSaturation == m_sdrSaturation && + RULE->sdrBrightness == m_sdrBrightness && !std::memcmp(&m_customDrmMode, &RULE->drmMode, sizeof(m_customDrmMode))) { - Debug::log(LOG, "Not applying a new rule to {} because it's already applied!", szName); + Debug::log(LOG, "Not applying a new rule to {} because it's already applied!", m_name); setMirror(RULE->mirrorOf); @@ -453,15 +453,15 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { bool autoScale = false; if (RULE->scale > 0.1) { - scale = RULE->scale; + m_scale = RULE->scale; } else { autoScale = true; const auto DEFAULTSCALE = getDefaultScale(); - scale = DEFAULTSCALE; + m_scale = DEFAULTSCALE; } - setScale = scale; - transform = RULE->transform; + m_setScale = m_scale; + m_transform = RULE->transform; // accumulate requested modes in reverse order (cause inesrting at front is inefficient) std::vector> requestedModes; @@ -469,7 +469,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { // use sortFunc, add best 3 to requestedModes in reverse, since we test in reverse auto addBest3Modes = [&](auto const& sortFunc) { - auto sortedModes = output->modes; + auto sortedModes = m_output->modes; std::ranges::sort(sortedModes, sortFunc); if (sortedModes.size() > 3) sortedModes.erase(sortedModes.begin() + 3, sortedModes.end()); @@ -477,22 +477,22 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { }; // last fallback is always preferred mode - if (!output->preferredMode()) - Debug::log(ERR, "Monitor {} has NO PREFERRED MODE", output->name); + if (!m_output->preferredMode()) + Debug::log(ERR, "Monitor {} has NO PREFERRED MODE", m_output->name); else - requestedModes.push_back(output->preferredMode()); + requestedModes.push_back(m_output->preferredMode()); if (RULE->resolution == Vector2D()) { requestedStr = "preferred"; // fallback to first 3 modes if preferred fails/doesn't exist - requestedModes = output->modes; + requestedModes = m_output->modes; if (requestedModes.size() > 3) requestedModes.erase(requestedModes.begin() + 3, requestedModes.end()); std::ranges::reverse(requestedModes.begin(), requestedModes.end()); - if (output->preferredMode()) - requestedModes.push_back(output->preferredMode()); + if (m_output->preferredMode()) + requestedModes.push_back(m_output->preferredMode()); } else if (RULE->resolution == Vector2D(-1, -1)) { requestedStr = "highrr"; @@ -541,7 +541,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { // then if requested is custom, try custom mode first if (RULE->drmMode.type == DRM_MODE_TYPE_USERDEF) { - if (output->getBackend()->type() != Aquamarine::eBackendType::AQ_BACKEND_DRM) + if (m_output->getBackend()->type() != Aquamarine::eBackendType::AQ_BACKEND_DRM) Debug::log(ERR, "Tried to set custom modeline on non-DRM output"); else requestedModes.push_back(makeShared( @@ -549,21 +549,21 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { } } - const auto WAS10B = enabled10bit; - const auto OLDRES = vecPixelSize; + const auto WAS10B = m_enabled10bit; + const auto OLDRES = m_pixelSize; bool success = false; // Needed in case we are switching from a custom modeline to a standard mode - customDrmMode = {}; - currentMode = nullptr; + m_customDrmMode = {}; + m_currentMode = nullptr; - output->state->setFormat(DRM_FORMAT_XRGB8888); - prevDrmFormat = drmFormat; - drmFormat = DRM_FORMAT_XRGB8888; - output->state->resetExplicitFences(); + m_output->state->setFormat(DRM_FORMAT_XRGB8888); + m_prevDrmFormat = m_drmFormat; + m_drmFormat = DRM_FORMAT_XRGB8888; + m_output->state->resetExplicitFences(); if (Debug::m_trace) { - Debug::log(TRACE, "Monitor {} requested modes:", szName); + Debug::log(TRACE, "Monitor {} requested modes:", m_name); if (requestedModes.empty()) Debug::log(TRACE, "| None"); else { @@ -577,81 +577,81 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { std::string modeStr = std::format("{:X0}@{:.2f}Hz", mode->pixelSize, mode->refreshRate / 1000.f); if (mode->modeInfo.has_value() && mode->modeInfo->type == DRM_MODE_TYPE_USERDEF) { - output->state->setCustomMode(mode); + m_output->state->setCustomMode(mode); - if (!state.test()) { - Debug::log(ERR, "Monitor {}: REJECTED custom mode {}!", szName, modeStr); + if (!m_state.test()) { + Debug::log(ERR, "Monitor {}: REJECTED custom mode {}!", m_name, modeStr); continue; } - customDrmMode = mode->modeInfo.value(); + m_customDrmMode = mode->modeInfo.value(); } else { - output->state->setMode(mode); + m_output->state->setMode(mode); - if (!state.test()) { - Debug::log(ERR, "Monitor {}: REJECTED available mode {}!", szName, modeStr); + if (!m_state.test()) { + Debug::log(ERR, "Monitor {}: REJECTED available mode {}!", m_name, modeStr); if (mode->preferred) - Debug::log(ERR, "Monitor {}: REJECTED preferred mode!!!", szName); + Debug::log(ERR, "Monitor {}: REJECTED preferred mode!!!", m_name); continue; } - customDrmMode = {}; + m_customDrmMode = {}; } - refreshRate = mode->refreshRate / 1000.f; - vecSize = mode->pixelSize; - currentMode = mode; + m_refreshRate = mode->refreshRate / 1000.f; + m_size = mode->pixelSize; + m_currentMode = mode; success = true; if (mode->preferred) - Debug::log(LOG, "Monitor {}: requested {}, using preferred mode {}", szName, requestedStr, modeStr); + Debug::log(LOG, "Monitor {}: requested {}, using preferred mode {}", m_name, requestedStr, modeStr); else if (mode->modeInfo.has_value() && mode->modeInfo->type == DRM_MODE_TYPE_USERDEF) - Debug::log(LOG, "Monitor {}: requested {}, using custom mode {}", szName, requestedStr, modeStr); + Debug::log(LOG, "Monitor {}: requested {}, using custom mode {}", m_name, requestedStr, modeStr); else - Debug::log(LOG, "Monitor {}: requested {}, using available mode {}", szName, requestedStr, modeStr); + Debug::log(LOG, "Monitor {}: requested {}, using available mode {}", m_name, requestedStr, modeStr); break; } // try requested as custom mode jic it works if (!success && RULE->resolution != Vector2D() && RULE->resolution != Vector2D(-1, -1) && RULE->resolution != Vector2D(-1, -2)) { - auto refreshRate = output->getBackend()->type() == Aquamarine::eBackendType::AQ_BACKEND_DRM ? RULE->refreshRate * 1000 : 0; + auto refreshRate = m_output->getBackend()->type() == Aquamarine::eBackendType::AQ_BACKEND_DRM ? RULE->refreshRate * 1000 : 0; auto mode = makeShared(Aquamarine::SOutputMode{.pixelSize = RULE->resolution, .refreshRate = refreshRate}); std::string modeStr = std::format("{:X0}@{:.2f}Hz", mode->pixelSize, mode->refreshRate / 1000.f); - output->state->setCustomMode(mode); + m_output->state->setCustomMode(mode); - if (state.test()) { - Debug::log(LOG, "Monitor {}: requested {}, using custom mode {}", szName, requestedStr, modeStr); + if (m_state.test()) { + Debug::log(LOG, "Monitor {}: requested {}, using custom mode {}", m_name, requestedStr, modeStr); - refreshRate = mode->refreshRate / 1000.f; - vecSize = mode->pixelSize; - currentMode = mode; - customDrmMode = {}; + refreshRate = mode->refreshRate / 1000.f; + m_size = mode->pixelSize; + m_currentMode = mode; + m_customDrmMode = {}; success = true; } else - Debug::log(ERR, "Monitor {}: REJECTED custom mode {}!", szName, modeStr); + Debug::log(ERR, "Monitor {}: REJECTED custom mode {}!", m_name, modeStr); } // try any of the modes if none of the above work if (!success) { - for (auto const& mode : output->modes) { - output->state->setMode(mode); + for (auto const& mode : m_output->modes) { + m_output->state->setMode(mode); - if (!state.test()) + if (!m_state.test()) continue; auto errorMessage = - std::format("Monitor {} failed to set any requested modes, falling back to mode {:X0}@{:.2f}Hz", szName, mode->pixelSize, mode->refreshRate / 1000.f); + std::format("Monitor {} failed to set any requested modes, falling back to mode {:X0}@{:.2f}Hz", m_name, mode->pixelSize, mode->refreshRate / 1000.f); Debug::log(WARN, errorMessage); g_pHyprNotificationOverlay->addNotification(errorMessage, CHyprColor(0xff0000ff), 5000, ICON_WARNING); - refreshRate = mode->refreshRate / 1000.f; - vecSize = mode->pixelSize; - currentMode = mode; - customDrmMode = {}; + m_refreshRate = mode->refreshRate / 1000.f; + m_size = mode->pixelSize; + m_currentMode = mode; + m_customDrmMode = {}; success = true; @@ -660,14 +660,14 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { } if (!success) { - Debug::log(ERR, "Monitor {} has NO FALLBACK MODES, and an INVALID one was requested: {:X0}@{:.2f}Hz", szName, RULE->resolution, RULE->refreshRate); + Debug::log(ERR, "Monitor {} has NO FALLBACK MODES, and an INVALID one was requested: {:X0}@{:.2f}Hz", m_name, RULE->resolution, RULE->refreshRate); return true; } - vrrActive = output->state->state().adaptiveSync // disabled here, will be tested in CConfigManager::ensureVRR() - || createdByUser; // wayland backend doesn't allow for disabling adaptive_sync + m_vrrActive = m_output->state->state().adaptiveSync // disabled here, will be tested in CConfigManager::ensureVRR() + || m_createdByUser; // wayland backend doesn't allow for disabling adaptive_sync - vecPixelSize = vecSize; + m_pixelSize = m_size; // clang-format off static const std::array>, 2> formats{ @@ -683,102 +683,102 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { bool set10bit = false; for (auto const& fmt : formats[(int)!RULE->enable10bit]) { - output->state->setFormat(fmt.second); - prevDrmFormat = drmFormat; - drmFormat = fmt.second; + m_output->state->setFormat(fmt.second); + m_prevDrmFormat = m_drmFormat; + m_drmFormat = fmt.second; - if (!state.test()) { - Debug::log(ERR, "output {} failed basic test on format {}", szName, fmt.first); + if (!m_state.test()) { + Debug::log(ERR, "output {} failed basic test on format {}", m_name, fmt.first); } else { - Debug::log(LOG, "output {} succeeded basic test on format {}", szName, fmt.first); + Debug::log(LOG, "output {} succeeded basic test on format {}", m_name, fmt.first); if (RULE->enable10bit && fmt.first.contains("101010")) set10bit = true; break; } } - enabled10bit = set10bit; + m_enabled10bit = set10bit; - auto oldImageDescription = imageDescription; - cmType = RULE->cmType; - switch (cmType) { - case CM_AUTO: cmType = enabled10bit && output->parsedEDID.supportsBT2020 ? CM_WIDE : CM_SRGB; break; - case CM_EDID: cmType = output->parsedEDID.chromaticityCoords.has_value() ? CM_EDID : CM_SRGB; break; + auto oldImageDescription = m_imageDescription; + m_cmType = RULE->cmType; + switch (m_cmType) { + case CM_AUTO: m_cmType = m_enabled10bit && m_output->parsedEDID.supportsBT2020 ? CM_WIDE : CM_SRGB; break; + case CM_EDID: m_cmType = m_output->parsedEDID.chromaticityCoords.has_value() ? CM_EDID : CM_SRGB; break; case CM_HDR: case CM_HDR_EDID: - cmType = output->parsedEDID.supportsBT2020 && output->parsedEDID.hdrMetadata.has_value() && output->parsedEDID.hdrMetadata->supportsPQ ? cmType : CM_SRGB; + m_cmType = m_output->parsedEDID.supportsBT2020 && m_output->parsedEDID.hdrMetadata.has_value() && m_output->parsedEDID.hdrMetadata->supportsPQ ? m_cmType : CM_SRGB; break; default: break; } - switch (cmType) { - case CM_SRGB: imageDescription = {}; break; // assumes SImageDescirption defaults to sRGB + switch (m_cmType) { + case CM_SRGB: m_imageDescription = {}; break; // assumes SImageDescirption defaults to sRGB case CM_WIDE: - imageDescription = {.primariesNameSet = true, - .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, - .primaries = NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020)}; + m_imageDescription = {.primariesNameSet = true, + .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, + .primaries = NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020)}; break; case CM_EDID: - imageDescription = {.primariesNameSet = false, - .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, - .primaries = { - .red = {.x = output->parsedEDID.chromaticityCoords->red.x, .y = output->parsedEDID.chromaticityCoords->red.y}, - .green = {.x = output->parsedEDID.chromaticityCoords->green.x, .y = output->parsedEDID.chromaticityCoords->green.y}, - .blue = {.x = output->parsedEDID.chromaticityCoords->blue.x, .y = output->parsedEDID.chromaticityCoords->blue.y}, - .white = {.x = output->parsedEDID.chromaticityCoords->white.x, .y = output->parsedEDID.chromaticityCoords->white.y}, - }}; + m_imageDescription = {.primariesNameSet = false, + .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, + .primaries = { + .red = {.x = m_output->parsedEDID.chromaticityCoords->red.x, .y = m_output->parsedEDID.chromaticityCoords->red.y}, + .green = {.x = m_output->parsedEDID.chromaticityCoords->green.x, .y = m_output->parsedEDID.chromaticityCoords->green.y}, + .blue = {.x = m_output->parsedEDID.chromaticityCoords->blue.x, .y = m_output->parsedEDID.chromaticityCoords->blue.y}, + .white = {.x = m_output->parsedEDID.chromaticityCoords->white.x, .y = m_output->parsedEDID.chromaticityCoords->white.y}, + }}; break; case CM_HDR: - imageDescription = {.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ, - .primariesNameSet = true, - .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, - .primaries = NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020), - .luminances = {.min = 0, .max = 10000, .reference = 203}}; + m_imageDescription = {.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ, + .primariesNameSet = true, + .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, + .primaries = NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020), + .luminances = {.min = 0, .max = 10000, .reference = 203}}; break; case CM_HDR_EDID: - imageDescription = {.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ, - .primariesNameSet = false, - .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, - .primaries = output->parsedEDID.chromaticityCoords.has_value() ? - NColorManagement::SPCPRimaries{ - .red = {.x = output->parsedEDID.chromaticityCoords->red.x, .y = output->parsedEDID.chromaticityCoords->red.y}, - .green = {.x = output->parsedEDID.chromaticityCoords->green.x, .y = output->parsedEDID.chromaticityCoords->green.y}, - .blue = {.x = output->parsedEDID.chromaticityCoords->blue.x, .y = output->parsedEDID.chromaticityCoords->blue.y}, - .white = {.x = output->parsedEDID.chromaticityCoords->white.x, .y = output->parsedEDID.chromaticityCoords->white.y}, - } : - NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020), - .luminances = {.min = output->parsedEDID.hdrMetadata->desiredContentMinLuminance, - .max = output->parsedEDID.hdrMetadata->desiredContentMaxLuminance, - .reference = output->parsedEDID.hdrMetadata->desiredMaxFrameAverageLuminance}}; + m_imageDescription = {.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ, + .primariesNameSet = false, + .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020, + .primaries = m_output->parsedEDID.chromaticityCoords.has_value() ? + NColorManagement::SPCPRimaries{ + .red = {.x = m_output->parsedEDID.chromaticityCoords->red.x, .y = m_output->parsedEDID.chromaticityCoords->red.y}, + .green = {.x = m_output->parsedEDID.chromaticityCoords->green.x, .y = m_output->parsedEDID.chromaticityCoords->green.y}, + .blue = {.x = m_output->parsedEDID.chromaticityCoords->blue.x, .y = m_output->parsedEDID.chromaticityCoords->blue.y}, + .white = {.x = m_output->parsedEDID.chromaticityCoords->white.x, .y = m_output->parsedEDID.chromaticityCoords->white.y}, + } : + NColorManagement::getPrimaries(NColorManagement::CM_PRIMARIES_BT2020), + .luminances = {.min = m_output->parsedEDID.hdrMetadata->desiredContentMinLuminance, + .max = m_output->parsedEDID.hdrMetadata->desiredContentMaxLuminance, + .reference = m_output->parsedEDID.hdrMetadata->desiredMaxFrameAverageLuminance}}; break; default: UNREACHABLE(); } - if (oldImageDescription != imageDescription) - PROTO::colorManagement->onMonitorImageDescriptionChanged(self); + if (oldImageDescription != m_imageDescription) + PROTO::colorManagement->onMonitorImageDescriptionChanged(m_self); - sdrSaturation = RULE->sdrSaturation; - sdrBrightness = RULE->sdrBrightness; + m_sdrSaturation = RULE->sdrSaturation; + m_sdrBrightness = RULE->sdrBrightness; - Vector2D logicalSize = vecPixelSize / scale; + Vector2D logicalSize = m_pixelSize / m_scale; if (!*PDISABLESCALECHECKS && (logicalSize.x != std::round(logicalSize.x) || logicalSize.y != std::round(logicalSize.y))) { // invalid scale, will produce fractional pixels. // find the nearest valid. - float searchScale = std::round(scale * 120.0); + float searchScale = std::round(m_scale * 120.0); bool found = false; double scaleZero = searchScale / 120.0; - Vector2D logicalZero = vecPixelSize / scaleZero; + Vector2D logicalZero = m_pixelSize / scaleZero; if (logicalZero == logicalZero.round()) - scale = scaleZero; + m_scale = scaleZero; else { for (size_t i = 1; i < 90; ++i) { double scaleUp = (searchScale + i) / 120.0; double scaleDown = (searchScale - i) / 120.0; - Vector2D logicalUp = vecPixelSize / scaleUp; - Vector2D logicalDown = vecPixelSize / scaleDown; + Vector2D logicalUp = m_pixelSize / scaleUp; + Vector2D logicalDown = m_pixelSize / scaleDown; if (logicalUp == logicalUp.round()) { found = true; @@ -794,48 +794,48 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { if (!found) { if (autoScale) - scale = std::round(scaleZero); + m_scale = std::round(scaleZero); else { - Debug::log(ERR, "Invalid scale passed to monitor, {} failed to find a clean divisor", scale); - g_pConfigManager->addParseError("Invalid scale passed to monitor " + szName + ", failed to find a clean divisor"); - scale = getDefaultScale(); + Debug::log(ERR, "Invalid scale passed to monitor, {} failed to find a clean divisor", m_scale); + g_pConfigManager->addParseError("Invalid scale passed to monitor " + m_name + ", failed to find a clean divisor"); + m_scale = getDefaultScale(); } } else { if (!autoScale) { - Debug::log(ERR, "Invalid scale passed to monitor, {} found suggestion {}", scale, searchScale); + Debug::log(ERR, "Invalid scale passed to monitor, {} found suggestion {}", m_scale, searchScale); g_pConfigManager->addParseError( - std::format("Invalid scale passed to monitor {}, failed to find a clean divisor. Suggested nearest scale: {:5f}", szName, searchScale)); - scale = getDefaultScale(); + std::format("Invalid scale passed to monitor {}, failed to find a clean divisor. Suggested nearest scale: {:5f}", m_name, searchScale)); + m_scale = getDefaultScale(); } else - scale = searchScale; + m_scale = searchScale; } } } - output->scheduleFrame(); + m_output->scheduleFrame(); - if (!state.commit()) - Debug::log(ERR, "Couldn't commit output named {}", output->name); + if (!m_state.commit()) + Debug::log(ERR, "Couldn't commit output named {}", m_output->name); - Vector2D xfmd = transform % 2 == 1 ? Vector2D{vecPixelSize.y, vecPixelSize.x} : vecPixelSize; - vecSize = (xfmd / scale).round(); - vecTransformedSize = xfmd; + Vector2D xfmd = m_transform % 2 == 1 ? Vector2D{m_pixelSize.y, m_pixelSize.x} : m_pixelSize; + m_size = (xfmd / m_scale).round(); + m_transformedSize = xfmd; - if (createdByUser) { - CBox transformedBox = {0, 0, vecTransformedSize.x, vecTransformedSize.y}; - transformedBox.transform(wlTransformToHyprutils(invertTransform(transform)), vecTransformedSize.x, vecTransformedSize.y); + if (m_createdByUser) { + CBox transformedBox = {0, 0, m_transformedSize.x, m_transformedSize.y}; + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_transform)), m_transformedSize.x, m_transformedSize.y); - vecPixelSize = Vector2D(transformedBox.width, transformedBox.height); + m_pixelSize = Vector2D(transformedBox.width, transformedBox.height); } updateMatrix(); - if (WAS10B != enabled10bit || OLDRES != vecPixelSize) - g_pHyprOpenGL->destroyMonitorResources(self); + if (WAS10B != m_enabled10bit || OLDRES != m_pixelSize) + g_pHyprOpenGL->destroyMonitorResources(m_self); g_pCompositor->arrangeMonitors(); - damage.setSize(vecTransformedSize); + m_damage.setSize(m_transformedSize); // Set scale for all surfaces on this monitor, needed for some clients // but not on unsafe state to avoid crashes @@ -845,28 +845,28 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { } } // updato us - g_pHyprRenderer->arrangeLayersForMonitor(ID); + g_pHyprRenderer->arrangeLayersForMonitor(m_id); // reload to fix mirrors g_pConfigManager->m_wantsMonitorReload = true; - Debug::log(LOG, "Monitor {} data dump: res {:X}@{:.2f}Hz, scale {:.2f}, transform {}, pos {:X}, 10b {}", szName, vecPixelSize, refreshRate, scale, (int)transform, vecPosition, - (int)enabled10bit); + Debug::log(LOG, "Monitor {} data dump: res {:X}@{:.2f}Hz, scale {:.2f}, transform {}, pos {:X}, 10b {}", m_name, m_pixelSize, m_refreshRate, m_scale, (int)m_transform, + m_position, (int)m_enabled10bit); EMIT_HOOK_EVENT("monitorLayoutChanged", nullptr); - events.modeChanged.emit(); + m_events.modeChanged.emit(); return true; } void CMonitor::addDamage(const pixman_region32_t* rg) { static auto PZOOMFACTOR = CConfigValue("cursor:zoom_factor"); - if (*PZOOMFACTOR != 1.f && g_pCompositor->getMonitorFromCursor() == self) { - damage.damageEntire(); - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); - } else if (damage.damage(rg)) - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); + if (*PZOOMFACTOR != 1.f && g_pCompositor->getMonitorFromCursor() == m_self) { + m_damage.damageEntire(); + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); + } else if (m_damage.damage(rg)) + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); } void CMonitor::addDamage(const CRegion& rg) { @@ -875,13 +875,13 @@ void CMonitor::addDamage(const CRegion& rg) { void CMonitor::addDamage(const CBox& box) { static auto PZOOMFACTOR = CConfigValue("cursor:zoom_factor"); - if (*PZOOMFACTOR != 1.f && g_pCompositor->getMonitorFromCursor() == self) { - damage.damageEntire(); - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); + if (*PZOOMFACTOR != 1.f && g_pCompositor->getMonitorFromCursor() == m_self) { + m_damage.damageEntire(); + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); } - if (damage.damage(box)) - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); + if (m_damage.damage(box)) + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::AQ_SCHEDULE_DAMAGE); } bool CMonitor::shouldSkipScheduleFrameOnMouseEvent() { @@ -889,13 +889,13 @@ bool CMonitor::shouldSkipScheduleFrameOnMouseEvent() { static auto PMINRR = CConfigValue("cursor:min_refresh_rate"); // skip scheduling extra frames for fullsreen apps with vrr - const bool shouldSkip = activeWorkspace && activeWorkspace->m_hasFullscreenWindow && activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && - (*PNOBREAK == 1 || (*PNOBREAK == 2 && activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && output->state->state().adaptiveSync; + const bool shouldSkip = m_activeWorkspace && m_activeWorkspace->m_hasFullscreenWindow && m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && + (*PNOBREAK == 1 || (*PNOBREAK == 2 && m_activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && m_output->state->state().adaptiveSync; // keep requested minimum refresh rate - if (shouldSkip && *PMINRR && lastPresentationTimer.getMillis() > 1000.0f / *PMINRR) { + if (shouldSkip && *PMINRR && m_lastPresentationTimer.getMillis() > 1000.0f / *PMINRR) { // damage whole screen because some previous cursor box damages were skipped - damage.damageEntire(); + m_damage.damageEntire(); return false; } @@ -903,7 +903,7 @@ bool CMonitor::shouldSkipScheduleFrameOnMouseEvent() { } bool CMonitor::isMirror() { - return pMirrorOf != nullptr; + return m_mirrorOf != nullptr; } bool CMonitor::matchesStaticSelector(const std::string& selector) const { @@ -911,10 +911,10 @@ bool CMonitor::matchesStaticSelector(const std::string& selector) const { // match by description const auto DESCRIPTIONSELECTOR = trim(selector.substr(5)); - return szDescription.starts_with(DESCRIPTIONSELECTOR) || szShortDescription.starts_with(DESCRIPTIONSELECTOR); + return m_description.starts_with(DESCRIPTIONSELECTOR) || m_shortDescription.starts_with(DESCRIPTIONSELECTOR); } else { // match by selector - return szName == selector; + return m_name == selector; } } @@ -923,7 +923,7 @@ WORKSPACEID CMonitor::findAvailableDefaultWS() { if (g_pCompositor->getWorkspaceByID(i)) continue; - if (const auto BOUND = g_pConfigManager->getBoundMonitorStringForWS(std::to_string(i)); !BOUND.empty() && BOUND != szName) + if (const auto BOUND = g_pConfigManager->getBoundMonitorStringForWS(std::to_string(i)); !BOUND.empty() && BOUND != m_name) continue; return i; @@ -936,10 +936,10 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { // Workspace std::string newDefaultWorkspaceName = ""; int64_t wsID = WORKSPACE_INVALID; - if (g_pConfigManager->getDefaultWorkspaceFor(szName).empty()) + if (g_pConfigManager->getDefaultWorkspaceFor(m_name).empty()) wsID = findAvailableDefaultWS(); else { - const auto ws = getWorkspaceIDNameFromString(g_pConfigManager->getDefaultWorkspaceFor(szName)); + const auto ws = getWorkspaceIDNameFromString(g_pConfigManager->getDefaultWorkspaceFor(m_name)); wsID = ws.id; newDefaultWorkspaceName = ws.name; } @@ -948,7 +948,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { wsID = g_pCompositor->m_workspaces.size() + 1; newDefaultWorkspaceName = std::to_string(wsID); - Debug::log(LOG, "Invalid workspace= directive name in monitor parsing, workspace name \"{}\" is invalid.", g_pConfigManager->getDefaultWorkspaceFor(szName)); + Debug::log(LOG, "Invalid workspace= directive name in monitor parsing, workspace name \"{}\" is invalid.", g_pConfigManager->getDefaultWorkspaceFor(m_name)); } auto PNEWWORKSPACE = g_pCompositor->getWorkspaceByID(wsID); @@ -957,18 +957,18 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { if (PNEWWORKSPACE) { // workspace exists, move it to the newly connected monitor - g_pCompositor->moveWorkspaceToMonitor(PNEWWORKSPACE, self.lock()); - activeWorkspace = PNEWWORKSPACE; - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); + g_pCompositor->moveWorkspaceToMonitor(PNEWWORKSPACE, m_self.lock()); + m_activeWorkspace = PNEWWORKSPACE; + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); PNEWWORKSPACE->startAnim(true, true, true); } else { if (newDefaultWorkspaceName == "") newDefaultWorkspaceName = std::to_string(wsID); - PNEWWORKSPACE = g_pCompositor->m_workspaces.emplace_back(CWorkspace::create(wsID, self.lock(), newDefaultWorkspaceName)); + PNEWWORKSPACE = g_pCompositor->m_workspaces.emplace_back(CWorkspace::create(wsID, m_self.lock(), newDefaultWorkspaceName)); } - activeWorkspace = PNEWWORKSPACE; + m_activeWorkspace = PNEWWORKSPACE; PNEWWORKSPACE->setActive(true); PNEWWORKSPACE->m_visible = true; @@ -978,7 +978,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { void CMonitor::setMirror(const std::string& mirrorOf) { const auto PMIRRORMON = g_pCompositor->getMonitorFromString(mirrorOf); - if (PMIRRORMON == pMirrorOf) + if (PMIRRORMON == m_mirrorOf) return; if (PMIRRORMON && PMIRRORMON->isMirror()) { @@ -986,7 +986,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { return; } - if (PMIRRORMON == self) { + if (PMIRRORMON == m_self) { Debug::log(ERR, "Cannot mirror self!"); return; } @@ -994,19 +994,19 @@ void CMonitor::setMirror(const std::string& mirrorOf) { if (!PMIRRORMON) { // disable mirroring - if (pMirrorOf) { - pMirrorOf->mirrors.erase(std::find_if(pMirrorOf->mirrors.begin(), pMirrorOf->mirrors.end(), [&](const auto& other) { return other == self; })); + if (m_mirrorOf) { + m_mirrorOf->m_mirrors.erase(std::find_if(m_mirrorOf->m_mirrors.begin(), m_mirrorOf->m_mirrors.end(), [&](const auto& other) { return other == m_self; })); // unlock software for mirrored monitor - g_pPointerManager->unlockSoftwareForMonitor(pMirrorOf.lock()); + g_pPointerManager->unlockSoftwareForMonitor(m_mirrorOf.lock()); } - pMirrorOf.reset(); + m_mirrorOf.reset(); // set rule - const auto RULE = g_pConfigManager->getMonitorRuleFor(self.lock()); + const auto RULE = g_pConfigManager->getMonitorRuleFor(m_self.lock()); - vecPosition = RULE.offset; + m_position = RULE.offset; // push to mvmonitors @@ -1014,7 +1014,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { // find the wrap for (auto& m : g_pCompositor->m_realMonitors) { - if (m->ID == ID) { + if (m->m_id == m_id) { thisWrapper = &m; break; } @@ -1041,7 +1041,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { // move all the WS std::vector wspToMove; for (auto const& w : g_pCompositor->m_workspaces) { - if (w->m_monitor == self || !w->m_monitor) + if (w->m_monitor == m_self || !w->m_monitor) wspToMove.push_back(w); } @@ -1050,16 +1050,16 @@ void CMonitor::setMirror(const std::string& mirrorOf) { w->startAnim(true, true, true); } - activeWorkspace.reset(); + m_activeWorkspace.reset(); - vecPosition = PMIRRORMON->vecPosition; + m_position = PMIRRORMON->m_position; - pMirrorOf = PMIRRORMON; + m_mirrorOf = PMIRRORMON; - pMirrorOf->mirrors.push_back(self); + m_mirrorOf->m_mirrors.push_back(m_self); // remove from mvmonitors - std::erase_if(g_pCompositor->m_monitors, [&](const auto& other) { return other == self; }); + std::erase_if(g_pCompositor->m_monitors, [&](const auto& other) { return other == m_self; }); g_pCompositor->arrangeMonitors(); @@ -1071,17 +1071,17 @@ void CMonitor::setMirror(const std::string& mirrorOf) { g_pPointerManager->lockSoftwareForMonitor(PMIRRORMON); } - events.modeChanged.emit(); + m_events.modeChanged.emit(); } float CMonitor::getDefaultScale() { - if (!m_bEnabled) + if (!m_enabled) return 1; static constexpr double MMPERINCH = 25.4; - const auto DIAGONALPX = sqrt(pow(vecPixelSize.x, 2) + pow(vecPixelSize.y, 2)); - const auto DIAGONALIN = sqrt(pow(output->physicalSize.x / MMPERINCH, 2) + pow(output->physicalSize.y / MMPERINCH, 2)); + const auto DIAGONALPX = sqrt(pow(m_pixelSize.x, 2) + pow(m_pixelSize.y, 2)); + const auto DIAGONALIN = sqrt(pow(m_output->physicalSize.x / MMPERINCH, 2) + pow(m_output->physicalSize.y / MMPERINCH, 2)); const auto PPI = DIAGONALPX / DIAGONALIN; @@ -1097,22 +1097,22 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo return; if (pWorkspace->m_isSpecialWorkspace) { - if (activeSpecialWorkspace != pWorkspace) { + if (m_activeSpecialWorkspace != pWorkspace) { Debug::log(LOG, "changeworkspace on special, togglespecialworkspace to id {}", pWorkspace->m_id); setSpecialWorkspace(pWorkspace); } return; } - if (pWorkspace == activeWorkspace) + if (pWorkspace == m_activeWorkspace) return; - const auto POLDWORKSPACE = activeWorkspace; + const auto POLDWORKSPACE = m_activeWorkspace; if (POLDWORKSPACE) POLDWORKSPACE->m_visible = false; pWorkspace->m_visible = true; - activeWorkspace = pWorkspace; + m_activeWorkspace = pWorkspace; if (!internal) { const auto ANIMTOLEFT = POLDWORKSPACE && pWorkspace->m_id > POLDWORKSPACE->m_id; @@ -1126,8 +1126,8 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo w->moveToWorkspace(pWorkspace); } - if (!noFocus && !g_pCompositor->m_lastMonitor->activeSpecialWorkspace && - !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { + if (!noFocus && !g_pCompositor->m_lastMonitor->m_activeSpecialWorkspace && + !(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == m_self)) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); auto pWindow = pWorkspace->m_hasFullscreenWindow ? pWorkspace->getFullscreenWindow() : pWorkspace->getLastFocusedWindow(); @@ -1148,23 +1148,23 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo if (!noMouseMove) g_pInputManager->simulateMouseMovement(); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); g_pEventManager->postEvent(SHyprIPCEvent{"workspace", pWorkspace->m_name}); g_pEventManager->postEvent(SHyprIPCEvent{"workspacev2", std::format("{},{}", pWorkspace->m_id, pWorkspace->m_name)}); EMIT_HOOK_EVENT("workspace", pWorkspace); } - g_pHyprRenderer->damageMonitor(self.lock()); + g_pHyprRenderer->damageMonitor(m_self.lock()); g_pCompositor->updateFullscreenFadeOnWorkspace(pWorkspace); - g_pConfigManager->ensureVRR(self.lock()); + g_pConfigManager->ensureVRR(m_self.lock()); g_pCompositor->updateSuspendedStates(); - if (activeSpecialWorkspace) - g_pCompositor->updateFullscreenFadeOnWorkspace(activeSpecialWorkspace); + if (m_activeSpecialWorkspace) + g_pCompositor->updateFullscreenFadeOnWorkspace(m_activeSpecialWorkspace); } void CMonitor::changeWorkspace(const WORKSPACEID& id, bool internal, bool noMouseMove, bool noFocus) { @@ -1172,83 +1172,83 @@ void CMonitor::changeWorkspace(const WORKSPACEID& id, bool internal, bool noMous } void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { - if (activeSpecialWorkspace == pWorkspace) + if (m_activeSpecialWorkspace == pWorkspace) return; - g_pHyprRenderer->damageMonitor(self.lock()); + g_pHyprRenderer->damageMonitor(m_self.lock()); if (!pWorkspace) { // remove special if exists - if (activeSpecialWorkspace) { - activeSpecialWorkspace->m_visible = false; - activeSpecialWorkspace->startAnim(false, false); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", ",," + szName}); + if (m_activeSpecialWorkspace) { + m_activeSpecialWorkspace->m_visible = false; + m_activeSpecialWorkspace->startAnim(false, false); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", ",," + m_name}); } - activeSpecialWorkspace.reset(); + m_activeSpecialWorkspace.reset(); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); - if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { - if (const auto PLAST = activeWorkspace->getLastFocusedWindow(); PLAST) + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == m_self)) { + if (const auto PLAST = m_activeWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else g_pInputManager->refocus(); } - g_pCompositor->updateFullscreenFadeOnWorkspace(activeWorkspace); + g_pCompositor->updateFullscreenFadeOnWorkspace(m_activeWorkspace); - g_pConfigManager->ensureVRR(self.lock()); + g_pConfigManager->ensureVRR(m_self.lock()); g_pCompositor->updateSuspendedStates(); return; } - if (activeSpecialWorkspace) { - activeSpecialWorkspace->m_visible = false; - activeSpecialWorkspace->startAnim(false, false); + if (m_activeSpecialWorkspace) { + m_activeSpecialWorkspace->m_visible = false; + m_activeSpecialWorkspace->startAnim(false, false); } bool animate = true; //close if open elsewhere const auto PMONITORWORKSPACEOWNER = pWorkspace->m_monitor.lock(); - if (const auto PMWSOWNER = pWorkspace->m_monitor.lock(); PMWSOWNER && PMWSOWNER->activeSpecialWorkspace == pWorkspace) { - PMWSOWNER->activeSpecialWorkspace.reset(); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMWSOWNER->ID); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + PMWSOWNER->szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", ",," + PMWSOWNER->szName}); + if (const auto PMWSOWNER = pWorkspace->m_monitor.lock(); PMWSOWNER && PMWSOWNER->m_activeSpecialWorkspace == pWorkspace) { + PMWSOWNER->m_activeSpecialWorkspace.reset(); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PMWSOWNER->m_id); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", "," + PMWSOWNER->m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", ",," + PMWSOWNER->m_name}); - const auto PACTIVEWORKSPACE = PMWSOWNER->activeWorkspace; + const auto PACTIVEWORKSPACE = PMWSOWNER->m_activeWorkspace; g_pCompositor->updateFullscreenFadeOnWorkspace(PACTIVEWORKSPACE); animate = false; } // open special - pWorkspace->m_monitor = self; - activeSpecialWorkspace = pWorkspace; - activeSpecialWorkspace->m_visible = true; + pWorkspace->m_monitor = m_self; + m_activeSpecialWorkspace = pWorkspace; + m_activeSpecialWorkspace->m_visible = true; if (animate) pWorkspace->startAnim(true, true); for (auto const& w : g_pCompositor->m_windows) { if (w->m_workspace == pWorkspace) { - w->m_monitor = self; + w->m_monitor = m_self; w->updateSurfaceScaleTransformDetails(); w->setAnimationsToMove(); const auto MIDDLE = w->middle(); - if (w->m_isFloating && !VECINRECT(MIDDLE, vecPosition.x, vecPosition.y, vecPosition.x + vecSize.x, vecPosition.y + vecSize.y) && !w->isX11OverrideRedirect()) { + if (w->m_isFloating && !VECINRECT(MIDDLE, m_position.x, m_position.y, m_position.x + m_size.x, m_position.y + m_size.y) && !w->isX11OverrideRedirect()) { // if it's floating and the middle isnt on the current mon, move it to the center const auto PMONFROMMIDDLE = g_pCompositor->getMonitorFromVector(MIDDLE); Vector2D pos = w->m_realPosition->goal(); - if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->vecPosition.x, PMONFROMMIDDLE->vecPosition.y, PMONFROMMIDDLE->vecPosition.x + PMONFROMMIDDLE->vecSize.x, - PMONFROMMIDDLE->vecPosition.y + PMONFROMMIDDLE->vecSize.y)) { + if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->m_position.x, PMONFROMMIDDLE->m_position.y, PMONFROMMIDDLE->m_position.x + PMONFROMMIDDLE->m_size.x, + PMONFROMMIDDLE->m_position.y + PMONFROMMIDDLE->m_size.y)) { // not on any monitor, center pos = middle() / 2.f - w->m_realSize->goal() / 2.f; } else - pos = pos - PMONFROMMIDDLE->vecPosition + vecPosition; + pos = pos - PMONFROMMIDDLE->m_position + m_position; *w->m_realPosition = pos; w->m_position = pos; @@ -1256,23 +1256,23 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { } } - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); - if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == self)) { + if (!(g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_pinned && g_pCompositor->m_lastWindow->m_monitor == m_self)) { if (const auto PLAST = pWorkspace->getLastFocusedWindow(); PLAST) g_pCompositor->focusWindow(PLAST); else g_pInputManager->refocus(); } - g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", pWorkspace->m_name + "," + szName}); - g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", std::to_string(pWorkspace->m_id) + "," + pWorkspace->m_name + "," + szName}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecial", pWorkspace->m_name + "," + m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"activespecialv2", std::to_string(pWorkspace->m_id) + "," + pWorkspace->m_name + "," + m_name}); - g_pHyprRenderer->damageMonitor(self.lock()); + g_pHyprRenderer->damageMonitor(m_self.lock()); g_pCompositor->updateFullscreenFadeOnWorkspace(pWorkspace); - g_pConfigManager->ensureVRR(self.lock()); + g_pConfigManager->ensureVRR(m_self.lock()); g_pCompositor->updateSuspendedStates(); } @@ -1282,19 +1282,19 @@ void CMonitor::setSpecialWorkspace(const WORKSPACEID& id) { } void CMonitor::moveTo(const Vector2D& pos) { - vecPosition = pos; + m_position = pos; } SWorkspaceIDName CMonitor::getPrevWorkspaceIDName(const WORKSPACEID id) { - while (!prevWorkSpaces.empty()) { - const int PREVID = prevWorkSpaces.top(); - prevWorkSpaces.pop(); + while (!m_prevWorkSpaces.empty()) { + const int PREVID = m_prevWorkSpaces.top(); + m_prevWorkSpaces.pop(); if (PREVID == id) // skip same workspace continue; // recheck if previous workspace's was moved to another monitor const auto ws = g_pCompositor->getWorkspaceByID(PREVID); - if (ws && ws->monitorID() == ID) + if (ws && ws->monitorID() == m_id) return {.id = PREVID, .name = ws->m_name}; } @@ -1302,66 +1302,66 @@ SWorkspaceIDName CMonitor::getPrevWorkspaceIDName(const WORKSPACEID id) { } void CMonitor::addPrevWorkspaceID(const WORKSPACEID id) { - if (!prevWorkSpaces.empty() && prevWorkSpaces.top() == id) + if (!m_prevWorkSpaces.empty() && m_prevWorkSpaces.top() == id) return; - prevWorkSpaces.emplace(id); + m_prevWorkSpaces.emplace(id); } Vector2D CMonitor::middle() { - return vecPosition + vecSize / 2.f; + return m_position + m_size / 2.f; } void CMonitor::updateMatrix() { - projMatrix = Mat3x3::identity(); - if (transform != WL_OUTPUT_TRANSFORM_NORMAL) - projMatrix.translate(vecPixelSize / 2.0).transform(wlTransformToHyprutils(transform)).translate(-vecTransformedSize / 2.0); + m_projMatrix = Mat3x3::identity(); + if (m_transform != WL_OUTPUT_TRANSFORM_NORMAL) + m_projMatrix.translate(m_pixelSize / 2.0).transform(wlTransformToHyprutils(m_transform)).translate(-m_transformedSize / 2.0); } WORKSPACEID CMonitor::activeWorkspaceID() { - return activeWorkspace ? activeWorkspace->m_id : 0; + return m_activeWorkspace ? m_activeWorkspace->m_id : 0; } WORKSPACEID CMonitor::activeSpecialWorkspaceID() { - return activeSpecialWorkspace ? activeSpecialWorkspace->m_id : 0; + return m_activeSpecialWorkspace ? m_activeSpecialWorkspace->m_id : 0; } CBox CMonitor::logicalBox() { - return {vecPosition, vecSize}; + return {m_position, m_size}; } void CMonitor::scheduleDone() { - if (doneScheduled) + if (m_doneScheduled) return; - doneScheduled = true; + m_doneScheduled = true; - g_pEventLoopManager->doLater([M = self] { + g_pEventLoopManager->doLater([M = m_self] { if (!M) // if M is gone, we got destroyed, doesn't matter. return; - if (!PROTO::outputs.contains(M->szName)) + if (!PROTO::outputs.contains(M->m_name)) return; - PROTO::outputs.at(M->szName)->sendDone(); - M->doneScheduled = false; + PROTO::outputs.at(M->m_name)->sendDone(); + M->m_doneScheduled = false; }); } void CMonitor::setCTM(const Mat3x3& ctm_) { - ctm = ctm_; - ctmUpdated = true; - g_pCompositor->scheduleFrameForMonitor(self.lock(), Aquamarine::IOutput::scheduleFrameReason::AQ_SCHEDULE_NEEDS_FRAME); + m_ctm = ctm_; + m_ctmUpdated = true; + g_pCompositor->scheduleFrameForMonitor(m_self.lock(), Aquamarine::IOutput::scheduleFrameReason::AQ_SCHEDULE_NEEDS_FRAME); } bool CMonitor::attemptDirectScanout() { - if (!mirrors.empty() || isMirror() || g_pHyprRenderer->m_bDirectScanoutBlocked) + if (!m_mirrors.empty() || isMirror() || g_pHyprRenderer->m_bDirectScanoutBlocked) return false; // do not DS if this monitor is being mirrored. Will break the functionality. - if (g_pPointerManager->softwareLockedFor(self.lock())) + if (g_pPointerManager->softwareLockedFor(m_self.lock())) return false; - const auto PCANDIDATE = solitaryClient.lock(); + const auto PCANDIDATE = m_solitaryClient.lock(); if (!PCANDIDATE) return false; @@ -1371,7 +1371,7 @@ bool CMonitor::attemptDirectScanout() { if (!PSURFACE || !PSURFACE->current.texture || !PSURFACE->current.buffer) return false; - if (PSURFACE->current.bufferSize != vecPixelSize || PSURFACE->current.transform != transform) + if (PSURFACE->current.bufferSize != m_pixelSize || PSURFACE->current.transform != m_transform) return false; // we can't scanout shm buffers. @@ -1383,22 +1383,22 @@ bool CMonitor::attemptDirectScanout() { auto PBUFFER = PSURFACE->current.buffer.buffer; - if (PBUFFER == output->state->state().buffer) { - PSURFACE->presentFeedback(Time::steadyNow(), self.lock()); + if (PBUFFER == m_output->state->state().buffer) { + PSURFACE->presentFeedback(Time::steadyNow(), m_self.lock()); - if (scanoutNeedsCursorUpdate) { - if (!state.test()) { + if (m_scanoutNeedsCursorUpdate) { + if (!m_state.test()) { Debug::log(TRACE, "attemptDirectScanout: failed basic test"); return false; } - if (!output->commit()) { + if (!m_output->commit()) { Debug::log(TRACE, "attemptDirectScanout: failed to commit cursor update"); - lastScanout.reset(); + m_lastScanout.reset(); return false; } - scanoutNeedsCursorUpdate = false; + m_scanoutNeedsCursorUpdate = false; } return true; @@ -1408,44 +1408,44 @@ bool CMonitor::attemptDirectScanout() { // and comes from the appropriate device. This may implode on multi-gpu!! // entering into scanout, so save monitor format - if (lastScanout.expired()) - prevDrmFormat = drmFormat; + if (m_lastScanout.expired()) + m_prevDrmFormat = m_drmFormat; - if (drmFormat != params.format) { - output->state->setFormat(params.format); - drmFormat = params.format; + if (m_drmFormat != params.format) { + m_output->state->setFormat(params.format); + m_drmFormat = params.format; } - output->state->setBuffer(PBUFFER); - output->state->setPresentationMode(tearingState.activelyTearing ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : - Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); + m_output->state->setBuffer(PBUFFER); + m_output->state->setPresentationMode(m_tearingState.activelyTearing ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : + Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); - if (!state.test()) { + if (!m_state.test()) { Debug::log(TRACE, "attemptDirectScanout: failed basic test"); return false; } - PSURFACE->presentFeedback(Time::steadyNow(), self.lock()); + PSURFACE->presentFeedback(Time::steadyNow(), m_self.lock()); - output->state->addDamage(PSURFACE->current.accumulateBufferDamage()); - output->state->resetExplicitFences(); + m_output->state->addDamage(PSURFACE->current.accumulateBufferDamage()); + m_output->state->resetExplicitFences(); // no need to do explicit sync here as surface current can only ever be ready to read - bool ok = output->commit(); + bool ok = m_output->commit(); if (!ok) { Debug::log(TRACE, "attemptDirectScanout: failed to scanout surface"); - lastScanout.reset(); + m_lastScanout.reset(); return false; } - if (lastScanout.expired()) { - lastScanout = PCANDIDATE; + if (m_lastScanout.expired()) { + m_lastScanout = PCANDIDATE; Debug::log(LOG, "Entered a direct scanout to {:x}: \"{}\"", (uintptr_t)PCANDIDATE.get(), PCANDIDATE->m_title); } - scanoutNeedsCursorUpdate = false; + m_scanoutNeedsCursorUpdate = false; if (!PBUFFER->lockedByBackend || PBUFFER->hlEvents.backendRelease) return true; @@ -1459,16 +1459,17 @@ bool CMonitor::attemptDirectScanout() { } void CMonitor::debugLastPresentation(const std::string& message) { - Debug::log(TRACE, "{} (last presentation {} - {} fps)", message, lastPresentationTimer.getMillis(), - lastPresentationTimer.getMillis() > 0 ? 1000.0f / lastPresentationTimer.getMillis() : 0.0f); + Debug::log(TRACE, "{} (last presentation {} - {} fps)", message, m_lastPresentationTimer.getMillis(), + m_lastPresentationTimer.getMillis() > 0 ? 1000.0f / m_lastPresentationTimer.getMillis() : 0.0f); } void CMonitor::onMonitorFrame() { if ((g_pCompositor->m_aqBackend->hasSession() && !g_pCompositor->m_aqBackend->session->active) || !g_pCompositor->m_sessionActive || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Attempted to render frame on inactive session!"); - if (g_pCompositor->m_unsafeState && - std::ranges::any_of(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& m) { return m->output != g_pCompositor->m_unsafeOutput->output; })) { + if (g_pCompositor->m_unsafeState && std::ranges::any_of(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& m) { + return m->m_output != g_pCompositor->m_unsafeOutput->m_output; + })) { // restore from unsafe state g_pCompositor->leaveUnsafeState(); } @@ -1476,57 +1477,57 @@ void CMonitor::onMonitorFrame() { return; // cannot draw on session inactive (different tty) } - if (!m_bEnabled) + if (!m_enabled) return; - g_pHyprRenderer->recheckSolitaryForMonitor(self.lock()); + g_pHyprRenderer->recheckSolitaryForMonitor(m_self.lock()); - tearingState.busy = false; + m_tearingState.busy = false; - if (tearingState.activelyTearing && solitaryClient.lock() /* can be invalidated by a recheck */) { + if (m_tearingState.activelyTearing && m_solitaryClient.lock() /* can be invalidated by a recheck */) { - if (!tearingState.frameScheduledWhileBusy) + if (!m_tearingState.frameScheduledWhileBusy) return; // we did not schedule a frame yet to be displayed, but we are tearing. Why render? - tearingState.nextRenderTorn = true; - tearingState.frameScheduledWhileBusy = false; + m_tearingState.nextRenderTorn = true; + m_tearingState.frameScheduledWhileBusy = false; } static auto PENABLERAT = CConfigValue("misc:render_ahead_of_time"); static auto PRATSAFE = CConfigValue("misc:render_ahead_safezone"); - lastPresentationTimer.reset(); + m_lastPresentationTimer.reset(); - if (*PENABLERAT && !tearingState.nextRenderTorn) { - if (!RATScheduled) { + if (*PENABLERAT && !m_tearingState.nextRenderTorn) { + if (!m_ratsScheduled) { // render - g_pHyprRenderer->renderMonitor(self.lock()); + g_pHyprRenderer->renderMonitor(m_self.lock()); } - RATScheduled = false; + m_ratsScheduled = false; - const auto& [avg, max, min] = g_pHyprRenderer->getRenderTimes(self.lock()); + const auto& [avg, max, min] = g_pHyprRenderer->getRenderTimes(m_self.lock()); - if (max + *PRATSAFE > 1000.0 / refreshRate) + if (max + *PRATSAFE > 1000.0 / m_refreshRate) return; - const auto MSLEFT = 1000.0 / refreshRate - lastPresentationTimer.getMillis(); + const auto MSLEFT = (1000.0 / m_refreshRate) - m_lastPresentationTimer.getMillis(); - RATScheduled = true; + m_ratsScheduled = true; const auto ESTRENDERTIME = std::ceil(avg + *PRATSAFE); const auto TIMETOSLEEP = std::floor(MSLEFT - ESTRENDERTIME); if (MSLEFT < 1 || MSLEFT < ESTRENDERTIME || TIMETOSLEEP < 1) - g_pHyprRenderer->renderMonitor(self.lock()); + g_pHyprRenderer->renderMonitor(m_self.lock()); else - wl_event_source_timer_update(renderTimer, TIMETOSLEEP); + wl_event_source_timer_update(m_renderTimer, TIMETOSLEEP); } else - g_pHyprRenderer->renderMonitor(self.lock()); + g_pHyprRenderer->renderMonitor(m_self.lock()); } void CMonitor::onCursorMovedOnMonitor() { - if (!tearingState.activelyTearing || !solitaryClient || !g_pHyprRenderer->shouldRenderCursor()) + if (!m_tearingState.activelyTearing || !m_solitaryClient || !g_pHyprRenderer->shouldRenderCursor()) return; // submit a frame immediately. This will only update the cursor pos. @@ -1540,41 +1541,41 @@ void CMonitor::onCursorMovedOnMonitor() { // and throws a "nO pRoP cAn Be ChAnGeD dUrInG AsYnC fLiP" on crtc_x // this will throw too but fix it if we use sw cursors - tearingState.frameScheduledWhileBusy = true; + m_tearingState.frameScheduledWhileBusy = true; } -CMonitorState::CMonitorState(CMonitor* owner) : m_pOwner(owner) { +CMonitorState::CMonitorState(CMonitor* owner) : m_owner(owner) { ; } void CMonitorState::ensureBufferPresent() { - const auto STATE = m_pOwner->output->state->state(); + const auto STATE = m_owner->m_output->state->state(); if (!STATE.enabled) { Debug::log(TRACE, "CMonitorState::ensureBufferPresent: Ignoring, monitor is not enabled"); return; } if (STATE.buffer) { - if (const auto params = STATE.buffer->dmabuf(); params.success && params.format == m_pOwner->drmFormat) + if (const auto params = STATE.buffer->dmabuf(); params.success && params.format == m_owner->m_drmFormat) return; } // this is required for modesetting being possible and might be missing in case of first tests in the renderer // where we test modes and buffers Debug::log(LOG, "CMonitorState::ensureBufferPresent: no buffer or mismatched format, attaching one from the swapchain for modeset being possible"); - m_pOwner->output->state->setBuffer(m_pOwner->output->swapchain->next(nullptr)); - m_pOwner->output->swapchain->rollback(); // restore the counter, don't advance the swapchain + m_owner->m_output->state->setBuffer(m_owner->m_output->swapchain->next(nullptr)); + m_owner->m_output->swapchain->rollback(); // restore the counter, don't advance the swapchain } bool CMonitorState::commit() { if (!updateSwapchain()) return false; - EMIT_HOOK_EVENT("preMonitorCommit", m_pOwner->self.lock()); + EMIT_HOOK_EVENT("preMonitorCommit", m_owner->m_self.lock()); ensureBufferPresent(); - bool ret = m_pOwner->output->commit(); + bool ret = m_owner->m_output->commit(); return ret; } @@ -1584,20 +1585,20 @@ bool CMonitorState::test() { ensureBufferPresent(); - return m_pOwner->output->test(); + return m_owner->m_output->test(); } bool CMonitorState::updateSwapchain() { - auto options = m_pOwner->output->swapchain->currentOptions(); - const auto& STATE = m_pOwner->output->state->state(); + auto options = m_owner->m_output->swapchain->currentOptions(); + const auto& STATE = m_owner->m_output->state->state(); const auto& MODE = STATE.mode ? STATE.mode : STATE.customMode; if (!MODE) { Debug::log(WARN, "updateSwapchain: No mode?"); return true; } - options.format = m_pOwner->drmFormat; + options.format = m_owner->m_drmFormat; options.scanout = true; options.length = 2; options.size = MODE->pixelSize; - return m_pOwner->output->swapchain->reconfigure(options); + return m_owner->m_output->swapchain->reconfigure(options); } diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 88252ab4..31777b0c 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -71,7 +71,7 @@ class CMonitorState { private: void ensureBufferPresent(); - CMonitor* m_pOwner = nullptr; + CMonitor* m_owner = nullptr; }; class CMonitor { @@ -79,84 +79,82 @@ class CMonitor { CMonitor(SP output); ~CMonitor(); - Vector2D vecPosition = Vector2D(-1, -1); // means unset - Vector2D vecXWaylandPosition = Vector2D(-1, -1); // means unset - Vector2D vecSize = Vector2D(0, 0); - Vector2D vecPixelSize = Vector2D(0, 0); - Vector2D vecTransformedSize = Vector2D(0, 0); + Vector2D m_position = Vector2D(-1, -1); // means unset + Vector2D m_xwaylandPosition = Vector2D(-1, -1); // means unset + Vector2D m_size = Vector2D(0, 0); + Vector2D m_pixelSize = Vector2D(0, 0); + Vector2D m_transformedSize = Vector2D(0, 0); - bool primary = false; + MONITORID m_id = MONITOR_INVALID; + PHLWORKSPACE m_activeWorkspace = nullptr; + PHLWORKSPACE m_activeSpecialWorkspace = nullptr; + float m_setScale = 1; // scale set by cfg + float m_scale = 1; // real scale - MONITORID ID = MONITOR_INVALID; - PHLWORKSPACE activeWorkspace = nullptr; - PHLWORKSPACE activeSpecialWorkspace = nullptr; - float setScale = 1; // scale set by cfg - float scale = 1; // real scale + std::string m_name = ""; + std::string m_description = ""; + std::string m_shortDescription = ""; - std::string szName = ""; - std::string szDescription = ""; - std::string szShortDescription = ""; + Vector2D m_reservedTopLeft = Vector2D(0, 0); + Vector2D m_reservedBottomRight = Vector2D(0, 0); - Vector2D vecReservedTopLeft = Vector2D(0, 0); - Vector2D vecReservedBottomRight = Vector2D(0, 0); + drmModeModeInfo m_customDrmMode = {}; - drmModeModeInfo customDrmMode = {}; + CMonitorState m_state; + CDamageRing m_damage; - CMonitorState state; - CDamageRing damage; + SP m_output; + float m_refreshRate = 60; // Hz + int m_forceFullFrames = 0; + bool m_scheduledRecalc = false; + wl_output_transform m_transform = WL_OUTPUT_TRANSFORM_NORMAL; + float m_xwaylandScale = 1.f; + Mat3x3 m_projMatrix; + std::optional m_forceSize; + SP m_currentMode; + SP m_cursorSwapchain; + uint32_t m_drmFormat = DRM_FORMAT_INVALID; + uint32_t m_prevDrmFormat = DRM_FORMAT_INVALID; - SP output; - float refreshRate = 60; // Hz - int forceFullFrames = 0; - bool scheduledRecalc = false; - wl_output_transform transform = WL_OUTPUT_TRANSFORM_NORMAL; - float xwaylandScale = 1.f; - Mat3x3 projMatrix; - std::optional forceSize; - SP currentMode; - SP cursorSwapchain; - uint32_t drmFormat = DRM_FORMAT_INVALID; - uint32_t prevDrmFormat = DRM_FORMAT_INVALID; + bool m_dpmsStatus = true; + bool m_vrrActive = false; // this can be TRUE even if VRR is not active in the case that this display does not support it. + bool m_enabled10bit = false; // as above, this can be TRUE even if 10 bit failed. + eCMType m_cmType = CM_SRGB; + float m_sdrSaturation = 1.0f; + float m_sdrBrightness = 1.0f; + bool m_createdByUser = false; + bool m_isUnsafeFallback = false; - bool dpmsStatus = true; - bool vrrActive = false; // this can be TRUE even if VRR is not active in the case that this display does not support it. - bool enabled10bit = false; // as above, this can be TRUE even if 10 bit failed. - eCMType cmType = CM_SRGB; - float sdrSaturation = 1.0f; - float sdrBrightness = 1.0f; - bool createdByUser = false; - bool isUnsafeFallback = false; + bool m_pendingFrame = false; // if we schedule a frame during rendering, reschedule it after + bool m_renderingActive = false; - bool pendingFrame = false; // if we schedule a frame during rendering, reschedule it after - bool renderingActive = false; + wl_event_source* m_renderTimer = nullptr; // for RAT + bool m_ratsScheduled = false; + CTimer m_lastPresentationTimer; - wl_event_source* renderTimer = nullptr; // for RAT - bool RATScheduled = false; - CTimer lastPresentationTimer; + bool m_isBeingLeased = false; - bool isBeingLeased = false; - - SMonitorRule activeMonitorRule; + SMonitorRule m_activeMonitorRule; // explicit sync - Hyprutils::OS::CFileDescriptor inFence; // TODO: remove when aq uses CFileDescriptor + Hyprutils::OS::CFileDescriptor m_inFence; // TODO: remove when aq uses CFileDescriptor - PHLMONITORREF self; + PHLMONITORREF m_self; // mirroring - PHLMONITORREF pMirrorOf; - std::vector mirrors; + PHLMONITORREF m_mirrorOf; + std::vector m_mirrors; // ctm - Mat3x3 ctm = Mat3x3::identity(); - bool ctmUpdated = false; + Mat3x3 m_ctm = Mat3x3::identity(); + bool m_ctmUpdated = false; // for tearing - PHLWINDOWREF solitaryClient; + PHLWINDOWREF m_solitaryClient; // for direct scanout - PHLWINDOWREF lastScanout; - bool scanoutNeedsCursorUpdate = false; + PHLWINDOWREF m_lastScanout; + bool m_scanoutNeedsCursorUpdate = false; struct { bool canTear = false; @@ -165,7 +163,7 @@ class CMonitor { bool busy = false; bool frameScheduledWhileBusy = false; - } tearingState; + } m_tearingState; struct { CSignal destroy; @@ -173,9 +171,9 @@ class CMonitor { CSignal disconnect; CSignal dpmsChanged; CSignal modeChanged; - } events; + } m_events; - std::array, 4> m_aLayerSurfaceLayers; + std::array, 4> m_layerSurfaceLayers; // methods void onConnect(bool noRule); @@ -207,15 +205,15 @@ class CMonitor { void debugLastPresentation(const std::string& message); void onMonitorFrame(); - bool m_bEnabled = false; - bool m_bRenderingInitPassed = false; + bool m_enabled = false; + bool m_renderingInitPassed = false; WP m_previousFSWindow; - NColorManagement::SImageDescription imageDescription; + NColorManagement::SImageDescription m_imageDescription; // For the list lookup bool operator==(const CMonitor& rhs) { - return vecPosition == rhs.vecPosition && vecSize == rhs.vecSize && szName == rhs.szName; + return m_position == rhs.m_position && m_size == rhs.m_size && m_name == rhs.m_name; } // workspace previous per monitor functionality @@ -226,8 +224,8 @@ class CMonitor { void setupDefaultWS(const SMonitorRule&); WORKSPACEID findAvailableDefaultWS(); - bool doneScheduled = false; - std::stack prevWorkSpaces; + bool m_doneScheduled = false; + std::stack m_prevWorkSpaces; struct { CHyprSignalListener frame; @@ -236,5 +234,5 @@ class CMonitor { CHyprSignalListener needsFrame; CHyprSignalListener presented; CHyprSignalListener commit; - } listeners; + } m_listeners; }; diff --git a/src/helpers/sync/SyncTimeline.cpp b/src/helpers/sync/SyncTimeline.cpp index edb2b190..1b089caa 100644 --- a/src/helpers/sync/SyncTimeline.cpp +++ b/src/helpers/sync/SyncTimeline.cpp @@ -7,11 +7,11 @@ using namespace Hyprutils::OS; SP CSyncTimeline::create(int drmFD_) { - auto timeline = SP(new CSyncTimeline); - timeline->drmFD = drmFD_; - timeline->self = timeline; + auto timeline = SP(new CSyncTimeline); + timeline->m_drmFD = drmFD_; + timeline->m_self = timeline; - if (drmSyncobjCreate(drmFD_, 0, &timeline->handle)) { + if (drmSyncobjCreate(drmFD_, 0, &timeline->m_handle)) { Debug::log(ERR, "CSyncTimeline: failed to create a drm syncobj??"); return nullptr; } @@ -20,12 +20,12 @@ SP CSyncTimeline::create(int drmFD_) { } SP CSyncTimeline::create(int drmFD_, CFileDescriptor&& drmSyncobjFD) { - auto timeline = SP(new CSyncTimeline); - timeline->drmFD = drmFD_; - timeline->syncobjFd = std::move(drmSyncobjFD); - timeline->self = timeline; + auto timeline = SP(new CSyncTimeline); + timeline->m_drmFD = drmFD_; + timeline->m_syncobjFD = std::move(drmSyncobjFD); + timeline->m_self = timeline; - if (drmSyncobjFDToHandle(drmFD_, timeline->syncobjFd.get(), &timeline->handle)) { + if (drmSyncobjFDToHandle(drmFD_, timeline->m_syncobjFD.get(), &timeline->m_handle)) { Debug::log(ERR, "CSyncTimeline: failed to create a drm syncobj from fd??"); return nullptr; } @@ -34,10 +34,10 @@ SP CSyncTimeline::create(int drmFD_, CFileDescriptor&& drmSyncobj } CSyncTimeline::~CSyncTimeline() { - if (handle == 0) + if (m_handle == 0) return; - drmSyncobjDestroy(drmFD, handle); + drmSyncobjDestroy(m_drmFD, m_handle); } std::optional CSyncTimeline::check(uint64_t point, uint32_t flags) { @@ -48,7 +48,7 @@ std::optional CSyncTimeline::check(uint64_t point, uint32_t flags) { #endif uint32_t signaled = 0; - int ret = drmSyncobjTimelineWait(drmFD, &handle, &point, 1, 0, flags, &signaled); + int ret = drmSyncobjTimelineWait(m_drmFD, &m_handle, &point, 1, 0, flags, &signaled); if (ret != 0 && ret != -ETIME_ERR) { Debug::log(ERR, "CSyncTimeline::check: drmSyncobjTimelineWait failed"); return std::nullopt; @@ -65,7 +65,7 @@ bool CSyncTimeline::addWaiter(const std::function& waiter, uint64_t poin return false; } - if (drmSyncobjEventfd(drmFD, handle, point, eventFd.get(), flags)) { + if (drmSyncobjEventfd(m_drmFD, m_handle, point, eventFd.get(), flags)) { Debug::log(ERR, "CSyncTimeline::addWaiter: drmSyncobjEventfd failed"); return false; } @@ -79,58 +79,58 @@ CFileDescriptor CSyncTimeline::exportAsSyncFileFD(uint64_t src) { int sync = -1; uint32_t syncHandle = 0; - if (drmSyncobjCreate(drmFD, 0, &syncHandle)) { + if (drmSyncobjCreate(m_drmFD, 0, &syncHandle)) { Debug::log(ERR, "exportAsSyncFileFD: drmSyncobjCreate failed"); return {}; } - if (drmSyncobjTransfer(drmFD, syncHandle, 0, handle, src, 0)) { + if (drmSyncobjTransfer(m_drmFD, syncHandle, 0, m_handle, src, 0)) { Debug::log(ERR, "exportAsSyncFileFD: drmSyncobjTransfer failed"); - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return {}; } - if (drmSyncobjExportSyncFile(drmFD, syncHandle, &sync)) { + if (drmSyncobjExportSyncFile(m_drmFD, syncHandle, &sync)) { Debug::log(ERR, "exportAsSyncFileFD: drmSyncobjExportSyncFile failed"); - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return {}; } - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return CFileDescriptor{sync}; } bool CSyncTimeline::importFromSyncFileFD(uint64_t dst, CFileDescriptor& fd) { uint32_t syncHandle = 0; - if (drmSyncobjCreate(drmFD, 0, &syncHandle)) { + if (drmSyncobjCreate(m_drmFD, 0, &syncHandle)) { Debug::log(ERR, "importFromSyncFileFD: drmSyncobjCreate failed"); return false; } - if (drmSyncobjImportSyncFile(drmFD, syncHandle, fd.get())) { + if (drmSyncobjImportSyncFile(m_drmFD, syncHandle, fd.get())) { Debug::log(ERR, "importFromSyncFileFD: drmSyncobjImportSyncFile failed"); - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return false; } - if (drmSyncobjTransfer(drmFD, handle, dst, syncHandle, 0, 0)) { + if (drmSyncobjTransfer(m_drmFD, m_handle, dst, syncHandle, 0, 0)) { Debug::log(ERR, "importFromSyncFileFD: drmSyncobjTransfer failed"); - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return false; } - drmSyncobjDestroy(drmFD, syncHandle); + drmSyncobjDestroy(m_drmFD, syncHandle); return true; } bool CSyncTimeline::transfer(SP from, uint64_t fromPoint, uint64_t toPoint) { - if (drmFD != from->drmFD) { - Debug::log(ERR, "CSyncTimeline::transfer: cannot transfer timelines between gpus, {} -> {}", from->drmFD, drmFD); + if (m_drmFD != from->m_drmFD) { + Debug::log(ERR, "CSyncTimeline::transfer: cannot transfer timelines between gpus, {} -> {}", from->m_drmFD, m_drmFD); return false; } - if (drmSyncobjTransfer(drmFD, handle, toPoint, from->handle, fromPoint, 0)) { + if (drmSyncobjTransfer(m_drmFD, m_handle, toPoint, from->m_handle, fromPoint, 0)) { Debug::log(ERR, "CSyncTimeline::transfer: drmSyncobjTransfer failed"); return false; } @@ -139,6 +139,6 @@ bool CSyncTimeline::transfer(SP from, uint64_t fromPoint, uint64_ } void CSyncTimeline::signal(uint64_t point) { - if (drmSyncobjTimelineSignal(drmFD, &handle, &point, 1)) + if (drmSyncobjTimelineSignal(m_drmFD, &m_handle, &point, 1)) Debug::log(ERR, "CSyncTimeline::signal: drmSyncobjTimelineSignal failed"); } diff --git a/src/helpers/sync/SyncTimeline.hpp b/src/helpers/sync/SyncTimeline.hpp index 51012c85..37d5b301 100644 --- a/src/helpers/sync/SyncTimeline.hpp +++ b/src/helpers/sync/SyncTimeline.hpp @@ -31,10 +31,10 @@ class CSyncTimeline { bool transfer(SP from, uint64_t fromPoint, uint64_t toPoint); void signal(uint64_t point); - int drmFD = -1; - Hyprutils::OS::CFileDescriptor syncobjFd; - uint32_t handle = 0; - WP self; + int m_drmFD = -1; + Hyprutils::OS::CFileDescriptor m_syncobjFD; + uint32_t m_handle = 0; + WP m_self; private: CSyncTimeline() = default; diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 72036ff8..c8000649 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -49,11 +49,11 @@ void CHyprError::createQueued() { const auto PMONITOR = g_pCompositor->m_monitors.front(); - const auto SCALE = PMONITOR->scale; + const auto SCALE = PMONITOR->m_scale; - const auto FONTSIZE = std::clamp((int)(10.f * ((PMONITOR->vecPixelSize.x * SCALE) / 1920.f)), 8, 40); + const auto FONTSIZE = std::clamp((int)(10.f * ((PMONITOR->m_pixelSize.x * SCALE) / 1920.f)), 8, 40); - const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); + const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y); const auto CAIRO = cairo_create(CAIROSURFACE); @@ -76,13 +76,13 @@ void CHyprError::createQueued() { const double PAD = 10 * SCALE; - const double WIDTH = PMONITOR->vecPixelSize.x - PAD * 2; + const double WIDTH = PMONITOR->m_pixelSize.x - PAD * 2; const double HEIGHT = (FONTSIZE + 2 * (FONTSIZE / 10.0)) * (VISLINECOUNT + EXTRALINES) + 3; const double RADIUS = PAD > HEIGHT / 2 ? HEIGHT / 2 - 1 : PAD; const double X = PAD; - const double Y = TOPBAR ? PAD : PMONITOR->vecPixelSize.y - HEIGHT - PAD; + const double Y = TOPBAR ? PAD : PMONITOR->m_pixelSize.y - HEIGHT - PAD; - m_bDamageBox = {0, 0, (int)PMONITOR->vecPixelSize.x, (int)HEIGHT + (int)PAD * 2}; + m_bDamageBox = {0, 0, (int)PMONITOR->m_pixelSize.x, (int)HEIGHT + (int)PAD * 2}; cairo_new_sub_path(CAIRO); cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + RADIUS, RADIUS, -90 * DEGREES, 0 * DEGREES); @@ -152,7 +152,7 @@ void CHyprError::createQueued() { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); #endif - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); // delete cairo cairo_destroy(CAIRO); @@ -164,7 +164,7 @@ void CHyprError::createQueued() { g_pHyprRenderer->damageMonitor(PMONITOR); - g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); + g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id); } void CHyprError::draw() { @@ -183,7 +183,7 @@ void CHyprError::draw() { m_szQueued = ""; for (auto& m : g_pCompositor->m_monitors) { - g_pHyprRenderer->arrangeLayersForMonitor(m->ID); + g_pHyprRenderer->arrangeLayersForMonitor(m->m_id); } return; @@ -196,10 +196,10 @@ void CHyprError::draw() { const auto PMONITOR = g_pHyprOpenGL->m_RenderData.pMonitor; - CBox monbox = {0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y}; + CBox monbox = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y}; - m_bDamageBox.x = (int)PMONITOR->vecPosition.x; - m_bDamageBox.y = (int)PMONITOR->vecPosition.y; + m_bDamageBox.x = (int)PMONITOR->m_position.x; + m_bDamageBox.y = (int)PMONITOR->m_position.y; if (m_fFadeOpacity->isBeingAnimated() || m_bMonitorChanged) g_pHyprRenderer->damageBox(m_bDamageBox); diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 5ebd14ce..020a200a 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -115,10 +115,10 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for } // for gaps outer - const bool DISPLAYLEFT = STICKS(pNode->box.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(pNode->box.x + pNode->box.w, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(pNode->box.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(pNode->box.y + pNode->box.h, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYLEFT = STICKS(pNode->box.x, PMONITOR->m_position.x + PMONITOR->m_reservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(pNode->box.x + pNode->box.w, PMONITOR->m_position.x + PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x); + const bool DISPLAYTOP = STICKS(pNode->box.y, PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(pNode->box.y + pNode->box.h, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); const auto PWINDOW = pNode->pWindow.lock(); // get specific gaps and rules for this workspace, @@ -245,8 +245,8 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir const auto MOUSECOORDS = m_vOverrideFocalPoint.value_or(g_pInputManager->getMouseCoordsInternal()); const auto MONFROMCURSOR = g_pCompositor->getMonitorFromVector(MOUSECOORDS); - if (PMONITOR->ID == MONFROMCURSOR->ID && - (PNODE->workspaceID == PMONITOR->activeWorkspaceID() || (g_pCompositor->isWorkspaceSpecial(PNODE->workspaceID) && PMONITOR->activeSpecialWorkspace)) && !*PUSEACTIVE) { + if (PMONITOR->m_id == MONFROMCURSOR->m_id && + (PNODE->workspaceID == PMONITOR->activeWorkspaceID() || (g_pCompositor->isWorkspaceSpecial(PNODE->workspaceID) && PMONITOR->m_activeSpecialWorkspace)) && !*PUSEACTIVE) { OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS | SKIP_FULLSCREEN_PRIORITY)); if (!OPENINGON && g_pCompositor->isPointOnReservedArea(MOUSECOORDS, PMONITOR)) @@ -266,7 +266,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir } else OPENINGON = getFirstNodeOnWorkspace(pWindow->workspaceID()); - Debug::log(LOG, "OPENINGON: {}, Monitor: {}", OPENINGON, PMONITOR->ID); + Debug::log(LOG, "OPENINGON: {}, Monitor: {}", OPENINGON, PMONITOR->m_id); if (OPENINGON && OPENINGON->workspaceID != PNODE->workspaceID) { // special workspace handling @@ -274,7 +274,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir } // first, check if OPENINGON isn't too big. - const auto PREDSIZEMAX = OPENINGON ? Vector2D(OPENINGON->box.w, OPENINGON->box.h) : PMONITOR->vecSize; + const auto PREDSIZEMAX = OPENINGON ? Vector2D(OPENINGON->box.w, OPENINGON->box.h) : PMONITOR->m_size; if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PREDSIZEMAX.x || MAXSIZE.y < PREDSIZEMAX.y) { // we can't continue. make it floating. pWindow->m_isFloating = true; @@ -295,7 +295,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir // if it's the first, it's easy. Make it fullscreen. if (!OPENINGON || OPENINGON->pWindow.lock() == pWindow) { - PNODE->box = CBox{PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; + PNODE->box = CBox{PMONITOR->m_position + PMONITOR->m_reservedTopLeft, PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight}; applyNodeDataToWindow(PNODE); @@ -487,15 +487,15 @@ void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { void CHyprDwindleLayout::recalculateMonitor(const MONITORID& monid) { const auto PMONITOR = g_pCompositor->getMonitorFromID(monid); - if (!PMONITOR || !PMONITOR->activeWorkspace) + if (!PMONITOR || !PMONITOR->m_activeWorkspace) return; // ??? g_pHyprRenderer->damageMonitor(PMONITOR); - if (PMONITOR->activeSpecialWorkspace) - calculateWorkspace(PMONITOR->activeSpecialWorkspace); + if (PMONITOR->m_activeSpecialWorkspace) + calculateWorkspace(PMONITOR->m_activeSpecialWorkspace); - calculateWorkspace(PMONITOR->activeWorkspace); + calculateWorkspace(PMONITOR->m_activeWorkspace); } void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { @@ -509,12 +509,12 @@ void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - *PFULLWINDOW->m_realPosition = PMONITOR->vecPosition; - *PFULLWINDOW->m_realSize = PMONITOR->vecSize; + *PFULLWINDOW->m_realPosition = PMONITOR->m_position; + *PFULLWINDOW->m_realSize = PMONITOR->m_size; } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SDwindleNodeData fakeNode; fakeNode.pWindow = PFULLWINDOW; - fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; + fakeNode.box = {PMONITOR->m_position + PMONITOR->m_reservedTopLeft, PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight}; fakeNode.workspaceID = pWorkspace->m_id; PFULLWINDOW->m_position = fakeNode.box.pos(); PFULLWINDOW->m_size = fakeNode.box.size(); @@ -530,7 +530,7 @@ void CHyprDwindleLayout::calculateWorkspace(const PHLWORKSPACE& pWorkspace) { const auto TOPNODE = getMasterNodeOnWorkspace(pWorkspace->m_id); if (TOPNODE) { - TOPNODE->box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; + TOPNODE->box = {PMONITOR->m_position + PMONITOR->m_reservedTopLeft, PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight}; TOPNODE->recalcSizePosRecursive(); } } @@ -567,10 +567,10 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn // get some data about our window const auto PMONITOR = PWINDOW->m_monitor.lock(); - const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->m_position.x + PMONITOR->m_reservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->m_position.x + PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x); + const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); if (PWINDOW->m_isPseudotiled) { if (!m_PseudoDragFlags.started) { @@ -766,8 +766,8 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFu } else { // apply new pos and size being monitors' box if (EFFECTIVE_MODE == FSMODE_FULLSCREEN) { - *pWindow->m_realPosition = PMONITOR->vecPosition; - *pWindow->m_realSize = PMONITOR->vecSize; + *pWindow->m_realPosition = PMONITOR->m_position; + *pWindow->m_realSize = PMONITOR->m_size; } else { // This is a massive hack. // We make a fake "only" node and apply @@ -775,7 +775,7 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFu SDwindleNodeData fakeNode; fakeNode.pWindow = pWindow; - fakeNode.box = {PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft, PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight}; + fakeNode.box = {PMONITOR->m_position + PMONITOR->m_reservedTopLeft, PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight}; fakeNode.workspaceID = pWindow->workspaceID(); pWindow->m_position = fakeNode.box.pos(); pWindow->m_size = fakeNode.box.size(); @@ -821,7 +821,7 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, Vector2D focalPoint; - const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{pWindow->m_monitor->vecPosition, pWindow->m_monitor->vecSize} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); + const auto WINDOWIDEALBB = pWindow->isFullscreen() ? CBox{pWindow->m_monitor->m_position, pWindow->m_monitor->m_size} : pWindow->getWindowIdealBoundingBoxIgnoreReserved(); switch (dir[0]) { case 't': @@ -842,7 +842,7 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, const auto PMONITORFOCAL = g_pCompositor->getMonitorFromVector(focalPoint); if (PMONITORFOCAL != pWindow->m_monitor) { - pWindow->moveToWorkspace(PMONITORFOCAL->activeWorkspace); + pWindow->moveToWorkspace(PMONITORFOCAL->m_activeWorkspace); pWindow->m_monitor = PMONITORFOCAL; } @@ -1087,13 +1087,13 @@ Vector2D CHyprDwindleLayout::predictSizeForNewWindowTiled() { PHLWINDOW candidate = g_pCompositor->m_lastWindow.lock(); if (!candidate) - candidate = g_pCompositor->m_lastMonitor->activeWorkspace->getFirstWindow(); + candidate = g_pCompositor->m_lastMonitor->m_activeWorkspace->getFirstWindow(); // create a fake node SDwindleNodeData node; if (!candidate) - return g_pCompositor->m_lastMonitor->vecSize; + return g_pCompositor->m_lastMonitor->m_size; else { const auto PNODE = getNodeFromWindow(candidate); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index ac04157b..0eb38e3d 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -27,7 +27,7 @@ void IHyprLayout::onWindowCreated(PHLWINDOW pWindow, eDirection direction) { pWindow->m_lastFloatingSize = STOREDSIZE.value(); } else if (desiredGeometry.width <= 5 || desiredGeometry.height <= 5) { const auto PMONITOR = pWindow->m_monitor.lock(); - pWindow->m_lastFloatingSize = PMONITOR->vecSize / 2.f; + pWindow->m_lastFloatingSize = PMONITOR->m_size / 2.f; } else pWindow->m_lastFloatingSize = Vector2D(desiredGeometry.width, desiredGeometry.height); @@ -128,18 +128,18 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { // reject any windows with size <= 5x5 if (pWindow->m_realSize->goal().x <= 5 || pWindow->m_realSize->goal().y <= 5) - *pWindow->m_realSize = PMONITOR->vecSize / 2.f; + *pWindow->m_realSize = PMONITOR->m_size / 2.f; if (pWindow->m_isX11 && pWindow->isX11OverrideRedirect()) { if (pWindow->m_xwaylandSurface->geometry.x != 0 && pWindow->m_xwaylandSurface->geometry.y != 0) *pWindow->m_realPosition = g_pXWaylandManager->xwaylandToWaylandCoords(pWindow->m_xwaylandSurface->geometry.pos()); else - *pWindow->m_realPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_realSize->goal().x) / 2.f, - PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_realSize->goal().y) / 2.f); + *pWindow->m_realPosition = Vector2D(PMONITOR->m_position.x + (PMONITOR->m_size.x - pWindow->m_realSize->goal().x) / 2.f, + PMONITOR->m_position.y + (PMONITOR->m_size.y - pWindow->m_realSize->goal().y) / 2.f); } else { - *pWindow->m_realPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_realSize->goal().x) / 2.f, - PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_realSize->goal().y) / 2.f); + *pWindow->m_realPosition = Vector2D(PMONITOR->m_position.x + (PMONITOR->m_size.x - pWindow->m_realSize->goal().x) / 2.f, + PMONITOR->m_position.y + (PMONITOR->m_size.y - pWindow->m_realSize->goal().y) / 2.f); } } else { // we respect the size. @@ -165,20 +165,20 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { *pWindow->m_realPosition = pWindow->m_xdgSurface->toplevel->parent->window->m_realPosition->goal() + pWindow->m_xdgSurface->toplevel->parent->window->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; else - *pWindow->m_realPosition = PMONITOR->vecPosition + PMONITOR->vecSize / 2.F - desiredGeometry.size() / 2.F; + *pWindow->m_realPosition = PMONITOR->m_position + PMONITOR->m_size / 2.F - desiredGeometry.size() / 2.F; } else { // if it is, we respect where it wants to put itself, but apply monitor offset if outside // most of these are popups - if (const auto POPENMON = g_pCompositor->getMonitorFromVector(middlePoint); POPENMON->ID != PMONITOR->ID) - *pWindow->m_realPosition = Vector2D(desiredGeometry.x, desiredGeometry.y) - POPENMON->vecPosition + PMONITOR->vecPosition; + if (const auto POPENMON = g_pCompositor->getMonitorFromVector(middlePoint); POPENMON->m_id != PMONITOR->m_id) + *pWindow->m_realPosition = Vector2D(desiredGeometry.x, desiredGeometry.y) - POPENMON->m_position + PMONITOR->m_position; else *pWindow->m_realPosition = Vector2D(desiredGeometry.x, desiredGeometry.y); } } if (*PXWLFORCESCALEZERO && pWindow->m_isX11) - *pWindow->m_realSize = pWindow->m_realSize->goal() / PMONITOR->scale; + *pWindow->m_realSize = pWindow->m_realSize->goal() / PMONITOR->m_scale; if (pWindow->m_X11DoesntWantBorders || (pWindow->m_isX11 && pWindow->isX11OverrideRedirect())) { pWindow->m_realPosition->warp(); @@ -468,32 +468,30 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA const double BORDERDIFF = OVERLAP ? DRAGGINGBORDERSIZE : 0; const auto MON = DRAGGINGWINDOW->m_monitor.lock(); - SRange monX = {MON->vecPosition.x + MON->vecReservedTopLeft.x + DRAGGINGBORDERSIZE, - MON->vecPosition.x + MON->vecSize.x - MON->vecReservedBottomRight.x - DRAGGINGBORDERSIZE}; - SRange monY = {MON->vecPosition.y + MON->vecReservedTopLeft.y + DRAGGINGBORDERSIZE, - MON->vecPosition.y + MON->vecSize.y - MON->vecReservedBottomRight.y - DRAGGINGBORDERSIZE}; + SRange monX = {MON->m_position.x + MON->m_reservedTopLeft.x + DRAGGINGBORDERSIZE, MON->m_position.x + MON->m_size.x - MON->m_reservedBottomRight.x - DRAGGINGBORDERSIZE}; + SRange monY = {MON->m_position.y + MON->m_reservedTopLeft.y + DRAGGINGBORDERSIZE, MON->m_position.y + MON->m_size.y - MON->m_reservedBottomRight.y - DRAGGINGBORDERSIZE}; if (CORNER & (CORNER_TOPLEFT | CORNER_BOTTOMLEFT) && - ((MON->vecReservedTopLeft.x > 0 && canSnap(sourceX.start, monX.start, GAPSIZE)) || - canSnap(sourceX.start, (monX.start -= MON->vecReservedTopLeft.x + BORDERDIFF), GAPSIZE))) { + ((MON->m_reservedTopLeft.x > 0 && canSnap(sourceX.start, monX.start, GAPSIZE)) || + canSnap(sourceX.start, (monX.start -= MON->m_reservedTopLeft.x + BORDERDIFF), GAPSIZE))) { SNAP(sourceX.start, sourceX.end, monX.start); snaps |= SNAP_LEFT; } if (CORNER & (CORNER_TOPRIGHT | CORNER_BOTTOMRIGHT) && - ((MON->vecReservedBottomRight.x > 0 && canSnap(sourceX.end, monX.end, GAPSIZE)) || - canSnap(sourceX.end, (monX.end += MON->vecReservedBottomRight.x + BORDERDIFF), GAPSIZE))) { + ((MON->m_reservedBottomRight.x > 0 && canSnap(sourceX.end, monX.end, GAPSIZE)) || + canSnap(sourceX.end, (monX.end += MON->m_reservedBottomRight.x + BORDERDIFF), GAPSIZE))) { SNAP(sourceX.end, sourceX.start, monX.end); snaps |= SNAP_RIGHT; } if (CORNER & (CORNER_TOPLEFT | CORNER_TOPRIGHT) && - ((MON->vecReservedTopLeft.y > 0 && canSnap(sourceY.start, monY.start, GAPSIZE)) || - canSnap(sourceY.start, (monY.start -= MON->vecReservedTopLeft.y + BORDERDIFF), GAPSIZE))) { + ((MON->m_reservedTopLeft.y > 0 && canSnap(sourceY.start, monY.start, GAPSIZE)) || + canSnap(sourceY.start, (monY.start -= MON->m_reservedTopLeft.y + BORDERDIFF), GAPSIZE))) { SNAP(sourceY.start, sourceY.end, monY.start); snaps |= SNAP_UP; } if (CORNER & (CORNER_BOTTOMLEFT | CORNER_BOTTOMRIGHT) && - ((MON->vecReservedBottomRight.y > 0 && canSnap(sourceY.end, monY.end, GAPSIZE)) || - canSnap(sourceY.end, (monY.end += MON->vecReservedBottomRight.y + BORDERDIFF), GAPSIZE))) { + ((MON->m_reservedBottomRight.y > 0 && canSnap(sourceY.end, monY.end, GAPSIZE)) || + canSnap(sourceY.end, (monY.end += MON->m_reservedBottomRight.y + BORDERDIFF), GAPSIZE))) { SNAP(sourceY.end, sourceY.start, monY.end); snaps |= SNAP_DOWN; } @@ -555,7 +553,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { const auto TIMERDELTA = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - TIMER).count(); const auto MSDELTA = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - MSTIMER).count(); - const auto MSMONITOR = 1000.0 / g_pHyprRenderer->m_pMostHzMonitor->refreshRate; + const auto MSMONITOR = 1000.0 / g_pHyprRenderer->m_pMostHzMonitor->m_refreshRate; static int totalMs = 0; bool canSkipUpdate = true; @@ -688,7 +686,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { if (PMONITOR && !SPECIAL) { DRAGGINGWINDOW->m_monitor = PMONITOR; - DRAGGINGWINDOW->moveToWorkspace(PMONITOR->activeWorkspace); + DRAGGINGWINDOW->moveToWorkspace(PMONITOR->m_activeWorkspace); DRAGGINGWINDOW->updateGroupOutputs(); DRAGGINGWINDOW->updateToplevel(); @@ -719,10 +717,10 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { if (!TILED) { const auto PNEWMON = g_pCompositor->getMonitorFromVector(pWindow->m_realPosition->value() + pWindow->m_realSize->value() / 2.f); pWindow->m_monitor = PNEWMON; - pWindow->moveToWorkspace(PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace); + pWindow->moveToWorkspace(PNEWMON->m_activeSpecialWorkspace ? PNEWMON->m_activeSpecialWorkspace : PNEWMON->m_activeWorkspace); pWindow->updateGroupOutputs(); - const auto PWORKSPACE = PNEWMON->activeSpecialWorkspace ? PNEWMON->activeSpecialWorkspace : PNEWMON->activeWorkspace; + const auto PWORKSPACE = PNEWMON->m_activeSpecialWorkspace ? PNEWMON->m_activeSpecialWorkspace : PNEWMON->m_activeWorkspace; if (PWORKSPACE->m_hasFullscreenWindow) g_pCompositor->setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); @@ -899,11 +897,11 @@ Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // ge const auto MAXSIZE = pWindow->requestedMaxSize(); - const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->vecSize.x) : - stringToPercentage(SIZEXSTR, g_pCompositor->m_lastMonitor->vecSize.x); + const float SIZEX = SIZEXSTR == "max" ? std::clamp(MAXSIZE.x, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->m_size.x) : + stringToPercentage(SIZEXSTR, g_pCompositor->m_lastMonitor->m_size.x); - const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->vecSize.y) : - stringToPercentage(SIZEYSTR, g_pCompositor->m_lastMonitor->vecSize.y); + const float SIZEY = SIZEYSTR == "max" ? std::clamp(MAXSIZE.y, MIN_WINDOW_SIZE, g_pCompositor->m_lastMonitor->m_size.y) : + stringToPercentage(SIZEYSTR, g_pCompositor->m_lastMonitor->m_size.y); sizeOverride = {SIZEX, SIZEY}; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 6c7f6d1a..53f3f823 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -205,7 +205,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire PNODE->percMaster = lastSplitPercent; // first, check if it isn't too big. - if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PMONITOR->vecSize.x * lastSplitPercent || MAXSIZE.y < PMONITOR->vecSize.y) { + if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PMONITOR->m_size.x * lastSplitPercent || MAXSIZE.y < PMONITOR->m_size.y) { // we can't continue. make it floating. pWindow->m_isFloating = true; m_lMasterNodesData.remove(*PNODE); @@ -218,7 +218,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire // first, check if it isn't too big. if (const auto MAXSIZE = pWindow->requestedMaxSize(); - MAXSIZE.x < PMONITOR->vecSize.x * (1 - lastSplitPercent) || MAXSIZE.y < PMONITOR->vecSize.y * (1.f / (WINDOWSONWORKSPACE - 1))) { + MAXSIZE.x < PMONITOR->m_size.x * (1 - lastSplitPercent) || MAXSIZE.y < PMONITOR->m_size.y * (1.f / (WINDOWSONWORKSPACE - 1))) { // we can't continue. make it floating. pWindow->m_isFloating = true; m_lMasterNodesData.remove(*PNODE); @@ -284,15 +284,15 @@ void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { void CHyprMasterLayout::recalculateMonitor(const MONITORID& monid) { const auto PMONITOR = g_pCompositor->getMonitorFromID(monid); - if (!PMONITOR || !PMONITOR->activeWorkspace) + if (!PMONITOR || !PMONITOR->m_activeWorkspace) return; g_pHyprRenderer->damageMonitor(PMONITOR); - if (PMONITOR->activeSpecialWorkspace) - calculateWorkspace(PMONITOR->activeSpecialWorkspace); + if (PMONITOR->m_activeSpecialWorkspace) + calculateWorkspace(PMONITOR->m_activeSpecialWorkspace); - calculateWorkspace(PMONITOR->activeWorkspace); + calculateWorkspace(PMONITOR->m_activeWorkspace); } void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { @@ -306,13 +306,13 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { const auto PFULLWINDOW = pWorkspace->getFullscreenWindow(); if (pWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - *PFULLWINDOW->m_realPosition = PMONITOR->vecPosition; - *PFULLWINDOW->m_realSize = PMONITOR->vecSize; + *PFULLWINDOW->m_realPosition = PMONITOR->m_position; + *PFULLWINDOW->m_realSize = PMONITOR->m_size; } else if (pWorkspace->m_fullscreenMode == FSMODE_MAXIMIZED) { SMasterNodeData fakeNode; fakeNode.pWindow = PFULLWINDOW; - fakeNode.position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; - fakeNode.size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; + fakeNode.position = PMONITOR->m_position + PMONITOR->m_reservedTopLeft; + fakeNode.size = PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight; fakeNode.workspaceID = pWorkspace->m_id; PFULLWINDOW->m_position = fakeNode.position; PFULLWINDOW->m_size = fakeNode.size; @@ -340,8 +340,8 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_id); const auto WINDOWS = getNodesOnWorkspace(pWorkspace->m_id); const auto STACKWINDOWS = WINDOWS - MASTERS; - const auto WSSIZE = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; - const auto WSPOS = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; + const auto WSSIZE = PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight; + const auto WSPOS = PMONITOR->m_position + PMONITOR->m_reservedTopLeft; if (orientation == ORIENTATION_CENTER) { if (STACKWINDOWS >= *SLAVECOUNTFORCENTER) { @@ -426,7 +426,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextX += WIDTH; } } else { // orientation left, right or center - float WIDTH = *PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecSize.x : WSSIZE.x; + float WIDTH = *PIGNORERESERVED && centerMasterWindow ? PMONITOR->m_size.x : WSSIZE.x; float heightLeft = WSSIZE.y; int mastersLeft = MASTERS; float nextX = 0; @@ -438,7 +438,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (orientation == ORIENTATION_RIGHT) { nextX = WSSIZE.x - WIDTH; } else if (centerMasterWindow) { - nextX = ((*PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecSize.x : WSSIZE.x) - WIDTH) / 2; + nextX = ((*PIGNORERESERVED && centerMasterWindow ? PMONITOR->m_size.x : WSSIZE.x) - WIDTH) / 2; } for (auto& nd : m_lMasterNodesData) { @@ -455,7 +455,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { } nd.size = Vector2D(WIDTH, HEIGHT); - nd.position = (*PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecPosition : WSPOS) + Vector2D(nextX, nextY); + nd.position = (*PIGNORERESERVED && centerMasterWindow ? PMONITOR->m_position : WSPOS) + Vector2D(nextX, nextY); applyNodeDataToWindow(&nd); mastersLeft--; @@ -530,7 +530,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextY += HEIGHT; } } else { // slaves for centered master window(s) - const float WIDTH = ((*PIGNORERESERVED ? PMONITOR->vecSize.x : WSSIZE.x) - PMASTERNODE->size.x) / 2.0; + const float WIDTH = ((*PIGNORERESERVED ? PMONITOR->m_size.x : WSSIZE.x) - PMASTERNODE->size.x) / 2.0; float heightLeft = 0; float heightLeftL = WSSIZE.y; float heightLeftR = WSSIZE.y; @@ -573,7 +573,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { continue; if (onRight) { - nextX = WIDTH + PMASTERNODE->size.x - (*PIGNORERESERVED ? PMONITOR->vecReservedTopLeft.x : 0); + nextX = WIDTH + PMASTERNODE->size.x - (*PIGNORERESERVED ? PMONITOR->m_reservedTopLeft.x : 0); nextY = nextYR; heightLeft = heightLeftR; slavesLeft = slavesLeftR; @@ -598,7 +598,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { } } - nd.size = Vector2D(*PIGNORERESERVED ? (WIDTH - (onRight ? PMONITOR->vecReservedBottomRight.x : PMONITOR->vecReservedTopLeft.x)) : WIDTH, HEIGHT); + nd.size = Vector2D(*PIGNORERESERVED ? (WIDTH - (onRight ? PMONITOR->m_reservedBottomRight.x : PMONITOR->m_reservedTopLeft.x)) : WIDTH, HEIGHT); nd.position = WSPOS + Vector2D(nextX, nextY); applyNodeDataToWindow(&nd); @@ -636,10 +636,10 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { } // for gaps outer - const bool DISPLAYLEFT = STICKS(pNode->position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(pNode->position.x + pNode->size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(pNode->position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(pNode->position.y + pNode->size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYLEFT = STICKS(pNode->position.x, PMONITOR->m_position.x + PMONITOR->m_reservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(pNode->position.x + pNode->size.x, PMONITOR->m_position.x + PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x); + const bool DISPLAYTOP = STICKS(pNode->position.y, PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(pNode->position.y + pNode->size.y, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); const auto PWINDOW = pNode->pWindow.lock(); // get specific gaps and rules for this workspace, @@ -737,10 +737,10 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne static auto SLAVECOUNTFORCENTER = CConfigValue("master:slave_count_for_center_master"); static auto PSMARTRESIZING = CConfigValue("master:smart_resizing"); - const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); - const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); + const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); + const bool DISPLAYRIGHT = STICKS(PWINDOW->m_position.x + PWINDOW->m_size.x, PMONITOR->m_position.x + PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x); + const bool DISPLAYTOP = STICKS(PWINDOW->m_position.y, PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y); + const bool DISPLAYLEFT = STICKS(PWINDOW->m_position.x, PMONITOR->m_position.x + PMONITOR->m_reservedTopLeft.x); const bool LEFT = corner == CORNER_TOPLEFT || corner == CORNER_BOTTOMLEFT; const bool TOP = corner == CORNER_TOPLEFT || corner == CORNER_TOPRIGHT; @@ -760,12 +760,12 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne m_bForceWarps = true; switch (orientation) { - case ORIENTATION_LEFT: delta = pixResize.x / PMONITOR->vecSize.x; break; - case ORIENTATION_RIGHT: delta = -pixResize.x / PMONITOR->vecSize.x; break; - case ORIENTATION_BOTTOM: delta = -pixResize.y / PMONITOR->vecSize.y; break; - case ORIENTATION_TOP: delta = pixResize.y / PMONITOR->vecSize.y; break; + case ORIENTATION_LEFT: delta = pixResize.x / PMONITOR->m_size.x; break; + case ORIENTATION_RIGHT: delta = -pixResize.x / PMONITOR->m_size.x; break; + case ORIENTATION_BOTTOM: delta = -pixResize.y / PMONITOR->m_size.y; break; + case ORIENTATION_TOP: delta = pixResize.y / PMONITOR->m_size.y; break; case ORIENTATION_CENTER: - delta = pixResize.x / PMONITOR->vecSize.x; + delta = pixResize.x / PMONITOR->m_size.x; if (STACKWINDOWS >= *SLAVECOUNTFORCENTER) { if (!NONE || !PNODE->isMaster) delta *= 2; @@ -776,7 +776,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne default: UNREACHABLE(); } - const auto workspaceIdForResizing = PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); + const auto workspaceIdForResizing = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); for (auto& n : m_lMasterNodesData) { if (n.isMaster && n.workspaceID == workspaceIdForResizing) n.percMaster = std::clamp(n.percMaster + delta, 0.05, 0.95); @@ -786,7 +786,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne const bool isStackVertical = orientation == ORIENTATION_LEFT || orientation == ORIENTATION_RIGHT || orientation == ORIENTATION_CENTER; const auto RESIZEDELTA = isStackVertical ? pixResize.y : pixResize.x; - const auto WSSIZE = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; + const auto WSSIZE = PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight; auto nodesInSameColumn = PNODE->isMaster ? MASTERS : STACKWINDOWS; if (orientation == ORIENTATION_CENTER && !PNODE->isMaster) @@ -856,7 +856,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne } } - recalculateMonitor(PMONITOR->ID); + recalculateMonitor(PMONITOR->m_id); m_bForceWarps = false; } @@ -889,8 +889,8 @@ void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFul } else { // apply new pos and size being monitors' box if (EFFECTIVE_MODE == FSMODE_FULLSCREEN) { - *pWindow->m_realPosition = PMONITOR->vecPosition; - *pWindow->m_realSize = PMONITOR->vecSize; + *pWindow->m_realPosition = PMONITOR->m_position; + *pWindow->m_realSize = PMONITOR->m_size; } else { // This is a massive hack. // We make a fake "only" node and apply @@ -898,8 +898,8 @@ void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFul SMasterNodeData fakeNode; fakeNode.pWindow = pWindow; - fakeNode.position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; - fakeNode.size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; + fakeNode.position = PMONITOR->m_position + PMONITOR->m_reservedTopLeft; + fakeNode.size = PMONITOR->m_size - PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight; fakeNode.workspaceID = pWindow->workspaceID(); pWindow->m_position = fakeNode.position; pWindow->m_size = fakeNode.size; @@ -1446,22 +1446,22 @@ Vector2D CHyprMasterLayout::predictSizeForNewWindowTiled() { if (!g_pCompositor->m_lastMonitor) return {}; - const int NODES = getNodesOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); + const int NODES = getNodesOnWorkspace(g_pCompositor->m_lastMonitor->m_activeWorkspace->m_id); if (NODES <= 0) - return g_pCompositor->m_lastMonitor->vecSize; + return g_pCompositor->m_lastMonitor->m_size; - const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); + const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_lastMonitor->m_activeWorkspace->m_id); if (!MASTER) // wtf return {}; if (*PNEWSTATUS == "master") { return MASTER->size; } else { - const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_lastMonitor->activeWorkspace->m_id); + const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_lastMonitor->m_activeWorkspace->m_id); // TODO: make this better - return {g_pCompositor->m_lastMonitor->vecSize.x - MASTER->size.x, g_pCompositor->m_lastMonitor->vecSize.y / (SLAVES + 1)}; + return {g_pCompositor->m_lastMonitor->m_size.x - MASTER->size.x, g_pCompositor->m_lastMonitor->m_size.y / (SLAVES + 1)}; } return {}; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index c9b270e2..0d3aa9c7 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -21,7 +21,7 @@ static int wlTick(SP self, void* data) { g_pAnimationManager->onTicked(); if (g_pCompositor->m_sessionActive && g_pAnimationManager && g_pHookSystem && !g_pCompositor->m_unsafeState && - std::ranges::any_of(g_pCompositor->m_monitors, [](const auto& mon) { return mon->m_bEnabled && mon->output; })) { + std::ranges::any_of(g_pCompositor->m_monitors, [](const auto& mon) { return mon->m_enabled && mon->m_output; })) { g_pAnimationManager->tick(); EMIT_HOOK_EVENT("tick", nullptr); } @@ -64,7 +64,7 @@ static void updateColorVariable(CAnimatedVariable& av, const float P const auto& L1 = av.begun().asOkLab(); const auto& L2 = av.goal().asOkLab(); - static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + (two - one) * progress; }; + static const auto lerp = [](const float one, const float two, const float progress) -> float { return one + ((two - one) * progress); }; const Hyprgraphics::CColor lerped = Hyprgraphics::CColor::SOkLab{ .l = lerp(L1.l, L2.l, POINTY), @@ -117,7 +117,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { // still doing the full damage hack for floating because sometimes when the window // goes through multiple monitors the last rendered frame is missing damage somehow?? const CBox windowBoxNoOffset = w->getFullWindowBoundingBox(); - const CBox monitorBox = {PMONITOR->vecPosition, PMONITOR->vecSize}; + const CBox monitorBox = {PMONITOR->m_position, PMONITOR->m_size}; if (windowBoxNoOffset.intersection(monitorBox) != windowBoxNoOffset) // on edges between multiple monitors g_pHyprRenderer->damageWindow(w, true); } @@ -262,9 +262,9 @@ void CHyprAnimationManager::scheduleTick() { return; } - float refreshDelayMs = std::floor(1000.f / PMOSTHZ->refreshRate); + float refreshDelayMs = std::floor(1000.f / PMOSTHZ->m_refreshRate); - const float SINCEPRES = std::chrono::duration_cast(Time::steadyNow() - PMOSTHZ->lastPresentationTimer.chrono()).count() / 1000.F; + const float SINCEPRES = std::chrono::duration_cast(Time::steadyNow() - PMOSTHZ->m_lastPresentationTimer.chrono()).count() / 1000.F; const auto TOPRES = std::clamp(refreshDelayMs - SINCEPRES, 1.1f, 1000.f); // we can't send 0, that will disarm it @@ -308,13 +308,13 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, if (force != "") { if (force == "bottom") - posOffset = Vector2D(GOALPOS.x, PMONITOR->vecPosition.y + PMONITOR->vecSize.y); + posOffset = Vector2D(GOALPOS.x, PMONITOR->m_position.y + PMONITOR->m_size.y); else if (force == "left") posOffset = GOALPOS - Vector2D(GOALSIZE.x, 0.0); else if (force == "right") posOffset = GOALPOS + Vector2D(GOALSIZE.x, 0.0); else - posOffset = Vector2D(GOALPOS.x, PMONITOR->vecPosition.y - GOALSIZE.y); + posOffset = Vector2D(GOALPOS.x, PMONITOR->m_position.y - GOALSIZE.y); if (!close) pWindow->m_realPosition->setValue(posOffset); @@ -327,10 +327,10 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, const auto MIDPOINT = GOALPOS + GOALSIZE / 2.f; // check sides it touches - const bool DISPLAYLEFT = STICKS(pWindow->m_position.x, PMONITOR->vecPosition.x + PMONITOR->vecReservedTopLeft.x); - const bool DISPLAYRIGHT = STICKS(pWindow->m_position.x + pWindow->m_size.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x); - const bool DISPLAYTOP = STICKS(pWindow->m_position.y, PMONITOR->vecPosition.y + PMONITOR->vecReservedTopLeft.y); - const bool DISPLAYBOTTOM = STICKS(pWindow->m_position.y + pWindow->m_size.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y); + const bool DISPLAYLEFT = STICKS(pWindow->m_position.x, PMONITOR->m_position.x + PMONITOR->m_reservedTopLeft.x); + const bool DISPLAYRIGHT = STICKS(pWindow->m_position.x + pWindow->m_size.x, PMONITOR->m_position.x + PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x); + const bool DISPLAYTOP = STICKS(pWindow->m_position.y, PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y); + const bool DISPLAYBOTTOM = STICKS(pWindow->m_position.y + pWindow->m_size.y, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); if (DISPLAYBOTTOM && DISPLAYTOP) { if (DISPLAYLEFT && DISPLAYRIGHT) { @@ -345,10 +345,10 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, } else if (DISPLAYBOTTOM) { posOffset = GOALPOS + Vector2D(0.0, GOALSIZE.y); } else { - if (MIDPOINT.y > PMONITOR->vecPosition.y + PMONITOR->vecSize.y / 2.f) - posOffset = Vector2D(GOALPOS.x, PMONITOR->vecPosition.y + PMONITOR->vecSize.y); + if (MIDPOINT.y > PMONITOR->m_position.y + PMONITOR->m_size.y / 2.f) + posOffset = Vector2D(GOALPOS.x, PMONITOR->m_position.y + PMONITOR->m_size.y); else - posOffset = Vector2D(GOALPOS.x, PMONITOR->vecPosition.y - GOALSIZE.y); + posOffset = Vector2D(GOALPOS.x, PMONITOR->m_position.y - GOALSIZE.y); } if (!close) diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index 9a949283..b7c2e4e2 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -291,8 +291,8 @@ void CCursorManager::updateTheme() { float highestScale = 1.0; for (auto const& m : g_pCompositor->m_monitors) { - if (m->scale > highestScale) - highestScale = m->scale; + if (m->m_scale > highestScale) + highestScale = m->m_scale; } m_fCursorScale = highestScale; @@ -308,7 +308,7 @@ void CCursorManager::updateTheme() { } for (auto const& m : g_pCompositor->m_monitors) { - m->forceFullFrames = 5; + m->m_forceFullFrames = 5; g_pCompositor->scheduleFrameForMonitor(m, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_SHAPE); } } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 7d07a717..1bd7e1a2 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -49,16 +49,16 @@ static std::vector> getHyprlandLaunchEnv(PHL return {}; const auto PMONITOR = g_pCompositor->m_lastMonitor; - if (!PMONITOR || !PMONITOR->activeWorkspace) + if (!PMONITOR || !PMONITOR->m_activeWorkspace) return {}; std::vector> result; if (!pInitialWorkspace) { - if (PMONITOR->activeSpecialWorkspace) - pInitialWorkspace = PMONITOR->activeSpecialWorkspace; + if (PMONITOR->m_activeSpecialWorkspace) + pInitialWorkspace = PMONITOR->m_activeSpecialWorkspace; else - pInitialWorkspace = PMONITOR->activeWorkspace; + pInitialWorkspace = PMONITOR->m_activeWorkspace; } result.push_back(std::make_pair<>("HL_INITIAL_WORKSPACE_TOKEN", @@ -349,13 +349,13 @@ bool CKeybindManager::tryMoveFocusToMonitor(PHLMONITOR monitor) { static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); static auto PNOWARPS = CConfigValue("cursor:no_warps"); - const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; - const auto PNEWMAINWORKSPACE = monitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; + const auto PNEWMAINWORKSPACE = monitor->m_activeWorkspace; g_pInputManager->unconstrainMouse(); PNEWMAINWORKSPACE->rememberPrevWorkspace(PWORKSPACE); - const auto PNEWWORKSPACE = monitor->activeSpecialWorkspace ? monitor->activeSpecialWorkspace : PNEWMAINWORKSPACE; + const auto PNEWWORKSPACE = monitor->m_activeSpecialWorkspace ? monitor->m_activeSpecialWorkspace : PNEWMAINWORKSPACE; const auto PNEWWINDOW = PNEWWORKSPACE->getLastFocusedWindow(); if (PNEWWINDOW) { @@ -1196,7 +1196,7 @@ SDispatchResult CKeybindManager::centerWindow(std::string args) { auto RESERVEDOFFSET = Vector2D(); if (args == "1") - RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f; + RESERVEDOFFSET = (PMONITOR->m_reservedTopLeft - PMONITOR->m_reservedBottomRight) / 2.f; *PWINDOW->m_realPosition = PMONITOR->middle() - PWINDOW->m_realSize->goal() / 2.f + RESERVEDOFFSET; PWINDOW->m_position = PWINDOW->m_realPosition->goal(); @@ -1256,7 +1256,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { if (!PMONITOR) return {.success = false, .error = "Last monitor not found"}; - const auto PCURRENTWORKSPACE = PMONITOR->activeWorkspace; + const auto PCURRENTWORKSPACE = PMONITOR->m_activeWorkspace; const bool EXPLICITPREVIOUS = args.contains("previous"); const auto& [workspaceToChangeTo, workspaceName] = getWorkspaceToChangeFromArgs(args, PCURRENTWORKSPACE, PMONITOR); @@ -1284,7 +1284,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { auto pWorkspaceToChangeTo = g_pCompositor->getWorkspaceByID(BISWORKSPACECURRENT ? PPREVWS.id : workspaceToChangeTo); if (!pWorkspaceToChangeTo) pWorkspaceToChangeTo = - g_pCompositor->createNewWorkspace(BISWORKSPACECURRENT ? PPREVWS.id : workspaceToChangeTo, PMONITOR->ID, BISWORKSPACECURRENT ? PPREVWS.name : workspaceName); + g_pCompositor->createNewWorkspace(BISWORKSPACECURRENT ? PPREVWS.id : workspaceToChangeTo, PMONITOR->m_id, BISWORKSPACECURRENT ? PPREVWS.name : workspaceName); if (!BISWORKSPACECURRENT && pWorkspaceToChangeTo->m_isSpecialWorkspace) { PMONITOR->setSpecialWorkspace(pWorkspaceToChangeTo); @@ -1561,9 +1561,9 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { return {.success = false, .error = "last window has no monitor?"}; if (arg == 'l' || arg == 'r') { - if (STICKS(PLASTWINDOW->m_position.x, PMONITOR->vecPosition.x) && STICKS(PLASTWINDOW->m_size.x, PMONITOR->vecSize.x)) + if (STICKS(PLASTWINDOW->m_position.x, PMONITOR->m_position.x) && STICKS(PLASTWINDOW->m_size.x, PMONITOR->m_size.x)) return {.success = false, .error = "move does not make sense, would return back"}; - } else if (STICKS(PLASTWINDOW->m_position.y, PMONITOR->vecPosition.y) && STICKS(PLASTWINDOW->m_size.y, PMONITOR->vecSize.y)) + } else if (STICKS(PLASTWINDOW->m_position.y, PMONITOR->m_position.y) && STICKS(PLASTWINDOW->m_size.y, PMONITOR->m_size.y)) return {.success = false, .error = "move does not make sense, would return back"}; CBox box = PMONITOR->logicalBox(); @@ -1588,8 +1588,8 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { break; } - const auto PWINDOWCANDIDATE = g_pCompositor->getWindowInDirection(box, PMONITOR->activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspace : PMONITOR->activeWorkspace, arg, - PLASTWINDOW, PLASTWINDOW->m_isFloating); + const auto PWINDOWCANDIDATE = g_pCompositor->getWindowInDirection(box, PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace, + arg, PLASTWINDOW, PLASTWINDOW->m_isFloating); if (PWINDOWCANDIDATE) switchToWindow(PWINDOWCANDIDATE); @@ -1661,9 +1661,9 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { return {.success = false, .error = std::format("Monitor {} not found", args.substr(4))}; if (silent) - moveActiveToWorkspaceSilent(PNEWMONITOR->activeWorkspace->getConfigName()); + moveActiveToWorkspaceSilent(PNEWMONITOR->m_activeWorkspace->getConfigName()); else - moveActiveToWorkspace(PNEWMONITOR->activeWorkspace->getConfigName()); + moveActiveToWorkspace(PNEWMONITOR->m_activeWorkspace->getConfigName()); return {}; } @@ -1687,12 +1687,12 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize(); switch (arg) { - case 'l': vPosx = PMONITOR->vecReservedTopLeft.x + BORDERSIZE + PMONITOR->vecPosition.x; break; - case 'r': vPosx = PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->vecPosition.x; break; + case 'l': vPosx = PMONITOR->m_reservedTopLeft.x + BORDERSIZE + PMONITOR->m_position.x; break; + case 'r': vPosx = PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->m_position.x; break; case 't': - case 'u': vPosy = PMONITOR->vecReservedTopLeft.y + BORDERSIZE + PMONITOR->vecPosition.y; break; + case 'u': vPosy = PMONITOR->m_reservedTopLeft.y + BORDERSIZE + PMONITOR->m_position.y; break; case 'b': - case 'd': vPosy = PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->vecPosition.y; break; + case 'd': vPosy = PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->m_position.y; break; } *PLASTWINDOW->m_realPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_realPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_realPosition->goal().y)); @@ -1720,7 +1720,7 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { if (!PMONITORTOCHANGETO) return {.success = false, .error = "Nowhere to move active window to"}; - const auto PWORKSPACE = PMONITORTOCHANGETO->activeWorkspace; + const auto PWORKSPACE = PMONITORTOCHANGETO->m_activeWorkspace; if (silent) moveActiveToWorkspaceSilent(PWORKSPACE->getConfigName()); else @@ -1919,7 +1919,7 @@ SDispatchResult CKeybindManager::moveCursor(std::string args) { SDispatchResult CKeybindManager::workspaceOpt(std::string args) { // current workspace - const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; if (!PWORKSPACE) return {.success = false, .error = "Workspace not found"}; // ???? @@ -1966,7 +1966,7 @@ SDispatchResult CKeybindManager::workspaceOpt(std::string args) { } // recalc mon - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(g_pCompositor->m_lastMonitor->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(g_pCompositor->m_lastMonitor->m_id); return {}; } @@ -2012,7 +2012,7 @@ SDispatchResult CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) } // get the current workspace - const auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + const auto PCURRENTWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; if (!PCURRENTWORKSPACE) { Debug::log(ERR, "moveCurrentWorkspaceToMonitor invalid workspace!"); return {.success = false, .error = "moveCurrentWorkspaceToMonitor invalid workspace!"}; @@ -2073,7 +2073,7 @@ SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args auto pWorkspace = g_pCompositor->getWorkspaceByID(workspaceID); if (!pWorkspace) { - pWorkspace = g_pCompositor->createNewWorkspace(workspaceID, PCURRMONITOR->ID, workspaceName); + pWorkspace = g_pCompositor->createNewWorkspace(workspaceID, PCURRMONITOR->m_id, workspaceName); // we can skip the moving, since it's already on the current monitor changeworkspace(pWorkspace->getConfigName()); return {}; @@ -2086,7 +2086,7 @@ SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args // Workspace to focus is previous workspace pWorkspace = g_pCompositor->getWorkspaceByID(PREVWS.id); if (!pWorkspace) - pWorkspace = g_pCompositor->createNewWorkspace(PREVWS.id, PCURRMONITOR->ID, PREVWS.name); + pWorkspace = g_pCompositor->createNewWorkspace(PREVWS.id, PCURRMONITOR->m_id, PREVWS.name); workspaceID = pWorkspace->m_id; } @@ -2137,13 +2137,13 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { Debug::log(LOG, "Toggling special workspace {} to closed", workspaceID); PMONITOR->setSpecialWorkspace(nullptr); - focusedWorkspace = PMONITOR->activeWorkspace; + focusedWorkspace = PMONITOR->m_activeWorkspace; } else { Debug::log(LOG, "Toggling special workspace {} to open", workspaceID); auto PSPECIALWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceID); if (!PSPECIALWORKSPACE) - PSPECIALWORKSPACE = g_pCompositor->createNewWorkspace(workspaceID, PMONITOR->ID, workspaceName); + PSPECIALWORKSPACE = g_pCompositor->createNewWorkspace(workspaceID, PMONITOR->m_id, workspaceName); PMONITOR->setSpecialWorkspace(PSPECIALWORKSPACE); @@ -2167,7 +2167,7 @@ SDispatchResult CKeybindManager::forceRendererReload(std::string args) { bool overAgain = false; for (auto const& m : g_pCompositor->m_monitors) { - if (!m->output) + if (!m->m_output) continue; auto rule = g_pConfigManager->getMonitorRuleFor(m); @@ -2274,7 +2274,7 @@ SDispatchResult CKeybindManager::resizeWindow(std::string args) { SDispatchResult CKeybindManager::circleNext(std::string arg) { if (g_pCompositor->m_lastWindow.expired()) { // if we have a clear focus, find the first window and get the next focusable. - const auto PWS = g_pCompositor->m_lastMonitor->activeWorkspace; + const auto PWS = g_pCompositor->m_lastMonitor->m_activeWorkspace; if (PWS && PWS->getWindows() > 0) { const auto PWINDOW = PWS->getFirstWindow(); switchToWindow(PWINDOW); @@ -2319,8 +2319,8 @@ SDispatchResult CKeybindManager::focusWindow(std::string regexp) { updateRelativeCursorCoords(); - if (g_pCompositor->m_lastMonitor && g_pCompositor->m_lastMonitor->activeWorkspace != PWINDOW->m_workspace && - g_pCompositor->m_lastMonitor->activeSpecialWorkspace != PWINDOW->m_workspace) { + if (g_pCompositor->m_lastMonitor && g_pCompositor->m_lastMonitor->m_activeWorkspace != PWINDOW->m_workspace && + g_pCompositor->m_lastMonitor->m_activeSpecialWorkspace != PWINDOW->m_workspace) { Debug::log(LOG, "Fake executing workspace to move focus"); changeworkspace(PWORKSPACE->getConfigName()); } @@ -2670,19 +2670,19 @@ SDispatchResult CKeybindManager::dpms(std::string arg) { for (auto const& m : g_pCompositor->m_monitors) { - if (!port.empty() && m->szName != port) + if (!port.empty() && m->m_name != port) continue; if (isToggle) - enable = !m->dpmsStatus; + enable = !m->m_dpmsStatus; - m->output->state->resetExplicitFences(); - m->output->state->setEnabled(enable); + m->m_output->state->resetExplicitFences(); + m->m_output->state->setEnabled(enable); - m->dpmsStatus = enable; + m->m_dpmsStatus = enable; - if (!m->state.commit()) { - Debug::log(ERR, "Couldn't commit output {}", m->szName); + if (!m->m_state.commit()) { + Debug::log(ERR, "Couldn't commit output {}", m->m_name); res.success = false; res.error = "Couldn't commit output {}"; } @@ -2690,7 +2690,7 @@ SDispatchResult CKeybindManager::dpms(std::string arg) { if (enable) g_pHyprRenderer->damageMonitor(m); - m->events.dpmsChanged.emit(); + m->m_events.dpmsChanged.emit(); } g_pCompositor->m_dpmsStateOn = enable; @@ -2774,7 +2774,7 @@ SDispatchResult CKeybindManager::pinActive(std::string args) { return {.success = false, .error = "pin: window not found"}; } - PWINDOW->m_workspace = PMONITOR->activeWorkspace; + PWINDOW->m_workspace = PMONITOR->m_activeWorkspace; PWINDOW->updateDynamicRules(); g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); @@ -3274,7 +3274,7 @@ SDispatchResult CKeybindManager::setProp(std::string args) { } for (auto const& m : g_pCompositor->m_monitors) - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->ID); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m->m_id); return {}; } diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 1c9036bf..1dcc0107 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -29,9 +29,9 @@ CPointerManager::CPointerManager() { onMonitorLayoutChange(); - PMONITOR->events.modeChanged.registerStaticListener([this](void* owner, std::any data) { g_pEventLoopManager->doLater([this]() { onMonitorLayoutChange(); }); }, nullptr); - PMONITOR->events.disconnect.registerStaticListener([this](void* owner, std::any data) { g_pEventLoopManager->doLater([this]() { onMonitorLayoutChange(); }); }, nullptr); - PMONITOR->events.destroy.registerStaticListener( + PMONITOR->m_events.modeChanged.registerStaticListener([this](void* owner, std::any data) { g_pEventLoopManager->doLater([this]() { onMonitorLayoutChange(); }); }, nullptr); + PMONITOR->m_events.disconnect.registerStaticListener([this](void* owner, std::any data) { g_pEventLoopManager->doLater([this]() { onMonitorLayoutChange(); }); }, nullptr); + PMONITOR->m_events.destroy.registerStaticListener( [this](void* owner, std::any data) { if (g_pCompositor && !g_pCompositor->m_isShuttingDown) std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); }); @@ -179,7 +179,7 @@ void CPointerManager::recheckEnteredOutputs() { auto box = getCursorBoxGlobal(); for (auto const& s : monitorStates) { - if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_bEnabled) + if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled) continue; const bool overlaps = box.overlaps(s->monitor->logicalBox()); @@ -191,14 +191,15 @@ void CPointerManager::recheckEnteredOutputs() { continue; currentCursorImage.surface->resource()->enter(s->monitor.lock()); - PROTO::fractional->sendScale(currentCursorImage.surface->resource(), s->monitor->scale); - g_pCompositor->setPreferredScaleForSurface(currentCursorImage.surface->resource(), s->monitor->scale); + PROTO::fractional->sendScale(currentCursorImage.surface->resource(), s->monitor->m_scale); + g_pCompositor->setPreferredScaleForSurface(currentCursorImage.surface->resource(), s->monitor->m_scale); } else if (s->entered && !overlaps) { s->entered = false; // if we are using hw cursors, prevent // the cursor from being stuck at the last point. - if (!s->hardwareFailed && (s->monitor->output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) + if (!s->hardwareFailed && + (s->monitor->m_output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) setHWCursorBuffer(s, nullptr); if (!currentCursorImage.surface) @@ -232,7 +233,7 @@ void CPointerManager::resetCursorImage(bool apply) { currentCursorImage.hotspot = {0, 0}; for (auto const& s : monitorStates) { - if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_bEnabled) + if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled) continue; s->entered = false; @@ -242,14 +243,14 @@ void CPointerManager::resetCursorImage(bool apply) { return; for (auto const& ms : monitorStates) { - if (!ms->monitor || !ms->monitor->m_bEnabled || !ms->monitor->dpmsStatus) { + if (!ms->monitor || !ms->monitor->m_enabled || !ms->monitor->m_dpmsStatus) { Debug::log(TRACE, "Not updating hw cursors: disabled / dpms off display"); continue; } if (ms->cursorFrontBuffer) { - if (ms->monitor->output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER) - ms->monitor->output->setCursor(nullptr, {}); + if (ms->monitor->m_output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER) + ms->monitor->m_output->setCursor(nullptr, {}); ms->cursorFrontBuffer = nullptr; } } @@ -259,7 +260,7 @@ void CPointerManager::updateCursorBackend() { const auto CURSORBOX = getCursorBoxGlobal(); for (auto const& m : g_pCompositor->m_monitors) { - if (!m->m_bEnabled || !m->dpmsStatus) { + if (!m->m_enabled || !m->m_dpmsStatus) { Debug::log(TRACE, "Not updating hw cursors: disabled / dpms off display"); continue; } @@ -275,7 +276,7 @@ void CPointerManager::updateCursorBackend() { } if (state->softwareLocks > 0 || g_pConfigManager->shouldUseSoftwareCursors(m) || !attemptHardwareCursor(state)) { - Debug::log(TRACE, "Output {} rejected hardware cursors, falling back to sw", m->szName); + Debug::log(TRACE, "Output {} rejected hardware cursors, falling back to sw", m->m_name); state->box = getCursorBoxLogicalForMonitor(state->monitor.lock()); state->hardwareFailed = true; @@ -305,11 +306,11 @@ void CPointerManager::onCursorMoved() { auto CROSSES = !m->logicalBox().intersection(CURSORBOX).empty(); if (!CROSSES && state->cursorFrontBuffer) { - Debug::log(TRACE, "onCursorMoved for output {}: cursor left the viewport, removing it from the backend", m->szName); + Debug::log(TRACE, "onCursorMoved for output {}: cursor left the viewport, removing it from the backend", m->m_name); setHWCursorBuffer(state, nullptr); continue; } else if (CROSSES && !state->cursorFrontBuffer) { - Debug::log(TRACE, "onCursorMoved for output {}: cursor entered the output, but no front buffer, forcing recalc", m->szName); + Debug::log(TRACE, "onCursorMoved for output {}: cursor entered the output, but no front buffer, forcing recalc", m->m_name); recalc = true; } @@ -322,9 +323,9 @@ void CPointerManager::onCursorMoved() { continue; const auto CURSORPOS = getCursorPosForMonitor(m); - m->output->moveCursor(CURSORPOS, m->shouldSkipScheduleFrameOnMouseEvent()); + m->m_output->moveCursor(CURSORPOS, m->shouldSkipScheduleFrameOnMouseEvent()); - state->monitor->scanoutNeedsCursorUpdate = true; + state->monitor->m_scanoutNeedsCursorUpdate = true; } if (recalc) @@ -332,13 +333,13 @@ void CPointerManager::onCursorMoved() { } bool CPointerManager::attemptHardwareCursor(SP state) { - auto output = state->monitor->output; + auto output = state->monitor->m_output; if (!(output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) return false; const auto CURSORPOS = getCursorPosForMonitor(state->monitor.lock()); - state->monitor->output->moveCursor(CURSORPOS, state->monitor->shouldSkipScheduleFrameOnMouseEvent()); + state->monitor->m_output->moveCursor(CURSORPOS, state->monitor->shouldSkipScheduleFrameOnMouseEvent()); auto texture = getCurrentCursorTexture(); @@ -369,14 +370,14 @@ bool CPointerManager::attemptHardwareCursor(SP state, SP buf) { - if (!(state->monitor->output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) + if (!(state->monitor->m_output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) return false; const auto HOTSPOT = transformedHotspot(state->monitor.lock()); - Debug::log(TRACE, "[pointer] hw transformed hotspot for {}: {}", state->monitor->szName, HOTSPOT); + Debug::log(TRACE, "[pointer] hw transformed hotspot for {}: {}", state->monitor->m_name, HOTSPOT); - if (!state->monitor->output->setCursor(buf, HOTSPOT)) + if (!state->monitor->m_output->setCursor(buf, HOTSPOT)) return false; state->cursorFrontBuffer = buf; @@ -384,13 +385,13 @@ bool CPointerManager::setHWCursorBuffer(SP state, SPmonitor->shouldSkipScheduleFrameOnMouseEvent()) g_pCompositor->scheduleFrameForMonitor(state->monitor.lock(), Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_SHAPE); - state->monitor->scanoutNeedsCursorUpdate = true; + state->monitor->m_scanoutNeedsCursorUpdate = true; return true; } SP CPointerManager::renderHWCursorBuffer(SP state, SP texture) { - auto maxSize = state->monitor->output->cursorPlaneSize(); + auto maxSize = state->monitor->m_output->cursorPlaneSize(); auto const& cursorSize = currentCursorImage.size; static auto PCPUBUFFER = CConfigValue("cursor:use_cpu_buffer"); @@ -408,14 +409,14 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->cursorSwapchain || maxSize != state->monitor->cursorSwapchain->currentOptions().size || - shouldUseCpuBuffer != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) { + if (!state->monitor->m_cursorSwapchain || maxSize != state->monitor->m_cursorSwapchain->currentOptions().size || + shouldUseCpuBuffer != (state->monitor->m_cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) { - if (!state->monitor->cursorSwapchain || shouldUseCpuBuffer != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) { + if (!state->monitor->m_cursorSwapchain || shouldUseCpuBuffer != (state->monitor->m_cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) { - auto allocator = state->monitor->output->getBackend()->preferredAllocator(); + auto allocator = state->monitor->m_output->getBackend()->preferredAllocator(); if (shouldUseCpuBuffer) { - for (const auto& a : state->monitor->output->getBackend()->getAllocators()) { + for (const auto& a : state->monitor->m_output->getBackend()->getAllocators()) { if (a->type() == Aquamarine::AQ_ALLOCATOR_TYPE_DRM_DUMB) { allocator = a; break; @@ -423,23 +424,23 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->output->getBackend(); - auto primary = backend->getPrimary(); - state->monitor->cursorSwapchain = Aquamarine::CSwapchain::create(allocator, primary ? primary.lock() : backend); + auto backend = state->monitor->m_output->getBackend(); + auto primary = backend->getPrimary(); + state->monitor->m_cursorSwapchain = Aquamarine::CSwapchain::create(allocator, primary ? primary.lock() : backend); } - auto options = state->monitor->cursorSwapchain->currentOptions(); + auto options = state->monitor->m_cursorSwapchain->currentOptions(); options.size = maxSize; options.length = 2; options.scanout = true; options.cursor = true; - options.multigpu = state->monitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_drmFD; + options.multigpu = state->monitor->m_output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_drmFD; // We do not set the format (unless shm). If it's unset (DRM_FORMAT_INVALID) then the swapchain will pick for us, // but if it's set, we don't wanna change it. if (shouldUseCpuBuffer) options.format = DRM_FORMAT_ARGB8888; - if (!state->monitor->cursorSwapchain->reconfigure(options)) { + if (!state->monitor->m_cursorSwapchain->reconfigure(options)) { Debug::log(TRACE, "Failed to reconfigure cursor swapchain"); return nullptr; } @@ -449,11 +450,11 @@ SP CPointerManager::renderHWCursorBuffer(SPcursorRendered) - state->monitor->cursorSwapchain->rollback(); + state->monitor->m_cursorSwapchain->rollback(); state->cursorRendered = true; - auto buf = state->monitor->cursorSwapchain->next(nullptr); + auto buf = state->monitor->m_cursorSwapchain->next(nullptr); if (!buf) { Debug::log(TRACE, "Failed to acquire a buffer from the cursor swapchain"); return nullptr; @@ -519,10 +520,10 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->transform; + const auto TR = state->monitor->m_transform; // we need to scale the cursor to the right size, because it might not be (esp with XCursor) - const auto SCALE = texture->m_vSize / (currentCursorImage.size / currentCursorImage.scale * state->monitor->scale); + const auto SCALE = texture->m_vSize / (currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale); cairo_matrix_scale(&matrixPre, SCALE.x, SCALE.y); if (TR) { @@ -565,7 +566,7 @@ SP CPointerManager::renderHWCursorBuffer(SPmakeEGLCurrent(); g_pHyprOpenGL->m_RenderData.pMonitor = state->monitor; - auto RBO = g_pHyprRenderer->getOrCreateRenderbuffer(buf, state->monitor->cursorSwapchain->currentOptions().format); + auto RBO = g_pHyprRenderer->getOrCreateRenderbuffer(buf, state->monitor->m_cursorSwapchain->currentOptions().format); if (!RBO) { Debug::log(TRACE, "Failed to create cursor RB with format {}, mod {}", buf->dmabuf().format, buf->dmabuf().modifier); return nullptr; @@ -576,9 +577,9 @@ SP CPointerManager::renderHWCursorBuffer(SPbeginSimple(state->monitor.lock(), {0, 0, INT16_MAX, INT16_MAX}, RBO); g_pHyprOpenGL->clear(CHyprColor{0.F, 0.F, 0.F, 0.F}); - CBox xbox = {{}, Vector2D{currentCursorImage.size / currentCursorImage.scale * state->monitor->scale}.round()}; - Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->szName, currentCursorImage.size, cursorSize, - currentCursorImage.scale, state->monitor->scale, xbox.size()); + CBox xbox = {{}, Vector2D{currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale}.round()}; + Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->m_name, currentCursorImage.size, cursorSize, + currentCursorImage.scale, state->monitor->m_scale, xbox.size()); g_pHyprOpenGL->renderTexture(texture, xbox, 1.F); @@ -609,14 +610,14 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: box.y = overridePos->y; } - if (box.intersection(CBox{{}, {pMonitor->vecSize}}).empty()) + if (box.intersection(CBox{{}, {pMonitor->m_size}}).empty()) return; auto texture = getCurrentCursorTexture(); if (!texture) return; - box.scale(pMonitor->scale); + box.scale(pMonitor->m_scale); box.x = std::round(box.x); box.y = std::round(box.y); @@ -631,25 +632,25 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: } Vector2D CPointerManager::getCursorPosForMonitor(PHLMONITOR pMonitor) { - return CBox{pointerPos - pMonitor->vecPosition, {0, 0}} - .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecTransformedSize.x / pMonitor->scale, - pMonitor->vecTransformedSize.y / pMonitor->scale) + return CBox{pointerPos - pMonitor->m_position, {0, 0}} + .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_transformedSize.x / pMonitor->m_scale, + pMonitor->m_transformedSize.y / pMonitor->m_scale) .pos() * - pMonitor->scale; + pMonitor->m_scale; } Vector2D CPointerManager::transformedHotspot(PHLMONITOR pMonitor) { - if (!pMonitor->cursorSwapchain) + if (!pMonitor->m_cursorSwapchain) return {}; // doesn't matter, we have no hw cursor, and this is only for hw cursors - return CBox{currentCursorImage.hotspot * pMonitor->scale, {0, 0}} - .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->cursorSwapchain->currentOptions().size.x, - pMonitor->cursorSwapchain->currentOptions().size.y) + return CBox{currentCursorImage.hotspot * pMonitor->m_scale, {0, 0}} + .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_cursorSwapchain->currentOptions().size.x, + pMonitor->m_cursorSwapchain->currentOptions().size.y) .pos(); } CBox CPointerManager::getCursorBoxLogicalForMonitor(PHLMONITOR pMonitor) { - return getCursorBoxGlobal().translate(-pMonitor->vecPosition); + return getCursorBoxGlobal().translate(-pMonitor->m_position); } CBox CPointerManager::getCursorBoxGlobal() { @@ -736,11 +737,11 @@ void CPointerManager::damageIfSoftware() { auto b = getCursorBoxGlobal().expand(4); for (auto const& mw : monitorStates) { - if (mw->monitor.expired() || !mw->monitor->output) + if (mw->monitor.expired() || !mw->monitor->m_output) continue; if ((mw->softwareLocks > 0 || mw->hardwareFailed || g_pConfigManager->shouldUseSoftwareCursors(mw->monitor.lock())) && - b.overlaps({mw->monitor->vecPosition, mw->monitor->vecSize})) { + b.overlaps({mw->monitor->m_position, mw->monitor->m_size})) { g_pHyprRenderer->damageBox(b, mw->monitor->shouldSkipScheduleFrameOnMouseEvent()); break; } @@ -778,7 +779,7 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { // find x and y size of the entire space const auto& MONITORS = g_pCompositor->m_monitors; - Vector2D topLeft = MONITORS.at(0)->vecPosition, bottomRight = MONITORS.at(0)->vecPosition + MONITORS.at(0)->vecSize; + Vector2D topLeft = MONITORS.at(0)->m_position, bottomRight = MONITORS.at(0)->m_position + MONITORS.at(0)->m_size; for (size_t i = 1; i < MONITORS.size(); ++i) { const auto EXTENT = MONITORS[i]->logicalBox().extent(); const auto POS = MONITORS[i]->logicalBox().pos(); @@ -852,10 +853,10 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { void CPointerManager::onMonitorLayoutChange() { currentMonitorLayout.monitorBoxes.clear(); for (auto const& m : g_pCompositor->m_monitors) { - if (m->isMirror() || !m->m_bEnabled || !m->output) + if (m->isMirror() || !m->m_enabled || !m->m_output) continue; - currentMonitorLayout.monitorBoxes.emplace_back(m->vecPosition, m->vecSize); + currentMonitorLayout.monitorBoxes.emplace_back(m->m_position, m->m_size); } damageIfSoftware(); diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index 7f51d09f..2de13da0 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -84,12 +84,12 @@ void CProtocolManager::onMonitorModeChange(PHLMONITOR pMonitor) { // mirrored outputs should have their global removed, as they are not physical parts of the // layout. - if (ISMIRROR && PROTO::outputs.contains(pMonitor->szName)) - PROTO::outputs.at(pMonitor->szName)->remove(); - else if (!ISMIRROR && (!PROTO::outputs.contains(pMonitor->szName) || PROTO::outputs.at(pMonitor->szName)->isDefunct())) { - if (PROTO::outputs.contains(pMonitor->szName)) - PROTO::outputs.erase(pMonitor->szName); - PROTO::outputs.emplace(pMonitor->szName, makeShared(&wl_output_interface, 4, std::format("WLOutput ({})", pMonitor->szName), pMonitor->self.lock())); + if (ISMIRROR && PROTO::outputs.contains(pMonitor->m_name)) + PROTO::outputs.at(pMonitor->m_name)->remove(); + else if (!ISMIRROR && (!PROTO::outputs.contains(pMonitor->m_name) || PROTO::outputs.at(pMonitor->m_name)->isDefunct())) { + if (PROTO::outputs.contains(pMonitor->m_name)) + PROTO::outputs.erase(pMonitor->m_name); + PROTO::outputs.emplace(pMonitor->m_name, makeShared(&wl_output_interface, 4, std::format("WLOutput ({})", pMonitor->m_name), pMonitor->m_self.lock())); } if (PROTO::colorManagement && g_pCompositor->shouldChangePreferredImageDescription()) { @@ -115,22 +115,22 @@ CProtocolManager::CProtocolManager() { if (M->isMirror() || M == g_pCompositor->m_unsafeOutput) return; - if (PROTO::outputs.contains(M->szName)) - PROTO::outputs.erase(M->szName); + if (PROTO::outputs.contains(M->m_name)) + PROTO::outputs.erase(M->m_name); - auto ref = makeShared(&wl_output_interface, 4, std::format("WLOutput ({})", M->szName), M->self.lock()); - PROTO::outputs.emplace(M->szName, ref); + auto ref = makeShared(&wl_output_interface, 4, std::format("WLOutput ({})", M->m_name), M->m_self.lock()); + PROTO::outputs.emplace(M->m_name, ref); ref->self = ref; - m_mModeChangeListeners[M->szName] = M->events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); }); + m_mModeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); }); }); static auto P2 = g_pHookSystem->hookDynamic("monitorRemoved", [this](void* self, SCallbackInfo& info, std::any param) { auto M = std::any_cast(param); - if (!PROTO::outputs.contains(M->szName)) + if (!PROTO::outputs.contains(M->m_name)) return; - PROTO::outputs.at(M->szName)->remove(); - m_mModeChangeListeners.erase(M->szName); + PROTO::outputs.at(M->m_name)->remove(); + m_mModeChangeListeners.erase(M->m_name); }); // Core diff --git a/src/managers/SessionLockManager.cpp b/src/managers/SessionLockManager.cpp index ecca3c96..83a238a6 100644 --- a/src/managers/SessionLockManager.cpp +++ b/src/managers/SessionLockManager.cpp @@ -67,8 +67,8 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { const auto PMONITOR = SURFACE->monitor(); const auto NEWSURFACE = m_pSessionLock->vSessionLockSurfaces.emplace_back(makeUnique(SURFACE)).get(); - NEWSURFACE->iMonitorID = PMONITOR->ID; - PROTO::fractional->sendScale(SURFACE->surface(), PMONITOR->scale); + NEWSURFACE->iMonitorID = PMONITOR->m_id; + PROTO::fractional->sendScale(SURFACE->surface(), PMONITOR->m_scale); }); m_pSessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) { @@ -138,7 +138,7 @@ void CSessionLockManager::onLockscreenRenderedOnMonitor(uint64_t id) { if (!m_pSessionLock || m_pSessionLock->m_hasSentLocked) return; m_pSessionLock->m_lockedMonitors.emplace(id); - const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->ID); }); + const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->m_id); }); if (LOCKED && m_pSessionLock->lock->good()) { m_pSessionLock->lock->sendLocked(); m_pSessionLock->m_hasSentLocked = true; diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index c5cf77f5..62852c2f 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -170,9 +170,9 @@ Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& coord) { PHLMONITOR pMonitor = nullptr; double bestDistance = __FLT_MAX__; for (const auto& m : g_pCompositor->m_monitors) { - const auto SIZ = *PXWLFORCESCALEZERO ? m->vecTransformedSize : m->vecSize; + const auto SIZ = *PXWLFORCESCALEZERO ? m->m_transformedSize : m->m_size; - double distance = vecToRectDistanceSquared(coord, {m->vecPosition.x, m->vecPosition.y}, {m->vecPosition.x + SIZ.x - 1, m->vecPosition.y + SIZ.y - 1}); + double distance = vecToRectDistanceSquared(coord, {m->m_position.x, m->m_position.y}, {m->m_position.x + SIZ.x - 1, m->m_position.y + SIZ.y - 1}); if (distance < bestDistance) { bestDistance = distance; @@ -184,12 +184,12 @@ Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& coord) { return Vector2D{}; // get local coords - Vector2D result = coord - pMonitor->vecPosition; + Vector2D result = coord - pMonitor->m_position; // if scaled, scale if (*PXWLFORCESCALEZERO) - result *= pMonitor->scale; + result *= pMonitor->m_scale; // add pos - result += pMonitor->vecXWaylandPosition; + result += pMonitor->m_xwaylandPosition; return result; } @@ -201,10 +201,10 @@ Vector2D CHyprXWaylandManager::xwaylandToWaylandCoords(const Vector2D& coord) { PHLMONITOR pMonitor = nullptr; double bestDistance = __FLT_MAX__; for (const auto& m : g_pCompositor->m_monitors) { - const auto SIZ = *PXWLFORCESCALEZERO ? m->vecTransformedSize : m->vecSize; + const auto SIZ = *PXWLFORCESCALEZERO ? m->m_transformedSize : m->m_size; double distance = - vecToRectDistanceSquared(coord, {m->vecXWaylandPosition.x, m->vecXWaylandPosition.y}, {m->vecXWaylandPosition.x + SIZ.x - 1, m->vecXWaylandPosition.y + SIZ.y - 1}); + vecToRectDistanceSquared(coord, {m->m_xwaylandPosition.x, m->m_xwaylandPosition.y}, {m->m_xwaylandPosition.x + SIZ.x - 1, m->m_xwaylandPosition.y + SIZ.y - 1}); if (distance < bestDistance) { bestDistance = distance; @@ -216,12 +216,12 @@ Vector2D CHyprXWaylandManager::xwaylandToWaylandCoords(const Vector2D& coord) { return Vector2D{}; // get local coords - Vector2D result = coord - pMonitor->vecXWaylandPosition; + Vector2D result = coord - pMonitor->m_xwaylandPosition; // if scaled, unscale if (*PXWLFORCESCALEZERO) - result /= pMonitor->scale; + result /= pMonitor->m_scale; // add pos - result += pMonitor->vecPosition; + result += pMonitor->m_position; return result; } diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index ab5e59a0..e1856f1d 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -217,7 +217,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { bool skipFrameSchedule = PMONITOR->shouldSkipScheduleFrameOnMouseEvent(); - if (!PMONITOR->solitaryClient.lock() && g_pHyprRenderer->shouldRenderCursor() && g_pPointerManager->softwareLockedFor(PMONITOR->self.lock()) && !skipFrameSchedule) + if (!PMONITOR->m_solitaryClient.lock() && g_pHyprRenderer->shouldRenderCursor() && g_pPointerManager->softwareLockedFor(PMONITOR->m_self.lock()) && !skipFrameSchedule) g_pCompositor->scheduleFrameForMonitor(PMONITOR, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE); // constraints @@ -252,13 +252,13 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (g_pSessionLockManager->isSessionLocked()) { // set keyboard focus on session lock surface regardless of layers - const auto PSESSIONLOCKSURFACE = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->ID); + const auto PSESSIONLOCKSURFACE = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); const auto foundLockSurface = PSESSIONLOCKSURFACE ? PSESSIONLOCKSURFACE->surface->surface() : nullptr; g_pCompositor->focusSurface(foundLockSurface); // search for interactable abovelock surfaces for pointer focus, or use session lock surface if not found - for (auto& lsl : PMONITOR->m_aLayerSurfaceLayers | std::views::reverse) { + for (auto& lsl : PMONITOR->m_layerSurfaceLayers | std::views::reverse) { foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &lsl, &surfaceCoords, &pFoundLayerSurface, true); if (foundSurface) @@ -266,7 +266,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (!foundSurface) { - surfaceCoords = mouseCoords - PMONITOR->vecPosition; + surfaceCoords = mouseCoords - PMONITOR->m_position; foundSurface = foundLockSurface; } @@ -336,7 +336,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // overlays are above fullscreen if (!foundSurface) - foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &surfaceCoords, &pFoundLayerSurface); + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &surfaceCoords, &pFoundLayerSurface); // also IME popups if (!foundSurface) { @@ -349,10 +349,10 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // also top layers if (!foundSurface) - foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); // then, we check if the workspace doesnt have a fullscreen window - const auto PWORKSPACE = PMONITOR->activeWorkspace; + const auto PWORKSPACE = PMONITOR->m_activeWorkspace; const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); if (PWORKSPACE->m_hasFullscreenWindow && !foundSurface && PWORKSPACE->m_fullscreenMode == FSMODE_FULLSCREEN) { pFoundWindow = PWORKSPACE->getFullscreenWindow(); @@ -365,7 +365,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (PWINDOWIDEAL && ((PWINDOWIDEAL->m_isFloating && PWINDOWIDEAL->m_createdOverFullscreen) /* floating over fullscreen */ - || (PMONITOR->activeSpecialWorkspace == PWINDOWIDEAL->m_workspace) /* on an open special workspace */)) + || (PMONITOR->m_activeSpecialWorkspace == PWINDOWIDEAL->m_workspace) /* on an open special workspace */)) pFoundWindow = PWINDOWIDEAL; if (!pFoundWindow->m_isX11) { @@ -381,7 +381,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (!foundSurface) { if (PWORKSPACE->m_hasFullscreenWindow && PWORKSPACE->m_fullscreenMode == FSMODE_MAXIMIZED) { if (!foundSurface) { - if (PMONITOR->activeSpecialWorkspace) { + if (PMONITOR->m_activeSpecialWorkspace) { if (pFoundWindow != PWINDOWIDEAL) pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); @@ -391,7 +391,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } else { // if we have a maximized window, allow focusing on a bar or something if in reserved area. if (g_pCompositor->isPointOnReservedArea(mouseCoords, PMONITOR)) { - foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &surfaceCoords, + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &surfaceCoords, &pFoundLayerSurface); } @@ -426,13 +426,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // then surfaces below if (!foundSurface) - foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &surfaceCoords, &pFoundLayerSurface); + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &surfaceCoords, &pFoundLayerSurface); if (!foundSurface) - foundSurface = - g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &surfaceCoords, &pFoundLayerSurface); + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &surfaceCoords, &pFoundLayerSurface); - if (g_pPointerManager->softwareLockedFor(PMONITOR->self.lock()) > 0 && !skipFrameSchedule) + if (g_pPointerManager->softwareLockedFor(PMONITOR->m_self.lock()) > 0 && !skipFrameSchedule) g_pCompositor->scheduleFrameForMonitor(g_pCompositor->m_lastMonitor.lock(), Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE); // FIXME: This will be disabled during DnD operations because we do not exactly follow the spec @@ -1471,14 +1470,14 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { // then any surfaces above windows on the same monitor if (!foundSurface) { - foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], + foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &surfaceCoords, &pFoundLayerSurface); if (pFoundLayerSurface && pFoundLayerSurface->m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) foundSurface = nullptr; } if (!foundSurface) { - foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], + foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); if (pFoundLayerSurface && pFoundLayerSurface->m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) foundSurface = nullptr; @@ -1636,7 +1635,7 @@ void CInputManager::setTouchDeviceConfigs(SP dev) { PTOUCHDEV->m_boundOutput = bound ? output : ""; const auto PMONITOR = bound ? g_pCompositor->getMonitorFromName(output) : nullptr; if (PMONITOR) { - Debug::log(LOG, "Binding touch device {} to output {}", PTOUCHDEV->m_hlName, PMONITOR->szName); + Debug::log(LOG, "Binding touch device {} to output {}", PTOUCHDEV->m_hlName, PMONITOR->m_name); // wlr_cursor_map_input_to_output(g_pCompositor->m_sWLRCursor, &PTOUCHDEV->wlr()->base, PMONITOR->output); } else if (bound) Debug::log(ERR, "Failed to bind touch device {} to output '{}': monitor not found", PTOUCHDEV->m_hlName, output); diff --git a/src/managers/input/InputMethodPopup.cpp b/src/managers/input/InputMethodPopup.cpp index db08c026..d0706bad 100644 --- a/src/managers/input/InputMethodPopup.cpp +++ b/src/managers/input/InputMethodPopup.cpp @@ -40,7 +40,7 @@ void CInputPopup::onMap() { if (!PMONITOR) return; - PROTO::fractional->sendScale(surface->resource(), PMONITOR->scale); + PROTO::fractional->sendScale(surface->resource(), PMONITOR->m_scale); } void CInputPopup::onUnmap() { @@ -108,12 +108,12 @@ void CInputPopup::updateBox() { Vector2D popupOffset(0, 0); - if (parentBox.y + cursorBoxParent.y + cursorBoxParent.height + currentPopupSize.y > pMonitor->vecPosition.y + pMonitor->vecSize.y) + if (parentBox.y + cursorBoxParent.y + cursorBoxParent.height + currentPopupSize.y > pMonitor->m_position.y + pMonitor->m_size.y) popupOffset.y -= currentPopupSize.y; else popupOffset.y = cursorBoxParent.height; - double popupOverflow = parentBox.x + cursorBoxParent.x + currentPopupSize.x - (pMonitor->vecPosition.x + pMonitor->vecSize.x); + double popupOverflow = parentBox.x + cursorBoxParent.x + currentPopupSize.x - (pMonitor->m_position.x + pMonitor->m_size.x); if (popupOverflow > 0) popupOffset.x -= popupOverflow; @@ -127,15 +127,15 @@ void CInputPopup::updateBox() { } damageSurface(); - if (const auto PM = g_pCompositor->getMonitorFromCursor(); PM && PM->ID != lastMonitor) { + if (const auto PM = g_pCompositor->getMonitorFromCursor(); PM && PM->m_id != lastMonitor) { const auto PML = g_pCompositor->getMonitorFromID(lastMonitor); if (PML) - surface->resource()->leave(PML->self.lock()); + surface->resource()->leave(PML->m_self.lock()); - surface->resource()->enter(PM->self.lock()); + surface->resource()->enter(PM->m_self.lock()); - lastMonitor = PM->ID; + lastMonitor = PM->m_id; } } diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index c6916ee0..62c0332a 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -29,7 +29,7 @@ void CInputManager::onSwipeBegin(IPointer::SSwipeBeginEvent e) { } void CInputManager::beginWorkspaceSwipe() { - const auto PWORKSPACE = g_pCompositor->m_lastMonitor->activeWorkspace; + const auto PWORKSPACE = g_pCompositor->m_lastMonitor->m_activeWorkspace; Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_name); @@ -40,7 +40,7 @@ void CInputManager::beginWorkspaceSwipe() { m_sActiveSwipe.speedPoints = 0; if (PWORKSPACE->m_hasFullscreenWindow) { - for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { + for (auto const& ls : g_pCompositor->m_lastMonitor->m_layerSurfaceLayers[2]) { *ls->m_alpha = 1.f; } } @@ -79,8 +79,8 @@ void CInputManager::endWorkspaceSwipe() { auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->value(); - const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + *PWORKSPACEGAP; - const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + *PWORKSPACEGAP; + const auto XDISTANCE = m_sActiveSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; + const auto YDISTANCE = m_sActiveSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; PHLWORKSPACE pSwitchedTo = nullptr; @@ -122,7 +122,7 @@ void CInputManager::endWorkspaceSwipe() { if (PWORKSPACEL) m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft); else { - m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_sActiveSwipe.pMonitor->ID)); + m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_sActiveSwipe.pMonitor->m_id)); PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); PWORKSPACEL->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } @@ -149,7 +149,7 @@ void CInputManager::endWorkspaceSwipe() { if (PWORKSPACER) m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight); else { - m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_sActiveSwipe.pMonitor->ID)); + m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_sActiveSwipe.pMonitor->m_id)); PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); PWORKSPACER->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); } @@ -186,7 +186,7 @@ void CInputManager::endWorkspaceSwipe() { g_pInputManager->refocus(); // apply alpha - for (auto const& ls : g_pCompositor->m_lastMonitor->m_aLayerSurfaceLayers[2]) { + for (auto const& ls : g_pCompositor->m_lastMonitor->m_layerSurfaceLayers[2]) { *ls->m_alpha = pSwitchedTo->m_hasFullscreenWindow && pSwitchedTo->m_fullscreenMode == FSMODE_FULLSCREEN ? 0.f : 1.f; } } @@ -214,8 +214,8 @@ void CInputManager::updateWorkspaceSwipe(double delta) { static auto PWORKSPACEGAP = CConfigValue("general:gaps_workspaces"); const auto SWIPEDISTANCE = std::clamp(*PSWIPEDIST, (int64_t)1LL, (int64_t)UINT32_MAX); - const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + *PWORKSPACEGAP; - const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + *PWORKSPACEGAP; + const auto XDISTANCE = m_sActiveSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; + const auto YDISTANCE = m_sActiveSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); const double d = m_sActiveSwipe.delta - delta; diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index eab01528..f8964521 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -27,7 +27,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { PMONITOR = PMONITOR ? PMONITOR : g_pCompositor->m_lastMonitor.lock(); - g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); + g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); refocus(); @@ -43,11 +43,11 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { return; // TODO: Don't swipe if you touched a floating window. } else if (*PSWIPETOUCH && (m_pFoundLSToFocus.expired() || m_pFoundLSToFocus->m_layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { - const auto PWORKSPACE = PMONITOR->activeWorkspace; + const auto PWORKSPACE = PMONITOR->m_activeWorkspace; const auto STYLE = PWORKSPACE->m_renderOffset->getStyle(); const bool VERTANIMS = STYLE == "slidevert" || STYLE.starts_with("slidefadevert"); - const double TARGETLEFT = ((VERTANIMS ? gapsOut.m_top : gapsOut.m_left) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x); - const double TARGETRIGHT = 1 - (((VERTANIMS ? gapsOut.m_bottom : gapsOut.m_right) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->vecSize.y : PMONITOR->vecSize.x)); + const double TARGETLEFT = ((VERTANIMS ? gapsOut.m_top : gapsOut.m_left) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->m_size.y : PMONITOR->m_size.x); + const double TARGETRIGHT = 1 - (((VERTANIMS ? gapsOut.m_bottom : gapsOut.m_right) + *PBORDERSIZE) / (VERTANIMS ? PMONITOR->m_size.y : PMONITOR->m_size.x)); const double POSITION = (VERTANIMS ? e.pos.y : e.pos.x); if (POSITION < TARGETLEFT || POSITION > TARGETRIGHT) { beginWorkspaceSwipe(); @@ -62,7 +62,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { } if (g_pSessionLockManager->isSessionLocked()) { - m_sTouchData.touchFocusLockSurface = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->ID); + m_sTouchData.touchFocusLockSurface = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); if (!m_sTouchData.touchFocusLockSurface) Debug::log(WARN, "The session is locked but can't find a lock surface"); else @@ -77,7 +77,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { Vector2D local; if (m_sTouchData.touchFocusLockSurface) { - local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->vecPosition; + local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->m_position; m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } else if (!m_sTouchData.touchFocusWindow.expired()) { if (m_sTouchData.touchFocusWindow->m_isX11) { @@ -144,13 +144,13 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { } if (m_sTouchData.touchFocusLockSurface) { const auto PMONITOR = g_pCompositor->getMonitorFromID(m_sTouchData.touchFocusLockSurface->iMonitorID); - g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); - auto local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->vecPosition; + g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); + auto local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->m_position; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); } else if (validMapped(m_sTouchData.touchFocusWindow)) { const auto PMONITOR = m_sTouchData.touchFocusWindow->m_monitor.lock(); - g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); + g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin; if (m_sTouchData.touchFocusWindow->m_isX11) @@ -160,7 +160,7 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { } else if (!m_sTouchData.touchFocusLS.expired()) { const auto PMONITOR = m_sTouchData.touchFocusLS->m_monitor.lock(); - g_pCompositor->warpCursorTo({PMONITOR->vecPosition.x + e.pos.x * PMONITOR->vecSize.x, PMONITOR->vecPosition.y + e.pos.y * PMONITOR->vecSize.y}, true); + g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); const auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin; diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index 125e717e..a6fad119 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -40,9 +40,9 @@ CHyprlandCTMControlResource::CHyprlandCTMControlResource(SPszName] = MAT; + ctms[PMONITOR->m_name] = MAT; - LOGM(LOG, "CTM set for output {}: {}", PMONITOR->szName, ctms.at(PMONITOR->szName).toString()); + LOGM(LOG, "CTM set for output {}: {}", PMONITOR->m_name, ctms.at(PMONITOR->m_name).toString()); }); resource->setCommit([this](CHyprlandCtmControlManagerV1* r) { @@ -52,12 +52,12 @@ CHyprlandCTMControlResource::CHyprlandCTMControlResource(SPm_monitors) { - if (!ctms.contains(m->szName)) { + if (!ctms.contains(m->m_name)) { PROTO::ctm->setCTM(m, Mat3x3::identity()); continue; } - PROTO::ctm->setCTM(m, ctms.at(m->szName)); + PROTO::ctm->setCTM(m, ctms.at(m->m_name)); } }); } diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 29d9d248..812ac4c6 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -235,7 +235,7 @@ CColorManagementOutput::CColorManagementOutput(SP re if (!m_monitor.valid()) RESOURCE->m_resource->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_NO_OUTPUT, "No output"); else { - RESOURCE->settings = m_monitor->imageDescription; + RESOURCE->settings = m_monitor->m_imageDescription; RESOURCE->m_resource->sendReady(RESOURCE->settings.updateId()); } }); diff --git a/src/protocols/DRMLease.cpp b/src/protocols/DRMLease.cpp index 2fd1b890..80c34d23 100644 --- a/src/protocols/DRMLease.cpp +++ b/src/protocols/DRMLease.cpp @@ -17,8 +17,8 @@ CDRMLeaseResource::CDRMLeaseResource(SP resource_, SPrequested; for (auto const& m : requested) { - if (!m->monitor || m->monitor->isBeingLeased) { - LOGM(ERR, "Rejecting lease: no monitor or monitor is being leased for {}", (m->monitor ? m->monitor->szName : "null")); + if (!m->monitor || m->monitor->m_isBeingLeased) { + LOGM(ERR, "Rejecting lease: no monitor or monitor is being leased for {}", (m->monitor ? m->monitor->m_name : "null")); resource->sendFinished(); return; } @@ -29,7 +29,7 @@ CDRMLeaseResource::CDRMLeaseResource(SP resource_, SPmonitor->szName); + roll += std::format("{} ", o->monitor->m_name); } return roll; }()); @@ -39,7 +39,7 @@ CDRMLeaseResource::CDRMLeaseResource(SP resource_, SPmonitor->output); + outputs.emplace_back(m->monitor->m_output); } auto aqlease = Aquamarine::CDRMLease::create(outputs); @@ -52,13 +52,13 @@ CDRMLeaseResource::CDRMLeaseResource(SP resource_, SPmonitor->isBeingLeased = true; + m->monitor->m_isBeingLeased = true; } listeners.destroyLease = lease->events.destroy.registerListener([this](std::any d) { for (auto const& m : requested) { if (m && m->monitor) - m->monitor->isBeingLeased = false; + m->monitor->m_isBeingLeased = false; } resource->sendFinished(); @@ -143,7 +143,7 @@ CDRMLeaseConnectorResource::CDRMLeaseConnectorResource(SPsetData(this); - listeners.destroyMonitor = monitor->events.destroy.registerListener([this](std::any d) { + listeners.destroyMonitor = monitor->m_events.destroy.registerListener([this](std::any d) { resource->sendWithdrawn(); dead = true; }); @@ -154,10 +154,10 @@ bool CDRMLeaseConnectorResource::good() { } void CDRMLeaseConnectorResource::sendData() { - resource->sendName(monitor->szName.c_str()); - resource->sendDescription(monitor->szDescription.c_str()); + resource->sendName(monitor->m_name.c_str()); + resource->sendDescription(monitor->m_description.c_str()); - auto AQDRMOutput = (Aquamarine::CDRMOutput*)monitor->output.get(); + auto AQDRMOutput = (Aquamarine::CDRMOutput*)monitor->m_output.get(); resource->sendConnectorId(AQDRMOutput->getConnectorID()); resource->sendDone(); @@ -220,7 +220,7 @@ void CDRMLeaseDeviceResource::sendConnector(PHLMONITOR monitor) { RESOURCE->parent = self; RESOURCE->self = RESOURCE; - LOGM(LOG, "Sending new connector {}", monitor->szName); + LOGM(LOG, "Sending new connector {}", monitor->m_name); connectorsSent.emplace_back(RESOURCE); PROTO::lease->m_vConnectors.emplace_back(RESOURCE); @@ -297,11 +297,11 @@ void CDRMLeaseProtocol::offer(PHLMONITOR monitor) { if (std::find(primaryDevice->offeredOutputs.begin(), primaryDevice->offeredOutputs.end(), monitor) != primaryDevice->offeredOutputs.end()) return; - if (monitor->output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) + if (monitor->m_output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) return; - if (monitor->output->getBackend() != primaryDevice->backend) { - LOGM(ERR, "Monitor {} cannot be leased: primaryDevice lease is for a different device", monitor->szName); + if (monitor->m_output->getBackend() != primaryDevice->backend) { + LOGM(ERR, "Monitor {} cannot be leased: primaryDevice lease is for a different device", monitor->m_name); return; } diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index 089c414b..2a2929e5 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -46,8 +46,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPm_workspace != monitor->activeWorkspace) { - g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, monitor->activeWorkspace); + if (PWINDOW->m_workspace != monitor->m_activeWorkspace) { + g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, monitor->m_activeWorkspace); g_pCompositor->setActiveMonitor(monitor); } } @@ -145,26 +145,26 @@ wl_resource* CForeignToplevelHandleWlr::res() { } void CForeignToplevelHandleWlr::sendMonitor(PHLMONITOR pMonitor) { - if (lastMonitorID == pMonitor->ID) + if (lastMonitorID == pMonitor->m_id) return; const auto CLIENT = resource->client(); - 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 (const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(lastMonitorID); PLASTMONITOR && PROTO::outputs.contains(PLASTMONITOR->m_name)) { + const auto OLDRESOURCE = PROTO::outputs.at(PLASTMONITOR->m_name)->outputResourceFrom(CLIENT); if LIKELY (OLDRESOURCE) resource->sendOutputLeave(OLDRESOURCE->getResource()->resource()); } - if (PROTO::outputs.contains(pMonitor->szName)) { - const auto NEWRESOURCE = PROTO::outputs.at(pMonitor->szName)->outputResourceFrom(CLIENT); + if (PROTO::outputs.contains(pMonitor->m_name)) { + const auto NEWRESOURCE = PROTO::outputs.at(pMonitor->m_name)->outputResourceFrom(CLIENT); if LIKELY (NEWRESOURCE) resource->sendOutputEnter(NEWRESOURCE->getResource()->resource()); } - lastMonitorID = pMonitor->ID; + lastMonitorID = pMonitor->m_id; } void CForeignToplevelHandleWlr::sendState() { diff --git a/src/protocols/GammaControl.cpp b/src/protocols/GammaControl.cpp index 0a383e2e..322f0e56 100644 --- a/src/protocols/GammaControl.cpp +++ b/src/protocols/GammaControl.cpp @@ -20,7 +20,7 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out pMonitor = OUTPUTRES->monitor; - if UNLIKELY (!pMonitor || !pMonitor->output) { + if UNLIKELY (!pMonitor || !pMonitor->m_output) { LOGM(ERR, "No CMonitor"); resource->sendFailed(); return; @@ -33,10 +33,10 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out } } - gammaSize = pMonitor->output->getGammaSize(); + gammaSize = pMonitor->m_output->getGammaSize(); if UNLIKELY (gammaSize <= 0) { - LOGM(ERR, "Output {} doesn't support gamma", pMonitor->szName); + LOGM(ERR, "Output {} doesn't support gamma", pMonitor->m_name); resource->sendFailed(); return; } @@ -54,7 +54,7 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out return; } - LOGM(LOG, "setGamma for {}", pMonitor->szName); + LOGM(LOG, "setGamma for {}", pMonitor->m_name); // TODO: make CFileDescriptor getflags use F_GETFL int fdFlags = fcntl(gammaFd.get(), F_GETFL, 0); @@ -108,16 +108,16 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out resource->sendGammaSize(gammaSize); - listeners.monitorDestroy = pMonitor->events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); }); - listeners.monitorDisconnect = pMonitor->events.disconnect.registerListener([this](std::any) { this->onMonitorDestroy(); }); + listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); }); + listeners.monitorDisconnect = pMonitor->m_events.disconnect.registerListener([this](std::any) { this->onMonitorDestroy(); }); } CGammaControl::~CGammaControl() { - if (!gammaTableSet || !pMonitor || !pMonitor->output) + if (!gammaTableSet || !pMonitor || !pMonitor->m_output) return; // reset the LUT if the client dies for whatever reason and doesn't unset the gamma - pMonitor->output->state->setGammaLut({}); + pMonitor->m_output->state->setGammaLut({}); } bool CGammaControl::good() { @@ -125,21 +125,21 @@ bool CGammaControl::good() { } void CGammaControl::applyToMonitor() { - if UNLIKELY (!pMonitor || !pMonitor->output) + if UNLIKELY (!pMonitor || !pMonitor->m_output) return; // ?? - LOGM(LOG, "setting to monitor {}", pMonitor->szName); + LOGM(LOG, "setting to monitor {}", pMonitor->m_name); if (!gammaTableSet) { - pMonitor->output->state->setGammaLut({}); + pMonitor->m_output->state->setGammaLut({}); return; } - pMonitor->output->state->setGammaLut(gammaTable); + pMonitor->m_output->state->setGammaLut(gammaTable); - if (!pMonitor->state.test()) { - LOGM(LOG, "setting to monitor {} failed", pMonitor->szName); - pMonitor->output->state->setGammaLut({}); + if (!pMonitor->m_state.test()) { + LOGM(LOG, "setting to monitor {} failed", pMonitor->m_name); + pMonitor->m_output->state->setGammaLut({}); } g_pHyprRenderer->damageMonitor(pMonitor.lock()); @@ -150,7 +150,7 @@ PHLMONITOR CGammaControl::getMonitor() { } void CGammaControl::onMonitorDestroy() { - LOGM(LOG, "Destroying gamma control for {}", pMonitor->szName); + LOGM(LOG, "Destroying gamma control for {}", pMonitor->m_name); resource->sendFailed(); } diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index 0b64e7fd..7f5d366a 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -22,7 +22,7 @@ CLayerShellResource::CLayerShellResource(SP resource_, SPszName : ""; + monitor = pMonitor ? pMonitor->m_name : ""; resource->setDestroy([this](CZwlrLayerSurfaceV1* r) { events.destroy.emit(); diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index d42ddf41..2a067bf7 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -436,7 +436,7 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const auto tranche = SDMABUFTranche{ .device = mainDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, - .formats = mon->output->getRenderFormats(), + .formats = mon->m_output->getRenderFormats(), }; tches.emplace_back(std::make_pair<>(mon, tranche)); } @@ -446,7 +446,7 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const auto tranche = SDMABUFTranche{ .device = mainDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, - .formats = pMonitor->output->getRenderFormats(), + .formats = pMonitor->m_output->getRenderFormats(), }; formatTable->monitorTranches.emplace_back(std::make_pair<>(pMonitor, tranche)); resetFormatTable(); @@ -500,7 +500,7 @@ void CLinuxDMABufV1Protocol::resetFormatTable() { auto HLSurface = CWLSurface::fromResource(feedback->surface); if (auto w = HLSurface->getWindow(); w) if (auto m = w->m_monitor.lock(); m) - mon = m->self.lock(); + mon = m->m_self.lock(); if (!mon) { feedback->sendDefaultFeedback(); diff --git a/src/protocols/OutputManagement.cpp b/src/protocols/OutputManagement.cpp index 1e3835a6..4af7a6e2 100644 --- a/src/protocols/OutputManagement.cpp +++ b/src/protocols/OutputManagement.cpp @@ -35,7 +35,7 @@ COutputManager::COutputManager(SP resource_) : resource(re if (m == g_pCompositor->m_unsafeOutput) continue; - LOGM(LOG, " | sending output head for {}", m->szName); + LOGM(LOG, " | sending output head for {}", m->m_name); makeAndSendNewHead(m); } @@ -96,7 +96,7 @@ COutputHead::COutputHead(SP resource_, PHLMONITOR pMonitor_) resource->setRelease([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); resource->setOnDestroy([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); - listeners.monitorDestroy = pMonitor->events.destroy.registerListener([this](std::any d) { + listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any d) { resource->sendFinished(); for (auto const& mw : modes) { @@ -114,7 +114,7 @@ COutputHead::COutputHead(SP resource_, PHLMONITOR pMonitor_) } }); - listeners.monitorModeChange = pMonitor->events.modeChanged.registerListener([this](std::any d) { updateMode(); }); + listeners.monitorModeChange = pMonitor->m_events.modeChanged.registerListener([this](std::any d) { updateMode(); }); } bool COutputHead::good() { @@ -124,54 +124,54 @@ bool COutputHead::good() { void COutputHead::sendAllData() { const auto VERSION = resource->version(); - resource->sendName(pMonitor->szName.c_str()); - resource->sendDescription(pMonitor->szDescription.c_str()); - if (pMonitor->output->physicalSize.x > 0 && pMonitor->output->physicalSize.y > 0) - resource->sendPhysicalSize(pMonitor->output->physicalSize.x, pMonitor->output->physicalSize.y); - resource->sendEnabled(pMonitor->m_bEnabled); + resource->sendName(pMonitor->m_name.c_str()); + resource->sendDescription(pMonitor->m_description.c_str()); + if (pMonitor->m_output->physicalSize.x > 0 && pMonitor->m_output->physicalSize.y > 0) + resource->sendPhysicalSize(pMonitor->m_output->physicalSize.x, pMonitor->m_output->physicalSize.y); + resource->sendEnabled(pMonitor->m_enabled); - if (pMonitor->m_bEnabled) { - resource->sendPosition(pMonitor->vecPosition.x, pMonitor->vecPosition.y); - resource->sendTransform(pMonitor->transform); - resource->sendScale(wl_fixed_from_double(pMonitor->scale)); + if (pMonitor->m_enabled) { + resource->sendPosition(pMonitor->m_position.x, pMonitor->m_position.y); + resource->sendTransform(pMonitor->m_transform); + resource->sendScale(wl_fixed_from_double(pMonitor->m_scale)); } - if (!pMonitor->output->make.empty() && VERSION >= 2) - resource->sendMake(pMonitor->output->make.c_str()); - if (!pMonitor->output->model.empty() && VERSION >= 2) - resource->sendModel(pMonitor->output->model.c_str()); - if (!pMonitor->output->serial.empty() && VERSION >= 2) - resource->sendSerialNumber(pMonitor->output->serial.c_str()); + if (!pMonitor->m_output->make.empty() && VERSION >= 2) + resource->sendMake(pMonitor->m_output->make.c_str()); + if (!pMonitor->m_output->model.empty() && VERSION >= 2) + resource->sendModel(pMonitor->m_output->model.c_str()); + if (!pMonitor->m_output->serial.empty() && VERSION >= 2) + resource->sendSerialNumber(pMonitor->m_output->serial.c_str()); if (VERSION >= 4) - resource->sendAdaptiveSync(pMonitor->vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); + resource->sendAdaptiveSync(pMonitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); // send all available modes if (modes.empty()) { - if (!pMonitor->output->modes.empty()) { - for (auto const& m : pMonitor->output->modes) { + if (!pMonitor->m_output->modes.empty()) { + for (auto const& m : pMonitor->m_output->modes) { makeAndSendNewMode(m); } - } else if (pMonitor->output->state->state().customMode) { - makeAndSendNewMode(pMonitor->output->state->state().customMode); + } else if (pMonitor->m_output->state->state().customMode) { + makeAndSendNewMode(pMonitor->m_output->state->state().customMode); } else makeAndSendNewMode(nullptr); } // send current mode - if (pMonitor->m_bEnabled) { + if (pMonitor->m_enabled) { for (auto const& mw : modes) { auto m = mw.lock(); if (!m) continue; - if (m->mode == pMonitor->output->state->state().mode) { + if (m->mode == pMonitor->m_output->state->state().mode) { if (m->mode) - LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->szName, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); + LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->m_name, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); else - LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->szName); + LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->m_name); resource->sendCurrentMode(m->resource.get()); break; } @@ -180,29 +180,29 @@ void COutputHead::sendAllData() { } void COutputHead::updateMode() { - resource->sendEnabled(pMonitor->m_bEnabled); + resource->sendEnabled(pMonitor->m_enabled); - if (pMonitor->m_bEnabled) { - resource->sendPosition(pMonitor->vecPosition.x, pMonitor->vecPosition.y); - resource->sendTransform(pMonitor->transform); - resource->sendScale(wl_fixed_from_double(pMonitor->scale)); + if (pMonitor->m_enabled) { + resource->sendPosition(pMonitor->m_position.x, pMonitor->m_position.y); + resource->sendTransform(pMonitor->m_transform); + resource->sendScale(wl_fixed_from_double(pMonitor->m_scale)); } if (resource->version() >= 4) - resource->sendAdaptiveSync(pMonitor->vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); + resource->sendAdaptiveSync(pMonitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); - if (pMonitor->m_bEnabled) { + if (pMonitor->m_enabled) { for (auto const& mw : modes) { auto m = mw.lock(); if (!m) continue; - if (m->mode == pMonitor->currentMode) { + if (m->mode == pMonitor->m_currentMode) { if (m->mode) - LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->szName, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); + LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->m_name, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); else - LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->szName); + LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->m_name); resource->sendCurrentMode(m->resource.get()); break; } @@ -290,7 +290,7 @@ COutputConfiguration::COutputConfiguration(SP resour heads.emplace_back(RESOURCE); - LOGM(LOG, "enableHead on {}. For now, doing nothing. Waiting for apply().", PMONITOR->szName); + LOGM(LOG, "enableHead on {}. For now, doing nothing. Waiting for apply().", PMONITOR->m_name); }); resource->setDisableHead([this](CZwlrOutputConfigurationV1* r, wl_resource* outputHead) { @@ -308,17 +308,17 @@ COutputConfiguration::COutputConfiguration(SP resour return; } - LOGM(LOG, "disableHead on {}", PMONITOR->szName); + LOGM(LOG, "disableHead on {}", PMONITOR->m_name); SWlrManagerSavedOutputState newState; - if (owner->monitorStates.contains(PMONITOR->szName)) - newState = owner->monitorStates.at(PMONITOR->szName); + if (owner->monitorStates.contains(PMONITOR->m_name)) + newState = owner->monitorStates.at(PMONITOR->m_name); newState.enabled = false; g_pConfigManager->m_wantsMonitorReload = true; - owner->monitorStates[PMONITOR->szName] = newState; + owner->monitorStates[PMONITOR->m_name] = newState; }); resource->setTest([this](CZwlrOutputConfigurationV1* r) { @@ -370,11 +370,11 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { if (!PMONITOR) continue; - LOGM(LOG, "Saving config for monitor {}", PMONITOR->szName); + LOGM(LOG, "Saving config for monitor {}", PMONITOR->m_name); SWlrManagerSavedOutputState newState; - if (owner->monitorStates.contains(PMONITOR->szName)) - newState = owner->monitorStates.at(PMONITOR->szName); + if (owner->monitorStates.contains(PMONITOR->m_name)) + newState = owner->monitorStates.at(PMONITOR->m_name); newState.enabled = true; @@ -419,7 +419,7 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { g_pConfigManager->m_wantsMonitorReload = true; - owner->monitorStates[PMONITOR->szName] = newState; + owner->monitorStates[PMONITOR->m_name] = newState; } LOGM(LOG, "Saved configuration"); @@ -454,7 +454,7 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, MODE->getMode()->pixelSize.x, MODE->getMode()->pixelSize.y, MODE->getMode()->refreshRate); + LOGM(LOG, " | configHead for {}: set mode to {}x{}@{}", pMonitor->m_name, MODE->getMode()->pixelSize.x, MODE->getMode()->pixelSize.y, MODE->getMode()->refreshRate); }); resource->setSetCustomMode([this](CZwlrOutputConfigurationHeadV1* r, int32_t w, int32_t h, int32_t refresh) { @@ -474,14 +474,14 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, pMonitor->refreshRate); - refresh = std::round(pMonitor->refreshRate * 1000.F); + LOGM(LOG, " | configHead for {}: refreshRate 0, using old refresh rate of {:.2f}Hz", pMonitor->m_name, pMonitor->m_refreshRate); + refresh = std::round(pMonitor->m_refreshRate * 1000.F); } state.committedProperties |= OUTPUT_HEAD_COMMITTED_CUSTOM_MODE; state.customMode = {{w, h}, (uint32_t)refresh}; - LOGM(LOG, " | configHead for {}: set custom mode to {}x{}@{}", pMonitor->szName, w, h, refresh); + LOGM(LOG, " | configHead for {}: set custom mode to {}x{}@{}", pMonitor->m_name, w, h, refresh); }); resource->setSetPosition([this](CZwlrOutputConfigurationHeadV1* r, int32_t x, int32_t y) { @@ -498,7 +498,7 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, x, y); + LOGM(LOG, " | configHead for {}: set pos to {}, {}", pMonitor->m_name, x, y); }); resource->setSetTransform([this](CZwlrOutputConfigurationHeadV1* r, int32_t transform) { @@ -520,7 +520,7 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, transform); + LOGM(LOG, " | configHead for {}: set transform to {}", pMonitor->m_name, transform); }); resource->setSetScale([this](CZwlrOutputConfigurationHeadV1* r, wl_fixed_t scale_) { @@ -544,7 +544,7 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, scale); + LOGM(LOG, " | configHead for {}: set scale to {:.2f}", pMonitor->m_name, scale); }); resource->setSetAdaptiveSync([this](CZwlrOutputConfigurationHeadV1* r, uint32_t as) { @@ -566,7 +566,7 @@ COutputConfigurationHead::COutputConfigurationHead(SPszName, as); + LOGM(LOG, " | configHead for {}: set adaptiveSync to {}", pMonitor->m_name, as); }); } @@ -638,10 +638,10 @@ SP COutputManagementProtocol::modeFromResource(wl_resource* r) { SP COutputManagementProtocol::getOutputStateFor(PHLMONITOR pMonitor) { for (auto const& m : m_vManagers) { - if (!m->monitorStates.contains(pMonitor->szName)) + if (!m->monitorStates.contains(pMonitor->m_name)) continue; - return makeShared(m->monitorStates.at(pMonitor->szName)); + return makeShared(m->monitorStates.at(pMonitor->m_name)); } return nullptr; diff --git a/src/protocols/OutputPower.cpp b/src/protocols/OutputPower.cpp index 24106817..55ea0376 100644 --- a/src/protocols/OutputPower.cpp +++ b/src/protocols/OutputPower.cpp @@ -13,25 +13,25 @@ COutputPower::COutputPower(SP resource_, PHLMONITOR pMonitor if (!pMonitor) return; - pMonitor->dpmsStatus = mode == ZWLR_OUTPUT_POWER_V1_MODE_ON; + pMonitor->m_dpmsStatus = mode == ZWLR_OUTPUT_POWER_V1_MODE_ON; - pMonitor->output->state->setEnabled(mode == ZWLR_OUTPUT_POWER_V1_MODE_ON); + pMonitor->m_output->state->setEnabled(mode == ZWLR_OUTPUT_POWER_V1_MODE_ON); - if (!pMonitor->state.commit()) - LOGM(ERR, "Couldn't set dpms to {} for {}", pMonitor->dpmsStatus, pMonitor->szName); + if (!pMonitor->m_state.commit()) + LOGM(ERR, "Couldn't set dpms to {} for {}", pMonitor->m_dpmsStatus, pMonitor->m_name); }); - resource->sendMode(pMonitor->dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); + resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); - listeners.monitorDestroy = pMonitor->events.destroy.registerListener([this](std::any v) { + listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any v) { pMonitor.reset(); resource->sendFailed(); }); - listeners.monitorDpms = pMonitor->events.dpmsChanged.registerListener( - [this](std::any v) { resource->sendMode(pMonitor->dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); - listeners.monitorState = pMonitor->events.modeChanged.registerListener( - [this](std::any v) { resource->sendMode(pMonitor->dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); + listeners.monitorDpms = pMonitor->m_events.dpmsChanged.registerListener( + [this](std::any v) { resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); + listeners.monitorState = pMonitor->m_events.modeChanged.registerListener( + [this](std::any v) { resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); } bool COutputPower::good() { diff --git a/src/protocols/PresentationTime.cpp b/src/protocols/PresentationTime.cpp index b8f06cd3..e002bc28 100644 --- a/src/protocols/PresentationTime.cpp +++ b/src/protocols/PresentationTime.cpp @@ -43,13 +43,13 @@ bool CPresentationFeedback::good() { void CPresentationFeedback::sendQueued(SP data, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { auto client = resource->client(); - if LIKELY (PROTO::outputs.contains(data->pMonitor->szName)) { - if LIKELY (auto outputResource = PROTO::outputs.at(data->pMonitor->szName)->outputResourceFrom(client); outputResource) + if LIKELY (PROTO::outputs.contains(data->pMonitor->m_name)) { + if LIKELY (auto outputResource = PROTO::outputs.at(data->pMonitor->m_name)->outputResourceFrom(client); outputResource) resource->sendSyncOutput(outputResource->getResource()->resource()); } uint32_t flags = 0; - if (!data->pMonitor->tearingState.activelyTearing) + if (!data->pMonitor->m_tearingState.activelyTearing) flags |= WP_PRESENTATION_FEEDBACK_KIND_VSYNC; if (data->zeroCopy) flags |= WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY; diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 6727bcf4..28523fde 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -58,15 +58,15 @@ CScreencopyFrame::CScreencopyFrame(SP resource_, int32_t return; } - dmabufFormat = pMonitor->output->state->state().drmFormat; + dmabufFormat = pMonitor->m_output->state->state().drmFormat; if (box_.width == 0 && box_.height == 0) - box = {0, 0, (int)(pMonitor->vecSize.x), (int)(pMonitor->vecSize.y)}; + box = {0, 0, (int)(pMonitor->m_size.x), (int)(pMonitor->m_size.y)}; else { box = box_; } - box.transform(wlTransformToHyprutils(pMonitor->transform), pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y).scale(pMonitor->scale).round(); + box.transform(wlTransformToHyprutils(pMonitor->m_transform), pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y).scale(pMonitor->m_scale).round(); shmStride = NFormatUtils::minStride(PSHMINFO, box.w); @@ -189,7 +189,7 @@ void CScreencopyFrame::share() { void CScreencopyFrame::copyDmabuf(std::function callback) { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); + auto TEXTURE = makeShared(pMonitor->m_output->state->state().buffer); CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; @@ -200,9 +200,9 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y} + CBox monbox = CBox{0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y} .translate({-box.x, -box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. - .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); @@ -210,13 +210,13 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { g_pHyprOpenGL->setMonitorTransformEnabled(false); if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), true); + g_pInputManager->getMouseCoordsInternal() - pMonitor->m_position - box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); CBox texbox = - CBox{pMonitor->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{pMonitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } @@ -230,7 +230,7 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { bool CScreencopyFrame::copyShm() { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(pMonitor->output->state->state().buffer); + auto TEXTURE = makeShared(pMonitor->m_output->state->state().buffer); auto shm = buffer->shm(); auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm @@ -240,7 +240,7 @@ bool CScreencopyFrame::copyShm() { g_pHyprRenderer->makeEGLCurrent(); CFramebuffer fb; - fb.alloc(box.w, box.h, pMonitor->output->state->state().drmFormat); + fb.alloc(box.w, box.h, pMonitor->m_output->state->state().drmFormat); if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &fb, true)) { LOGM(ERR, "Can't copy: failed to begin rendering"); @@ -248,7 +248,7 @@ bool CScreencopyFrame::copyShm() { } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y}.translate({-box.x, -box.y}); + CBox monbox = CBox{0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y}.translate({-box.x, -box.y}); g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); @@ -256,13 +256,13 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->setMonitorTransformEnabled(false); if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - pMonitor->vecPosition - box.pos(), true); + g_pInputManager->getMouseCoordsInternal() - pMonitor->m_position - box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); CBox texbox = - CBox{pMonitor->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{pMonitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index 63ece928..40c73a7b 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -56,11 +56,11 @@ CSessionLockSurface::CSessionLockSurface(SP resource_, pSurface.reset(); }); - PROTO::fractional->sendScale(surface_, pMonitor_->scale); + PROTO::fractional->sendScale(surface_, pMonitor_->m_scale); sendConfigure(); - listeners.monitorMode = pMonitor->events.modeChanged.registerListener([this](std::any data) { sendConfigure(); }); + listeners.monitorMode = pMonitor->m_events.modeChanged.registerListener([this](std::any data) { sendConfigure(); }); } CSessionLockSurface::~CSessionLockSurface() { @@ -73,7 +73,7 @@ CSessionLockSurface::~CSessionLockSurface() { void CSessionLockSurface::sendConfigure() { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(resource->client())); - resource->sendConfigure(SERIAL, pMonitor->vecSize.x, pMonitor->vecSize.y); + resource->sendConfigure(SERIAL, pMonitor->m_size.x, pMonitor->m_size.y); } bool CSessionLockSurface::good() { diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 51ad8f5d..9496acb2 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -114,11 +114,11 @@ CToplevelExportFrame::CToplevelExportFrame(SP re return; } - dmabufFormat = PMONITOR->output->state->state().drmFormat; + dmabufFormat = PMONITOR->m_output->state->state().drmFormat; - box = {0, 0, (int)(pWindow->m_realSize->value().x * PMONITOR->scale), (int)(pWindow->m_realSize->value().y * PMONITOR->scale)}; + box = {0, 0, (int)(pWindow->m_realSize->value().x * PMONITOR->m_scale), (int)(pWindow->m_realSize->value().y * PMONITOR->m_scale)}; - box.transform(wlTransformToHyprutils(PMONITOR->transform), PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y).round(); + box.transform(wlTransformToHyprutils(PMONITOR->m_transform), PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y).round(); shmStride = NFormatUtils::minStride(PSHMINFO, box.w); @@ -236,18 +236,18 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { // render the client const auto PMONITOR = pWindow->m_monitor.lock(); - CRegion fakeDamage{0, 0, PMONITOR->vecPixelSize.x * 10, PMONITOR->vecPixelSize.y * 10}; + CRegion fakeDamage{0, 0, PMONITOR->m_pixelSize.x * 10, PMONITOR->m_pixelSize.y * 10}; g_pHyprRenderer->makeEGLCurrent(); CFramebuffer outFB; - outFB.alloc(PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, PMONITOR->output->state->state().drmFormat); + outFB.alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); auto overlayCursor = shouldOverlayCursor(); if (overlayCursor) { - g_pPointerManager->lockSoftwareForMonitor(PMONITOR->self.lock()); - g_pPointerManager->damageCursor(PMONITOR->self.lock()); + g_pPointerManager->lockSoftwareForMonitor(PMONITOR->m_self.lock()); + g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &outFB)) @@ -262,10 +262,10 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = - CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } @@ -291,21 +291,21 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { auto glFormat = PFORMAT->flipRB ? GL_BGRA_EXT : GL_RGBA; auto origin = Vector2D(0, 0); - switch (PMONITOR->transform) { + switch (PMONITOR->m_transform) { case WL_OUTPUT_TRANSFORM_FLIPPED_180: case WL_OUTPUT_TRANSFORM_90: { - origin.y = PMONITOR->vecPixelSize.y - box.height; + origin.y = PMONITOR->m_pixelSize.y - box.height; break; } case WL_OUTPUT_TRANSFORM_FLIPPED_270: case WL_OUTPUT_TRANSFORM_180: { - origin.x = PMONITOR->vecPixelSize.x - box.width; - origin.y = PMONITOR->vecPixelSize.y - box.height; + origin.x = PMONITOR->m_pixelSize.x - box.width; + origin.y = PMONITOR->m_pixelSize.y - box.height; break; } case WL_OUTPUT_TRANSFORM_FLIPPED: case WL_OUTPUT_TRANSFORM_270: { - origin.x = PMONITOR->vecPixelSize.x - box.width; + origin.x = PMONITOR->m_pixelSize.x - box.width; break; } default: break; @@ -314,8 +314,8 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { glReadPixels(origin.x, origin.y, box.width, box.height, glFormat, PFORMAT->glType, pixelData); if (overlayCursor) { - g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->self.lock()); - g_pPointerManager->damageCursor(PMONITOR->self.lock()); + g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->m_self.lock()); + g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } outFB.unbind(); @@ -336,8 +336,8 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { auto overlayCursor = shouldOverlayCursor(); if (overlayCursor) { - g_pPointerManager->lockSoftwareForMonitor(PMONITOR->self.lock()); - g_pPointerManager->damageCursor(PMONITOR->self.lock()); + g_pPointerManager->lockSoftwareForMonitor(PMONITOR->m_self.lock()); + g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer)) @@ -350,10 +350,10 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = - CBox{PMONITOR->vecTransformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } @@ -361,8 +361,8 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pHyprRenderer->endRender(); if (overlayCursor) { - g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->self.lock()); - g_pPointerManager->damageCursor(PMONITOR->self.lock()); + g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->m_self.lock()); + g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } return true; @@ -450,7 +450,7 @@ void CToplevelExportProtocol::onOutputCommit(PHLMONITOR pMonitor) { CBox geometry = {PWINDOW->m_realPosition->value().x, PWINDOW->m_realPosition->value().y, PWINDOW->m_realSize->value().x, PWINDOW->m_realSize->value().y}; - if (geometry.intersection({pMonitor->vecPosition, pMonitor->vecSize}).empty()) + if (geometry.intersection({pMonitor->m_position, pMonitor->m_size}).empty()) continue; f->share(); diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index e95b9c7d..81c71447 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -65,14 +65,14 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32 return; } - LOGM(LOG, "New xdg_output for {}: client {:x} ({})", PMONITOR->szName, (uintptr_t)CLIENT, pXDGOutput->isXWayland ? "xwayland" : "not xwayland"); + LOGM(LOG, "New xdg_output for {}: client {:x} ({})", PMONITOR->m_name, (uintptr_t)CLIENT, pXDGOutput->isXWayland ? "xwayland" : "not xwayland"); const auto XDGVER = pXDGOutput->resource->version(); if (XDGVER >= OUTPUT_NAME_SINCE_VERSION) - pXDGOutput->resource->sendName(PMONITOR->szName.c_str()); - if (XDGVER >= OUTPUT_DESCRIPTION_SINCE_VERSION && !PMONITOR->output->description.empty()) - pXDGOutput->resource->sendDescription(PMONITOR->output->description.c_str()); + pXDGOutput->resource->sendName(PMONITOR->m_name.c_str()); + if (XDGVER >= OUTPUT_DESCRIPTION_SINCE_VERSION && !PMONITOR->m_output->description.empty()) + pXDGOutput->resource->sendDescription(PMONITOR->m_output->description.c_str()); pXDGOutput->sendDetails(); @@ -110,13 +110,13 @@ void CXDGOutput::sendDetails() { if UNLIKELY (!monitor || !outputProto || outputProto->isDefunct()) return; - const auto POS = isXWayland ? monitor->vecXWaylandPosition : monitor->vecPosition; + const auto POS = isXWayland ? monitor->m_xwaylandPosition : monitor->m_position; resource->sendLogicalPosition(POS.x, POS.y); if (*PXWLFORCESCALEZERO && isXWayland) - resource->sendLogicalSize(monitor->vecTransformedSize.x, monitor->vecTransformedSize.y); + resource->sendLogicalSize(monitor->m_transformedSize.x, monitor->m_transformedSize.y); else - resource->sendLogicalSize(monitor->vecSize.x, monitor->vecSize.y); + resource->sendLogicalSize(monitor->m_size.x, monitor->m_size.y); if (resource->version() < OUTPUT_DONE_DEPRECATED_SINCE_VERSION) resource->sendDone(); diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index 449348b9..59eca367 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -196,7 +196,7 @@ CXDGToplevelResource::CXDGToplevelResource(SP resource_, SPsetSetFullscreen([this](CXdgToplevel* r, wl_resource* output) { if (output) if (const auto PM = CWLOutputResource::fromResource(output)->monitor; PM) - state.requestsFullscreenMonitor = PM->ID; + state.requestsFullscreenMonitor = PM->m_id; state.requestsFullscreen = true; events.stateChanged.emit(); diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index cf28b240..b58ece97 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -271,21 +271,21 @@ void CWLSurfaceResource::enter(PHLMONITOR monitor) { if (std::find(enteredOutputs.begin(), enteredOutputs.end(), monitor) != enteredOutputs.end()) return; - if UNLIKELY (!PROTO::outputs.contains(monitor->szName)) { + if UNLIKELY (!PROTO::outputs.contains(monitor->m_name)) { // can happen on unplug/replug LOGM(ERR, "enter() called on a non-existent output global"); return; } - if UNLIKELY (PROTO::outputs.at(monitor->szName)->isDefunct()) { + if UNLIKELY (PROTO::outputs.at(monitor->m_name)->isDefunct()) { LOGM(ERR, "enter() called on a defunct output global"); return; } - auto output = PROTO::outputs.at(monitor->szName)->outputResourceFrom(pClient); + auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(pClient); if UNLIKELY (!output || !output->getResource() || !output->getResource()->resource()) { - LOGM(ERR, "Cannot enter surface {:x} to {}, client hasn't bound the output", (uintptr_t)this, monitor->szName); + LOGM(ERR, "Cannot enter surface {:x} to {}, client hasn't bound the output", (uintptr_t)this, monitor->m_name); return; } @@ -298,10 +298,10 @@ void CWLSurfaceResource::leave(PHLMONITOR monitor) { if UNLIKELY (std::find(enteredOutputs.begin(), enteredOutputs.end(), monitor) == enteredOutputs.end()) return; - auto output = PROTO::outputs.at(monitor->szName)->outputResourceFrom(pClient); + auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(pClient); if UNLIKELY (!output) { - LOGM(ERR, "Cannot leave surface {:x} from {}, client hasn't bound the output", (uintptr_t)this, monitor->szName); + LOGM(ERR, "Cannot leave surface {:x} from {}, client hasn't bound the output", (uintptr_t)this, monitor->m_name); return; } diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 8ac5d31d..1cd003f0 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -809,7 +809,7 @@ void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, const Time::steady_tp surfacePos += dnd.dndSurface->current.offset; - CBox box = CBox{surfacePos, dnd.dndSurface->current.size}.translate(-pMonitor->vecPosition).scale(pMonitor->scale); + CBox box = CBox{surfacePos, dnd.dndSurface->current.size}.translate(-pMonitor->m_position).scale(pMonitor->m_scale); CTexPassElement::SRenderData data; data.tex = dnd.dndSurface->current.texture; diff --git a/src/protocols/core/Output.cpp b/src/protocols/core/Output.cpp index 41e03e78..dfb89ba7 100644 --- a/src/protocols/core/Output.cpp +++ b/src/protocols/core/Output.cpp @@ -15,17 +15,17 @@ CWLOutputResource::CWLOutputResource(SP resource_, PHLMONITOR pMonito return; resource->setOnDestroy([this](CWlOutput* r) { - if (monitor && PROTO::outputs.contains(monitor->szName)) - PROTO::outputs.at(monitor->szName)->destroyResource(this); + if (monitor && PROTO::outputs.contains(monitor->m_name)) + PROTO::outputs.at(monitor->m_name)->destroyResource(this); }); resource->setRelease([this](CWlOutput* r) { - if (monitor && PROTO::outputs.contains(monitor->szName)) - PROTO::outputs.at(monitor->szName)->destroyResource(this); + if (monitor && PROTO::outputs.contains(monitor->m_name)) + PROTO::outputs.at(monitor->m_name)->destroyResource(this); }); if (resource->version() >= 4) { - resource->sendName(monitor->szName.c_str()); - resource->sendDescription(monitor->szDescription.c_str()); + resource->sendName(monitor->m_name.c_str()); + resource->sendDescription(monitor->m_description.c_str()); } updateState(); @@ -72,21 +72,21 @@ void CWLOutputResource::updateState() { return; if (resource->version() >= 2) - resource->sendScale(std::ceil(monitor->scale)); + resource->sendScale(std::ceil(monitor->m_scale)); - resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT), monitor->vecPixelSize.x, monitor->vecPixelSize.y, monitor->refreshRate * 1000.0); + resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT), monitor->m_pixelSize.x, monitor->m_pixelSize.y, monitor->m_refreshRate * 1000.0); - resource->sendGeometry(0, 0, monitor->output->physicalSize.x, monitor->output->physicalSize.y, (wl_output_subpixel)monitor->output->subpixel, monitor->output->make.c_str(), - monitor->output->model.c_str(), monitor->transform); + resource->sendGeometry(0, 0, monitor->m_output->physicalSize.x, monitor->m_output->physicalSize.y, (wl_output_subpixel)monitor->m_output->subpixel, + monitor->m_output->make.c_str(), monitor->m_output->model.c_str(), monitor->m_transform); if (resource->version() >= 2) resource->sendDone(); } CWLOutputProtocol::CWLOutputProtocol(const wl_interface* iface, const int& ver, const std::string& name, PHLMONITOR pMonitor) : - IWaylandProtocol(iface, ver, name), monitor(pMonitor), szName(pMonitor->szName) { + IWaylandProtocol(iface, ver, name), monitor(pMonitor), szName(pMonitor->m_name) { - listeners.modeChanged = monitor->events.modeChanged.registerListener([this](std::any d) { + listeners.modeChanged = monitor->m_events.modeChanged.registerListener([this](std::any d) { for (auto const& o : m_vOutputs) { o->updateState(); } diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index 46e7d195..c35b9600 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -85,7 +85,7 @@ void CFramebuffer::bind() { #endif if (g_pHyprOpenGL) - glViewport(0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.y); + glViewport(0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.y); else glViewport(0, 0, m_vSize.x, m_vSize.y); } diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 2a0cbe5a..31fd7b0a 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -688,14 +688,14 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP const auto FBO = rb ? rb->getFB() : fb; - glViewport(0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + glViewport(0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); - m_RenderData.projection = Mat3x3::outputProjection(pMonitor->vecPixelSize, HYPRUTILS_TRANSFORM_NORMAL); + m_RenderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); m_RenderData.monitorProjection = Mat3x3::identity(); - if (pMonitor->transform != WL_OUTPUT_TRANSFORM_NORMAL) { - const Vector2D tfmd = pMonitor->transform % 2 == 1 ? Vector2D{FBO->m_vSize.y, FBO->m_vSize.x} : FBO->m_vSize; - m_RenderData.monitorProjection.translate(FBO->m_vSize / 2.0).transform(wlTransformToHyprutils(pMonitor->transform)).translate(-tfmd / 2.0); + if (pMonitor->m_transform != WL_OUTPUT_TRANSFORM_NORMAL) { + const Vector2D tfmd = pMonitor->m_transform % 2 == 1 ? Vector2D{FBO->m_vSize.y, FBO->m_vSize.x} : FBO->m_vSize; + m_RenderData.monitorProjection.translate(FBO->m_vSize / 2.0).transform(wlTransformToHyprutils(pMonitor->m_transform)).translate(-tfmd / 2.0); } m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; @@ -738,13 +738,13 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb TRACY_GPU_ZONE("RenderBegin"); - glViewport(0, 0, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + glViewport(0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); - m_RenderData.projection = Mat3x3::outputProjection(pMonitor->vecPixelSize, HYPRUTILS_TRANSFORM_NORMAL); + m_RenderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); - m_RenderData.monitorProjection = pMonitor->projMatrix; + m_RenderData.monitorProjection = pMonitor->m_projMatrix; - if (m_mMonitorRenderResources.contains(pMonitor) && m_mMonitorRenderResources.at(pMonitor).offloadFB.m_vSize != pMonitor->vecPixelSize) + if (m_mMonitorRenderResources.contains(pMonitor) && m_mMonitorRenderResources.at(pMonitor).offloadFB.m_vSize != pMonitor->m_pixelSize) destroyMonitorResources(pMonitor); m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; @@ -753,19 +753,19 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb initShaders(); // ensure a framebuffer for the monitor exists - if (m_RenderData.pCurrentMonData->offloadFB.m_vSize != pMonitor->vecPixelSize) { + if (m_RenderData.pCurrentMonData->offloadFB.m_vSize != pMonitor->m_pixelSize) { m_RenderData.pCurrentMonData->stencilTex->allocate(); - m_RenderData.pCurrentMonData->offloadFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y, pMonitor->output->state->state().drmFormat); - m_RenderData.pCurrentMonData->mirrorFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y, pMonitor->output->state->state().drmFormat); - m_RenderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y, pMonitor->output->state->state().drmFormat); + m_RenderData.pCurrentMonData->offloadFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_RenderData.pCurrentMonData->mirrorFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_RenderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); m_RenderData.pCurrentMonData->offloadFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); m_RenderData.pCurrentMonData->mirrorFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); m_RenderData.pCurrentMonData->mirrorSwapFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); } - if (m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated() && m_RenderData.pMonitor->mirrors.empty()) + if (m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated() && m_RenderData.pMonitor->m_mirrors.empty()) m_RenderData.pCurrentMonData->monitorMirrorFB.release(); m_RenderData.damage.set(damage_); @@ -797,23 +797,23 @@ void CHyprOpenGLImpl::end() { m_RenderData.damage = m_RenderData.finalDamage; m_bEndFrame = true; - CBox monbox = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + CBox monbox = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; if (m_RenderData.mouseZoomFactor != 1.f) { const auto ZOOMCENTER = m_RenderData.mouseZoomUseMouse ? - (g_pInputManager->getMouseCoordsInternal() - m_RenderData.pMonitor->vecPosition) * m_RenderData.pMonitor->scale : - m_RenderData.pMonitor->vecTransformedSize / 2.f; + (g_pInputManager->getMouseCoordsInternal() - m_RenderData.pMonitor->m_position) * m_RenderData.pMonitor->m_scale : + m_RenderData.pMonitor->m_transformedSize / 2.f; - monbox.translate(-ZOOMCENTER).scale(m_RenderData.mouseZoomFactor).translate(*PZOOMRIGID ? m_RenderData.pMonitor->vecTransformedSize / 2.0 : ZOOMCENTER); + monbox.translate(-ZOOMCENTER).scale(m_RenderData.mouseZoomFactor).translate(*PZOOMRIGID ? m_RenderData.pMonitor->m_transformedSize / 2.0 : ZOOMCENTER); if (monbox.x > 0) monbox.x = 0; if (monbox.y > 0) monbox.y = 0; - if (monbox.x + monbox.width < m_RenderData.pMonitor->vecTransformedSize.x) - monbox.x = m_RenderData.pMonitor->vecTransformedSize.x - monbox.width; - if (monbox.y + monbox.height < m_RenderData.pMonitor->vecTransformedSize.y) - monbox.y = m_RenderData.pMonitor->vecTransformedSize.y - monbox.height; + if (monbox.x + monbox.width < m_RenderData.pMonitor->m_transformedSize.x) + monbox.x = m_RenderData.pMonitor->m_transformedSize.x - monbox.width; + if (monbox.y + monbox.height < m_RenderData.pMonitor->m_transformedSize.y) + monbox.y = m_RenderData.pMonitor->m_transformedSize.y - monbox.height; } m_bApplyFinalShader = !m_RenderData.blockScreenShader; @@ -822,7 +822,7 @@ void CHyprOpenGLImpl::end() { // copy the damaged areas into the mirror buffer // we can't use the offloadFB for mirroring, as it contains artifacts from blurring - if (!m_RenderData.pMonitor->mirrors.empty() && !m_bFakeFrame) + if (!m_RenderData.pMonitor->m_mirrors.empty() && !m_bFakeFrame) saveBufferForMirror(monbox); m_RenderData.outFB->bind(); @@ -1279,8 +1279,8 @@ void CHyprOpenGLImpl::scissor(const CBox& originalBox, bool transform) { if (transform) { CBox box = originalBox; - const auto TR = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)); - box.transform(TR, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y); + const auto TR = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); + box.transform(TR, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y); glScissor(box.x, box.y, box.width, box.height); glEnable(GL_SCISSOR_TEST); return; @@ -1342,7 +1342,7 @@ void CHyprOpenGLImpl::renderRectWithBlur(const CBox& box, const CHyprColor& col, glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); scissor(box); - CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; m_bEndFrame = true; // fix transformed const auto SAVEDRENDERMODIF = m_RenderData.renderModif; m_RenderData.renderModif = {}; // fix shit @@ -1370,7 +1370,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co m_RenderData.renderModif.applyToBox(newBox); Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)), newBox.rot); + newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); glUseProgram(m_shaders->m_shQUAD.program); @@ -1386,8 +1386,8 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co glUniform4f(m_shaders->m_shQUAD.color, col.r * col.a, col.g * col.a, col.b * col.a, col.a); CBox transformedBox = box; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -1466,12 +1466,12 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme glUniform1f(shader.dstMaxLuminance, targetImageDescription.luminances.max > 0 ? targetImageDescription.luminances.max : 10000); glUniform1f(shader.dstRefLuminance, targetImageDescription.luminances.reference); glUniform1f(shader.sdrSaturation, - modifySDR && m_RenderData.pMonitor->sdrSaturation > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrSaturation : + modifySDR && m_RenderData.pMonitor->m_sdrSaturation > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->m_sdrSaturation : 1.0f); glUniform1f(shader.sdrBrightness, - modifySDR && m_RenderData.pMonitor->sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrBrightness : + modifySDR && m_RenderData.pMonitor->m_sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->m_sdrBrightness : 1.0f); const auto cacheKey = std::make_pair(imageDescription.getId(), targetImageDescription.getId()); @@ -1488,7 +1488,7 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme } void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const SImageDescription& imageDescription) { - passCMUniforms(shader, imageDescription, m_RenderData.pMonitor->imageDescription, true); + passCMUniforms(shader, imageDescription, m_RenderData.pMonitor->m_imageDescription, true); } void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CBox& box, float alpha, const CRegion& damage, int round, float roundingPower, bool discardActive, @@ -1511,10 +1511,10 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB static const auto PENABLECM = CConfigValue("render:cm_enabled"); // get the needed transform for this texture - const bool TRANSFORMS_MATCH = wlTransformToHyprutils(m_RenderData.pMonitor->transform) == tex->m_eTransform; // FIXME: combine them properly!!! + const bool TRANSFORMS_MATCH = wlTransformToHyprutils(m_RenderData.pMonitor->m_transform) == tex->m_eTransform; // FIXME: combine them properly!!! eTransform TRANSFORM = HYPRUTILS_TRANSFORM_NORMAL; if (m_bEndFrame || TRANSFORMS_MATCH) - TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)); + TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); @@ -1570,11 +1570,11 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB const auto imageDescription = m_RenderData.surface.valid() && m_RenderData.surface->colorManagement.valid() ? m_RenderData.surface->colorManagement->imageDescription() : SImageDescription{}; - const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ - || (imageDescription == m_RenderData.pMonitor->imageDescription) /* Source and target have the same image description */ - || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->activeWorkspace && - m_RenderData.pMonitor->activeWorkspace->m_hasFullscreenWindow && - m_RenderData.pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; + const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ + || (imageDescription == m_RenderData.pMonitor->m_imageDescription) /* Source and target have the same image description */ + || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->m_activeWorkspace && + m_RenderData.pMonitor->m_activeWorkspace->m_hasFullscreenWindow && + m_RenderData.pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) shader = &m_shaders->m_shCM; @@ -1602,13 +1602,13 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } if (usingFinalShader && shader->wl_output != -1) - glUniform1i(shader->wl_output, m_RenderData.pMonitor->ID); + glUniform1i(shader->wl_output, m_RenderData.pMonitor->m_id); if (usingFinalShader && shader->fullSize != -1) - glUniform2f(shader->fullSize, m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y); + glUniform2f(shader->fullSize, m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y); if (CRASHING) { glUniform1f(shader->distort, g_pHyprRenderer->m_fCrashingDistort); - glUniform2f(shader->fullSize, m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y); + glUniform2f(shader->fullSize, m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y); } if (!usingFinalShader) { @@ -1625,8 +1625,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -1712,7 +1712,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) m_RenderData.renderModif.applyToBox(newBox); // get transform - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)); + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)); Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); @@ -1763,7 +1763,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra m_RenderData.renderModif.applyToBox(newBox); // get transform - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)); + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)); Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); @@ -1824,8 +1824,8 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glDisable(GL_STENCIL_TEST); // get transforms for the full monitor - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)); - CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); + CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(MONITORBOX, TRANSFORM); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); @@ -1837,8 +1837,8 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o // prep damage CRegion damage{*originalDamage}; - damage.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + damage.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); damage.expand(*PBLURPASSES > 10 ? pow(2, 15) : std::clamp(*PBLURSIZE, (int64_t)1, (int64_t)40) * pow(2, *PBLURPASSES)); // helper @@ -1866,17 +1866,19 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glUseProgram(m_shaders->m_shBLURPREPARE.program); // From FB to sRGB - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shBLURPREPARE.skipCM, skipCM); if (!skipCM) { - passCMUniforms(m_shaders->m_shBLURPREPARE, m_RenderData.pMonitor->imageDescription, SImageDescription{}); + passCMUniforms(m_shaders->m_shBLURPREPARE, m_RenderData.pMonitor->m_imageDescription, SImageDescription{}); glUniform1f(m_shaders->m_shBLURPREPARE.sdrSaturation, - m_RenderData.pMonitor->sdrSaturation > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrSaturation : + m_RenderData.pMonitor->m_sdrSaturation > 0 && + m_RenderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->m_sdrSaturation : 1.0f); glUniform1f(m_shaders->m_shBLURPREPARE.sdrBrightness, - m_RenderData.pMonitor->sdrBrightness > 0 && m_RenderData.pMonitor->imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->sdrBrightness : + m_RenderData.pMonitor->m_sdrBrightness > 0 && + m_RenderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_RenderData.pMonitor->m_sdrBrightness : 1.0f); } @@ -1935,12 +1937,12 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o #endif glUniform1f(pShader->radius, *PBLURSIZE * a); // this makes the blursize change with a if (pShader == &m_shaders->m_shBLUR1) { - glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y / 2.f)); + glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->m_pixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->m_pixelSize.y / 2.f)); glUniform1i(m_shaders->m_shBLUR1.passes, *PBLURPASSES); glUniform1f(m_shaders->m_shBLUR1.vibrancy, *PBLURVIBRANCY); glUniform1f(m_shaders->m_shBLUR1.vibrancy_darkness, *PBLURVIBRANCYDARKNESS); } else - glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_RenderData.pMonitor->vecPixelSize.x * 2.f), 0.5f / (m_RenderData.pMonitor->vecPixelSize.y * 2.f)); + glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_RenderData.pMonitor->m_pixelSize.x * 2.f), 0.5f / (m_RenderData.pMonitor->m_pixelSize.y * 2.f)); glUniform1i(pShader->tex, 0); glVertexAttribPointer(pShader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); @@ -2058,7 +2060,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { return; // ignore if solitary present, nothing to blur - if (!pMonitor->solitaryClient.expired()) + if (!pMonitor->m_solitaryClient.expired()) return; // check if we need to update the blur fb @@ -2099,7 +2101,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { bool hasWindows = false; for (auto const& w : g_pCompositor->m_windows) { - if (w->m_workspace == pMonitor->activeWorkspace && !w->isHidden() && w->m_isMapped && (!w->m_isFloating || *PBLURXRAY)) { + if (w->m_workspace == pMonitor->m_activeWorkspace && !w->isHidden() && w->m_isMapped && (!w->m_isFloating || *PBLURXRAY)) { // check if window is valid if (!windowShouldBeBlurred(w)) @@ -2111,7 +2113,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { } for (auto const& m : g_pCompositor->m_monitors) { - for (auto const& lsl : m->m_aLayerSurfaceLayers) { + for (auto const& lsl : m->m_layerSurfaceLayers) { for (auto const& ls : lsl) { if (!ls->m_layerSurface || ls->m_xray != 1) continue; @@ -2140,18 +2142,18 @@ void CHyprOpenGLImpl::preBlurForCurrentMonitor() { m_RenderData.renderModif = {}; // fix shit // make the fake dmg - CRegion fakeDamage{0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; const auto POUTFB = blurMainFramebufferWithDamage(1, &fakeDamage); // render onto blurFB - m_RenderData.pCurrentMonData->blurFB.alloc(m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y, - m_RenderData.pMonitor->output->state->state().drmFormat); + m_RenderData.pCurrentMonData->blurFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, + m_RenderData.pMonitor->m_output->state->state().drmFormat); m_RenderData.pCurrentMonData->blurFB.bind(); clear(CHyprColor(0, 0, 0, 0)); m_bEndFrame = true; // fix transformed - renderTextureInternalWithDamage(POUTFB->getTexture(), CBox{0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}, 1, fakeDamage, 0, + renderTextureInternalWithDamage(POUTFB->getTexture(), CBox{0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}, 1, fakeDamage, 0, 2.0f, false, true, false); m_bEndFrame = false; @@ -2222,7 +2224,8 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f // amazing hack: the surface has an opaque region! CRegion inverseOpaque; - if (a >= 1.f && std::round(pSurface->current.size.x * m_RenderData.pMonitor->scale) == box.w && std::round(pSurface->current.size.y * m_RenderData.pMonitor->scale) == box.h) { + if (a >= 1.f && std::round(pSurface->current.size.x * m_RenderData.pMonitor->m_scale) == box.w && + std::round(pSurface->current.size.y * m_RenderData.pMonitor->m_scale) == box.h) { pixman_box32_t surfbox = {0, 0, pSurface->current.size.x * pSurface->current.scale, pSurface->current.size.y * pSurface->current.scale}; inverseOpaque = pSurface->current.opaque; inverseOpaque.invert(&surfbox).intersect(0, 0, pSurface->current.size.x * pSurface->current.scale, pSurface->current.size.y * pSurface->current.scale); @@ -2234,7 +2237,7 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f } else inverseOpaque = {0, 0, box.width, box.height}; - inverseOpaque.scale(m_RenderData.pMonitor->scale); + inverseOpaque.scale(m_RenderData.pMonitor->m_scale); // vvv TODO: layered blur fbs? const bool USENEWOPTIMIZE = shouldUseNewBlurOptimizations(m_RenderData.currentLS.lock(), m_RenderData.currentWindow.lock()) && !blockBlurOptimization; @@ -2276,16 +2279,16 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f const auto LASTBR = m_RenderData.primarySurfaceUVBottomRight; CBox transformedBox = box; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); - CBox monitorSpaceBox = {transformedBox.pos().x / m_RenderData.pMonitor->vecPixelSize.x * m_RenderData.pMonitor->vecTransformedSize.x, - transformedBox.pos().y / m_RenderData.pMonitor->vecPixelSize.y * m_RenderData.pMonitor->vecTransformedSize.y, - transformedBox.width / m_RenderData.pMonitor->vecPixelSize.x * m_RenderData.pMonitor->vecTransformedSize.x, - transformedBox.height / m_RenderData.pMonitor->vecPixelSize.y * m_RenderData.pMonitor->vecTransformedSize.y}; + CBox monitorSpaceBox = {transformedBox.pos().x / m_RenderData.pMonitor->m_pixelSize.x * m_RenderData.pMonitor->m_transformedSize.x, + transformedBox.pos().y / m_RenderData.pMonitor->m_pixelSize.y * m_RenderData.pMonitor->m_transformedSize.y, + transformedBox.width / m_RenderData.pMonitor->m_pixelSize.x * m_RenderData.pMonitor->m_transformedSize.x, + transformedBox.height / m_RenderData.pMonitor->m_pixelSize.y * m_RenderData.pMonitor->m_transformedSize.y}; - m_RenderData.primarySurfaceUVTopLeft = monitorSpaceBox.pos() / m_RenderData.pMonitor->vecTransformedSize; - m_RenderData.primarySurfaceUVBottomRight = (monitorSpaceBox.pos() + monitorSpaceBox.size()) / m_RenderData.pMonitor->vecTransformedSize; + m_RenderData.primarySurfaceUVTopLeft = monitorSpaceBox.pos() / m_RenderData.pMonitor->m_transformedSize; + m_RenderData.primarySurfaceUVBottomRight = (monitorSpaceBox.pos() + monitorSpaceBox.size()) / m_RenderData.pMonitor->m_transformedSize; static auto PBLURIGNOREOPACITY = CConfigValue("decoration:blur:ignore_opacity"); setMonitorTransformEnabled(true); @@ -2327,7 +2330,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr if (borderSize < 1) return; - int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->scale); + int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->m_scale); scaledBorderSize = std::round(scaledBorderSize * m_RenderData.renderModif.combinedScale()); // adjust box @@ -2339,7 +2342,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr round += round == 0 ? 0 : scaledBorderSize; Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)), newBox.rot); + newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); const auto BLEND = m_bBlend; @@ -2347,7 +2350,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUseProgram(m_shaders->m_shBORDER1.program); - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shBORDER1.skipCM, skipCM); if (!skipCM) passCMUniforms(m_shaders->m_shBORDER1, SImageDescription{}); @@ -2366,8 +2369,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1i(m_shaders->m_shBORDER1.gradient2Length, 0); CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -2425,7 +2428,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr if (borderSize < 1) return; - int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->scale); + int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->m_scale); scaledBorderSize = std::round(scaledBorderSize * m_RenderData.renderModif.combinedScale()); // adjust box @@ -2437,7 +2440,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr round += round == 0 ? 0 : scaledBorderSize; Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)), newBox.rot); + newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); const auto BLEND = m_bBlend; @@ -2463,8 +2466,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1f(m_shaders->m_shBORDER1.gradientLerp, lerp); CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)), m_RenderData.pMonitor->vecTransformedSize.x, - m_RenderData.pMonitor->vecTransformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, + m_RenderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -2526,13 +2529,13 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun const auto col = color; Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)), newBox.rot); + newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); blend(true); glUseProgram(m_shaders->m_shSHADOW.program); - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->imageDescription == SImageDescription{}; + const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shSHADOW.skipCM, skipCM); if (!skipCM) passCMUniforms(m_shaders->m_shSHADOW, SImageDescription{}); @@ -2588,8 +2591,8 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun void CHyprOpenGLImpl::saveBufferForMirror(const CBox& box) { if (!m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated()) - m_RenderData.pCurrentMonData->monitorMirrorFB.alloc(m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y, - m_RenderData.pMonitor->output->state->state().drmFormat); + m_RenderData.pCurrentMonData->monitorMirrorFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, + m_RenderData.pMonitor->m_output->state->state().drmFormat); m_RenderData.pCurrentMonData->monitorMirrorFB.bind(); @@ -2605,16 +2608,16 @@ void CHyprOpenGLImpl::saveBufferForMirror(const CBox& box) { void CHyprOpenGLImpl::renderMirrored() { auto monitor = m_RenderData.pMonitor; - auto mirrored = monitor->pMirrorOf; + auto mirrored = monitor->m_mirrorOf; - const double scale = std::min(monitor->vecTransformedSize.x / mirrored->vecTransformedSize.x, monitor->vecTransformedSize.y / mirrored->vecTransformedSize.y); - CBox monbox = {0, 0, mirrored->vecTransformedSize.x * scale, mirrored->vecTransformedSize.y * scale}; + const double scale = std::min(monitor->m_transformedSize.x / mirrored->m_transformedSize.x, monitor->m_transformedSize.y / mirrored->m_transformedSize.y); + CBox monbox = {0, 0, mirrored->m_transformedSize.x * scale, mirrored->m_transformedSize.y * scale}; // transform box as it will be drawn on a transformed projection - monbox.transform(wlTransformToHyprutils(mirrored->transform), mirrored->vecTransformedSize.x * scale, mirrored->vecTransformedSize.y * scale); + monbox.transform(wlTransformToHyprutils(mirrored->m_transform), mirrored->m_transformedSize.x * scale, mirrored->m_transformedSize.y * scale); - monbox.x = (monitor->vecTransformedSize.x - monbox.w) / 2; - monbox.y = (monitor->vecTransformedSize.y - monbox.h) / 2; + monbox.x = (monitor->m_transformedSize.x - monbox.w) / 2; + monbox.y = (monitor->m_transformedSize.y - monbox.h) / 2; const auto PFB = &m_mMonitorRenderResources[mirrored].monitorMirrorFB; if (!PFB->isAllocated() || !PFB->getTexture()) @@ -2626,10 +2629,10 @@ void CHyprOpenGLImpl::renderMirrored() { data.tex = PFB->getTexture(); data.box = monbox; data.replaceProjection = Mat3x3::identity() - .translate(monitor->vecPixelSize / 2.0) - .transform(wlTransformToHyprutils(monitor->transform)) - .transform(wlTransformToHyprutils(invertTransform(mirrored->transform))) - .translate(-monitor->vecTransformedSize / 2.0); + .translate(monitor->m_pixelSize / 2.0) + .transform(wlTransformToHyprutils(monitor->m_transform)) + .transform(wlTransformToHyprutils(invertTransform(mirrored->m_transform))) + .translate(-monitor->m_transformedSize / 2.0); g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); } @@ -2912,7 +2915,7 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { const auto PFB = &m_mMonitorBGFBs[pMonitor]; PFB->release(); - PFB->alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y, pMonitor->output->state->state().drmFormat); + PFB->alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); if (!m_pBackgroundTexture) // ?!?!?! return; @@ -2922,7 +2925,7 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { tex->allocate(); - const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); const auto CAIRO = cairo_create(CAIROSURFACE); cairo_set_antialias(CAIRO, CAIRO_ANTIALIAS_GOOD); @@ -2933,11 +2936,11 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { cairo_restore(CAIRO); if (!*PNOSPLASH) - renderSplash(CAIRO, CAIROSURFACE, 0.02 * pMonitor->vecPixelSize.y, pMonitor->vecPixelSize); + renderSplash(CAIRO, CAIROSURFACE, 0.02 * pMonitor->m_pixelSize.y, pMonitor->m_pixelSize); cairo_surface_flush(CAIROSURFACE); - tex->m_vSize = pMonitor->vecPixelSize; + tex->m_vSize = pMonitor->m_pixelSize; // copy the data to an OpenGL texture we have const GLint glFormat = GL_RGBA; @@ -2965,31 +2968,31 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { // first render the background if (m_pBackgroundTexture) { - const double MONRATIO = m_RenderData.pMonitor->vecTransformedSize.x / m_RenderData.pMonitor->vecTransformedSize.y; + const double MONRATIO = m_RenderData.pMonitor->m_transformedSize.x / m_RenderData.pMonitor->m_transformedSize.y; const double WPRATIO = m_pBackgroundTexture->m_vSize.x / m_pBackgroundTexture->m_vSize.y; Vector2D origin; double scale = 1.0; if (MONRATIO > WPRATIO) { - scale = m_RenderData.pMonitor->vecTransformedSize.x / m_pBackgroundTexture->m_vSize.x; - origin.y = (m_RenderData.pMonitor->vecTransformedSize.y - m_pBackgroundTexture->m_vSize.y * scale) / 2.0; + scale = m_RenderData.pMonitor->m_transformedSize.x / m_pBackgroundTexture->m_vSize.x; + origin.y = (m_RenderData.pMonitor->m_transformedSize.y - m_pBackgroundTexture->m_vSize.y * scale) / 2.0; } else { - scale = m_RenderData.pMonitor->vecTransformedSize.y / m_pBackgroundTexture->m_vSize.y; - origin.x = (m_RenderData.pMonitor->vecTransformedSize.x - m_pBackgroundTexture->m_vSize.x * scale) / 2.0; + scale = m_RenderData.pMonitor->m_transformedSize.y / m_pBackgroundTexture->m_vSize.y; + origin.x = (m_RenderData.pMonitor->m_transformedSize.x - m_pBackgroundTexture->m_vSize.x * scale) / 2.0; } CBox texbox = CBox{origin, m_pBackgroundTexture->m_vSize * scale}; renderTextureInternalWithDamage(m_pBackgroundTexture, texbox, 1.0, fakeDamage); } - CBox monbox = {{}, pMonitor->vecPixelSize}; + CBox monbox = {{}, pMonitor->m_pixelSize}; renderTextureInternalWithDamage(tex, monbox, 1.0, fakeDamage); // bind back if (m_RenderData.currentFB) m_RenderData.currentFB->bind(); - Debug::log(LOG, "Background created for monitor {}", pMonitor->szName); + Debug::log(LOG, "Background created for monitor {}", pMonitor->m_name); } void CHyprOpenGLImpl::clearWithTex() { @@ -3004,7 +3007,7 @@ void CHyprOpenGLImpl::clearWithTex() { if (TEXIT != m_mMonitorBGFBs.end()) { CTexPassElement::SRenderData data; - data.box = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + data.box = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; data.flipEndFrame = true; data.tex = TEXIT->second.getTexture(); g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); @@ -3036,7 +3039,7 @@ void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITORREF pMonitor) { } if (pMonitor) - Debug::log(LOG, "Monitor {} -> destroyed all render data", pMonitor->szName); + Debug::log(LOG, "Monitor {} -> destroyed all render data", pMonitor->m_name); } void CHyprOpenGLImpl::saveMatrix() { @@ -3053,8 +3056,8 @@ void CHyprOpenGLImpl::restoreMatrix() { void CHyprOpenGLImpl::bindOffMain() { if (!m_RenderData.pCurrentMonData->offMainFB.isAllocated()) { - m_RenderData.pCurrentMonData->offMainFB.alloc(m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y, - m_RenderData.pMonitor->output->state->state().drmFormat); + m_RenderData.pCurrentMonData->offMainFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, + m_RenderData.pMonitor->m_output->state->state().drmFormat); m_RenderData.pCurrentMonData->offMainFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); } @@ -3065,7 +3068,7 @@ void CHyprOpenGLImpl::bindOffMain() { } void CHyprOpenGLImpl::renderOffToMain(CFramebuffer* off) { - CBox monbox = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + CBox monbox = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; renderTexturePrimitive(off->getTexture(), monbox); } @@ -3083,7 +3086,7 @@ void CHyprOpenGLImpl::setRenderModifEnabled(bool enabled) { } uint32_t CHyprOpenGLImpl::getPreferredReadFormat(PHLMONITOR pMonitor) { - return pMonitor->output->state->state().drmFormat; + return pMonitor->m_output->state->state().drmFormat; } std::vector CHyprOpenGLImpl::getDRMFormats() { diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 93d3620f..445c39cd 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -119,7 +119,7 @@ CHyprRenderer::CHyprRenderer() { if (!g_pHyprError->active()) return; for (auto& m : g_pCompositor->m_monitors) { - arrangeLayersForMonitor(m->ID); + arrangeLayersForMonitor(m->m_id); } }); }); @@ -209,7 +209,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { if (pWindow->m_workspace && pWindow->m_workspace->isVisible() && pWindow->m_isFloating /* tiled windows can't be multi-ws */) return !pWindow->isFullscreen(); // Do not draw fullscreen windows on other monitors - if (pMonitor->activeSpecialWorkspace == pWindow->m_workspace) + if (pMonitor->m_activeSpecialWorkspace == pWindow->m_workspace) return true; // if window is tiled and it's flying in, don't render on other mons (for slide) @@ -226,7 +226,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { windowBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); windowBox.translate(pWindow->m_floatingOffset); - const CBox monitorBox = {pMonitor->vecPosition, pMonitor->vecSize}; + const CBox monitorBox = {pMonitor->m_position, pMonitor->m_size}; if (!windowBox.intersection(monitorBox).empty() && (pWindow->workspaceID() == pMonitor->activeWorkspaceID() || pWindow->m_monitorMovedFrom != -1)) return true; } @@ -254,7 +254,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow) { if (PWORKSPACE && PWORKSPACE->m_monitor == m && (PWORKSPACE->m_renderOffset->isBeingAnimated() || PWORKSPACE->m_alpha->isBeingAnimated())) return true; - if (m->activeSpecialWorkspace && pWindow->onSpecialWorkspace()) + if (m->m_activeSpecialWorkspace && pWindow->onSpecialWorkspace()) return true; } @@ -479,8 +479,8 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.h = textureBox.h; if (ignorePosition) { - renderdata.pos.x = pMonitor->vecPosition.x; - renderdata.pos.y = pMonitor->vecPosition.y; + renderdata.pos.x = pMonitor->m_position.x; + renderdata.pos.y = pMonitor->m_position.y; } else { const bool ANR = pWindow->isNotResponding(); if (ANR && pWindow->m_notRespondingTint->goal() != 0.2F) @@ -502,7 +502,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T (USE_WORKSPACE_FADE_ALPHA ? pWindow->m_movingToWorkspaceAlpha->value() : 1.F) * pWindow->m_movingFromWorkspaceAlpha->value(); renderdata.alpha = pWindow->m_activeInactiveAlpha->value(); renderdata.decorate = decorate && !pWindow->m_X11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN); - renderdata.rounding = standalone || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale; + renderdata.rounding = standalone || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->m_scale; renderdata.roundingPower = standalone || renderdata.dontRound ? 2.0f : pWindow->roundingPower(); renderdata.blur = !standalone && *PBLUR && !DONT_BLUR; renderdata.pWindow = pWindow; @@ -521,7 +521,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW); if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) { - CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.y}; + CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.y}; CRectPassElement::SRectData data; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * renderdata.alpha * renderdata.fadeAlpha); data.box = monbox; @@ -533,7 +533,8 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T // if window is floating and we have a slide animation, clip it to its full bb if (!ignorePosition && pWindow->m_isFloating && !pWindow->isFullscreen() && PWORKSPACE->m_renderOffset->isBeingAnimated() && !pWindow->m_pinned) { - CRegion rg = pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_renderOffset->value() + pWindow->m_floatingOffset).scale(pMonitor->scale); + CRegion rg = + pWindow->getFullWindowBoundingBox().translate(-pMonitor->m_position + PWORKSPACE->m_renderOffset->value() + pWindow->m_floatingOffset).scale(pMonitor->m_scale); renderdata.clipBox = rg.getExtents(); } @@ -571,8 +572,8 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.useNearestNeighbor = true; if (!pWindow->m_windowData.noBlur.valueOrDefault() && pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall && renderdata.blur && *PBLUR) { - CBox wb = {renderdata.pos.x - pMonitor->vecPosition.x, renderdata.pos.y - pMonitor->vecPosition.y, renderdata.w, renderdata.h}; - wb.scale(pMonitor->scale).round(); + CBox wb = {renderdata.pos.x - pMonitor->m_position.x, renderdata.pos.y - pMonitor->m_position.y, renderdata.w, renderdata.h}; + wb.scale(pMonitor->m_scale).round(); CRectPassElement::SRectData data; data.color = CHyprColor(0, 0, 0, 0); data.box = wb; @@ -699,7 +700,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s if (*PDIMAROUND && pLayer->m_dimAround && !m_bRenderingSnapshot && !popups) { CRectPassElement::SRectData data; - data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize.y}; + data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.y}; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pLayer->m_alpha->value()); m_sRenderPass.add(makeShared(data)); } @@ -727,7 +728,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.pLS = pLayer; renderdata.blockBlurOptimization = pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM || pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; - renderdata.clipBox = CBox{0, 0, pMonitor->vecSize.x, pMonitor->vecSize.y}.scale(pMonitor->scale); + renderdata.clipBox = CBox{0, 0, pMonitor->m_size.x, pMonitor->m_size.y}.scale(pMonitor->m_scale); if (renderdata.blur && pLayer->m_ignoreAlpha) { renderdata.discardMode |= DISCARD_ALPHA; @@ -804,13 +805,13 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, con } void CHyprRenderer::renderSessionLockSurface(WP pSurface, PHLMONITOR pMonitor, const Time::steady_tp& time) { - CSurfacePassElement::SRenderData renderdata = {pMonitor, time, pMonitor->vecPosition, pMonitor->vecPosition}; + CSurfacePassElement::SRenderData renderdata = {pMonitor, time, pMonitor->m_position, pMonitor->m_position}; renderdata.blur = false; renderdata.surface = pSurface->surface->surface(); renderdata.decorate = false; - renderdata.w = pMonitor->vecSize.x; - renderdata.h = pMonitor->vecSize.y; + renderdata.w = pMonitor->m_size.x; + renderdata.h = pMonitor->m_size.y; renderdata.surface->breadthfirst( [this, &renderdata, &pSurface](SP s, const Vector2D& offset, void* data) { @@ -869,16 +870,16 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA else g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper" - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { renderLayer(ls.lock(), pMonitor, time); } - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { renderLayer(ls.lock(), pMonitor, time); } - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { renderLayer(ls.lock(), pMonitor, time); } - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { renderLayer(ls.lock(), pMonitor, time); } @@ -891,10 +892,10 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA else g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper" - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { renderLayer(ls.lock(), pMonitor, time); } - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { renderLayer(ls.lock(), pMonitor, time); } } @@ -911,11 +912,11 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA for (auto const& ws : g_pCompositor->m_workspaces) { if (ws->m_monitor == pMonitor && ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) { const auto SPECIALANIMPROGRS = ws->m_renderOffset->isBeingAnimated() ? ws->m_renderOffset->getCurveValue() : ws->m_alpha->getCurveValue(); - const bool ANIMOUT = !pMonitor->activeSpecialWorkspace; + const bool ANIMOUT = !pMonitor->m_activeSpecialWorkspace; if (*PDIMSPECIAL != 0.f) { CRectPassElement::SRectData data; - data.box = {translate.x, translate.y, pMonitor->vecTransformedSize.x * scale, pMonitor->vecTransformedSize.y * scale}; + data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale}; data.color = CHyprColor(0, 0, 0, *PDIMSPECIAL * (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS)); g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); @@ -923,7 +924,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA if (*PBLURSPECIAL && *PBLUR) { CRectPassElement::SRectData data; - data.box = {translate.x, translate.y, pMonitor->vecTransformedSize.x * scale, pMonitor->vecTransformedSize.y * scale}; + data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale}; data.color = CHyprColor(0, 0, 0, 0); data.blur = true; data.blurA = (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS); @@ -963,7 +964,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA EMIT_HOOK_EVENT("render", RENDER_POST_WINDOWS); // Render surfaces above windows for monitor - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { renderLayer(ls.lock(), pMonitor, time); } @@ -972,11 +973,11 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA renderIMEPopup(imep.get(), pMonitor, time); } - for (auto const& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { renderLayer(ls.lock(), pMonitor, time); } - for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& lsl : pMonitor->m_layerSurfaceLayers) { for (auto const& ls : lsl) { renderLayer(ls.lock(), pMonitor, time, true); } @@ -993,7 +994,7 @@ void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp& if (g_pSessionLockManager->isSessionLocked()) { Vector2D translate = {geometry.x, geometry.y}; - const auto PSLS = g_pSessionLockManager->getSessionLockSurfaceForMonitor(pMonitor->ID); + const auto PSLS = g_pSessionLockManager->getSessionLockSurfaceForMonitor(pMonitor->m_id); if (!PSLS) { if (g_pSessionLockManager->shallConsiderLockMissing()) renderSessionLockMissing(pMonitor); @@ -1001,26 +1002,26 @@ void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp& renderSessionLockSurface(PSLS, pMonitor, now); // render layers and then their popups for abovelock rule - for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& lsl : pMonitor->m_layerSurfaceLayers) { for (auto const& ls : lsl) { renderLayer(ls.lock(), pMonitor, now, false, true); } } - for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& lsl : pMonitor->m_layerSurfaceLayers) { for (auto const& ls : lsl) { renderLayer(ls.lock(), pMonitor, now, true, true); } } - g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->ID); + g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->m_id); } } } void CHyprRenderer::renderSessionLockMissing(PHLMONITOR pMonitor) { - const auto ALPHA = g_pSessionLockManager->getRedScreenAlphaForMonitor(pMonitor->ID); + const auto ALPHA = g_pSessionLockManager->getRedScreenAlphaForMonitor(pMonitor->m_id); - CBox monbox = {{}, pMonitor->vecPixelSize}; + CBox monbox = {{}, pMonitor->m_pixelSize}; const bool ANY_PRESENT = g_pSessionLockManager->anySessionLockSurfacesPresent(); @@ -1041,7 +1042,7 @@ void CHyprRenderer::renderSessionLockMissing(PHLMONITOR pMonitor) { if (ALPHA < 1.f) /* animate */ damageMonitor(pMonitor); else - g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->ID); + g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->m_id); } void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SP pSurface, PHLMONITOR pMonitor, bool main, const Vector2D& projSize, @@ -1081,10 +1082,10 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPscale); + const auto MONITOR_WL_SCALE = std::ceil(pMonitor->m_scale); const bool SCALE_UNAWARE = MONITOR_WL_SCALE != pSurface->current.scale && !pSurface->current.viewport.hasDestination; const auto EXPECTED_SIZE = - ((pSurface->current.viewport.hasDestination ? pSurface->current.viewport.destination : pSurface->current.bufferSize / pSurface->current.scale) * pMonitor->scale) + ((pSurface->current.viewport.hasDestination ? pSurface->current.viewport.destination : pSurface->current.bufferSize / pSurface->current.scale) * pMonitor->m_scale) .round(); if (!SCALE_UNAWARE && (EXPECTED_SIZE.x < projSize.x || EXPECTED_SIZE.y < projSize.y)) { // this will not work with shm AFAIK, idk why. @@ -1194,7 +1195,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (!g_pCompositor->m_sessionActive) return; - if (pMonitor->ID == m_pMostHzMonitor->ID || + if (pMonitor->m_id == m_pMostHzMonitor->m_id || *PVFR == 1) { // unfortunately with VFR we don't have the guarantee mostHz is going to be updated all the time, so we have to ignore that g_pCompositor->sanityCheckWorkspaces(); @@ -1204,18 +1205,18 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { g_pConfigManager->performMonitorReload(); } - if (pMonitor->scheduledRecalc) { - pMonitor->scheduledRecalc = false; - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->ID); + if (pMonitor->m_scheduledRecalc) { + pMonitor->m_scheduledRecalc = false; + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(pMonitor->m_id); } - if (!pMonitor->output->needsFrame && pMonitor->forceFullFrames == 0) + if (!pMonitor->m_output->needsFrame && pMonitor->m_forceFullFrames == 0) return; // tearing and DS first bool shouldTear = false; - if (pMonitor->tearingState.nextRenderTorn) { - pMonitor->tearingState.nextRenderTorn = false; + if (pMonitor->m_tearingState.nextRenderTorn) { + pMonitor->m_tearingState.nextRenderTorn = false; if (!*PTEARINGENABLED) { Debug::log(WARN, "Tearing commit requested but the master switch general:allow_tearing is off, ignoring"); @@ -1227,32 +1228,32 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { return; } - if (!pMonitor->tearingState.canTear) { + if (!pMonitor->m_tearingState.canTear) { Debug::log(WARN, "Tearing commit requested but monitor doesn't support it, ignoring"); return; } - if (!pMonitor->solitaryClient.expired()) + if (!pMonitor->m_solitaryClient.expired()) shouldTear = true; } - pMonitor->tearingState.activelyTearing = shouldTear; + pMonitor->m_tearingState.activelyTearing = shouldTear; if ((*PDIRECTSCANOUT == 1 || - (*PDIRECTSCANOUT == 2 && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && - pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && pMonitor->activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && + (*PDIRECTSCANOUT == 2 && pMonitor->m_activeWorkspace && pMonitor->m_activeWorkspace->m_hasFullscreenWindow && + pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN && pMonitor->m_activeWorkspace->getFullscreenWindow()->getContentType() == CONTENT_TYPE_GAME)) && !shouldTear) { if (pMonitor->attemptDirectScanout()) { return; - } else if (!pMonitor->lastScanout.expired()) { + } else if (!pMonitor->m_lastScanout.expired()) { Debug::log(LOG, "Left a direct scanout."); - pMonitor->lastScanout.reset(); + pMonitor->m_lastScanout.reset(); // reset DRM format, but only if needed since it might modeset - if (pMonitor->output->state->state().drmFormat != pMonitor->prevDrmFormat) - pMonitor->output->state->setFormat(pMonitor->prevDrmFormat); + if (pMonitor->m_output->state->state().drmFormat != pMonitor->m_prevDrmFormat) + pMonitor->m_output->state->setFormat(pMonitor->m_prevDrmFormat); - pMonitor->drmFormat = pMonitor->prevDrmFormat; + pMonitor->m_drmFormat = pMonitor->m_prevDrmFormat; } } @@ -1261,9 +1262,9 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { const auto NOW = Time::steadyNow(); // check the damage - bool hasChanged = pMonitor->output->needsFrame || pMonitor->damage.hasChanged(); + bool hasChanged = pMonitor->m_output->needsFrame || pMonitor->m_damage.hasChanged(); - if (!hasChanged && *PDAMAGETRACKINGMODE != DAMAGE_TRACKING_NONE && pMonitor->forceFullFrames == 0 && damageBlinkCleanup == 0) + if (!hasChanged && *PDAMAGETRACKINGMODE != DAMAGE_TRACKING_NONE && pMonitor->m_forceFullFrames == 0 && damageBlinkCleanup == 0) return; if (*PDAMAGETRACKINGMODE == -1) { @@ -1273,10 +1274,10 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { EMIT_HOOK_EVENT("render", RENDER_PRE); - pMonitor->renderingActive = true; + pMonitor->m_renderingActive = true; // we need to cleanup fading out when rendering the appropriate context - g_pCompositor->cleanupFadingOut(pMonitor->ID); + g_pCompositor->cleanupFadingOut(pMonitor->m_id); // TODO: this is getting called with extents being 0,0,0,0 should it be? // potentially can save on resources. @@ -1301,7 +1302,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { g_pHyprOpenGL->m_RenderData.mouseZoomFactor = zoomInFactorFirstLaunch; g_pHyprOpenGL->m_RenderData.mouseZoomUseMouse = false; g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false; - pMonitor->forceFullFrames = 10; + pMonitor->m_forceFullFrames = 10; } CRegion damage, finalDamage; @@ -1311,18 +1312,18 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { } // if we have no tracking or full tracking, invalidate the entire monitor - if (*PDAMAGETRACKINGMODE == DAMAGE_TRACKING_NONE || *PDAMAGETRACKINGMODE == DAMAGE_TRACKING_MONITOR || pMonitor->forceFullFrames > 0 || damageBlinkCleanup > 0) - damage = {0, 0, (int)pMonitor->vecTransformedSize.x * 10, (int)pMonitor->vecTransformedSize.y * 10}; + if (*PDAMAGETRACKINGMODE == DAMAGE_TRACKING_NONE || *PDAMAGETRACKINGMODE == DAMAGE_TRACKING_MONITOR || pMonitor->m_forceFullFrames > 0 || damageBlinkCleanup > 0) + damage = {0, 0, (int)pMonitor->m_transformedSize.x * 10, (int)pMonitor->m_transformedSize.y * 10}; finalDamage = damage; // update damage in renderdata as we modified it g_pHyprOpenGL->setDamage(damage, finalDamage); - if (pMonitor->forceFullFrames > 0) { - pMonitor->forceFullFrames -= 1; - if (pMonitor->forceFullFrames > 10) - pMonitor->forceFullFrames = 0; + if (pMonitor->m_forceFullFrames > 0) { + pMonitor->m_forceFullFrames -= 1; + if (pMonitor->m_forceFullFrames > 10) + pMonitor->m_forceFullFrames = 0; } EMIT_HOOK_EVENT("render", RENDER_BEGIN); @@ -1330,7 +1331,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { bool renderCursor = true; if (!finalDamage.empty()) { - if (pMonitor->solitaryClient.expired()) { + if (pMonitor->m_solitaryClient.expired()) { if (pMonitor->isMirror()) { g_pHyprOpenGL->blend(false); g_pHyprOpenGL->renderMirrored(); @@ -1338,8 +1339,8 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { EMIT_HOOK_EVENT("render", RENDER_POST_MIRROR); renderCursor = false; } else { - CBox renderBox = {0, 0, (int)pMonitor->vecPixelSize.x, (int)pMonitor->vecPixelSize.y}; - renderWorkspace(pMonitor, pMonitor->activeWorkspace, NOW, renderBox); + CBox renderBox = {0, 0, (int)pMonitor->m_pixelSize.x, (int)pMonitor->m_pixelSize.y}; + renderWorkspace(pMonitor, pMonitor->m_activeWorkspace, NOW, renderBox); renderLockscreen(pMonitor, NOW, renderBox); @@ -1357,7 +1358,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (*PDAMAGEBLINK && damageBlinkCleanup == 0) { CRectPassElement::SRectData data; - data.box = {0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y}; + data.box = {0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y}; data.color = CHyprColor(1.0, 0.0, 1.0, 100.0 / 255.0); m_sRenderPass.add(makeShared(data)); damageBlinkCleanup = 1; @@ -1368,18 +1369,18 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { } } } else - renderWindow(pMonitor->solitaryClient.lock(), pMonitor, NOW, false, RENDER_PASS_MAIN /* solitary = no popups */); + renderWindow(pMonitor->m_solitaryClient.lock(), pMonitor, NOW, false, RENDER_PASS_MAIN /* solitary = no popups */); } else if (!pMonitor->isMirror()) { - sendFrameEventsToWorkspace(pMonitor, pMonitor->activeWorkspace, NOW); - if (pMonitor->activeSpecialWorkspace) - sendFrameEventsToWorkspace(pMonitor, pMonitor->activeSpecialWorkspace, NOW); + sendFrameEventsToWorkspace(pMonitor, pMonitor->m_activeWorkspace, NOW); + if (pMonitor->m_activeSpecialWorkspace) + sendFrameEventsToWorkspace(pMonitor, pMonitor->m_activeSpecialWorkspace, NOW); } renderCursor = renderCursor && shouldRenderCursor(); if (renderCursor) { TRACY_GPU_ZONE("RenderCursor"); - g_pPointerManager->renderSoftwareCursorsFor(pMonitor->self.lock(), NOW, g_pHyprOpenGL->m_RenderData.damage); + g_pPointerManager->renderSoftwareCursorsFor(pMonitor->m_self.lock(), NOW, g_pHyprOpenGL->m_RenderData.damage); } EMIT_HOOK_EVENT("render", RENDER_LAST_MOMENT); @@ -1390,35 +1391,35 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { CRegion frameDamage{g_pHyprOpenGL->m_RenderData.damage}; - const auto TRANSFORM = invertTransform(pMonitor->transform); - frameDamage.transform(wlTransformToHyprutils(TRANSFORM), pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y); + const auto TRANSFORM = invertTransform(pMonitor->m_transform); + frameDamage.transform(wlTransformToHyprutils(TRANSFORM), pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y); if (*PDAMAGETRACKINGMODE == DAMAGE_TRACKING_NONE || *PDAMAGETRACKINGMODE == DAMAGE_TRACKING_MONITOR) - frameDamage.add(0, 0, (int)pMonitor->vecTransformedSize.x, (int)pMonitor->vecTransformedSize.y); + frameDamage.add(0, 0, (int)pMonitor->m_transformedSize.x, (int)pMonitor->m_transformedSize.y); if (*PDAMAGEBLINK) frameDamage.add(damage); - if (!pMonitor->mirrors.empty()) + if (!pMonitor->m_mirrors.empty()) damageMirrorsWith(pMonitor, frameDamage); - pMonitor->renderingActive = false; + pMonitor->m_renderingActive = false; EMIT_HOOK_EVENT("render", RENDER_POST); - pMonitor->output->state->addDamage(frameDamage); - pMonitor->output->state->setPresentationMode(shouldTear ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : - Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); + pMonitor->m_output->state->addDamage(frameDamage); + pMonitor->m_output->state->setPresentationMode(shouldTear ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : + Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); commitPendingAndDoExplicitSync(pMonitor); if (shouldTear) - pMonitor->tearingState.busy = true; + pMonitor->m_tearingState.busy = true; - if (*PDAMAGEBLINK || *PVFR == 0 || pMonitor->pendingFrame) + if (*PDAMAGEBLINK || *PVFR == 0 || pMonitor->m_pendingFrame) g_pCompositor->scheduleFrameForMonitor(pMonitor, Aquamarine::IOutput::AQ_SCHEDULE_RENDER_MONITOR); - pMonitor->pendingFrame = false; + pMonitor->m_pendingFrame = false; const float durationUs = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - renderStart).count() / 1000.f; g_pDebugOverlay->renderData(pMonitor, durationUs); @@ -1478,12 +1479,12 @@ static hdr_output_metadata createHDRMetadata(SImageDescription settings, A bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { static auto PCT = CConfigValue("render:send_content_type"); static auto PPASS = CConfigValue("render:cm_fs_passthrough"); - const bool PHDR = pMonitor->imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ; + const bool PHDR = pMonitor->m_imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ; - const bool SUPPORTSPQ = pMonitor->output->parsedEDID.hdrMetadata.has_value() ? pMonitor->output->parsedEDID.hdrMetadata->supportsPQ : false; - Debug::log(TRACE, "ColorManagement supportsBT2020 {}, supportsPQ {}", pMonitor->output->parsedEDID.supportsBT2020, SUPPORTSPQ); + const bool SUPPORTSPQ = pMonitor->m_output->parsedEDID.hdrMetadata.has_value() ? pMonitor->m_output->parsedEDID.hdrMetadata->supportsPQ : false; + Debug::log(TRACE, "ColorManagement supportsBT2020 {}, supportsPQ {}", pMonitor->m_output->parsedEDID.supportsBT2020, SUPPORTSPQ); - if (pMonitor->output->parsedEDID.supportsBT2020 && SUPPORTSPQ) { + if (pMonitor->m_output->parsedEDID.supportsBT2020 && SUPPORTSPQ) { // HDR metadata determined by // PPASS = 0 monitor settings // PPASS = 1 @@ -1496,8 +1497,8 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { bool wantHDR = PHDR; bool hdrIsHandled = false; - if (*PPASS && pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); + if (*PPASS && pMonitor->m_activeWorkspace && pMonitor->m_activeWorkspace->m_hasFullscreenWindow && pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { + const auto WINDOW = pMonitor->m_activeWorkspace->getFullscreenWindow(); const auto ROOT_SURF = WINDOW->m_wlSurface->resource(); const auto SURF = ROOT_SURF->findFirstPreorder([ROOT_SURF](SP surf) { return surf->colorManagement.valid() && surf->extends() == ROOT_SURF->extends(); }); @@ -1509,28 +1510,28 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { (!wantHDR || SURF->colorManagement->imageDescription().transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) { bool needsHdrMetadataUpdate = SURF->colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != WINDOW; if (SURF->colorManagement->needsHdrMetadataUpdate()) - SURF->colorManagement->setHDRMetadata(createHDRMetadata(SURF->colorManagement->imageDescription(), pMonitor->output->parsedEDID)); + SURF->colorManagement->setHDRMetadata(createHDRMetadata(SURF->colorManagement->imageDescription(), pMonitor->m_output->parsedEDID)); if (needsHdrMetadataUpdate) - pMonitor->output->state->setHDRMetadata(SURF->colorManagement->hdrMetadata()); + pMonitor->m_output->state->setHDRMetadata(SURF->colorManagement->hdrMetadata()); hdrIsHandled = true; } pMonitor->m_previousFSWindow = WINDOW; } if (!hdrIsHandled) { - if ((pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != wantHDR) - pMonitor->output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->imageDescription, pMonitor->output->parsedEDID) : NO_HDR_METADATA); + if ((pMonitor->m_output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != wantHDR) + pMonitor->m_output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->m_imageDescription, pMonitor->m_output->parsedEDID) : NO_HDR_METADATA); pMonitor->m_previousFSWindow.reset(); } } - const bool needsWCG = pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2 || pMonitor->imageDescription.primariesNamed == CM_PRIMARIES_BT2020; - if (pMonitor->output->state->state().wideColorGamut != needsWCG) { + const bool needsWCG = pMonitor->m_output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2 || pMonitor->m_imageDescription.primariesNamed == CM_PRIMARIES_BT2020; + if (pMonitor->m_output->state->state().wideColorGamut != needsWCG) { Debug::log(TRACE, "Setting wide color gamut {}", needsWCG ? "on" : "off"); - pMonitor->output->state->setWideColorGamut(needsWCG); + pMonitor->m_output->state->setWideColorGamut(needsWCG); // FIXME do not trust enabled10bit, auto switch to 10bit and back if needed - if (needsWCG && !pMonitor->enabled10bit) { + if (needsWCG && !pMonitor->m_enabled10bit) { Debug::log(WARN, "Wide color gamut is enabled but the display is not in 10bit mode"); static bool shown = false; if (!shown) { @@ -1541,32 +1542,32 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { } if (*PCT) { - if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_hasFullscreenWindow && pMonitor->activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { - const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); - pMonitor->output->state->setContentType(NContentType::toDRM(WINDOW->getContentType())); + if (pMonitor->m_activeWorkspace && pMonitor->m_activeWorkspace->m_hasFullscreenWindow && pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) { + const auto WINDOW = pMonitor->m_activeWorkspace->getFullscreenWindow(); + pMonitor->m_output->state->setContentType(NContentType::toDRM(WINDOW->getContentType())); } else - pMonitor->output->state->setContentType(NContentType::toDRM(CONTENT_TYPE_NONE)); + pMonitor->m_output->state->setContentType(NContentType::toDRM(CONTENT_TYPE_NONE)); } - if (pMonitor->ctmUpdated) { - pMonitor->ctmUpdated = false; - pMonitor->output->state->setCTM(pMonitor->ctm); + if (pMonitor->m_ctmUpdated) { + pMonitor->m_ctmUpdated = false; + pMonitor->m_output->state->setCTM(pMonitor->m_ctm); } - bool ok = pMonitor->state.commit(); + bool ok = pMonitor->m_state.commit(); if (!ok) { - if (pMonitor->inFence.isValid()) { + if (pMonitor->m_inFence.isValid()) { Debug::log(TRACE, "Monitor state commit failed, retrying without a fence"); - pMonitor->output->state->resetExplicitFences(); - ok = pMonitor->state.commit(); + pMonitor->m_output->state->resetExplicitFences(); + ok = pMonitor->m_state.commit(); } if (!ok) { Debug::log(TRACE, "Monitor state commit failed"); // rollback the buffer to avoid writing to the front buffer that is being // displayed - pMonitor->output->swapchain->rollback(); - pMonitor->damage.damageEntire(); + pMonitor->m_output->swapchain->rollback(); + pMonitor->m_damage.damageEntire(); } } @@ -1575,11 +1576,11 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const CBox& geometry) { Vector2D translate = {geometry.x, geometry.y}; - float scale = (float)geometry.width / pMonitor->vecPixelSize.x; + float scale = (float)geometry.width / pMonitor->m_pixelSize.x; TRACY_GPU_ZONE("RenderWorkspace"); - if (!DELTALESSTHAN((double)geometry.width / (double)geometry.height, pMonitor->vecPixelSize.x / pMonitor->vecPixelSize.y, 0.01)) { + if (!DELTALESSTHAN((double)geometry.width / (double)geometry.height, pMonitor->m_pixelSize.x / pMonitor->m_pixelSize.y, 0.01)) { Debug::log(ERR, "Ignoring geometry in renderWorkspace: aspect ratio mismatch"); scale = 1.f; translate = Vector2D{}; @@ -1599,7 +1600,7 @@ void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE w->m_wlSurface->resource()->breadthfirst([now](SP r, const Vector2D& offset, void* d) { r->frame(now); }, nullptr); } - for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto const& lsl : pMonitor->m_layerSurfaceLayers) { for (auto const& ls : lsl) { if (ls->m_fadingOut || !ls->m_surface->resource()) continue; @@ -1677,7 +1678,7 @@ static void applyExclusive(CBox& usableArea, uint32_t anchor, int32_t exclusive, } void CHyprRenderer::arrangeLayerArray(PHLMONITOR pMonitor, const std::vector& layerSurfaces, bool exclusiveZone, CBox* usableArea) { - CBox full_area = {pMonitor->vecPosition.x, pMonitor->vecPosition.y, pMonitor->vecSize.x, pMonitor->vecSize.y}; + CBox full_area = {pMonitor->m_position.x, pMonitor->m_position.y, pMonitor->m_size.x, pMonitor->m_size.y}; for (auto const& ls : layerSurfaces) { if (!ls || ls->m_fadingOut || ls->m_readyToDelete || !ls->m_layerSurface || ls->m_noProcess) @@ -1772,44 +1773,44 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) { return; // Reset the reserved - PMONITOR->vecReservedBottomRight = Vector2D(); - PMONITOR->vecReservedTopLeft = Vector2D(); + PMONITOR->m_reservedBottomRight = Vector2D(); + PMONITOR->m_reservedTopLeft = Vector2D(); - CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; + CBox usableArea = {PMONITOR->m_position.x, PMONITOR->m_position.y, PMONITOR->m_size.x, PMONITOR->m_size.y}; - if (g_pHyprError->active() && g_pCompositor->m_lastMonitor == PMONITOR->self) { + if (g_pHyprError->active() && g_pCompositor->m_lastMonitor == PMONITOR->m_self) { const auto HEIGHT = g_pHyprError->height(); if (*BAR_POSITION == 0) { - PMONITOR->vecReservedTopLeft.y = HEIGHT; + PMONITOR->m_reservedTopLeft.y = HEIGHT; usableArea.y += HEIGHT; usableArea.h -= HEIGHT; } else { - PMONITOR->vecReservedBottomRight.y = HEIGHT; + PMONITOR->m_reservedBottomRight.y = HEIGHT; usableArea.h -= HEIGHT; } } - for (auto& la : PMONITOR->m_aLayerSurfaceLayers) { + for (auto& la : PMONITOR->m_layerSurfaceLayers) { std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->m_order > b->m_order; }); } - for (auto const& la : PMONITOR->m_aLayerSurfaceLayers) + for (auto const& la : PMONITOR->m_layerSurfaceLayers) arrangeLayerArray(PMONITOR, la, true, &usableArea); - for (auto const& la : PMONITOR->m_aLayerSurfaceLayers) + for (auto const& la : PMONITOR->m_layerSurfaceLayers) arrangeLayerArray(PMONITOR, la, false, &usableArea); - PMONITOR->vecReservedTopLeft = Vector2D(usableArea.x, usableArea.y) - PMONITOR->vecPosition; - PMONITOR->vecReservedBottomRight = PMONITOR->vecSize - Vector2D(usableArea.width, usableArea.height) - PMONITOR->vecReservedTopLeft; + PMONITOR->m_reservedTopLeft = Vector2D(usableArea.x, usableArea.y) - PMONITOR->m_position; + PMONITOR->m_reservedBottomRight = PMONITOR->m_size - Vector2D(usableArea.width, usableArea.height) - PMONITOR->m_reservedTopLeft; - auto ADDITIONALRESERVED = g_pConfigManager->m_mAdditionalReservedAreas.find(PMONITOR->szName); + auto ADDITIONALRESERVED = g_pConfigManager->m_mAdditionalReservedAreas.find(PMONITOR->m_name); if (ADDITIONALRESERVED == g_pConfigManager->m_mAdditionalReservedAreas.end()) { ADDITIONALRESERVED = g_pConfigManager->m_mAdditionalReservedAreas.find(""); // glob wildcard } if (ADDITIONALRESERVED != g_pConfigManager->m_mAdditionalReservedAreas.end()) { - PMONITOR->vecReservedTopLeft = PMONITOR->vecReservedTopLeft + Vector2D(ADDITIONALRESERVED->second.left, ADDITIONALRESERVED->second.top); - PMONITOR->vecReservedBottomRight = PMONITOR->vecReservedBottomRight + Vector2D(ADDITIONALRESERVED->second.right, ADDITIONALRESERVED->second.bottom); + PMONITOR->m_reservedTopLeft = PMONITOR->m_reservedTopLeft + Vector2D(ADDITIONALRESERVED->second.left, ADDITIONALRESERVED->second.top); + PMONITOR->m_reservedBottomRight = PMONITOR->m_reservedBottomRight + Vector2D(ADDITIONALRESERVED->second.right, ADDITIONALRESERVED->second.bottom); } // damage the monitor if can @@ -1846,11 +1847,11 @@ void CHyprRenderer::damageSurface(SP pSurface, double x, dou CRegion damageBoxForEach; for (auto const& m : g_pCompositor->m_monitors) { - if (!m->output) + if (!m->m_output) continue; damageBoxForEach.set(damageBox); - damageBoxForEach.translate({-m->vecPosition.x, -m->vecPosition.y}).scale(m->scale); + damageBoxForEach.translate({-m->m_position.x, -m->m_position.y}).scale(m->m_scale); m->addDamage(damageBoxForEach); } @@ -1874,8 +1875,8 @@ void CHyprRenderer::damageWindow(PHLWINDOW pWindow, bool forceFull) { for (auto const& m : g_pCompositor->m_monitors) { if (forceFull || shouldRenderWindow(pWindow, m)) { // only damage if window is rendered on monitor - CBox fixedDamageBox = {windowBox.x - m->vecPosition.x, windowBox.y - m->vecPosition.y, windowBox.width, windowBox.height}; - fixedDamageBox.scale(m->scale); + CBox fixedDamageBox = {windowBox.x - m->m_position.x, windowBox.y - m->m_position.y, windowBox.width, windowBox.height}; + fixedDamageBox.scale(m->m_scale); m->addDamage(fixedDamageBox); } } @@ -1899,7 +1900,7 @@ void CHyprRenderer::damageMonitor(PHLMONITOR pMonitor) { static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) - Debug::log(LOG, "Damage: Monitor {}", pMonitor->szName); + Debug::log(LOG, "Damage: Monitor {}", pMonitor->m_name); } void CHyprRenderer::damageBox(const CBox& box, bool skipFrameSchedule) { @@ -1911,7 +1912,7 @@ void CHyprRenderer::damageBox(const CBox& box, bool skipFrameSchedule) { continue; // don't damage mirrors traditionally if (!skipFrameSchedule) { - CBox damageBox = box.copy().translate(-m->vecPosition).scale(m->scale); + CBox damageBox = box.copy().translate(-m->m_position).scale(m->m_scale); m->addDamage(damageBox); } } @@ -1934,7 +1935,7 @@ void CHyprRenderer::damageRegion(const CRegion& rg) { } void CHyprRenderer::damageMirrorsWith(PHLMONITOR pMonitor, const CRegion& pRegion) { - for (auto const& mirror : pMonitor->mirrors) { + for (auto const& mirror : pMonitor->m_mirrors) { // transform the damage here, so it won't get clipped by the monitor damage ring auto monitor = mirror; @@ -1942,13 +1943,13 @@ void CHyprRenderer::damageMirrorsWith(PHLMONITOR pMonitor, const CRegion& pRegio CRegion transformed{pRegion}; // we want to transform to the same box as in CHyprOpenGLImpl::renderMirrored - double scale = std::min(monitor->vecTransformedSize.x / pMonitor->vecTransformedSize.x, monitor->vecTransformedSize.y / pMonitor->vecTransformedSize.y); - CBox monbox = {0, 0, pMonitor->vecTransformedSize.x * scale, pMonitor->vecTransformedSize.y * scale}; - monbox.x = (monitor->vecTransformedSize.x - monbox.w) / 2; - monbox.y = (monitor->vecTransformedSize.y - monbox.h) / 2; + double scale = std::min(monitor->m_transformedSize.x / pMonitor->m_transformedSize.x, monitor->m_transformedSize.y / pMonitor->m_transformedSize.y); + CBox monbox = {0, 0, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale}; + monbox.x = (monitor->m_transformedSize.x - monbox.w) / 2; + monbox.y = (monitor->m_transformedSize.y - monbox.h) / 2; transformed.scale(scale); - transformed.transform(wlTransformToHyprutils(pMonitor->transform), pMonitor->vecPixelSize.x * scale, pMonitor->vecPixelSize.y * scale); + transformed.transform(wlTransformToHyprutils(pMonitor->m_transform), pMonitor->m_pixelSize.x * scale, pMonitor->m_pixelSize.y * scale); transformed.translate(Vector2D(monbox.x, monbox.y)); mirror->addDamage(transformed); @@ -2110,14 +2111,14 @@ void CHyprRenderer::initiateManualCrash() { } void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { - pMonitor->solitaryClient.reset(); // reset it, if we find one it will be set. + pMonitor->m_solitaryClient.reset(); // reset it, if we find one it will be set. if (g_pHyprNotificationOverlay->hasAny() || g_pSessionLockManager->isSessionLocked()) return; - const auto PWORKSPACE = pMonitor->activeWorkspace; + const auto PWORKSPACE = pMonitor->m_activeWorkspace; - if (!PWORKSPACE || !PWORKSPACE->m_hasFullscreenWindow || PROTO::data->dndActive() || pMonitor->activeSpecialWorkspace || PWORKSPACE->m_alpha->value() != 1.f || + if (!PWORKSPACE || !PWORKSPACE->m_hasFullscreenWindow || PROTO::data->dndActive() || pMonitor->m_activeSpecialWorkspace || PWORKSPACE->m_alpha->value() != 1.f || PWORKSPACE->m_renderOffset->value() != Vector2D{}) return; @@ -2129,14 +2130,14 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { if (!PCANDIDATE->opaque()) return; - if (PCANDIDATE->m_realSize->value() != pMonitor->vecSize || PCANDIDATE->m_realPosition->value() != pMonitor->vecPosition || PCANDIDATE->m_realPosition->isBeingAnimated() || + if (PCANDIDATE->m_realSize->value() != pMonitor->m_size || PCANDIDATE->m_realPosition->value() != pMonitor->m_position || PCANDIDATE->m_realPosition->isBeingAnimated() || PCANDIDATE->m_realSize->isBeingAnimated()) return; - if (!pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY].empty()) + if (!pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY].empty()) return; - for (auto const& topls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { + for (auto const& topls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { if (topls->m_alpha->value() != 0.f) return; } @@ -2149,7 +2150,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { return; } - if (pMonitor->activeSpecialWorkspace) + if (pMonitor->m_activeSpecialWorkspace) return; // check if it did not open any subsurfaces or shit @@ -2163,7 +2164,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { return; // found one! - pMonitor->solitaryClient = PCANDIDATE; + pMonitor->m_solitaryClient = PCANDIDATE; } SP CHyprRenderer::getOrCreateRenderbuffer(SP buffer, uint32_t fmt) { @@ -2221,29 +2222,29 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod static constexpr const int HL_BUFFER_AGE = 2; if (!buffer) { - m_pCurrentBuffer = pMonitor->output->swapchain->next(nullptr); + m_pCurrentBuffer = pMonitor->m_output->swapchain->next(nullptr); if (!m_pCurrentBuffer) { - Debug::log(ERR, "Failed to acquire swapchain buffer for {}", pMonitor->szName); + Debug::log(ERR, "Failed to acquire swapchain buffer for {}", pMonitor->m_name); return false; } } else m_pCurrentBuffer = buffer; try { - m_pCurrentRenderbuffer = getOrCreateRenderbuffer(m_pCurrentBuffer, pMonitor->output->state->state().drmFormat); + m_pCurrentRenderbuffer = getOrCreateRenderbuffer(m_pCurrentBuffer, pMonitor->m_output->state->state().drmFormat); } catch (std::exception& e) { - Debug::log(ERR, "getOrCreateRenderbuffer failed for {}", pMonitor->szName); + Debug::log(ERR, "getOrCreateRenderbuffer failed for {}", pMonitor->m_name); return false; } if (!m_pCurrentRenderbuffer) { - Debug::log(ERR, "failed to start a render pass for output {}, no RBO could be obtained", pMonitor->szName); + Debug::log(ERR, "failed to start a render pass for output {}, no RBO could be obtained", pMonitor->m_name); return false; } if (mode == RENDER_MODE_NORMAL) { - damage = pMonitor->damage.getBufferDamage(HL_BUFFER_AGE); - pMonitor->damage.rotate(); + damage = pMonitor->m_damage.getBufferDamage(HL_BUFFER_AGE); + pMonitor->m_damage.rotate(); } m_pCurrentRenderbuffer->bind(); @@ -2283,7 +2284,7 @@ void CHyprRenderer::endRender(const std::function& renderingDoneCallback return; if (m_eRenderMode == RENDER_MODE_NORMAL) - PMONITOR->output->state->setBuffer(m_pCurrentBuffer); + PMONITOR->m_output->state->setBuffer(m_pCurrentBuffer); UP eglSync = CEGLSync::create(); if (eglSync && eglSync->isValid()) { @@ -2305,8 +2306,8 @@ void CHyprRenderer::endRender(const std::function& renderingDoneCallback usedAsyncBuffers.clear(); if (m_eRenderMode == RENDER_MODE_NORMAL) { - PMONITOR->inFence = eglSync->takeFd(); - PMONITOR->output->state->setExplicitInFence(PMONITOR->inFence.get()); + PMONITOR->m_inFence = eglSync->takeFd(); + PMONITOR->m_output->state->setExplicitInFence(PMONITOR->m_inFence.get()); } } else { Debug::log(ERR, "renderer: couldn't use EGLSync for explicit gpu synchronization"); @@ -2376,17 +2377,17 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram // we trust the window is valid. const auto PMONITOR = pWindow->m_monitor.lock(); - if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) + if (!PMONITOR || !PMONITOR->m_output || PMONITOR->m_pixelSize.x <= 0 || PMONITOR->m_pixelSize.y <= 0) return; // we need to "damage" the entire monitor // so that we render the entire window // this is temporary, doesnt mess with the actual damage - CRegion fakeDamage{0, 0, (int)PMONITOR->vecTransformedSize.x, (int)PMONITOR->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, (int)PMONITOR->m_transformedSize.x, (int)PMONITOR->m_transformedSize.y}; makeEGLCurrent(); - pFramebuffer->alloc(PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, PMONITOR->output->state->state().drmFormat); + pFramebuffer->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); pFramebuffer->addStencil(g_pHyprOpenGL->m_RenderData.pCurrentMonData->stencilTex); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, pFramebuffer); @@ -2403,7 +2404,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram **PBLUR = 0; // TODO: how can we make this the size of the window? setting it to window's size makes the entire screen render with the wrong res forever more. odd. - glViewport(0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y); + glViewport(0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y); g_pHyprOpenGL->m_RenderData.currentFB = pFramebuffer; @@ -2420,7 +2421,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { // we trust the window is valid. const auto PMONITOR = pWindow->m_monitor.lock(); - if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) + if (!PMONITOR || !PMONITOR->m_output || PMONITOR->m_pixelSize.x <= 0 || PMONITOR->m_pixelSize.y <= 0) return; if (!shouldRenderWindow(pWindow)) @@ -2429,7 +2430,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { // we need to "damage" the entire monitor // so that we render the entire window // this is temporary, doesnt mess with the actual damage - CRegion fakeDamage{0, 0, (int)PMONITOR->vecTransformedSize.x, (int)PMONITOR->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, (int)PMONITOR->m_transformedSize.x, (int)PMONITOR->m_transformedSize.y}; PHLWINDOWREF ref{pWindow}; @@ -2437,7 +2438,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_mWindowFramebuffers[ref]; - PFRAMEBUFFER->alloc(PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, PMONITOR->output->state->state().drmFormat); + PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, PFRAMEBUFFER); @@ -2469,19 +2470,19 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { // we trust the window is valid. const auto PMONITOR = pLayer->m_monitor.lock(); - if (!PMONITOR || !PMONITOR->output || PMONITOR->vecPixelSize.x <= 0 || PMONITOR->vecPixelSize.y <= 0) + if (!PMONITOR || !PMONITOR->m_output || PMONITOR->m_pixelSize.x <= 0 || PMONITOR->m_pixelSize.y <= 0) return; // we need to "damage" the entire monitor // so that we render the entire window // this is temporary, doesnt mess with the actual damage - CRegion fakeDamage{0, 0, (int)PMONITOR->vecTransformedSize.x, (int)PMONITOR->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, (int)PMONITOR->m_transformedSize.x, (int)PMONITOR->m_transformedSize.y}; makeEGLCurrent(); const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_mLayerFramebuffers[pLayer]; - PFRAMEBUFFER->alloc(PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y, PMONITOR->output->state->state().drmFormat); + PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, PFRAMEBUFFER); @@ -2520,21 +2521,21 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { CBox windowBox; // some mafs to figure out the correct box // the originalClosedPos is relative to the monitor's pos - Vector2D scaleXY = Vector2D((PMONITOR->scale * pWindow->m_realSize->value().x / (pWindow->m_originalClosedSize.x * PMONITOR->scale)), - (PMONITOR->scale * pWindow->m_realSize->value().y / (pWindow->m_originalClosedSize.y * PMONITOR->scale))); + Vector2D scaleXY = Vector2D((PMONITOR->m_scale * pWindow->m_realSize->value().x / (pWindow->m_originalClosedSize.x * PMONITOR->m_scale)), + (PMONITOR->m_scale * pWindow->m_realSize->value().y / (pWindow->m_originalClosedSize.y * PMONITOR->m_scale))); - windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x; - windowBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y; - windowBox.x = ((pWindow->m_realPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - ((pWindow->m_originalClosedPos.x * PMONITOR->scale) * scaleXY.x); - windowBox.y = ((pWindow->m_realPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - ((pWindow->m_originalClosedPos.y * PMONITOR->scale) * scaleXY.y); + windowBox.width = PMONITOR->m_transformedSize.x * scaleXY.x; + windowBox.height = PMONITOR->m_transformedSize.y * scaleXY.y; + windowBox.x = ((pWindow->m_realPosition->value().x - PMONITOR->m_position.x) * PMONITOR->m_scale) - ((pWindow->m_originalClosedPos.x * PMONITOR->m_scale) * scaleXY.x); + windowBox.y = ((pWindow->m_realPosition->value().y - PMONITOR->m_position.y) * PMONITOR->m_scale) - ((pWindow->m_originalClosedPos.y * PMONITOR->m_scale) * scaleXY.y); - CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y}; if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault()) { CRectPassElement::SRectData data; - data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.y}; + data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.y}; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_alpha->value()); m_sRenderPass.add(makeShared(data)); @@ -2565,17 +2566,17 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) { CBox layerBox; // some mafs to figure out the correct box // the originalClosedPos is relative to the monitor's pos - Vector2D scaleXY = Vector2D((PMONITOR->scale * pLayer->m_realSize->value().x / (pLayer->m_geometry.w * PMONITOR->scale)), - (PMONITOR->scale * pLayer->m_realSize->value().y / (pLayer->m_geometry.h * PMONITOR->scale))); + Vector2D scaleXY = Vector2D((PMONITOR->m_scale * pLayer->m_realSize->value().x / (pLayer->m_geometry.w * PMONITOR->m_scale)), + (PMONITOR->m_scale * pLayer->m_realSize->value().y / (pLayer->m_geometry.h * PMONITOR->m_scale))); - layerBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x; - layerBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y; + layerBox.width = PMONITOR->m_transformedSize.x * scaleXY.x; + layerBox.height = PMONITOR->m_transformedSize.y * scaleXY.y; layerBox.x = - ((pLayer->m_realPosition->value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - (((pLayer->m_geometry.x - PMONITOR->vecPosition.x) * PMONITOR->scale) * scaleXY.x); + ((pLayer->m_realPosition->value().x - PMONITOR->m_position.x) * PMONITOR->m_scale) - (((pLayer->m_geometry.x - PMONITOR->m_position.x) * PMONITOR->m_scale) * scaleXY.x); layerBox.y = - ((pLayer->m_realPosition->value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - (((pLayer->m_geometry.y - PMONITOR->vecPosition.y) * PMONITOR->scale) * scaleXY.y); + ((pLayer->m_realPosition->value().y - PMONITOR->m_position.y) * PMONITOR->m_scale) - (((pLayer->m_geometry.y - PMONITOR->m_position.y) * PMONITOR->m_scale) * scaleXY.y); - CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y}; + CRegion fakeDamage{0, 0, PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y}; CTexPassElement::SRenderData data; data.flipEndFrame = true; diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index d1d8e9c0..75990896 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -52,7 +52,7 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (m_bAssignedGeometry.width < m_seExtents.topLeft.x + 1 || m_bAssignedGeometry.height < m_seExtents.topLeft.y + 1) return; - CBox windowBox = assignedBoxGlobal().translate(-pMonitor->vecPosition + m_pWindow->m_floatingOffset).expand(-m_pWindow->getRealBorderSize()).scale(pMonitor->scale).round(); + CBox windowBox = assignedBoxGlobal().translate(-pMonitor->m_position + m_pWindow->m_floatingOffset).expand(-m_pWindow->getRealBorderSize()).scale(pMonitor->m_scale).round(); if (windowBox.width < 1 || windowBox.height < 1) return; @@ -71,7 +71,7 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { } int borderSize = m_pWindow->getRealBorderSize(); - const auto ROUNDING = m_pWindow->rounding() * pMonitor->scale; + const auto ROUNDING = m_pWindow->rounding() * pMonitor->m_scale; const auto ROUNDINGPOWER = m_pWindow->roundingPower(); CBorderPassElement::SBorderData data; @@ -134,7 +134,7 @@ void CHyprBorderDecoration::damageEntire() { for (auto const& m : g_pCompositor->m_monitors) { if (!g_pHyprRenderer->shouldRenderWindow(m_pWindow.lock(), m)) { - const CRegion monitorRegion({m->vecPosition, m->vecSize}); + const CRegion monitorRegion({m->m_position, m->m_size}); borderRegion.subtract(monitorRegion); } } diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index ff9a195e..198a9c96 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -68,7 +68,7 @@ void CHyprDropShadowDecoration::damageEntire() { for (auto const& m : g_pCompositor->m_monitors) { if (!g_pHyprRenderer->shouldRenderWindow(PWINDOW, m)) { - const CRegion monitorRegion({m->vecPosition, m->vecSize}); + const CRegion monitorRegion({m->m_position, m->m_size}); shadowRegion.subtract(monitorRegion); } } @@ -125,7 +125,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { // draw the shadow CBox fullBox = m_bLastWindowBoxWithDecos; - fullBox.translate(-pMonitor->vecPosition + WORKSPACEOFFSET); + fullBox.translate(-pMonitor->m_position + WORKSPACEOFFSET); fullBox.x -= *PSHADOWSIZE; fullBox.y -= *PSHADOWSIZE; fullBox.w += 2 * *PSHADOWSIZE; @@ -138,9 +138,9 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { updateWindow(PWINDOW); m_vLastWindowPos += WORKSPACEOFFSET; - m_seExtents = {{m_vLastWindowPos.x - fullBox.x - pMonitor->vecPosition.x + 2, m_vLastWindowPos.y - fullBox.y - pMonitor->vecPosition.y + 2}, - {fullBox.x + fullBox.width + pMonitor->vecPosition.x - m_vLastWindowPos.x - m_vLastWindowSize.x + 2, - fullBox.y + fullBox.height + pMonitor->vecPosition.y - m_vLastWindowPos.y - m_vLastWindowSize.y + 2}}; + m_seExtents = {{m_vLastWindowPos.x - fullBox.x - pMonitor->m_position.x + 2, m_vLastWindowPos.y - fullBox.y - pMonitor->m_position.y + 2}, + {fullBox.x + fullBox.width + pMonitor->m_position.x - m_vLastWindowPos.x - m_vLastWindowSize.x + 2, + fullBox.y + fullBox.height + pMonitor->m_position.y - m_vLastWindowPos.y - m_vLastWindowSize.y + 2}}; fullBox.translate(PWINDOW->m_floatingOffset); @@ -155,25 +155,25 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { CFramebuffer& alphaSwapFB = g_pHyprOpenGL->m_RenderData.pCurrentMonData->mirrorSwapFB; auto* LASTFB = g_pHyprOpenGL->m_RenderData.currentFB; - fullBox.scale(pMonitor->scale).round(); + fullBox.scale(pMonitor->m_scale).round(); if (*PSHADOWIGNOREWINDOW) { CBox windowBox = m_bLastWindowBox; CBox withDecos = m_bLastWindowBoxWithDecos; // get window box - windowBox.translate(-pMonitor->vecPosition + WORKSPACEOFFSET); - withDecos.translate(-pMonitor->vecPosition + WORKSPACEOFFSET); + windowBox.translate(-pMonitor->m_position + WORKSPACEOFFSET); + withDecos.translate(-pMonitor->m_position + WORKSPACEOFFSET); windowBox.translate(PWINDOW->m_floatingOffset); withDecos.translate(PWINDOW->m_floatingOffset); auto scaledExtentss = withDecos.extentsFrom(windowBox); - scaledExtentss = scaledExtentss * pMonitor->scale; + scaledExtentss = scaledExtentss * pMonitor->m_scale; scaledExtentss = scaledExtentss.round(); // add extents - windowBox.scale(pMonitor->scale).round().addExtents(scaledExtentss); + windowBox.scale(pMonitor->m_scale).round().addExtents(scaledExtentss); if (windowBox.width < 1 || windowBox.height < 1) return; // prevent assert failed @@ -181,7 +181,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { CRegion saveDamage = g_pHyprOpenGL->m_RenderData.damage; g_pHyprOpenGL->m_RenderData.damage = fullBox; - g_pHyprOpenGL->m_RenderData.damage.subtract(windowBox.copy().expand(-ROUNDING * pMonitor->scale)).intersect(saveDamage); + g_pHyprOpenGL->m_RenderData.damage.subtract(windowBox.copy().expand(-ROUNDING * pMonitor->m_scale)).intersect(saveDamage); g_pHyprOpenGL->m_RenderData.renderModif.applyToRegion(g_pHyprOpenGL->m_RenderData.damage); alphaFB.bind(); @@ -192,10 +192,10 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->renderRect(fullBox, CHyprColor(0, 0, 0, 1), 0); // render white shadow with the alpha of the shadow color (otherwise we clear with alpha later and shit it to 2 bit) - drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, CHyprColor(1, 1, 1, PWINDOW->m_realShadowColor->value().a), a); + drawShadowInternal(fullBox, ROUNDING * pMonitor->m_scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->m_scale, CHyprColor(1, 1, 1, PWINDOW->m_realShadowColor->value().a), a); // render black window box ("clip") - g_pHyprOpenGL->renderRect(windowBox, CHyprColor(0, 0, 0, 1.0), (ROUNDING + 1 /* This fixes small pixel gaps. */) * pMonitor->scale, ROUNDINGPOWER); + g_pHyprOpenGL->renderRect(windowBox, CHyprColor(0, 0, 0, 1.0), (ROUNDING + 1 /* This fixes small pixel gaps. */) * pMonitor->m_scale, ROUNDINGPOWER); alphaSwapFB.bind(); @@ -204,7 +204,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { LASTFB->bind(); - CBox monbox = {0, 0, pMonitor->vecTransformedSize.x, pMonitor->vecTransformedSize.y}; + CBox monbox = {0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y}; g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); @@ -214,7 +214,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->m_RenderData.damage = saveDamage; } else - drawShadowInternal(fullBox, ROUNDING * pMonitor->scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->scale, PWINDOW->m_realShadowColor->value(), a); + drawShadowInternal(fullBox, ROUNDING * pMonitor->m_scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->m_scale, PWINDOW->m_realShadowColor->value(), a); if (m_seExtents != m_seReportedExtents) g_pDecorationPositioner->repositionDeco(this); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 57861d26..aa070e67 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -143,11 +143,11 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { for (int i = 0; i < barsToDraw; ++i) { const auto WINDOWINDEX = *PSTACKED ? m_dwGroupMembers.size() - i - 1 : i; - CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_floatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->vecPosition.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, + CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_pWindow->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->m_position.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, *PINDICATORHEIGHT}; - rect.scale(pMonitor->scale).round(); + rect.scale(pMonitor->m_scale).round(); const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_bGroupsLocked; const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; @@ -187,10 +187,10 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); } - rect = {ASSIGNEDBOX.x + xoff - pMonitor->vecPosition.x + m_pWindow->m_floatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->vecPosition.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, + rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_pWindow->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->m_position.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}; - rect.scale(pMonitor->scale); + rect.scale(pMonitor->m_scale); if (!rect.empty()) { if (*PGRADIENTS) { @@ -232,17 +232,17 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { CTitleTex* pTitleTex = textureFromTitle(m_dwGroupMembers[WINDOWINDEX]->m_title); if (!pTitleTex) - pTitleTex = - m_sTitleTexs.titleTexs - .emplace_back(makeUnique(m_dwGroupMembers[WINDOWINDEX].lock(), - Vector2D{m_fBarWidth * pMonitor->scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->scale}, pMonitor->scale)) - .get(); + pTitleTex = m_sTitleTexs.titleTexs + .emplace_back(makeUnique(m_dwGroupMembers[WINDOWINDEX].lock(), + Vector2D{m_fBarWidth * pMonitor->m_scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->m_scale}, + pMonitor->m_scale)) + .get(); const auto titleTex = m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? pTitleTex->texActive : pTitleTex->texInactive; - rect.y += std::ceil(((rect.height - titleTex->m_vSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->scale)); + rect.y += std::ceil(((rect.height - titleTex->m_vSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->m_scale)); rect.height = titleTex->m_vSize.y; rect.width = titleTex->m_vSize.x; - rect.x += std::round(((m_fBarWidth * pMonitor->scale) / 2.0) - (titleTex->m_vSize.x / 2.0)); + rect.x += std::round(((m_fBarWidth * pMonitor->m_scale) / 2.0) - (titleTex->m_vSize.x / 2.0)); rect.round(); CTexPassElement::SRenderData data; @@ -300,7 +300,7 @@ static void renderGradientTo(SP tex, CGradientValueData* grad) { if (!g_pCompositor->m_lastMonitor) return; - const Vector2D& bufferSize = g_pCompositor->m_lastMonitor->vecPixelSize; + const Vector2D& bufferSize = g_pCompositor->m_lastMonitor->m_pixelSize; const auto CAIROSURFACE = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, bufferSize.x, bufferSize.y); const auto CAIRO = cairo_create(CAIROSURFACE); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 6a56eea8..65d0ee65 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -30,7 +30,7 @@ void CRenderPass::simplify() { // if there is live blur, we need to NOT occlude any area where it will be influenced const auto WILLBLUR = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsLiveBlur(); }); - CRegion newDamage = damage.copy().intersect(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize}); + CRegion newDamage = damage.copy().intersect(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize}); for (auto& el : m_vPassElements | std::views::reverse) { if (newDamage.empty() && !el->element->undiscardable()) { @@ -43,7 +43,7 @@ void CRenderPass::simplify() { if (!bb1 || newDamage.empty()) continue; - auto bb = bb1->scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + auto bb = bb1->scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); // drop if empty if (CRegion copy = newDamage.copy(); copy.intersect(bb).empty()) { @@ -54,7 +54,7 @@ void CRenderPass::simplify() { auto opaque = el->element->opaqueRegion(); if (!opaque.empty()) { - opaque.scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + opaque.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); // if this intersects the liveBlur region, allow live blur to operate correctly. // do not occlude a border near it. @@ -76,7 +76,7 @@ void CRenderPass::simplify() { } // expand the region: this area needs to be proper to blur it right. - liveBlurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale).expand(oneBlurRadius() * 2.F); + liveBlurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).expand(oneBlurRadius() * 2.F); if (auto infringement = opaque.copy().intersect(liveBlurRegion); !infringement.empty()) { // eh, this is not the correct solution, but it will do... @@ -98,7 +98,7 @@ void CRenderPass::simplify() { const auto BB = el2->element->boundingBox(); RASSERT(BB, "No bounding box for an element with live blur is illegal"); - totalLiveBlurRegion.add(BB->copy().scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale)); + totalLiveBlurRegion.add(BB->copy().scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale)); } } } @@ -146,7 +146,7 @@ CRegion CRenderPass::render(const CRegion& damage_) { blurRegion.add(*BB); } - blurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + blurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); blurRegion.intersect(damage).expand(oneBlurRadius()); @@ -197,7 +197,7 @@ CRegion CRenderPass::render(const CRegion& damage_) { } void CRenderPass::renderDebugData() { - CBox box = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize}; + CBox box = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize}; for (const auto& rg : occludedRegions) { g_pHyprOpenGL->renderRectWithDamage(box, Colors::RED.modifyA(0.1F), rg); } @@ -219,9 +219,9 @@ void CRenderPass::renderDebugData() { if (!bb.has_value()) return; - CBox box = bb->copy().translate(-g_pHyprOpenGL->m_RenderData.pMonitor->vecPosition).scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + CBox box = bb->copy().translate(-g_pHyprOpenGL->m_RenderData.pMonitor->m_position).scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); - if (box.intersection(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize}).empty()) + if (box.intersection(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_size}).empty()) return; g_pHyprOpenGL->renderRectWithDamage(box, color, CRegion{0, 0, INT32_MAX, INT32_MAX}); @@ -251,8 +251,8 @@ void CRenderPass::renderDebugData() { auto BOX = hlSurface->getSurfaceBoxGlobal(); if (BOX) { auto region = g_pSeatManager->state.pointerFocus->current.input.copy() - .scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale) - .translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->vecPosition); + .scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale) + .translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->m_position); g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.8F, 0.8F, 0.2F, 0.4F}, region); } } @@ -261,11 +261,11 @@ void CRenderPass::renderDebugData() { const auto DISCARDED_ELEMENTS = std::count_if(m_vPassElements.begin(), m_vPassElements.end(), [](const auto& e) { return e->discard; }); auto tex = g_pHyprOpenGL->renderText(std::format("occlusion layers: {}\npass elements: {} ({} discarded)\nviewport: {:X0}", occludedRegions.size(), m_vPassElements.size(), - DISCARDED_ELEMENTS, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize), + DISCARDED_ELEMENTS, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize), Colors::WHITE, 12); if (tex) { - box = CBox{{0.F, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.y - tex->m_vSize.y}, tex->m_vSize}.scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + box = CBox{{0.F, g_pHyprOpenGL->m_RenderData.pMonitor->m_size.y - tex->m_vSize.y}, tex->m_vSize}.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); g_pHyprOpenGL->renderTexture(tex, box, 1.F); } @@ -282,8 +282,8 @@ void CRenderPass::renderDebugData() { tex = g_pHyprOpenGL->renderText(passStructure, Colors::WHITE, 12); if (tex) { - box = CBox{{g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.x - tex->m_vSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.y - tex->m_vSize.y}, tex->m_vSize}.scale( - g_pHyprOpenGL->m_RenderData.pMonitor->scale); + box = CBox{{g_pHyprOpenGL->m_RenderData.pMonitor->m_size.x - tex->m_vSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_size.y - tex->m_vSize.y}, tex->m_vSize}.scale( + g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); g_pHyprOpenGL->renderTexture(tex, box, 1.F); } } diff --git a/src/render/pass/RectPassElement.cpp b/src/render/pass/RectPassElement.cpp index cd354844..1dab6a71 100644 --- a/src/render/pass/RectPassElement.cpp +++ b/src/render/pass/RectPassElement.cpp @@ -29,7 +29,7 @@ bool CRectPassElement::needsPrecomputeBlur() { } std::optional CRectPassElement::boundingBox() { - return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->scale).round(); + return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).round(); } CRegion CRectPassElement::opaqueRegion() { diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index 22e61a23..ed0e3000 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -64,7 +64,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { const auto PROJSIZEUNSCALED = windowBox.size(); - windowBox.scale(data.pMonitor->scale); + windowBox.scale(data.pMonitor->m_scale); windowBox.round(); if (windowBox.width <= 1 || windowBox.height <= 1) { @@ -72,14 +72,14 @@ void CSurfacePassElement::draw(const CRegion& damage) { return; } - const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->scale) != data.pMonitor->scale /* Fractional */ && data.surface->current.scale == 1 /* fs protocol */ && + const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->m_scale) != data.pMonitor->m_scale /* Fractional */ && data.surface->current.scale == 1 /* fs protocol */ && windowBox.size() != data.surface->current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, data.surface->current.bufferSize.x, 3) && DELTALESSTHAN(windowBox.height, data.surface->current.bufferSize.y, 3) /* off by one-or-two */ && (!data.pWindow || (!data.pWindow->m_realSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; if (data.surface->colorManagement.valid()) Debug::log(TRACE, "FIXME: rendering surface with color management enabled, should apply necessary transformations"); - g_pHyprRenderer->calculateUVForSurface(data.pWindow, data.surface, data.pMonitor->self.lock(), data.mainSurface, windowBox.size(), PROJSIZEUNSCALED, MISALIGNEDFSV1); + g_pHyprRenderer->calculateUVForSurface(data.pWindow, data.surface, data.pMonitor->m_self.lock(), data.mainSurface, windowBox.size(), PROJSIZEUNSCALED, MISALIGNEDFSV1); auto cancelRender = false; g_pHyprOpenGL->m_RenderData.clipRegion = visibleRegion(cancelRender); @@ -127,7 +127,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { } if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) - data.surface->presentFeedback(data.when, data.pMonitor->self.lock()); + data.surface->presentFeedback(data.when, data.pMonitor->m_self.lock()); // add async (dmabuf) buffers to usedBuffers so we can handle release later // sync (shm) buffers will be released in commitState, so no need to track them here @@ -138,7 +138,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { } CBox CSurfacePassElement::getTexBox() { - const double outputX = -data.pMonitor->vecPosition.x, outputY = -data.pMonitor->vecPosition.y; + const double outputX = -data.pMonitor->m_position.x, outputY = -data.pMonitor->m_position.y; const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->currentlyDraggedWindow && g_pInputManager->dragMode == MBIND_RESIZE; auto PSURFACE = CWLSurface::fromResource(data.surface); @@ -230,7 +230,7 @@ CRegion CSurfacePassElement::opaqueRegion() { CRegion opaqueSurf = data.surface->current.opaque.copy().intersect(CBox{{}, {data.w, data.h}}); const auto texBox = getTexBox(); opaqueSurf.scale(texBox.size() / Vector2D{data.w, data.h}); - return opaqueSurf.translate(data.pos + data.localPos - data.pMonitor->vecPosition).expand(-data.rounding); + return opaqueSurf.translate(data.pos + data.localPos - data.pMonitor->m_position).expand(-data.rounding); } return data.texture && data.texture->m_bOpaque ? boundingBox()->expand(-data.rounding) : CRegion{}; @@ -269,11 +269,11 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { visibleRegion.translate(-uvTL * bufferSize); auto texBox = getTexBox(); - texBox.scale(data.pMonitor->scale); + texBox.scale(data.pMonitor->m_scale); texBox.round(); visibleRegion.scale((Vector2D(1, 1) / (uvBR - uvTL)) * (texBox.size() / bufferSize)); - visibleRegion.translate((data.pos + data.localPos) * data.pMonitor->scale - data.pMonitor->vecPosition); + visibleRegion.translate((data.pos + data.localPos) * data.pMonitor->m_scale - data.pMonitor->m_position); return visibleRegion; } @@ -281,6 +281,6 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { void CSurfacePassElement::discard() { if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) { Debug::log(TRACE, "discard for invisible surface"); - data.surface->presentFeedback(data.when, data.pMonitor->self.lock(), true); + data.surface->presentFeedback(data.when, data.pMonitor->m_self.lock(), true); } } diff --git a/src/render/pass/TexPassElement.cpp b/src/render/pass/TexPassElement.cpp index 01302907..3ccad6cb 100644 --- a/src/render/pass/TexPassElement.cpp +++ b/src/render/pass/TexPassElement.cpp @@ -24,7 +24,7 @@ void CTexPassElement::draw(const CRegion& damage) { g_pHyprOpenGL->m_RenderData.monitorProjection = *data.replaceProjection; g_pHyprOpenGL->renderTextureInternalWithDamage(data.tex, data.box, data.a, data.damage.empty() ? damage : data.damage, data.round, data.roundingPower); if (data.replaceProjection) - g_pHyprOpenGL->m_RenderData.monitorProjection = g_pHyprOpenGL->m_RenderData.pMonitor->projMatrix; + g_pHyprOpenGL->m_RenderData.monitorProjection = g_pHyprOpenGL->m_RenderData.pMonitor->m_projMatrix; } bool CTexPassElement::needsLiveBlur() { @@ -36,7 +36,7 @@ bool CTexPassElement::needsPrecomputeBlur() { } std::optional CTexPassElement::boundingBox() { - return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->scale).round(); + return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).round(); } CRegion CTexPassElement::opaqueRegion() { From 8d6618104e28f6444d917b398244c56ac32ae993 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 30 Apr 2025 23:06:33 +0100 Subject: [PATCH 0133/1077] cmake: ignore Wclobbered fails build otherwise --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e21e949..4342d093 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,7 @@ add_compile_options( -Wno-missing-field-initializers -Wno-narrowing -Wno-pointer-arith + -Wno-clobbered -fmacro-prefix-map=${CMAKE_SOURCE_DIR}/=) set(CMAKE_EXECUTABLE_ENABLE_EXPORTS TRUE) From ce4766772d2723f8562a2b991c8ff378fd27d3a2 Mon Sep 17 00:00:00 2001 From: davc0n Date: Thu, 1 May 2025 13:26:43 +0200 Subject: [PATCH 0134/1077] hyprerror: refactor class member vars (#10227) --- src/hyprerror/HyprError.cpp | 104 ++++++++++++++++++------------------ src/hyprerror/HyprError.hpp | 18 +++---- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index c8000649..9dd26e2c 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -12,40 +12,40 @@ using namespace Hyprutils::Animation; CHyprError::CHyprError() { - g_pAnimationManager->createAnimation(0.f, m_fFadeOpacity, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), AVARDAMAGE_NONE); + g_pAnimationManager->createAnimation(0.f, m_fadeOpacity, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), AVARDAMAGE_NONE); static auto P = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) { - if (!m_bIsCreated) + if (!m_isCreated) return; g_pHyprRenderer->damageMonitor(g_pCompositor->m_lastMonitor.lock()); - m_bMonitorChanged = true; + m_monitorChanged = true; }); static auto P2 = g_pHookSystem->hookDynamic("preRender", [&](void* self, SCallbackInfo& info, std::any param) { - if (!m_bIsCreated) + if (!m_isCreated) return; - if (m_fFadeOpacity->isBeingAnimated() || m_bMonitorChanged) - g_pHyprRenderer->damageBox(m_bDamageBox); + if (m_fadeOpacity->isBeingAnimated() || m_monitorChanged) + g_pHyprRenderer->damageBox(m_damageBox); }); - m_pTexture = makeShared(); + m_texture = makeShared(); } void CHyprError::queueCreate(std::string message, const CHyprColor& color) { - m_szQueued = message; - m_cQueued = color; + m_queued = message; + m_queuedColor = color; } void CHyprError::createQueued() { - if (m_bIsCreated) - m_pTexture->destroyTexture(); + if (m_isCreated) + m_texture->destroyTexture(); - m_fFadeOpacity->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeIn")); + m_fadeOpacity->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeIn")); - m_fFadeOpacity->setValueAndWarp(0.f); - *m_fFadeOpacity = 1.f; + m_fadeOpacity->setValueAndWarp(0.f); + *m_fadeOpacity = 1.f; const auto PMONITOR = g_pCompositor->m_monitors.front(); @@ -63,7 +63,7 @@ void CHyprError::createQueued() { cairo_paint(CAIRO); cairo_restore(CAIRO); - const auto LINECOUNT = Hyprlang::INT{1} + std::count(m_szQueued.begin(), m_szQueued.end(), '\n'); + const auto LINECOUNT = Hyprlang::INT{1} + std::count(m_queued.begin(), m_queued.end(), '\n'); static auto LINELIMIT = CConfigValue("debug:error_limit"); static auto BAR_POSITION = CConfigValue("debug:error_position"); @@ -82,7 +82,7 @@ void CHyprError::createQueued() { const double X = PAD; const double Y = TOPBAR ? PAD : PMONITOR->m_pixelSize.y - HEIGHT - PAD; - m_bDamageBox = {0, 0, (int)PMONITOR->m_pixelSize.x, (int)HEIGHT + (int)PAD * 2}; + m_damageBox = {0, 0, (int)PMONITOR->m_pixelSize.x, (int)HEIGHT + (int)PAD * 2}; cairo_new_sub_path(CAIRO); cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + RADIUS, RADIUS, -90 * DEGREES, 0 * DEGREES); @@ -93,7 +93,7 @@ void CHyprError::createQueued() { cairo_set_source_rgba(CAIRO, 0.06, 0.06, 0.06, 1.0); cairo_fill_preserve(CAIRO); - cairo_set_source_rgba(CAIRO, m_cQueued.r, m_cQueued.g, m_cQueued.b, m_cQueued.a); + cairo_set_source_rgba(CAIRO, m_queuedColor.r, m_queuedColor.g, m_queuedColor.b, m_queuedColor.a); cairo_set_line_width(CAIRO, 2); cairo_stroke(CAIRO); @@ -113,12 +113,12 @@ void CHyprError::createQueued() { float yoffset = TOPBAR ? 0 : Y - PAD; int renderedcnt = 0; - while (!m_szQueued.empty() && renderedcnt < VISLINECOUNT) { - std::string current = m_szQueued.substr(0, m_szQueued.find('\n')); - if (const auto NEWLPOS = m_szQueued.find('\n'); NEWLPOS != std::string::npos) - m_szQueued = m_szQueued.substr(NEWLPOS + 1); + while (!m_queued.empty() && renderedcnt < VISLINECOUNT) { + std::string current = m_queued.substr(0, m_queued.find('\n')); + if (const auto NEWLPOS = m_queued.find('\n'); NEWLPOS != std::string::npos) + m_queued = m_queued.substr(NEWLPOS + 1); else - m_szQueued = ""; + m_queued = ""; cairo_move_to(CAIRO, PAD + 1 + RADIUS, yoffset + PAD + 1); pango_layout_set_text(layoutText, current.c_str(), -1); pango_cairo_show_layout(CAIRO, layoutText); @@ -131,9 +131,9 @@ void CHyprError::createQueued() { pango_layout_set_text(layoutText, moreString.c_str(), -1); pango_cairo_show_layout(CAIRO, layoutText); } - m_szQueued = ""; + m_queued = ""; - m_fLastHeight = yoffset + PAD + 1 - (TOPBAR ? 0 : Y - PAD); + m_lastHeight = yoffset + PAD + 1 - (TOPBAR ? 0 : Y - PAD); pango_font_description_free(pangoFD); g_object_unref(layoutText); @@ -142,8 +142,8 @@ void CHyprError::createQueued() { // copy the data to an OpenGL texture we have const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); - m_pTexture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_pTexture->m_iTexID); + m_texture->allocate(); + glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -158,9 +158,9 @@ void CHyprError::createQueued() { cairo_destroy(CAIRO); cairo_surface_destroy(CAIROSURFACE); - m_bIsCreated = true; - m_szQueued = ""; - m_cQueued = CHyprColor(); + m_isCreated = true; + m_queued = ""; + m_queuedColor = CHyprColor(); g_pHyprRenderer->damageMonitor(PMONITOR); @@ -168,19 +168,19 @@ void CHyprError::createQueued() { } void CHyprError::draw() { - if (!m_bIsCreated || m_szQueued != "") { - if (m_szQueued != "") + if (!m_isCreated || m_queued != "") { + if (m_queued != "") createQueued(); return; } - if (m_bQueuedDestroy) { - if (!m_fFadeOpacity->isBeingAnimated()) { - if (m_fFadeOpacity->value() == 0.f) { - m_bQueuedDestroy = false; - m_pTexture->destroyTexture(); - m_bIsCreated = false; - m_szQueued = ""; + if (m_queuedDestroy) { + if (!m_fadeOpacity->isBeingAnimated()) { + if (m_fadeOpacity->value() == 0.f) { + m_queuedDestroy = false; + m_texture->destroyTexture(); + m_isCreated = false; + m_queued = ""; for (auto& m : g_pCompositor->m_monitors) { g_pHyprRenderer->arrangeLayersForMonitor(m->m_id); @@ -188,8 +188,8 @@ void CHyprError::draw() { return; } else { - m_fFadeOpacity->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut")); - *m_fFadeOpacity = 0.f; + m_fadeOpacity->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut")); + *m_fadeOpacity = 0.f; } } } @@ -198,33 +198,33 @@ void CHyprError::draw() { CBox monbox = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y}; - m_bDamageBox.x = (int)PMONITOR->m_position.x; - m_bDamageBox.y = (int)PMONITOR->m_position.y; + m_damageBox.x = (int)PMONITOR->m_position.x; + m_damageBox.y = (int)PMONITOR->m_position.y; - if (m_fFadeOpacity->isBeingAnimated() || m_bMonitorChanged) - g_pHyprRenderer->damageBox(m_bDamageBox); + if (m_fadeOpacity->isBeingAnimated() || m_monitorChanged) + g_pHyprRenderer->damageBox(m_damageBox); - m_bMonitorChanged = false; + m_monitorChanged = false; CTexPassElement::SRenderData data; - data.tex = m_pTexture; + data.tex = m_texture; data.box = monbox; - data.a = m_fFadeOpacity->value(); + data.a = m_fadeOpacity->value(); g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); } void CHyprError::destroy() { - if (m_bIsCreated) - m_bQueuedDestroy = true; + if (m_isCreated) + m_queuedDestroy = true; else - m_szQueued = ""; + m_queued = ""; } bool CHyprError::active() { - return m_bIsCreated; + return m_isCreated; } float CHyprError::height() { - return m_fLastHeight; + return m_lastHeight; } diff --git a/src/hyprerror/HyprError.hpp b/src/hyprerror/HyprError.hpp index 12de0c81..f4bc43d8 100644 --- a/src/hyprerror/HyprError.hpp +++ b/src/hyprerror/HyprError.hpp @@ -20,16 +20,16 @@ class CHyprError { private: void createQueued(); - std::string m_szQueued = ""; - CHyprColor m_cQueued; - bool m_bQueuedDestroy = false; - bool m_bIsCreated = false; - SP m_pTexture; - PHLANIMVAR m_fFadeOpacity; - CBox m_bDamageBox = {0, 0, 0, 0}; - float m_fLastHeight = 0.F; + std::string m_queued = ""; + CHyprColor m_queuedColor; + bool m_queuedDestroy = false; + bool m_isCreated = false; + SP m_texture; + PHLANIMVAR m_fadeOpacity; + CBox m_damageBox = {0, 0, 0, 0}; + float m_lastHeight = 0.F; - bool m_bMonitorChanged = false; + bool m_monitorChanged = false; }; inline UP g_pHyprError; // This is a full-screen error. Treat it with respect, and there can only be one at a time. From 615e0dae46211ea0a7f35193321d65b348c04aa7 Mon Sep 17 00:00:00 2001 From: davc0n Date: Thu, 1 May 2025 13:27:07 +0200 Subject: [PATCH 0135/1077] layouts: refactor class member vars (#10228) --- src/layout/DwindleLayout.cpp | 80 ++++++++++++------------ src/layout/DwindleLayout.hpp | 8 +-- src/layout/IHyprLayout.cpp | 118 +++++++++++++++++------------------ src/layout/IHyprLayout.hpp | 16 ++--- src/layout/MasterLayout.cpp | 108 ++++++++++++++++---------------- src/layout/MasterLayout.hpp | 6 +- 6 files changed, 168 insertions(+), 168 deletions(-) diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 020a200a..305f1fee 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -45,7 +45,7 @@ void SDwindleNodeData::recalcSizePosRecursive(bool force, bool horizontalOverrid int CHyprDwindleLayout::getNodesOnWorkspace(const WORKSPACEID& id) { int no = 0; - for (auto const& n : m_lDwindleNodesData) { + for (auto const& n : m_dwindleNodesData) { if (n.workspaceID == id && n.valid) ++no; } @@ -53,7 +53,7 @@ int CHyprDwindleLayout::getNodesOnWorkspace(const WORKSPACEID& id) { } SDwindleNodeData* CHyprDwindleLayout::getFirstNodeOnWorkspace(const WORKSPACEID& id) { - for (auto& n : m_lDwindleNodesData) { + for (auto& n : m_dwindleNodesData) { if (n.workspaceID == id && validMapped(n.pWindow)) return &n; } @@ -63,7 +63,7 @@ SDwindleNodeData* CHyprDwindleLayout::getFirstNodeOnWorkspace(const WORKSPACEID& SDwindleNodeData* CHyprDwindleLayout::getClosestNodeOnWorkspace(const WORKSPACEID& id, const Vector2D& point) { SDwindleNodeData* res = nullptr; double distClosest = -1; - for (auto& n : m_lDwindleNodesData) { + for (auto& n : m_dwindleNodesData) { if (n.workspaceID == id && validMapped(n.pWindow)) { auto distAnother = vecToRectDistanceSquared(point, n.box.pos(), n.box.pos() + n.box.size()); if (!res || distAnother < distClosest) { @@ -76,7 +76,7 @@ SDwindleNodeData* CHyprDwindleLayout::getClosestNodeOnWorkspace(const WORKSPACEI } SDwindleNodeData* CHyprDwindleLayout::getNodeFromWindow(PHLWINDOW pWindow) { - for (auto& n : m_lDwindleNodesData) { + for (auto& n : m_dwindleNodesData) { if (n.pWindow.lock() == pWindow && !n.isNode) return &n; } @@ -85,7 +85,7 @@ SDwindleNodeData* CHyprDwindleLayout::getNodeFromWindow(PHLWINDOW pWindow) { } SDwindleNodeData* CHyprDwindleLayout::getMasterNodeOnWorkspace(const WORKSPACEID& id) { - for (auto& n : m_lDwindleNodesData) { + for (auto& n : m_dwindleNodesData) { if (!n.pParent && n.workspaceID == id) return &n; } @@ -223,16 +223,16 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir if (pWindow->m_isFloating) return; - m_lDwindleNodesData.emplace_back(); - const auto PNODE = &m_lDwindleNodesData.back(); + m_dwindleNodesData.emplace_back(); + const auto PNODE = &m_dwindleNodesData.back(); const auto PMONITOR = pWindow->m_monitor.lock(); static auto PUSEACTIVE = CConfigValue("dwindle:use_active_for_splits"); static auto PDEFAULTSPLIT = CConfigValue("dwindle:default_split_ratio"); - if (direction != DIRECTION_DEFAULT && overrideDirection == DIRECTION_DEFAULT) - overrideDirection = direction; + if (direction != DIRECTION_DEFAULT && m_overrideDirection == DIRECTION_DEFAULT) + m_overrideDirection = direction; // Populate the node with our window's data PNODE->workspaceID = pWindow->workspaceID(); @@ -242,7 +242,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir SDwindleNodeData* OPENINGON; - const auto MOUSECOORDS = m_vOverrideFocalPoint.value_or(g_pInputManager->getMouseCoordsInternal()); + const auto MOUSECOORDS = m_overrideFocalPoint.value_or(g_pInputManager->getMouseCoordsInternal()); const auto MONFROMCURSOR = g_pCompositor->getMonitorFromVector(MOUSECOORDS); if (PMONITOR->m_id == MONFROMCURSOR->m_id && @@ -278,14 +278,14 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PREDSIZEMAX.x || MAXSIZE.y < PREDSIZEMAX.y) { // we can't continue. make it floating. pWindow->m_isFloating = true; - m_lDwindleNodesData.remove(*PNODE); + m_dwindleNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; } // last fail-safe to avoid duplicate fullscreens if ((!OPENINGON || OPENINGON->pWindow.lock() == pWindow) && getNodesOnWorkspace(PNODE->workspaceID) > 1) { - for (auto& node : m_lDwindleNodesData) { + for (auto& node : m_dwindleNodesData) { if (node.workspaceID == PNODE->workspaceID && node.pWindow.lock() && node.pWindow.lock() != pWindow) { OPENINGON = &node; break; @@ -304,8 +304,8 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir // get the node under our cursor - m_lDwindleNodesData.emplace_back(); - const auto NEWPARENT = &m_lDwindleNodesData.back(); + m_dwindleNodesData.emplace_back(); + const auto NEWPARENT = &m_dwindleNodesData.back(); // make the parent have the OPENINGON's stats NEWPARENT->box = OPENINGON->box; @@ -328,16 +328,16 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir bool verticalOverride = false; // let user select position -> top, right, bottom, left - if (overrideDirection != DIRECTION_DEFAULT) { + if (m_overrideDirection != DIRECTION_DEFAULT) { // this is horizontal - if (overrideDirection % 2 == 0) + if (m_overrideDirection % 2 == 0) verticalOverride = true; else horizontalOverride = true; // 0 -> top and left | 1,2 -> right and bottom - if (overrideDirection % 3 == 0) { + if (m_overrideDirection % 3 == 0) { NEWPARENT->children[1] = OPENINGON; NEWPARENT->children[0] = PNODE; } else { @@ -347,7 +347,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir // whether or not the override persists after opening one window if (*PERMANENTDIRECTIONOVERRIDE == 0) - overrideDirection = DIRECTION_DEFAULT; + m_overrideDirection = DIRECTION_DEFAULT; } else if (*PSMARTSPLIT == 1) { const auto PARENT_CENTER = NEWPARENT->box.pos() + NEWPARENT->box.size() / 2; const auto PARENT_PROPORTIONS = NEWPARENT->box.h / NEWPARENT->box.w; @@ -455,7 +455,7 @@ void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { if (!PPARENT) { Debug::log(LOG, "Removing last node (dwindle)"); - m_lDwindleNodesData.remove(*PNODE); + m_dwindleNodesData.remove(*PNODE); return; } @@ -480,8 +480,8 @@ void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { else PSIBLING->recalcSizePosRecursive(); - m_lDwindleNodesData.remove(*PPARENT); - m_lDwindleNodesData.remove(*PNODE); + m_dwindleNodesData.remove(*PPARENT); + m_dwindleNodesData.remove(*PNODE); } void CHyprDwindleLayout::recalculateMonitor(const MONITORID& monid) { @@ -540,8 +540,8 @@ bool CHyprDwindleLayout::isWindowTiled(PHLWINDOW pWindow) { } void CHyprDwindleLayout::onBeginDragWindow() { - m_PseudoDragFlags.started = false; - m_PseudoDragFlags.pseudo = false; + m_pseudoDragFlags.started = false; + m_pseudoDragFlags.pseudo = false; IHyprLayout::onBeginDragWindow(); } @@ -573,29 +573,29 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_position.y + PWINDOW->m_size.y, PMONITOR->m_position.y + PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y); if (PWINDOW->m_isPseudotiled) { - if (!m_PseudoDragFlags.started) { - m_PseudoDragFlags.started = true; + if (!m_pseudoDragFlags.started) { + m_pseudoDragFlags.started = true; const auto pseudoSize = PWINDOW->m_realSize->goal(); const auto mouseOffset = g_pInputManager->getMouseCoordsInternal() - (PNODE->box.pos() + ((PNODE->box.size() / 2) - (pseudoSize / 2))); if (mouseOffset.x > 0 && mouseOffset.x < pseudoSize.x && mouseOffset.y > 0 && mouseOffset.y < pseudoSize.y) { - m_PseudoDragFlags.pseudo = true; - m_PseudoDragFlags.xExtent = mouseOffset.x > pseudoSize.x / 2; - m_PseudoDragFlags.yExtent = mouseOffset.y > pseudoSize.y / 2; + m_pseudoDragFlags.pseudo = true; + m_pseudoDragFlags.xExtent = mouseOffset.x > pseudoSize.x / 2; + m_pseudoDragFlags.yExtent = mouseOffset.y > pseudoSize.y / 2; PWINDOW->m_pseudoSize = pseudoSize; } else { - m_PseudoDragFlags.pseudo = false; + m_pseudoDragFlags.pseudo = false; } } - if (m_PseudoDragFlags.pseudo) { - if (m_PseudoDragFlags.xExtent) + if (m_pseudoDragFlags.pseudo) { + if (m_pseudoDragFlags.xExtent) PWINDOW->m_pseudoSize.x += pixResize.x * 2; else PWINDOW->m_pseudoSize.x -= pixResize.x * 2; - if (m_PseudoDragFlags.yExtent) + if (m_pseudoDragFlags.yExtent) PWINDOW->m_pseudoSize.y += pixResize.y * 2; else PWINDOW->m_pseudoSize.y -= pixResize.y * 2; @@ -837,7 +837,7 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, onWindowRemovedTiling(pWindow); - m_vOverrideFocalPoint = focalPoint; + m_overrideFocalPoint = focalPoint; const auto PMONITORFOCAL = g_pCompositor->getMonitorFromVector(focalPoint); @@ -857,7 +857,7 @@ void CHyprDwindleLayout::moveWindowTo(PHLWINDOW pWindow, const std::string& dir, onWindowCreatedTiling(pWindow); - m_vOverrideFocalPoint.reset(); + m_overrideFocalPoint.reset(); // restore focus to the previous position if (silent) { @@ -957,26 +957,26 @@ std::any CHyprDwindleLayout::layoutMessage(SLayoutMessageHeader header, std::str switch (direction.front()) { case 'u': case 't': { - overrideDirection = DIRECTION_UP; + m_overrideDirection = DIRECTION_UP; break; } case 'd': case 'b': { - overrideDirection = DIRECTION_DOWN; + m_overrideDirection = DIRECTION_DOWN; break; } case 'r': { - overrideDirection = DIRECTION_RIGHT; + m_overrideDirection = DIRECTION_RIGHT; break; } case 'l': { - overrideDirection = DIRECTION_LEFT; + m_overrideDirection = DIRECTION_LEFT; break; } default: { // any other character resets the focus direction // needed for the persistent mode - overrideDirection = DIRECTION_DEFAULT; + m_overrideDirection = DIRECTION_DEFAULT; break; } } @@ -1076,7 +1076,7 @@ void CHyprDwindleLayout::onEnable() { } void CHyprDwindleLayout::onDisable() { - m_lDwindleNodesData.clear(); + m_dwindleNodesData.clear(); } Vector2D CHyprDwindleLayout::predictSizeForNewWindowTiled() { diff --git a/src/layout/DwindleLayout.hpp b/src/layout/DwindleLayout.hpp index be47e724..ca610605 100644 --- a/src/layout/DwindleLayout.hpp +++ b/src/layout/DwindleLayout.hpp @@ -65,16 +65,16 @@ class CHyprDwindleLayout : public IHyprLayout { virtual void onDisable(); private: - std::list m_lDwindleNodesData; + std::list m_dwindleNodesData; struct { bool started = false; bool pseudo = false; bool xExtent = false; bool yExtent = false; - } m_PseudoDragFlags; + } m_pseudoDragFlags; - std::optional m_vOverrideFocalPoint; // for onWindowCreatedTiling. + std::optional m_overrideFocalPoint; // for onWindowCreatedTiling. int getNodesOnWorkspace(const WORKSPACEID&); void applyNodeDataToWindow(SDwindleNodeData*, bool force = false); @@ -88,7 +88,7 @@ class CHyprDwindleLayout : public IHyprLayout { void swapSplit(PHLWINDOW); void moveToRoot(PHLWINDOW, bool stable = true); - eDirection overrideDirection = DIRECTION_DEFAULT; + eDirection m_overrideDirection = DIRECTION_DEFAULT; friend struct SDwindleNodeData; }; diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 0eb38e3d..51ea5883 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -70,8 +70,8 @@ void IHyprLayout::onWindowRemoved(PHLWINDOW pWindow) { std::swap(PWINDOWPREV->m_groupData.pNextWindow->m_groupData.locked, pWindow->m_groupData.locked); } - if (pWindow == m_pLastTiledWindow) - m_pLastTiledWindow.reset(); + if (pWindow == m_lastTiledWindow) + m_lastTiledWindow.reset(); pWindow->setHidden(false); @@ -89,8 +89,8 @@ void IHyprLayout::onWindowRemoved(PHLWINDOW pWindow) { onWindowRemovedTiling(pWindow); } - if (pWindow == m_pLastTiledWindow) - m_pLastTiledWindow.reset(); + if (pWindow == m_lastTiledWindow) + m_lastTiledWindow.reset(); } void IHyprLayout::onWindowRemovedFloating(PHLWINDOW pWindow) { @@ -232,8 +232,8 @@ void IHyprLayout::onBeginDragWindow() { const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); - m_iMouseMoveEventCount = 1; - m_vBeginDragSizeXY = Vector2D(); + m_mouseMoveEventCount = 1; + m_beginDragSizeXY = Vector2D(); // Window will be floating. Let's check if it's valid. It should be, but I don't like crashing. if (!validMapped(DRAGGINGWINDOW)) { @@ -253,36 +253,36 @@ void IHyprLayout::onBeginDragWindow() { if (*RESIZECORNER != 0 && *RESIZECORNER <= 4 && DRAGGINGWINDOW->m_isFloating) { switch (*RESIZECORNER) { case 1: - m_eGrabbedCorner = CORNER_TOPLEFT; + m_grabbedCorner = CORNER_TOPLEFT; g_pInputManager->setCursorImageUntilUnset("nw-resize"); break; case 2: - m_eGrabbedCorner = CORNER_TOPRIGHT; + m_grabbedCorner = CORNER_TOPRIGHT; g_pInputManager->setCursorImageUntilUnset("ne-resize"); break; case 3: - m_eGrabbedCorner = CORNER_BOTTOMRIGHT; + m_grabbedCorner = CORNER_BOTTOMRIGHT; g_pInputManager->setCursorImageUntilUnset("se-resize"); break; case 4: - m_eGrabbedCorner = CORNER_BOTTOMLEFT; + m_grabbedCorner = CORNER_BOTTOMLEFT; g_pInputManager->setCursorImageUntilUnset("sw-resize"); break; } - } else if (m_vBeginDragXY.x < m_vBeginDragPositionXY.x + m_vBeginDragSizeXY.x / 2.0) { - if (m_vBeginDragXY.y < m_vBeginDragPositionXY.y + m_vBeginDragSizeXY.y / 2.0) { - m_eGrabbedCorner = CORNER_TOPLEFT; + } else if (m_beginDragXY.x < m_beginDragPositionXY.x + m_beginDragSizeXY.x / 2.0) { + if (m_beginDragXY.y < m_beginDragPositionXY.y + m_beginDragSizeXY.y / 2.0) { + m_grabbedCorner = CORNER_TOPLEFT; g_pInputManager->setCursorImageUntilUnset("nw-resize"); } else { - m_eGrabbedCorner = CORNER_BOTTOMLEFT; + m_grabbedCorner = CORNER_BOTTOMLEFT; g_pInputManager->setCursorImageUntilUnset("sw-resize"); } } else { - if (m_vBeginDragXY.y < m_vBeginDragPositionXY.y + m_vBeginDragSizeXY.y / 2.0) { - m_eGrabbedCorner = CORNER_TOPRIGHT; + if (m_beginDragXY.y < m_beginDragPositionXY.y + m_beginDragSizeXY.y / 2.0) { + m_grabbedCorner = CORNER_TOPRIGHT; g_pInputManager->setCursorImageUntilUnset("ne-resize"); } else { - m_eGrabbedCorner = CORNER_BOTTOMRIGHT; + m_grabbedCorner = CORNER_BOTTOMRIGHT; g_pInputManager->setCursorImageUntilUnset("se-resize"); } } @@ -301,7 +301,7 @@ void IHyprLayout::onBeginDragWindow() { void IHyprLayout::onEndDragWindow() { const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); - m_iMouseMoveEventCount = 1; + m_mouseMoveEventCount = 1; if (!validMapped(DRAGGINGWINDOW)) { if (DRAGGINGWINDOW) { @@ -340,7 +340,7 @@ void IHyprLayout::onEndDragWindow() { } DRAGGINGWINDOW->m_isFloating = pWindow->m_isFloating; // match the floating state of the window - DRAGGINGWINDOW->m_lastFloatingSize = m_vDraggingWindowOriginalFloatSize; + DRAGGINGWINDOW->m_lastFloatingSize = m_draggingWindowOriginalFloatSize; DRAGGINGWINDOW->m_draggingTiled = false; static auto USECURRPOS = CConfigValue("group:insert_after_current"); @@ -359,7 +359,7 @@ void IHyprLayout::onEndDragWindow() { DRAGGINGWINDOW->m_isFloating = false; g_pInputManager->refocus(); changeWindowFloatingMode(DRAGGINGWINDOW); - DRAGGINGWINDOW->m_lastFloatingSize = m_vDraggingWindowOriginalFloatSize; + DRAGGINGWINDOW->m_lastFloatingSize = m_draggingWindowOriginalFloatSize; } g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); @@ -525,14 +525,14 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); // Window invalid or drag begin size 0,0 meaning we rejected it. - if ((!validMapped(DRAGGINGWINDOW) || m_vBeginDragSizeXY == Vector2D())) { + if ((!validMapped(DRAGGINGWINDOW) || m_beginDragSizeXY == Vector2D())) { g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); return; } // Yoink dragged window here instead if using drag_threshold and it has been reached if (*PDRAGTHRESHOLD > 0 && !g_pInputManager->m_bDragThresholdReached) { - if ((m_vBeginDragXY.distanceSq(mousePos) <= std::pow(*PDRAGTHRESHOLD, 2) && m_vBeginDragXY == m_vLastDragXY)) + if ((m_beginDragXY.distanceSq(mousePos) <= std::pow(*PDRAGTHRESHOLD, 2) && m_beginDragXY == m_lastDragXY)) return; g_pInputManager->m_bDragThresholdReached = true; if (updateDragWindow()) @@ -543,8 +543,8 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { const auto SPECIAL = DRAGGINGWINDOW->onSpecialWorkspace(); - const auto DELTA = Vector2D(mousePos.x - m_vBeginDragXY.x, mousePos.y - m_vBeginDragXY.y); - const auto TICKDELTA = Vector2D(mousePos.x - m_vLastDragXY.x, mousePos.y - m_vLastDragXY.y); + const auto DELTA = Vector2D(mousePos.x - m_beginDragXY.x, mousePos.y - m_beginDragXY.y); + const auto TICKDELTA = Vector2D(mousePos.x - m_lastDragXY.x, mousePos.y - m_lastDragXY.y); static auto PANIMATEMOUSE = CConfigValue("misc:animate_mouse_windowdragging"); static auto PANIMATE = CConfigValue("misc:animate_manual_resizes"); @@ -559,15 +559,15 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { MSTIMER = std::chrono::high_resolution_clock::now(); - if (m_iMouseMoveEventCount == 1) + if (m_mouseMoveEventCount == 1) totalMs = 0; if (MSMONITOR > 16.0) { - totalMs += MSDELTA < MSMONITOR ? MSDELTA : std::round(totalMs * 1.0 / m_iMouseMoveEventCount); - m_iMouseMoveEventCount += 1; + totalMs += MSDELTA < MSMONITOR ? MSDELTA : std::round(totalMs * 1.0 / m_mouseMoveEventCount); + m_mouseMoveEventCount += 1; // check if time-window is enough to skip update on 60hz monitor - canSkipUpdate = std::clamp(MSMONITOR - TIMERDELTA, 0.0, MSMONITOR) > totalMs * 1.0 / m_iMouseMoveEventCount; + canSkipUpdate = std::clamp(MSMONITOR - TIMERDELTA, 0.0, MSMONITOR) > totalMs * 1.0 / m_mouseMoveEventCount; } if ((abs(TICKDELTA.x) < 1.f && abs(TICKDELTA.y) < 1.f) || (TIMERDELTA < MSMONITOR && canSkipUpdate && (g_pInputManager->dragMode != MBIND_MOVE || *PANIMATEMOUSE))) @@ -575,17 +575,17 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { TIMER = std::chrono::high_resolution_clock::now(); - m_vLastDragXY = mousePos; + m_lastDragXY = mousePos; g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); if (g_pInputManager->dragMode == MBIND_MOVE) { - Vector2D newPos = m_vBeginDragPositionXY + DELTA; + Vector2D newPos = m_beginDragPositionXY + DELTA; Vector2D newSize = DRAGGINGWINDOW->m_realSize->goal(); if (*SNAPENABLED && !DRAGGINGWINDOW->m_draggingTiled) - performSnap(newPos, newSize, DRAGGINGWINDOW, MBIND_MOVE, -1, m_vBeginDragSizeXY); + performSnap(newPos, newSize, DRAGGINGWINDOW, MBIND_MOVE, -1, m_beginDragSizeXY); CBox wb = {newPos, newSize}; wb.round(); @@ -609,25 +609,25 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { else MAXSIZE = DRAGGINGWINDOW->requestedMaxSize().clamp({}, Vector2D(std::numeric_limits::max(), std::numeric_limits::max())); - Vector2D newSize = m_vBeginDragSizeXY; - Vector2D newPos = m_vBeginDragPositionXY; + Vector2D newSize = m_beginDragSizeXY; + Vector2D newPos = m_beginDragPositionXY; - if (m_eGrabbedCorner == CORNER_BOTTOMRIGHT) + if (m_grabbedCorner == CORNER_BOTTOMRIGHT) newSize = newSize + DELTA; - else if (m_eGrabbedCorner == CORNER_TOPLEFT) + else if (m_grabbedCorner == CORNER_TOPLEFT) newSize = newSize - DELTA; - else if (m_eGrabbedCorner == CORNER_TOPRIGHT) + else if (m_grabbedCorner == CORNER_TOPRIGHT) newSize = newSize + Vector2D(DELTA.x, -DELTA.y); - else if (m_eGrabbedCorner == CORNER_BOTTOMLEFT) + else if (m_grabbedCorner == CORNER_BOTTOMLEFT) newSize = newSize + Vector2D(-DELTA.x, DELTA.y); eMouseBindMode mode = g_pInputManager->dragMode; if (DRAGGINGWINDOW->m_windowData.keepAspectRatio.valueOrDefault() && mode != MBIND_RESIZE_BLOCK_RATIO) mode = MBIND_RESIZE_FORCE_RATIO; - if (m_vBeginDragSizeXY.x >= 1 && m_vBeginDragSizeXY.y >= 1 && mode == MBIND_RESIZE_FORCE_RATIO) { + if (m_beginDragSizeXY.x >= 1 && m_beginDragSizeXY.y >= 1 && mode == MBIND_RESIZE_FORCE_RATIO) { - const float RATIO = m_vBeginDragSizeXY.y / m_vBeginDragSizeXY.x; + const float RATIO = m_beginDragSizeXY.y / m_beginDragSizeXY.x; if (MINSIZE.x * RATIO > MINSIZE.y) MINSIZE = Vector2D(MINSIZE.x, MINSIZE.x * RATIO); @@ -647,15 +647,15 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { newSize = newSize.clamp(MINSIZE, MAXSIZE); - if (m_eGrabbedCorner == CORNER_TOPLEFT) - newPos = newPos - newSize + m_vBeginDragSizeXY; - else if (m_eGrabbedCorner == CORNER_TOPRIGHT) - newPos = newPos + Vector2D(0.0, (m_vBeginDragSizeXY - newSize).y); - else if (m_eGrabbedCorner == CORNER_BOTTOMLEFT) - newPos = newPos + Vector2D((m_vBeginDragSizeXY - newSize).x, 0.0); + if (m_grabbedCorner == CORNER_TOPLEFT) + newPos = newPos - newSize + m_beginDragSizeXY; + else if (m_grabbedCorner == CORNER_TOPRIGHT) + newPos = newPos + Vector2D(0.0, (m_beginDragSizeXY - newSize).y); + else if (m_grabbedCorner == CORNER_BOTTOMLEFT) + newPos = newPos + Vector2D((m_beginDragSizeXY - newSize).x, 0.0); if (*SNAPENABLED) { - performSnap(newPos, newSize, DRAGGINGWINDOW, mode, m_eGrabbedCorner, m_vBeginDragSizeXY); + performSnap(newPos, newSize, DRAGGINGWINDOW, mode, m_grabbedCorner, m_beginDragSizeXY); newSize = newSize.clamp(MINSIZE, MAXSIZE); } @@ -674,7 +674,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { DRAGGINGWINDOW->m_position = wb.pos(); DRAGGINGWINDOW->m_size = wb.size(); } else { - resizeActiveWindow(TICKDELTA, m_eGrabbedCorner, DRAGGINGWINDOW); + resizeActiveWindow(TICKDELTA, m_grabbedCorner, DRAGGINGWINDOW); } } @@ -747,7 +747,7 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { g_pHyprRenderer->damageMonitor(pWindow->m_monitor.lock()); if (pWindow == g_pCompositor->m_lastWindow) - m_pLastTiledWindow = pWindow; + m_lastTiledWindow = pWindow; } else { onWindowRemovedTiling(pWindow); @@ -772,8 +772,8 @@ void IHyprLayout::changeWindowFloatingMode(PHLWINDOW pWindow) { pWindow->unsetWindowData(PRIORITY_LAYOUT); pWindow->updateWindowData(); - if (pWindow == m_pLastTiledWindow) - m_pLastTiledWindow.reset(); + if (pWindow == m_lastTiledWindow) + m_lastTiledWindow.reset(); } g_pCompositor->updateWindowAnimatedDecorationValues(pWindow); @@ -801,7 +801,7 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, PHLWINDOW pWindow) { } void IHyprLayout::onWindowFocusChange(PHLWINDOW pNewFocus) { - m_pLastTiledWindow = pNewFocus && !pNewFocus->m_isFloating ? pNewFocus : m_pLastTiledWindow; + m_lastTiledWindow = pNewFocus && !pNewFocus->m_isFloating ? pNewFocus : m_lastTiledWindow; } PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { @@ -828,8 +828,8 @@ PHLWINDOW IHyprLayout::getNextWindowCandidate(PHLWINDOW pWindow) { } // let's try the last tiled window. - if (m_pLastTiledWindow.lock() && m_pLastTiledWindow->m_workspace == pWindow->m_workspace) - return m_pLastTiledWindow.lock(); + if (m_lastTiledWindow.lock() && m_lastTiledWindow->m_workspace == pWindow->m_workspace) + return m_lastTiledWindow.lock(); // if we don't, let's try to find any window that is in the middle if (const auto PWINDOWCANDIDATE = g_pCompositor->vectorToWindowUnified(pWindow->middle(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); @@ -960,8 +960,8 @@ bool IHyprLayout::updateDragWindow() { } } - DRAGGINGWINDOW->m_draggingTiled = false; - m_vDraggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_lastFloatingSize; + DRAGGINGWINDOW->m_draggingTiled = false; + m_draggingWindowOriginalFloatSize = DRAGGINGWINDOW->m_lastFloatingSize; if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_isFloating) { const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); @@ -977,10 +977,10 @@ bool IHyprLayout::updateDragWindow() { } } - m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal(); - m_vBeginDragPositionXY = DRAGGINGWINDOW->m_realPosition->goal(); - m_vBeginDragSizeXY = DRAGGINGWINDOW->m_realSize->goal(); - m_vLastDragXY = m_vBeginDragXY; + m_beginDragXY = g_pInputManager->getMouseCoordsInternal(); + m_beginDragPositionXY = DRAGGINGWINDOW->m_realPosition->goal(); + m_beginDragSizeXY = DRAGGINGWINDOW->m_realSize->goal(); + m_lastDragXY = m_beginDragXY; return false; } diff --git a/src/layout/IHyprLayout.hpp b/src/layout/IHyprLayout.hpp index f85fc52a..fd63d154 100644 --- a/src/layout/IHyprLayout.hpp +++ b/src/layout/IHyprLayout.hpp @@ -212,13 +212,13 @@ class IHyprLayout { virtual bool updateDragWindow(); private: - int m_iMouseMoveEventCount; - Vector2D m_vBeginDragXY; - Vector2D m_vLastDragXY; - Vector2D m_vBeginDragPositionXY; - Vector2D m_vBeginDragSizeXY; - Vector2D m_vDraggingWindowOriginalFloatSize; - eRectCorner m_eGrabbedCorner = CORNER_TOPLEFT; + int m_mouseMoveEventCount; + Vector2D m_beginDragXY; + Vector2D m_lastDragXY; + Vector2D m_beginDragPositionXY; + Vector2D m_beginDragSizeXY; + Vector2D m_draggingWindowOriginalFloatSize; + eRectCorner m_grabbedCorner = CORNER_TOPLEFT; - PHLWINDOWREF m_pLastTiledWindow; + PHLWINDOWREF m_lastTiledWindow; }; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 53f3f823..e50b926e 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -11,7 +11,7 @@ #include "../managers/EventManager.hpp" SMasterNodeData* CHyprMasterLayout::getNodeFromWindow(PHLWINDOW pWindow) { - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.pWindow.lock() == pWindow) return &nd; } @@ -21,7 +21,7 @@ SMasterNodeData* CHyprMasterLayout::getNodeFromWindow(PHLWINDOW pWindow) { int CHyprMasterLayout::getNodesOnWorkspace(const WORKSPACEID& ws) { int no = 0; - for (auto const& n : m_lMasterNodesData) { + for (auto const& n : m_masterNodesData) { if (n.workspaceID == ws) no++; } @@ -31,7 +31,7 @@ int CHyprMasterLayout::getNodesOnWorkspace(const WORKSPACEID& ws) { int CHyprMasterLayout::getMastersOnWorkspace(const WORKSPACEID& ws) { int no = 0; - for (auto const& n : m_lMasterNodesData) { + for (auto const& n : m_masterNodesData) { if (n.workspaceID == ws && n.isMaster) no++; } @@ -40,13 +40,13 @@ int CHyprMasterLayout::getMastersOnWorkspace(const WORKSPACEID& ws) { } SMasterWorkspaceData* CHyprMasterLayout::getMasterWorkspaceData(const WORKSPACEID& ws) { - for (auto& n : m_lMasterWorkspacesData) { + for (auto& n : m_masterWorkspacesData) { if (n.workspaceID == ws) return &n; } //create on the fly if it doesn't exist yet - const auto PWORKSPACEDATA = &m_lMasterWorkspacesData.emplace_back(); + const auto PWORKSPACEDATA = &m_masterWorkspacesData.emplace_back(); PWORKSPACEDATA->workspaceID = ws; static auto PORIENTATION = CConfigValue("master:orientation"); @@ -69,7 +69,7 @@ std::string CHyprMasterLayout::getLayoutName() { } SMasterNodeData* CHyprMasterLayout::getMasterNodeOnWorkspace(const WORKSPACEID& ws) { - for (auto& n : m_lMasterNodesData) { + for (auto& n : m_masterNodesData) { if (n.isMaster && n.workspaceID == ws) return &n; } @@ -94,13 +94,13 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire if (*PNEWONACTIVE != "none" && !BNEWISMASTER) { const auto pLastNode = getNodeFromWindow(g_pCompositor->m_lastWindow.lock()); if (pLastNode && !(pLastNode->isMaster && (getMastersOnWorkspace(pWindow->workspaceID()) == 1 || *PNEWSTATUS == "slave"))) { - auto it = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *pLastNode); + auto it = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *pLastNode); if (!BNEWBEFOREACTIVE) ++it; - return &(*m_lMasterNodesData.emplace(it)); + return &(*m_masterNodesData.emplace(it)); } } - return *PNEWONTOP ? &m_lMasterNodesData.emplace_front() : &m_lMasterNodesData.emplace_back(); + return *PNEWONTOP ? &m_masterNodesData.emplace_front() : &m_masterNodesData.emplace_back(); }(); PNODE->workspaceID = pWindow->workspaceID(); @@ -117,13 +117,13 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); static auto PDROPATCURSOR = CConfigValue("master:drop_at_cursor"); eOrientation orientation = getDynamicOrientation(pWindow->m_workspace); - const auto NODEIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *PNODE); + const auto NODEIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *PNODE); bool forceDropAsMaster = false; // if dragging window to move, drop it at the cursor position instead of bottom/top of stack if (*PDROPATCURSOR && g_pInputManager->dragMode == MBIND_MOVE) { if (WINDOWSONWORKSPACE > 2) { - for (auto it = m_lMasterNodesData.begin(); it != m_lMasterNodesData.end(); ++it) { + for (auto it = m_masterNodesData.begin(); it != m_masterNodesData.end(); ++it) { if (it->workspaceID != pWindow->workspaceID()) continue; const CBox box = it->pWindow->getWindowIdealBoundingBoxIgnoreReserved(); @@ -142,14 +142,14 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire case ORIENTATION_CENTER: break; default: UNREACHABLE(); } - m_lMasterNodesData.splice(it, m_lMasterNodesData, NODEIT); + m_masterNodesData.splice(it, m_masterNodesData, NODEIT); break; } } } else if (WINDOWSONWORKSPACE == 2) { // when dropping as the second tiled window in the workspace, // make it the master only if the cursor is on the master side of the screen - for (auto const& nd : m_lMasterNodesData) { + for (auto const& nd : m_masterNodesData) { if (nd.isMaster && nd.workspaceID == PNODE->workspaceID) { switch (orientation) { case ORIENTATION_LEFT: @@ -184,7 +184,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire || (*PNEWSTATUS == "inherit" && OPENINGON && OPENINGON->isMaster && g_pInputManager->dragMode != MBIND_MOVE)) { if (BNEWBEFOREACTIVE) { - for (auto& nd : m_lMasterNodesData | std::views::reverse) { + for (auto& nd : m_masterNodesData | std::views::reverse) { if (nd.isMaster && nd.workspaceID == PNODE->workspaceID) { nd.isMaster = false; lastSplitPercent = nd.percMaster; @@ -192,7 +192,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire } } } else { - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.isMaster && nd.workspaceID == PNODE->workspaceID) { nd.isMaster = false; lastSplitPercent = nd.percMaster; @@ -208,7 +208,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire if (const auto MAXSIZE = pWindow->requestedMaxSize(); MAXSIZE.x < PMONITOR->m_size.x * lastSplitPercent || MAXSIZE.y < PMONITOR->m_size.y) { // we can't continue. make it floating. pWindow->m_isFloating = true; - m_lMasterNodesData.remove(*PNODE); + m_masterNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; } @@ -221,7 +221,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire MAXSIZE.x < PMONITOR->m_size.x * (1 - lastSplitPercent) || MAXSIZE.y < PMONITOR->m_size.y * (1.f / (WINDOWSONWORKSPACE - 1))) { // we can't continue. make it floating. pWindow->m_isFloating = true; - m_lMasterNodesData.remove(*PNODE); + m_masterNodesData.remove(*PNODE); g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow); return; } @@ -249,7 +249,7 @@ void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { if (PNODE->isMaster && (MASTERSLEFT <= 1 || *SMALLSPLIT == 1)) { // find a new master from top of the list - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (!nd.isMaster && nd.workspaceID == WORKSPACEID) { nd.isMaster = true; nd.percMaster = PNODE->percMaster; @@ -258,10 +258,10 @@ void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { } } - m_lMasterNodesData.remove(*PNODE); + m_masterNodesData.remove(*PNODE); if (getMastersOnWorkspace(WORKSPACEID) == getNodesOnWorkspace(WORKSPACEID) && MASTERSLEFT > 1) { - for (auto& nd : m_lMasterNodesData | std::views::reverse) { + for (auto& nd : m_masterNodesData | std::views::reverse) { if (nd.workspaceID == WORKSPACEID) { nd.isMaster = false; break; @@ -271,7 +271,7 @@ void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) { // BUGFIX: correct bug where closing one master in a stack of 2 would leave // the screen half bare, and make it difficult to select remaining window if (getNodesOnWorkspace(WORKSPACEID) == 1) { - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID == WORKSPACEID && !nd.isMaster) { nd.isMaster = true; break; @@ -363,7 +363,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (*PSMARTRESIZING) { // check the total width and height so that later // if larger/smaller than screen size them down/up - for (auto const& nd : m_lMasterNodesData) { + for (auto const& nd : m_masterNodesData) { if (nd.workspaceID == pWorkspace->m_id) { if (nd.isMaster) masterAccumulatedSize += totalSize / MASTERS * nd.percSize; @@ -404,7 +404,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (orientation == ORIENTATION_BOTTOM) nextY = WSSIZE.y - HEIGHT; - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || !nd.isMaster) continue; @@ -441,7 +441,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { nextX = ((*PIGNORERESERVED && centerMasterWindow ? PMONITOR->m_size.x : WSSIZE.x) - WIDTH) / 2; } - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || !nd.isMaster) continue; @@ -478,7 +478,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (orientation == ORIENTATION_TOP) nextY = PMASTERNODE->size.y; - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; @@ -508,7 +508,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (orientation == ORIENTATION_LEFT) nextX = PMASTERNODE->size.x; - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; @@ -553,7 +553,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { float slaveAccumulatedHeightR = 0; if (*PSMARTRESIZING) { - for (auto const& nd : m_lMasterNodesData) { + for (auto const& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; @@ -568,7 +568,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { onRight = *CMSLAVESONRIGHT; } - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID != pWorkspace->m_id || nd.isMaster) continue; @@ -701,7 +701,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { *PWINDOW->m_realSize = wb.size(); } - if (m_bForceWarps && !*PANIMATE) { + if (m_forceWarps && !*PANIMATE) { g_pHyprRenderer->damageWindow(PWINDOW); PWINDOW->m_realPosition->warp(); @@ -757,7 +757,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne if (getNodesOnWorkspace(PWINDOW->workspaceID()) == 1 && !centered) return; - m_bForceWarps = true; + m_forceWarps = true; switch (orientation) { case ORIENTATION_LEFT: delta = pixResize.x / PMONITOR->m_size.x; break; @@ -777,7 +777,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne } const auto workspaceIdForResizing = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); - for (auto& n : m_lMasterNodesData) { + for (auto& n : m_masterNodesData) { if (n.isMaster && n.workspaceID == workspaceIdForResizing) n.percMaster = std::clamp(n.percMaster + delta, 0.05, 0.95); } @@ -798,8 +798,8 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne if (!*PSMARTRESIZING) { PNODE->percSize = std::clamp(PNODE->percSize + RESIZEDELTA / SIZE, 0.05, 1.95); } else { - const auto NODEIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *PNODE); - const auto REVNODEIT = std::find(m_lMasterNodesData.rbegin(), m_lMasterNodesData.rend(), *PNODE); + const auto NODEIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *PNODE); + const auto REVNODEIT = std::find(m_masterNodesData.rbegin(), m_masterNodesData.rend(), *PNODE); const float totalSize = isStackVertical ? WSSIZE.y : WSSIZE.x; const float minSize = totalSize / nodesInSameColumn * 0.2; @@ -820,10 +820,10 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne }; float resizeDiff; if (resizePrevNodes) { - std::for_each(std::next(REVNODEIT), m_lMasterNodesData.rend(), checkNodesLeft); + std::for_each(std::next(REVNODEIT), m_masterNodesData.rend(), checkNodesLeft); resizeDiff = -RESIZEDELTA; } else { - std::for_each(std::next(NODEIT), m_lMasterNodesData.end(), checkNodesLeft); + std::for_each(std::next(NODEIT), m_masterNodesData.end(), checkNodesLeft); resizeDiff = RESIZEDELTA; } @@ -849,16 +849,16 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne it.percSize -= resizeDeltaForEach / SIZE; }; if (resizePrevNodes) { - std::for_each(std::next(REVNODEIT), m_lMasterNodesData.rend(), resizeNodesLeft); + std::for_each(std::next(REVNODEIT), m_masterNodesData.rend(), resizeNodesLeft); } else { - std::for_each(std::next(NODEIT), m_lMasterNodesData.end(), resizeNodesLeft); + std::for_each(std::next(NODEIT), m_masterNodesData.end(), resizeNodesLeft); } } } recalculateMonitor(PMONITOR->m_id); - m_bForceWarps = false; + m_forceWarps = false; } void CHyprMasterLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFullscreenMode CURRENT_EFFECTIVE_MODE, const eFullscreenMode EFFECTIVE_MODE) { @@ -1018,7 +1018,7 @@ PHLWINDOW CHyprMasterLayout::getNextWindow(PHLWINDOW pWindow, bool next, bool lo const auto PNODE = getNodeFromWindow(pWindow); - auto nodes = m_lMasterNodesData; + auto nodes = m_masterNodesData; if (!next) std::reverse(nodes.begin(), nodes.end()); @@ -1101,7 +1101,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri const auto NEWFOCUS = newFocusToChild ? NEWCHILD : NEWMASTER; switchToWindow(NEWFOCUS); } else { - for (auto const& n : m_lMasterNodesData) { + for (auto const& n : m_masterNodesData) { if (n.workspaceID == PMASTER->workspaceID && !n.isMaster) { const auto NEWMASTER = n.pWindow.lock(); switchWindows(NEWMASTER, NEWCHILD); @@ -1136,7 +1136,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri return 0; } else { // if master is focused keep master focused (don't do anything) - for (auto const& n : m_lMasterNodesData) { + for (auto const& n : m_masterNodesData) { if (n.workspaceID == PMASTER->workspaceID && !n.isMaster) { switchToWindow(n.pWindow.lock()); break; @@ -1217,7 +1217,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!PNODE || PNODE->isMaster) { // first non-master node - for (auto& n : m_lMasterNodesData) { + for (auto& n : m_masterNodesData) { if (n.workspaceID == header.pWindow->workspaceID() && !n.isMaster) { n.isMaster = true; break; @@ -1249,7 +1249,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!PNODE || !PNODE->isMaster) { // first non-master node - for (auto& nd : m_lMasterNodesData | std::views::reverse) { + for (auto& nd : m_masterNodesData | std::views::reverse) { if (nd.workspaceID == header.pWindow->workspaceID() && nd.isMaster) { nd.isMaster = false; break; @@ -1302,16 +1302,16 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!OLDMASTER) return 0; - const auto OLDMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *OLDMASTER); + const auto OLDMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *OLDMASTER); - for (auto& nd : m_lMasterNodesData) { + for (auto& nd : m_masterNodesData) { if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { nd.isMaster = true; - const auto NEWMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), nd); - m_lMasterNodesData.splice(OLDMASTERIT, m_lMasterNodesData, NEWMASTERIT); + const auto NEWMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), nd); + m_masterNodesData.splice(OLDMASTERIT, m_masterNodesData, NEWMASTERIT); switchToWindow(nd.pWindow.lock()); OLDMASTER->isMaster = false; - m_lMasterNodesData.splice(m_lMasterNodesData.end(), m_lMasterNodesData, OLDMASTERIT); + m_masterNodesData.splice(m_masterNodesData.end(), m_masterNodesData, OLDMASTERIT); break; } } @@ -1328,16 +1328,16 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!OLDMASTER) return 0; - const auto OLDMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *OLDMASTER); + const auto OLDMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *OLDMASTER); - for (auto& nd : m_lMasterNodesData | std::views::reverse) { + for (auto& nd : m_masterNodesData | std::views::reverse) { if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { nd.isMaster = true; - const auto NEWMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), nd); - m_lMasterNodesData.splice(OLDMASTERIT, m_lMasterNodesData, NEWMASTERIT); + const auto NEWMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), nd); + m_masterNodesData.splice(OLDMASTERIT, m_masterNodesData, NEWMASTERIT); switchToWindow(nd.pWindow.lock()); OLDMASTER->isMaster = false; - m_lMasterNodesData.splice(m_lMasterNodesData.begin(), m_lMasterNodesData, OLDMASTERIT); + m_masterNodesData.splice(m_masterNodesData.begin(), m_masterNodesData, OLDMASTERIT); break; } } @@ -1477,5 +1477,5 @@ void CHyprMasterLayout::onEnable() { } void CHyprMasterLayout::onDisable() { - m_lMasterNodesData.clear(); + m_masterNodesData.clear(); } diff --git a/src/layout/MasterLayout.hpp b/src/layout/MasterLayout.hpp index f658fdaa..20743690 100644 --- a/src/layout/MasterLayout.hpp +++ b/src/layout/MasterLayout.hpp @@ -71,10 +71,10 @@ class CHyprMasterLayout : public IHyprLayout { virtual void onDisable(); private: - std::list m_lMasterNodesData; - std::vector m_lMasterWorkspacesData; + std::list m_masterNodesData; + std::vector m_masterWorkspacesData; - bool m_bForceWarps = false; + bool m_forceWarps = false; void buildOrientationCycleVectorFromVars(std::vector& cycle, CVarList& vars); void buildOrientationCycleVectorFromEOperation(std::vector& cycle); From b5ef049ea153e476057987ef11ccbdbbfb655c15 Mon Sep 17 00:00:00 2001 From: Zetta1 Reid0 <79805086+Zetta1Reid0@users.noreply.github.com> Date: Thu, 1 May 2025 14:29:06 +0300 Subject: [PATCH 0136/1077] master: Change center_master_slaves_on_right to center_master_fallback (#10201) * Change center_master_slaves_on_right to center_master_fallback --- src/config/ConfigDescriptions.hpp | 10 ++++------ src/config/ConfigManager.cpp | 2 +- src/layout/MasterLayout.cpp | 18 ++++++++++++------ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 39c1b522..9214772d 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1811,12 +1811,10 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_INT, .data = SConfigOptionDescription::SRangeData{2, 0, 10}, //##TODO RANGE? }, - SConfigOptionDescription{ - .value = "master:center_master_slaves_on_right", - .description = "set if the slaves should appear on right of master when slave_count_for_center_master > 2", - .type = CONFIG_OPTION_BOOL, - .data = SConfigOptionDescription::SBoolData{true}, - }, + SConfigOptionDescription{.value = "master:center_master_fallback", + .description = "Set fallback for center master when slaves are less than slave_count_for_center_master, can be left ,right ,top ,bottom", + .type = CONFIG_OPTION_STRING_SHORT, + .data = SConfigOptionDescription::SStringData{"left"}}, SConfigOptionDescription{ .value = "master:center_ignores_reserved", .description = "centers the master window on monitor ignoring reserved areas", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f84b868f..ea79f614 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -597,7 +597,7 @@ CConfigManager::CConfigManager() { registerConfigVar("master:mfact", {0.55f}); registerConfigVar("master:new_status", {"slave"}); registerConfigVar("master:slave_count_for_center_master", Hyprlang::INT{2}); - registerConfigVar("master:center_master_slaves_on_right", Hyprlang::INT{1}); + registerConfigVar("master:center_master_fallback", {"left"}); registerConfigVar("master:center_ignores_reserved", Hyprlang::INT{0}); registerConfigVar("master:new_on_active", {"none"}); registerConfigVar("master:new_on_top", Hyprlang::INT{0}); diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index e50b926e..d2aa7568 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -333,7 +333,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { eOrientation orientation = getDynamicOrientation(pWorkspace); bool centerMasterWindow = false; static auto SLAVECOUNTFORCENTER = CConfigValue("master:slave_count_for_center_master"); - static auto CMSLAVESONRIGHT = CConfigValue("master:center_master_slaves_on_right"); + static auto CMFALLBACK = CConfigValue("master:center_master_fallback"); static auto PIGNORERESERVED = CConfigValue("master:center_ignores_reserved"); static auto PSMARTRESIZING = CConfigValue("master:smart_resizing"); @@ -347,10 +347,16 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { if (STACKWINDOWS >= *SLAVECOUNTFORCENTER) { centerMasterWindow = true; } else { - if (*CMSLAVESONRIGHT) + if (*CMFALLBACK == "left") orientation = ORIENTATION_LEFT; - else + else if (*CMFALLBACK == "right") orientation = ORIENTATION_RIGHT; + else if (*CMFALLBACK == "top") + orientation = ORIENTATION_TOP; + else if (*CMFALLBACK == "bottom") + orientation = ORIENTATION_BOTTOM; + else + orientation = ORIENTATION_LEFT; } } @@ -538,11 +544,11 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { float nextY = 0; float nextYL = 0; float nextYR = 0; - bool onRight = *CMSLAVESONRIGHT; + bool onRight = *CMFALLBACK == "right"; int slavesLeftL = 1 + (slavesLeft - 1) / 2; int slavesLeftR = slavesLeft - slavesLeftL; - if (*CMSLAVESONRIGHT) { + if (onRight) { slavesLeftR = 1 + (slavesLeft - 1) / 2; slavesLeftL = slavesLeft - slavesLeftR; } @@ -565,7 +571,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) { onRight = !onRight; } - onRight = *CMSLAVESONRIGHT; + onRight = *CMFALLBACK == "right"; } for (auto& nd : m_masterNodesData) { From 858c0e26d19391d56c1e7a6ac8574da956068d38 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 1 May 2025 18:00:26 +0200 Subject: [PATCH 0137/1077] hyprpm: move to system directories for storing plugins (#10211) --- CMakeLists.txt | 2 +- hyprpm/CMakeLists.txt | 2 +- hyprpm/src/core/DataState.cpp | 108 +++++++++++++++++------------ hyprpm/src/core/DataState.hpp | 1 + hyprpm/src/core/PluginManager.cpp | 31 +++++++-- hyprpm/src/core/PluginManager.hpp | 4 +- hyprpm/src/helpers/Die.hpp | 15 ++++ hyprpm/src/helpers/Sys.cpp | 110 ++++++++++++++++++++++++++++++ hyprpm/src/helpers/Sys.hpp | 12 ++++ hyprpm/src/main.cpp | 65 ++++++++++++------ meson.build | 2 +- 11 files changed, 278 insertions(+), 74 deletions(-) create mode 100644 hyprpm/src/helpers/Die.hpp create mode 100644 hyprpm/src/helpers/Sys.cpp create mode 100644 hyprpm/src/helpers/Sys.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4342d093..bc016d85 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,7 +109,7 @@ find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION}) pkg_check_modules(aquamarine_dep REQUIRED IMPORTED_TARGET aquamarine>=0.8.0) pkg_check_modules(hyprlang_dep REQUIRED IMPORTED_TARGET hyprlang>=0.3.2) pkg_check_modules(hyprcursor_dep REQUIRED IMPORTED_TARGET hyprcursor>=0.1.7) -pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=0.6.0) +pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=0.7.0) pkg_check_modules(hyprgraphics_dep REQUIRED IMPORTED_TARGET hyprgraphics>=0.1.1) string(REPLACE "." ";" AQ_VERSION_LIST ${aquamarine_dep_VERSION}) diff --git a/hyprpm/CMakeLists.txt b/hyprpm/CMakeLists.txt index b3028d0a..f2e0b223 100644 --- a/hyprpm/CMakeLists.txt +++ b/hyprpm/CMakeLists.txt @@ -9,7 +9,7 @@ file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp") set(CMAKE_CXX_STANDARD 23) -pkg_check_modules(hyprpm_deps REQUIRED IMPORTED_TARGET tomlplusplus hyprutils>=0.2.4) +pkg_check_modules(hyprpm_deps REQUIRED IMPORTED_TARGET tomlplusplus hyprutils>=0.7.0) find_package(glaze QUIET) if (NOT glaze_FOUND) diff --git a/hyprpm/src/core/DataState.cpp b/hyprpm/src/core/DataState.cpp index 55f148a4..d8a9477e 100644 --- a/hyprpm/src/core/DataState.cpp +++ b/hyprpm/src/core/DataState.cpp @@ -1,22 +1,15 @@ #include "DataState.hpp" +#include #include #include #include #include "PluginManager.hpp" +#include "../helpers/Die.hpp" +#include "../helpers/Sys.hpp" +#include "../helpers/StringUtils.hpp" std::filesystem::path DataState::getDataStatePath() { - const auto HOME = getenv("HOME"); - if (!HOME) { - std::println(stderr, "DataState: no $HOME"); - throw std::runtime_error("no $HOME"); - return ""; - } - - const auto XDG_DATA_HOME = getenv("XDG_DATA_HOME"); - - if (XDG_DATA_HOME) - return std::filesystem::path{XDG_DATA_HOME} / "hyprpm"; - return std::filesystem::path{HOME} / ".local/share/hyprpm"; + return std::filesystem::path("/var/cache/hyprpm/" + g_pPluginManager->m_szUsername); } std::string DataState::getHeadersPath() { @@ -41,21 +34,25 @@ std::vector DataState::getPluginStates() { } void DataState::ensureStateStoreExists() { - const auto PATH = getDataStatePath(); - - if (!std::filesystem::exists(PATH)) - std::filesystem::create_directories(PATH); - - if (!std::filesystem::exists(getHeadersPath())) - std::filesystem::create_directories(getHeadersPath()); + std::error_code ec; + if (!std::filesystem::exists(getHeadersPath(), ec) || ec) { + std::println("{}", infoString("The hyprpm state store doesn't exist. Creating now...")); + if (!std::filesystem::exists("/var/cache/hyprpm/", ec) || ec) + NSys::runAsSuperuser("mkdir -p -m 755 '/var/cache/hyprpm/'"); + if (!std::filesystem::exists(getDataStatePath(), ec) || ec) + NSys::runAsSuperuser("mkdir -p -m 755 '" + getDataStatePath().string() + "'"); + NSys::runAsSuperuser("mkdir -p -m 755 '" + getHeadersPath() + "'"); + } } void DataState::addNewPluginRepo(const SPluginRepository& repo) { ensureStateStoreExists(); - const auto PATH = getDataStatePath() / repo.name; + const auto PATH = getDataStatePath() / repo.name; - std::filesystem::create_directories(PATH); + std::error_code ec; + if (!std::filesystem::exists(PATH, ec) || ec) + NSys::runAsSuperuser("mkdir -p -m 755 '" + PATH.string() + "'"); // clang-format off auto DATA = toml::table{ {"repository", toml::table{ @@ -68,9 +65,9 @@ void DataState::addNewPluginRepo(const SPluginRepository& repo) { for (auto const& p : repo.plugins) { const auto filename = p.name + ".so"; - // copy .so to the good place + // copy .so to the good place and chmod 755 if (std::filesystem::exists(p.filename)) - std::filesystem::copy_file(p.filename, PATH / filename); + NSys::runAsSuperuser("cp '" + p.filename + "' '" + (PATH / filename).string() + "' && chmod 755 '" + (PATH / filename).string() + "'"); DATA.emplace(p.name, toml::table{ {"filename", filename}, @@ -80,16 +77,16 @@ void DataState::addNewPluginRepo(const SPluginRepository& repo) { } // clang-format on - std::ofstream ofs(PATH / "state.toml", std::ios::trunc); - ofs << DATA; - ofs.close(); + std::stringstream ss; + ss << DATA; + + NSys::runAsSuperuser("cat << EOF > " + (PATH / "state.toml").string() + "\n" + ss.str() + "\nEOF"); + NSys::runAsSuperuser("chmod 644 '" + (PATH / "state.toml").string() + "'"); } bool DataState::pluginRepoExists(const std::string& urlOrName) { ensureStateStoreExists(); - const auto PATH = getDataStatePath(); - for (const auto& stateFile : getPluginStates()) { const auto STATE = toml::parse_file(stateFile.c_str()); const auto NAME = STATE["repository"]["name"].value_or(""); @@ -105,8 +102,6 @@ bool DataState::pluginRepoExists(const std::string& urlOrName) { void DataState::removePluginRepo(const std::string& urlOrName) { ensureStateStoreExists(); - const auto PATH = getDataStatePath(); - for (const auto& stateFile : getPluginStates()) { const auto STATE = toml::parse_file(stateFile.c_str()); const auto NAME = STATE["repository"]["name"].value_or(""); @@ -122,7 +117,13 @@ void DataState::removePluginRepo(const std::string& urlOrName) { g_pPluginManager->loadUnloadPlugin(std::filesystem::absolute(file.path()), false); } - std::filesystem::remove_all(stateFile.parent_path()); + const auto PATH = stateFile.parent_path().string(); + + if (!PATH.starts_with("/var/cache/hyprpm") || PATH.contains('\'')) + return; // WTF? + + // scary! + NSys::runAsSuperuser("rm -r '" + PATH + "'"); return; } } @@ -131,9 +132,11 @@ void DataState::removePluginRepo(const std::string& urlOrName) { void DataState::updateGlobalState(const SGlobalState& state) { ensureStateStoreExists(); - const auto PATH = getDataStatePath(); + const auto PATH = getDataStatePath(); - std::filesystem::create_directories(PATH); + std::error_code ec; + if (!std::filesystem::exists(PATH, ec) || ec) + NSys::runAsSuperuser("mkdir -p -m 755 '" + PATH.string() + "'"); // clang-format off auto DATA = toml::table{ {"state", toml::table{ @@ -143,17 +146,20 @@ void DataState::updateGlobalState(const SGlobalState& state) { }; // clang-format on - std::ofstream ofs(PATH / "state.toml", std::ios::trunc); - ofs << DATA; - ofs.close(); + std::stringstream ss; + ss << DATA; + + NSys::runAsSuperuser("cat << EOF > " + (PATH / "state.toml").string() + "\n" + ss.str() + "\nEOF"); + NSys::runAsSuperuser("chmod 644 '" + (PATH / "state.toml").string() + "'"); } SGlobalState DataState::getGlobalState() { ensureStateStoreExists(); - const auto stateFile = getDataStatePath() / "state.toml"; + const auto stateFile = getDataStatePath() / "state.toml"; - if (!std::filesystem::exists(stateFile)) + std::error_code ec; + if (!std::filesystem::exists(stateFile, ec) || ec) return SGlobalState{}; auto DATA = toml::parse_file(stateFile.c_str()); @@ -168,8 +174,6 @@ SGlobalState DataState::getGlobalState() { std::vector DataState::getAllRepositories() { ensureStateStoreExists(); - const auto PATH = getDataStatePath(); - std::vector repos; for (const auto& stateFile : getPluginStates()) { const auto STATE = toml::parse_file(stateFile.c_str()); @@ -205,8 +209,6 @@ std::vector DataState::getAllRepositories() { bool DataState::setPluginEnabled(const std::string& name, bool enabled) { ensureStateStoreExists(); - const auto PATH = getDataStatePath(); - for (const auto& stateFile : getPluginStates()) { const auto STATE = toml::parse_file(stateFile.c_str()); for (const auto& [key, val] : STATE) { @@ -224,9 +226,11 @@ bool DataState::setPluginEnabled(const std::string& name, bool enabled) { auto modifiedState = STATE; (*modifiedState[key].as_table()).insert_or_assign("enabled", enabled); - std::ofstream state(stateFile, std::ios::trunc); - state << modifiedState; - state.close(); + std::stringstream ss; + ss << modifiedState; + + NSys::runAsSuperuser("cat << EOF > " + stateFile.string() + "\n" + ss.str() + "\nEOF"); + NSys::runAsSuperuser("chmod 644 '" + stateFile.string() + "'"); return true; } @@ -234,3 +238,17 @@ bool DataState::setPluginEnabled(const std::string& name, bool enabled) { return false; } + +void DataState::purgeAllCache() { + std::error_code ec; + if (!std::filesystem::exists(getDataStatePath()) && !ec) { + std::println("{}", infoString("Nothing to do")); + return; + } + + const auto PATH = getDataStatePath().string(); + if (PATH.contains('\'')) + return; + // scary! + NSys::runAsSuperuser("rm -r '" + PATH + "'"); +} diff --git a/hyprpm/src/core/DataState.hpp b/hyprpm/src/core/DataState.hpp index ebb550ba..c35ded06 100644 --- a/hyprpm/src/core/DataState.hpp +++ b/hyprpm/src/core/DataState.hpp @@ -18,6 +18,7 @@ namespace DataState { void removePluginRepo(const std::string& urlOrName); bool pluginRepoExists(const std::string& urlOrName); void updateGlobalState(const SGlobalState& state); + void purgeAllCache(); SGlobalState getGlobalState(); bool setPluginEnabled(const std::string& name, bool enabled); std::vector getAllRepositories(); diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index ee7d8e8f..33e565d3 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -5,6 +5,8 @@ #include "Manifest.hpp" #include "DataState.hpp" #include "HyprlandSocket.hpp" +#include "../helpers/Sys.hpp" +#include "../helpers/Die.hpp" #include #include @@ -50,6 +52,13 @@ static std::string getTempRoot() { return STR; } +CPluginManager::CPluginManager() { + if (NSys::isSuperuser()) + Debug::die("Don't run hyprpm as a superuser."); + + m_szUsername = getpwuid(NSys::getUID())->pw_name; +} + SHyprlandVersion CPluginManager::getHyprlandVersion(bool running) { static bool onceRunning = false; static bool onceInstalled = false; @@ -275,6 +284,7 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& if (HEADERSSTATUS != HEADERS_OK) { std::println("\n{}", headerError(HEADERSSTATUS)); + std::println("\n{}", infoString("if the problem persists, try running hyprpm purge-cache.")); return false; } @@ -550,13 +560,20 @@ bool CPluginManager::updateHeaders(bool force) { progress.m_szCurrentMessage = "Installing sources"; progress.print(); - const std::string& cmd = - std::format("sed -i -e \"s#PREFIX = /usr/local#PREFIX = {}#\" {}/Makefile && cd {} && make installheaders", DataState::getHeadersPath(), WORKINGDIR, WORKINGDIR); + std::string cmd = std::format("sed -i -e \"s#PREFIX = /usr/local#PREFIX = {}#\" {}/Makefile", DataState::getHeadersPath(), WORKINGDIR); if (m_bVerbose) - progress.printMessageAbove(verboseString("installation will run: {}", cmd)); + progress.printMessageAbove(verboseString("prepare install will run: {}", cmd)); ret = execAndGet(cmd); + cmd = std::format("cd {} && make installheaders && chmod -R 644 {} && find {} -type d -exec chmod o+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), + DataState::getHeadersPath()); + + if (m_bVerbose) + progress.printMessageAbove(verboseString("install will run as sudo: {}", cmd)); + + ret = NSys::runAsSuperuser(cmd); + if (m_bVerbose) std::println("{}", verboseString("installer returned: {}", ret)); @@ -570,9 +587,14 @@ bool CPluginManager::updateHeaders(bool force) { progress.m_szCurrentMessage = "Done!"; progress.print(); + auto GLOBALSTATE = DataState::getGlobalState(); + GLOBALSTATE.headersHashCompiled = HLVER.hash; + DataState::updateGlobalState(GLOBALSTATE); + std::print("\n"); } else { progress.printMessageAbove(failureString("failed to install headers with error code {} ({})", (int)HEADERSVALID, headerErrorShort(HEADERSVALID))); + progress.printMessageAbove(infoString("if the problem persists, try running hyprpm purge-cache.")); progress.m_iSteps = 5; progress.m_szCurrentMessage = "Failed"; progress.print(); @@ -884,7 +906,8 @@ bool CPluginManager::loadUnloadPlugin(const std::string& path, bool load) { auto HLVER = getHyprlandVersion(true); if (state.headersHashCompiled != HLVER.hash) { - std::println("{}", infoString("Running Hyprland version differs from plugin state, please restart Hyprland.")); + if (load) + std::println("{}", infoString("Running Hyprland version ({}) differs from plugin state ({}), please restart Hyprland.", HLVER.hash, state.headersHashCompiled)); return false; } diff --git a/hyprpm/src/core/PluginManager.hpp b/hyprpm/src/core/PluginManager.hpp index b159b921..7640d7c8 100644 --- a/hyprpm/src/core/PluginManager.hpp +++ b/hyprpm/src/core/PluginManager.hpp @@ -40,6 +40,8 @@ struct SHyprlandVersion { class CPluginManager { public: + CPluginManager(); + bool addNewPluginRepo(const std::string& url, const std::string& rev); bool removePluginRepo(const std::string& urlOrName); @@ -62,7 +64,7 @@ class CPluginManager { bool m_bVerbose = false; bool m_bNoShallow = false; - std::string m_szCustomHlUrl; + std::string m_szCustomHlUrl, m_szUsername; // will delete recursively if exists!! bool createSafeDirectory(const std::string& path); diff --git a/hyprpm/src/helpers/Die.hpp b/hyprpm/src/helpers/Die.hpp new file mode 100644 index 00000000..0c00bcf3 --- /dev/null +++ b/hyprpm/src/helpers/Die.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +// NOLINTNEXTLINE +namespace Debug { + template + void die(std::format_string fmt, Args&&... args) { + const std::string logMsg = std::vformat(fmt.get(), std::make_format_args(args...)); + + std::cout << "\n[ERR] " << logMsg << "\n"; + exit(1); + } +}; \ No newline at end of file diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp new file mode 100644 index 00000000..3c6501ee --- /dev/null +++ b/hyprpm/src/helpers/Sys.cpp @@ -0,0 +1,110 @@ +#include "Sys.hpp" +#include "Die.hpp" +#include "StringUtils.hpp" +#include +#include +#include +#include + +#include +#include +using namespace Hyprutils::OS; +using namespace Hyprutils::String; + +static const std::vector SUPERUSER_BINARIES = { + "sudo", + "doas", + "run0", +}; + +static bool executableExistsInPath(const std::string& exe) { + if (!getenv("PATH")) + return false; + + static CVarList paths(getenv("PATH"), 0, ':', true); + + for (auto& p : paths) { + std::string path = p + std::string{"/"} + exe; + std::error_code ec; + if (!std::filesystem::exists(path, ec) || ec) + continue; + + if (!std::filesystem::is_regular_file(path, ec) || ec) + continue; + + auto stat = std::filesystem::status(path, ec); + if (ec) + continue; + + auto perms = stat.permissions(); + + return std::filesystem::perms::none != (perms & std::filesystem::perms::others_exec); + } + + return false; +} + +static std::pair execAndGet(std::string cmd, bool noRedirect = false) { + if (!noRedirect) + cmd += " 2>&1"; + + CProcess proc("/bin/sh", {"-c", cmd}); + + if (!proc.runSync()) + return {"error", 1}; + + return {proc.stdOut(), proc.exitCode()}; +} + +int NSys::getUID() { + const auto UID = getuid(); + const auto PWUID = getpwuid(UID); + return PWUID ? PWUID->pw_uid : UID; +} + +int NSys::getEUID() { + const auto UID = geteuid(); + const auto PWUID = getpwuid(UID); + return PWUID ? PWUID->pw_uid : UID; +} + +bool NSys::isSuperuser() { + return getuid() != geteuid() || !geteuid(); +} + +std::string NSys::runAsSuperuser(const std::string& cmd) { + for (const auto& SB : SUPERUSER_BINARIES) { + if (!executableExistsInPath(SB)) + continue; + + const auto RESULT = execAndGet(std::string{SB} + " /bin/sh -c \"" + cmd + "\"", true); + + if (RESULT.second != 0) + Debug::die("Failed to run a command as sudo. This could be due to an invalid password, or a hyprpm bug."); + + return RESULT.first; + } + + Debug::die("Failed to find a superuser binary. Supported: sudo, doas, run0."); + return ""; +} + +void NSys::cacheSudo() { + // "caches" the sudo so that the prompt later doesn't pop up in a weird spot + // sudo will not ask us again for a moment + runAsSuperuser("echo e > /dev/null"); +} + +void NSys::dropSudo() { + for (const auto& SB : SUPERUSER_BINARIES) { + if (!executableExistsInPath(SB)) + continue; + + if (SB == std::string_view{"sudo"}) + execAndGet("sudo -k"); + else + std::println("{}", infoString("Don't know how to drop timestamp for {}, ignoring.", SB)); + + return; + } +} diff --git a/hyprpm/src/helpers/Sys.hpp b/hyprpm/src/helpers/Sys.hpp new file mode 100644 index 00000000..2d643d40 --- /dev/null +++ b/hyprpm/src/helpers/Sys.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace NSys { + bool isSuperuser(); + int getUID(); + int getEUID(); + std::string runAsSuperuser(const std::string& cmd); + void cacheSudo(); + void dropSudo(); +}; \ No newline at end of file diff --git a/hyprpm/src/main.cpp b/hyprpm/src/main.cpp index 0d5efd1d..6d0cda40 100644 --- a/hyprpm/src/main.cpp +++ b/hyprpm/src/main.cpp @@ -2,34 +2,37 @@ #include "helpers/StringUtils.hpp" #include "core/PluginManager.hpp" #include "core/DataState.hpp" +#include "helpers/Sys.hpp" #include #include #include #include -#include -#include + +#include +using namespace Hyprutils::Utils; constexpr std::string_view HELP = R"#(┏ hyprpm, a Hyprland Plugin Manager ┃ -┣ add [url] [git rev] → Install a new plugin repository from git. Git revision +┣ add [url] [git rev] → Install a new plugin repository from git. Git revision. ┃ is optional, when set, commit locks are ignored. -┣ remove [url/name] → Remove an installed plugin repository -┣ enable [name] → Enable a plugin -┣ disable [name] → Disable a plugin -┣ update → Check and update all plugins if needed +┣ remove [url/name] → Remove an installed plugin repository. +┣ enable [name] → Enable a plugin. +┣ disable [name] → Disable a plugin. +┣ update → Check and update all plugins if needed. ┣ reload → Reload hyprpm state. Ensure all enabled plugins are loaded. -┣ list → List all installed plugins +┣ list → List all installed plugins. +┣ purge-cache → Remove the entire hyprpm cache, built plugins, hyprpm settings and headers. ┃ ┣ Flags: ┃ -┣ --notify | -n → Send a hyprland notification for important events (including both successes and fail events) -┣ --notify-fail | -nn → Send a hyprland notification for fail events only -┣ --help | -h → Show this menu -┣ --verbose | -v → Enable too much logging -┣ --force | -f → Force an operation ignoring checks (e.g. update -f) -┣ --no-shallow | -s → Disable shallow cloning of Hyprland sources -┣ --hl-url | → Pass a custom hyprland source url +┣ --notify | -n → Send a hyprland notification for important events (including both successes and fail events). +┣ --notify-fail | -nn → Send a hyprland notification for fail events only. +┣ --help | -h → Show this menu. +┣ --verbose | -v → Enable too much logging. +┣ --force | -f → Force an operation ignoring checks (e.g. update -f). +┣ --no-shallow | -s → Disable shallow cloning of Hyprland sources. +┣ --hl-url | → Pass a custom hyprland source url. ┗ )#"; @@ -96,9 +99,11 @@ int main(int argc, char** argv, char** envp) { } std::string rev = ""; - if (command.size() >= 3) { + if (command.size() >= 3) rev = command[2]; - } + + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); return g_pPluginManager->addNewPluginRepo(command[1], rev) ? 0 : 1; } else if (command[0] == "remove") { @@ -107,10 +112,17 @@ int main(int argc, char** argv, char** envp) { return 1; } + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); + return g_pPluginManager->removePluginRepo(command[1]) ? 0 : 1; } else if (command[0] == "update") { - bool headersValid = g_pPluginManager->headersValid() == HEADERS_OK; - bool headers = g_pPluginManager->updateHeaders(force); + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); + + bool headersValid = g_pPluginManager->headersValid() == HEADERS_OK; + bool headers = g_pPluginManager->updateHeaders(force); + if (headers) { const auto HLVER = g_pPluginManager->getHyprlandVersion(false); auto GLOBALSTATE = DataState::getGlobalState(); @@ -141,7 +153,10 @@ int main(int argc, char** argv, char** envp) { return 1; } - auto ret = g_pPluginManager->ensurePluginsLoadState(); + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); + + auto ret = g_pPluginManager->ensurePluginsLoadState(); if (ret == LOADSTATE_HYPRLAND_UPDATED) g_pPluginManager->notify(ICON_INFO, 0, 10000, "[hyprpm] Enabled plugin, but Hyprland was updated. Please restart Hyprland."); @@ -159,7 +174,11 @@ int main(int argc, char** argv, char** envp) { return 1; } - auto ret = g_pPluginManager->ensurePluginsLoadState(); + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); + + auto ret = g_pPluginManager->ensurePluginsLoadState(); + if (ret != LOADSTATE_OK) return 1; } else if (command[0] == "reload") { @@ -181,6 +200,10 @@ int main(int argc, char** argv, char** envp) { } else if (notify && !notifyFail) { g_pPluginManager->notify(ICON_OK, 0, 4000, "[hyprpm] Loaded plugins"); } + } else if (command[0] == "purge-cache") { + NSys::cacheSudo(); + CScopeGuard x([] { NSys::dropSudo(); }); + DataState::purgeAllCache(); } else if (command[0] == "list") { g_pPluginManager->listAllPlugins(); } else { diff --git a/meson.build b/meson.build index 66ef1539..a482cbf2 100644 --- a/meson.build +++ b/meson.build @@ -35,7 +35,7 @@ aquamarine = dependency('aquamarine', version: '>=0.8.0') hyprcursor = dependency('hyprcursor', version: '>=0.1.7') hyprgraphics = dependency('hyprgraphics', version: '>= 0.1.1') hyprlang = dependency('hyprlang', version: '>= 0.3.2') -hyprutils = dependency('hyprutils', version: '>= 0.6.0') +hyprutils = dependency('hyprutils', version: '>= 0.7.0') aquamarine_version_list = aquamarine.version().split('.') add_project_arguments(['-DAQUAMARINE_VERSION="@0@"'.format(aquamarine.version())], language: 'cpp') add_project_arguments(['-DAQUAMARINE_VERSION_MAJOR=@0@'.format(aquamarine_version_list.get(0))], language: 'cpp') From 2670b8f7724e94020f21fe81483e69d73e1337cf Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Thu, 1 May 2025 18:48:13 +0000 Subject: [PATCH 0138/1077] hyprpm: add missing include for libc++ after 858c0e26d193 (#10234) hyprpm/src/core/DataState.cpp:80:23: error: implicit instantiation of undefined template 'std::basic_stringstream' 80 | std::stringstream ss; | ^ hyprpm/src/core/DataState.cpp:149:23: error: implicit instantiation of undefined template 'std::basic_stringstream' 149 | std::stringstream ss; | ^ hyprpm/src/core/DataState.cpp:229:31: error: implicit instantiation of undefined template 'std::basic_stringstream' 229 | std::stringstream ss; | ^ /usr/include/c++/v1/__fwd/sstream.h:30:28: note: template is declared here 30 | class _LIBCPP_TEMPLATE_VIS basic_stringstream; | ^ --- hyprpm/src/core/DataState.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/core/DataState.cpp b/hyprpm/src/core/DataState.cpp index d8a9477e..3e7ae399 100644 --- a/hyprpm/src/core/DataState.cpp +++ b/hyprpm/src/core/DataState.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include "PluginManager.hpp" #include "../helpers/Die.hpp" #include "../helpers/Sys.hpp" From 5b3e489108d8512fb5dfacf07b2aa3a71208e0f0 Mon Sep 17 00:00:00 2001 From: davc0n Date: Thu, 1 May 2025 23:57:11 +0200 Subject: [PATCH 0139/1077] inputs: refactor class member vars (#10230) --- src/Compositor.cpp | 2 +- src/debug/HyprCtl.cpp | 36 +- src/desktop/LayerSurface.cpp | 12 +- src/desktop/Window.cpp | 4 +- src/events/Windows.cpp | 4 +- src/helpers/AsyncDialogBox.cpp | 2 +- src/layout/IHyprLayout.cpp | 42 +-- src/layout/MasterLayout.cpp | 10 +- src/managers/KeybindManager.cpp | 36 +- src/managers/eventLoop/EventLoopManager.cpp | 66 ++-- src/managers/eventLoop/EventLoopManager.hpp | 12 +- src/managers/input/IdleInhibitor.cpp | 10 +- src/managers/input/InputManager.cpp | 350 +++++++++--------- src/managers/input/InputManager.hpp | 85 +++-- src/managers/input/InputMethodPopup.cpp | 48 +-- src/managers/input/InputMethodPopup.hpp | 10 +- src/managers/input/InputMethodRelay.cpp | 62 ++-- src/managers/input/InputMethodRelay.hpp | 10 +- src/managers/input/Swipe.cpp | 172 ++++----- src/managers/input/Tablets.cpp | 16 +- src/managers/input/TextInput.cpp | 194 +++++----- src/managers/input/TextInput.hpp | 10 +- src/managers/input/Touch.cpp | 92 ++--- src/protocols/PointerConstraints.cpp | 8 +- src/render/Renderer.cpp | 8 +- .../decorations/CHyprGroupBarDecoration.cpp | 6 +- src/render/pass/SurfacePassElement.cpp | 4 +- 27 files changed, 655 insertions(+), 656 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 154ec135..eca31e96 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1088,7 +1088,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; } - if (!g_pInputManager->m_dExclusiveLSes.empty()) { + if (!g_pInputManager->m_exclusiveLSes.empty()) { Debug::log(LOG, "Refusing a keyboard focus to a window because of an exclusive ls"); return; } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 2ad182ab..d1b879d0 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -616,7 +616,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "{\n"; result += "\"mice\": [\n"; - for (auto const& m : g_pInputManager->m_vPointers) { + for (auto const& m : g_pInputManager->m_pointers) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -631,7 +631,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\n],\n"; result += "\"keyboards\": [\n"; - for (auto const& k : g_pInputManager->m_vKeyboards) { + for (auto const& k : g_pInputManager->m_keyboards) { const auto KM = k->getActiveLayout(); result += std::format( R"#( {{ @@ -657,7 +657,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\"tablets\": [\n"; - for (auto const& d : g_pInputManager->m_vTabletPads) { + for (auto const& d : g_pInputManager->m_tabletPads) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -670,7 +670,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque (uintptr_t)d.get(), (uintptr_t)d->m_parent.get(), escapeJSONStrings(d->m_parent ? d->m_parent->m_hlName : "")); } - for (auto const& d : g_pInputManager->m_vTablets) { + for (auto const& d : g_pInputManager->m_tablets) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -679,7 +679,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque (uintptr_t)d.get(), escapeJSONStrings(d->m_hlName)); } - for (auto const& d : g_pInputManager->m_vTabletTools) { + for (auto const& d : g_pInputManager->m_tabletTools) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -693,7 +693,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\"touch\": [\n"; - for (auto const& d : g_pInputManager->m_vTouches) { + for (auto const& d : g_pInputManager->m_touches) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -707,7 +707,7 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\"switches\": [\n"; - for (auto const& d : g_pInputManager->m_lSwitches) { + for (auto const& d : g_pInputManager->m_switches) { result += std::format( R"#( {{ "address": "0x{:x}", @@ -724,14 +724,14 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque } else { result += "mice:\n"; - for (auto const& m : g_pInputManager->m_vPointers) { + for (auto const& m : g_pInputManager->m_pointers) { result += std::format("\tMouse at {:x}:\n\t\t{}\n\t\t\tdefault speed: {:.5f}\n", (uintptr_t)m.get(), m->m_hlName, (m->aq() && m->aq()->getLibinputHandle() ? libinput_device_config_accel_get_default_speed(m->aq()->getLibinputHandle()) : 0.f)); } result += "\n\nKeyboards:\n"; - for (auto const& k : g_pInputManager->m_vKeyboards) { + for (auto const& k : g_pInputManager->m_keyboards) { const auto KM = k->getActiveLayout(); result += std::format("\tKeyboard at {:x}:\n\t\t{}\n\t\t\trules: r \"{}\", m \"{}\", l \"{}\", v \"{}\", o \"{}\"\n\t\t\tactive keymap: {}\n\t\t\tcapsLock: " "{}\n\t\t\tnumLock: {}\n\t\t\tmain: {}\n", @@ -742,27 +742,27 @@ static std::string devicesRequest(eHyprCtlOutputFormat format, std::string reque result += "\n\nTablets:\n"; - for (auto const& d : g_pInputManager->m_vTabletPads) { + for (auto const& d : g_pInputManager->m_tabletPads) { result += std::format("\tTablet Pad at {:x} (belongs to {:x} -> {})\n", (uintptr_t)d.get(), (uintptr_t)d->m_parent.get(), d->m_parent ? d->m_parent->m_hlName : ""); } - for (auto const& d : g_pInputManager->m_vTablets) { + for (auto const& d : g_pInputManager->m_tablets) { result += std::format("\tTablet at {:x}:\n\t\t{}\n\t\t\tsize: {}x{}mm\n", (uintptr_t)d.get(), d->m_hlName, d->aq()->physicalSize.x, d->aq()->physicalSize.y); } - for (auto const& d : g_pInputManager->m_vTabletTools) { + for (auto const& d : g_pInputManager->m_tabletTools) { result += std::format("\tTablet Tool at {:x}\n", (uintptr_t)d.get()); } result += "\n\nTouch:\n"; - for (auto const& d : g_pInputManager->m_vTouches) { + for (auto const& d : g_pInputManager->m_touches) { result += std::format("\tTouch Device at {:x}:\n\t\t{}\n", (uintptr_t)d.get(), d->m_hlName); } result += "\n\nSwitches:\n"; - for (auto const& d : g_pInputManager->m_lSwitches) { + for (auto const& d : g_pInputManager->m_switches) { result += std::format("\tSwitch Device at {:x}:\n\t\t{}\n", (uintptr_t)&d, d.pDevice ? d.pDevice->getName() : ""); } } @@ -1286,7 +1286,7 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri }; if (KB == "main" || KB == "active" || KB == "current") { - for (auto const& k : g_pInputManager->m_vKeyboards) { + for (auto const& k : g_pInputManager->m_keyboards) { if (!k->m_active) continue; @@ -1295,17 +1295,17 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri } } else if (KB == "all") { std::string result = ""; - for (auto const& k : g_pInputManager->m_vKeyboards) { + for (auto const& k : g_pInputManager->m_keyboards) { auto res = updateKeyboard(k, CMD); if (res.has_value()) result += *res + "\n"; } return result.empty() ? "ok" : result; } else { - auto k = std::find_if(g_pInputManager->m_vKeyboards.begin(), g_pInputManager->m_vKeyboards.end(), + auto k = std::find_if(g_pInputManager->m_keyboards.begin(), g_pInputManager->m_keyboards.end(), [&](const auto& other) { return other->m_hlName == g_pInputManager->deviceNameToInternalString(KB); }); - if (k == g_pInputManager->m_vKeyboards.end()) + if (k == g_pInputManager->m_keyboards.end()) return "device not found"; pKeyboard = *k; diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 5954a571..21730dff 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -158,7 +158,7 @@ void CLayerSurface::onMap() { const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (ISEXCLUSIVE) - g_pInputManager->m_dExclusiveLSes.push_back(m_self); + g_pInputManager->m_exclusiveLSes.push_back(m_self); const bool GRABSFOCUS = ISEXCLUSIVE || (m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && @@ -173,7 +173,7 @@ void CLayerSurface::onMap() { const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y); g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); - g_pInputManager->m_bEmptyFocusCursorSet = false; + g_pInputManager->m_emptyFocusCursorSet = false; } m_position = Vector2D(m_geometry.x, m_geometry.y); @@ -199,7 +199,7 @@ void CLayerSurface::onUnmap() { g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->layerNamespace}); EMIT_HOOK_EVENT("closeLayer", m_self.lock()); - std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other || other == m_self; }); + std::erase_if(g_pInputManager->m_exclusiveLSes, [this](const auto& other) { return !other || other == m_self; }); if (!m_monitor || g_pCompositor->m_unsafeState) { Debug::log(WARN, "Layersurface unmapping on invalid monitor (removed?) ignoring."); @@ -346,9 +346,9 @@ void CLayerSurface::onCommit() { const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (!WASEXCLUSIVE && ISEXCLUSIVE) - g_pInputManager->m_dExclusiveLSes.push_back(m_self); + g_pInputManager->m_exclusiveLSes.push_back(m_self); else if (WASEXCLUSIVE && !ISEXCLUSIVE) - std::erase_if(g_pInputManager->m_dExclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); + std::erase_if(g_pInputManager->m_exclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); // if the surface was focused and interactive but now isn't, refocus if (WASLASTFOCUS && m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) { @@ -366,7 +366,7 @@ void CLayerSurface::onCommit() { const auto LOCAL = g_pInputManager->getMouseCoordsInternal() - Vector2D(m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y); g_pSeatManager->setPointerFocus(m_surface->resource(), LOCAL); - g_pInputManager->m_bEmptyFocusCursorSet = false; + g_pInputManager->m_emptyFocusCursorSet = false; } } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 53ecf049..c355979b 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -999,7 +999,7 @@ int CWindow::getGroupSize() { bool CWindow::canBeGroupedInto(PHLWINDOW pWindow) { static auto ALLOWGROUPMERGE = CConfigValue("group:merge_groups_on_drag"); bool isGroup = m_groupData.pNextWindow; - bool disallowDragIntoGroup = g_pInputManager->m_bWasDraggingWindow && isGroup && !bool(*ALLOWGROUPMERGE); + bool disallowDragIntoGroup = g_pInputManager->m_wasDraggingWindow && isGroup && !bool(*ALLOWGROUPMERGE); return !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged && ((m_groupRules & GROUP_INVADE && m_firstMap) // window ignore local group locks, or || (!pWindow->getGroupHead()->m_groupData.locked // target unlocked @@ -1549,7 +1549,7 @@ void CWindow::onX11ConfigureRequest(CBox box) { g_pHyprRenderer->damageWindow(m_self.lock()); - if (!m_isFloating || isFullscreen() || g_pInputManager->currentlyDraggedWindow == m_self) { + if (!m_isFloating || isFullscreen() || g_pInputManager->m_currentlyDraggedWindow == m_self) { sendWindowSize(true); g_pInputManager->refocus(); g_pHyprRenderer->damageWindow(m_self.lock()); diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 838839d3..450f213e 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -109,7 +109,7 @@ void Events::listener_mapWindow(void* owner, void* data) { } } - if (g_pInputManager->m_bLastFocusOnLS) // waybar fix + if (g_pInputManager->m_lastFocusOnLS) // waybar fix g_pInputManager->releaseAllMouseButtons(); // checks if the window wants borders and sets the appropriate flag @@ -770,7 +770,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pInputManager->releaseAllMouseButtons(); } - if (PWINDOW == g_pInputManager->currentlyDraggedWindow.lock()) + if (PWINDOW == g_pInputManager->m_currentlyDraggedWindow.lock()) g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); // remove the fullscreen window status from workspace if we closed it diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index da625fea..42dac469 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -96,7 +96,7 @@ SP> CAsyncDialogBox::open() { proc.setStdoutFD(outPipe[1]); - m_readEventSource = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, m_pipeReadFd.get(), WL_EVENT_READABLE, ::onFdWrite, this); + m_readEventSource = wl_event_loop_add_fd(g_pEventLoopManager->m_wayland.loop, m_pipeReadFd.get(), WL_EVENT_READABLE, ::onFdWrite, this); if (!m_readEventSource) { Debug::log(ERR, "CAsyncDialogBox::open: failed to add read fd to loop"); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 51ea5883..3b0821d7 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -229,7 +229,7 @@ bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) { } void IHyprLayout::onBeginDragWindow() { - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->m_currentlyDraggedWindow.lock(); static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); m_mouseMoveEventCount = 1; @@ -244,7 +244,7 @@ void IHyprLayout::onBeginDragWindow() { // Try to pick up dragged window now if drag_threshold is disabled // or at least update dragging related variables for the cursors - g_pInputManager->m_bDragThresholdReached = *PDRAGTHRESHOLD <= 0; + g_pInputManager->m_dragThresholdReached = *PDRAGTHRESHOLD <= 0; if (updateDragWindow()) return; @@ -287,7 +287,7 @@ void IHyprLayout::onBeginDragWindow() { } } - if (g_pInputManager->dragMode != MBIND_RESIZE && g_pInputManager->dragMode != MBIND_RESIZE_FORCE_RATIO && g_pInputManager->dragMode != MBIND_RESIZE_BLOCK_RATIO) + if (g_pInputManager->m_dragMode != MBIND_RESIZE && g_pInputManager->m_dragMode != MBIND_RESIZE_FORCE_RATIO && g_pInputManager->m_dragMode != MBIND_RESIZE_BLOCK_RATIO) g_pInputManager->setCursorImageUntilUnset("grabbing"); g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); @@ -299,23 +299,23 @@ void IHyprLayout::onBeginDragWindow() { } void IHyprLayout::onEndDragWindow() { - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->m_currentlyDraggedWindow.lock(); m_mouseMoveEventCount = 1; if (!validMapped(DRAGGINGWINDOW)) { if (DRAGGINGWINDOW) { g_pInputManager->unsetCursorImage(); - g_pInputManager->currentlyDraggedWindow.reset(); + g_pInputManager->m_currentlyDraggedWindow.reset(); } return; } g_pInputManager->unsetCursorImage(); - g_pInputManager->currentlyDraggedWindow.reset(); - g_pInputManager->m_bWasDraggingWindow = true; + g_pInputManager->m_currentlyDraggedWindow.reset(); + g_pInputManager->m_wasDraggingWindow = true; - if (g_pInputManager->dragMode == MBIND_MOVE) { + if (g_pInputManager->m_dragMode == MBIND_MOVE) { g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); PHLWINDOW pWindow = g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING, DRAGGINGWINDOW); @@ -365,7 +365,7 @@ void IHyprLayout::onEndDragWindow() { g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); g_pCompositor->focusWindow(DRAGGINGWINDOW); - g_pInputManager->m_bWasDraggingWindow = false; + g_pInputManager->m_wasDraggingWindow = false; } static inline bool canSnap(const double SIDEA, const double SIDEB, const double GAP) { @@ -518,10 +518,10 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA } void IHyprLayout::onMouseMove(const Vector2D& mousePos) { - if (g_pInputManager->currentlyDraggedWindow.expired()) + if (g_pInputManager->m_currentlyDraggedWindow.expired()) return; - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->m_currentlyDraggedWindow.lock(); static auto PDRAGTHRESHOLD = CConfigValue("binds:drag_threshold"); // Window invalid or drag begin size 0,0 meaning we rejected it. @@ -531,10 +531,10 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { } // Yoink dragged window here instead if using drag_threshold and it has been reached - if (*PDRAGTHRESHOLD > 0 && !g_pInputManager->m_bDragThresholdReached) { + if (*PDRAGTHRESHOLD > 0 && !g_pInputManager->m_dragThresholdReached) { if ((m_beginDragXY.distanceSq(mousePos) <= std::pow(*PDRAGTHRESHOLD, 2) && m_beginDragXY == m_lastDragXY)) return; - g_pInputManager->m_bDragThresholdReached = true; + g_pInputManager->m_dragThresholdReached = true; if (updateDragWindow()) return; } @@ -570,7 +570,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { canSkipUpdate = std::clamp(MSMONITOR - TIMERDELTA, 0.0, MSMONITOR) > totalMs * 1.0 / m_mouseMoveEventCount; } - if ((abs(TICKDELTA.x) < 1.f && abs(TICKDELTA.y) < 1.f) || (TIMERDELTA < MSMONITOR && canSkipUpdate && (g_pInputManager->dragMode != MBIND_MOVE || *PANIMATEMOUSE))) + if ((abs(TICKDELTA.x) < 1.f && abs(TICKDELTA.y) < 1.f) || (TIMERDELTA < MSMONITOR && canSkipUpdate && (g_pInputManager->m_dragMode != MBIND_MOVE || *PANIMATEMOUSE))) return; TIMER = std::chrono::high_resolution_clock::now(); @@ -579,7 +579,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { g_pHyprRenderer->damageWindow(DRAGGINGWINDOW); - if (g_pInputManager->dragMode == MBIND_MOVE) { + if (g_pInputManager->m_dragMode == MBIND_MOVE) { Vector2D newPos = m_beginDragPositionXY + DELTA; Vector2D newSize = DRAGGINGWINDOW->m_realSize->goal(); @@ -599,7 +599,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { DRAGGINGWINDOW->m_position = wb.pos(); - } else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) { + } else if (g_pInputManager->m_dragMode == MBIND_RESIZE || g_pInputManager->m_dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->m_dragMode == MBIND_RESIZE_BLOCK_RATIO) { if (DRAGGINGWINDOW->m_isFloating) { Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_windowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); @@ -621,7 +621,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { else if (m_grabbedCorner == CORNER_BOTTOMLEFT) newSize = newSize + Vector2D(-DELTA.x, DELTA.y); - eMouseBindMode mode = g_pInputManager->dragMode; + eMouseBindMode mode = g_pInputManager->m_dragMode; if (DRAGGINGWINDOW->m_windowData.keepAspectRatio.valueOrDefault() && mode != MBIND_RESIZE_BLOCK_RATIO) mode = MBIND_RESIZE_FORCE_RATIO; @@ -942,10 +942,10 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { } bool IHyprLayout::updateDragWindow() { - const auto DRAGGINGWINDOW = g_pInputManager->currentlyDraggedWindow.lock(); + const auto DRAGGINGWINDOW = g_pInputManager->m_currentlyDraggedWindow.lock(); const bool WAS_FULLSCREEN = DRAGGINGWINDOW->isFullscreen(); - if (g_pInputManager->m_bDragThresholdReached) { + if (g_pInputManager->m_dragThresholdReached) { if (WAS_FULLSCREEN) { Debug::log(LOG, "Dragging a fullscreen window"); g_pCompositor->setWindowFullscreenInternal(DRAGGINGWINDOW, FSMODE_NONE); @@ -966,11 +966,11 @@ bool IHyprLayout::updateDragWindow() { if (WAS_FULLSCREEN && DRAGGINGWINDOW->m_isFloating) { const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); *DRAGGINGWINDOW->m_realPosition = MOUSECOORDS - DRAGGINGWINDOW->m_realSize->goal() / 2.f; - } else if (!DRAGGINGWINDOW->m_isFloating && g_pInputManager->dragMode == MBIND_MOVE) { + } else if (!DRAGGINGWINDOW->m_isFloating && g_pInputManager->m_dragMode == MBIND_MOVE) { Vector2D MINSIZE = DRAGGINGWINDOW->requestedMinSize().clamp(DRAGGINGWINDOW->m_windowData.minSize.valueOr(Vector2D(MIN_WINDOW_SIZE, MIN_WINDOW_SIZE))); DRAGGINGWINDOW->m_lastFloatingSize = (DRAGGINGWINDOW->m_realSize->goal() * 0.8489).clamp(MINSIZE, Vector2D{}).floor(); *DRAGGINGWINDOW->m_realPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_realSize->goal() / 2.f; - if (g_pInputManager->m_bDragThresholdReached) { + if (g_pInputManager->m_dragThresholdReached) { changeWindowFloatingMode(DRAGGINGWINDOW); DRAGGINGWINDOW->m_isFloating = true; DRAGGINGWINDOW->m_draggingTiled = true; diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index d2aa7568..ef59674c 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -121,7 +121,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire bool forceDropAsMaster = false; // if dragging window to move, drop it at the cursor position instead of bottom/top of stack - if (*PDROPATCURSOR && g_pInputManager->dragMode == MBIND_MOVE) { + if (*PDROPATCURSOR && g_pInputManager->m_dragMode == MBIND_MOVE) { if (WINDOWSONWORKSPACE > 2) { for (auto it = m_masterNodesData.begin(); it != m_masterNodesData.end(); ++it) { if (it->workspaceID != pWindow->workspaceID()) @@ -177,11 +177,11 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire } } - if ((BNEWISMASTER && g_pInputManager->dragMode != MBIND_MOVE) // + if ((BNEWISMASTER && g_pInputManager->m_dragMode != MBIND_MOVE) // || WINDOWSONWORKSPACE == 1 // || (WINDOWSONWORKSPACE > 2 && !pWindow->m_firstMap && OPENINGON->isMaster) // || forceDropAsMaster // - || (*PNEWSTATUS == "inherit" && OPENINGON && OPENINGON->isMaster && g_pInputManager->dragMode != MBIND_MOVE)) { + || (*PNEWSTATUS == "inherit" && OPENINGON && OPENINGON->isMaster && g_pInputManager->m_dragMode != MBIND_MOVE)) { if (BNEWBEFOREACTIVE) { for (auto& nd : m_masterNodesData | std::views::reverse) { @@ -1065,9 +1065,9 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri g_pCompositor->warpCursorTo(PWINDOWTOCHANGETO->middle()); } - g_pInputManager->m_pForcedFocus = PWINDOWTOCHANGETO; + g_pInputManager->m_forcedFocus = PWINDOWTOCHANGETO; g_pInputManager->simulateMouseMovement(); - g_pInputManager->m_pForcedFocus.reset(); + g_pInputManager->m_forcedFocus.reset(); }; CVarList vars(message, 0, ' '); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 1bd7e1a2..98c0360b 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -313,10 +313,10 @@ void CKeybindManager::updateXKBTranslationState() { } bool CKeybindManager::ensureMouseBindState() { - if (!g_pInputManager->currentlyDraggedWindow) + if (!g_pInputManager->m_currentlyDraggedWindow) return false; - if (!g_pInputManager->currentlyDraggedWindow.expired()) { + if (!g_pInputManager->m_currentlyDraggedWindow.expired()) { changeMouseBindMode(MBIND_INVALID); return true; } @@ -364,9 +364,9 @@ bool CKeybindManager::tryMoveFocusToMonitor(PHLMONITOR monitor) { PNEWWINDOW->warpCursor(); if (*PNOWARPS == 0 || *PFOLLOWMOUSE < 2) { - g_pInputManager->m_pForcedFocus = PNEWWINDOW; + g_pInputManager->m_forcedFocus = PNEWWINDOW; g_pInputManager->simulateMouseMovement(); - g_pInputManager->m_pForcedFocus.reset(); + g_pInputManager->m_forcedFocus.reset(); } } else { g_pCompositor->focusWindow(nullptr); @@ -411,9 +411,9 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF // Move mouse focus to the new window if required by current follow_mouse and warp modes if (*PNOWARPS == 0 || *PFOLLOWMOUSE < 2) { - g_pInputManager->m_pForcedFocus = PWINDOWTOCHANGETO; + g_pInputManager->m_forcedFocus = PWINDOWTOCHANGETO; g_pInputManager->simulateMouseMovement(); - g_pInputManager->m_pForcedFocus.reset(); + g_pInputManager->m_forcedFocus.reset(); } if (PLASTWINDOW && PLASTWINDOW->m_monitor != PWINDOWTOCHANGETO->m_monitor) { @@ -755,9 +755,9 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP // Require mouse to stay inside drag_threshold for clicks, outside for drags // Check if either a mouse bind has triggered or currently over the threshold (maybe there is no mouse bind on the same key) const auto THRESHOLDREACHED = key.mousePosAtPress.distanceSq(g_pInputManager->getMouseCoordsInternal()) > std::pow(*PDRAGTHRESHOLD, 2); - if (k->click && (g_pInputManager->m_bDragThresholdReached || THRESHOLDREACHED)) + if (k->click && (g_pInputManager->m_dragThresholdReached || THRESHOLDREACHED)) continue; - else if (k->drag && !g_pInputManager->m_bDragThresholdReached && !THRESHOLDREACHED) + else if (k->drag && !g_pInputManager->m_dragThresholdReached && !THRESHOLDREACHED) continue; } @@ -811,7 +811,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP found = true; } - g_pInputManager->m_bDragThresholdReached = false; + g_pInputManager->m_dragThresholdReached = false; // if keybind wasn't found (or dispatcher said to) then pass event res.passEvent |= !found; @@ -1143,7 +1143,7 @@ static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional< return {}; // remove drag status - if (!g_pInputManager->currentlyDraggedWindow.expired()) + if (!g_pInputManager->m_currentlyDraggedWindow.expired()) g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); if (PWINDOW->m_groupData.pNextWindow.lock() && PWINDOW->m_groupData.pNextWindow.lock() != PWINDOW) { @@ -1279,7 +1279,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { } g_pInputManager->unconstrainMouse(); - g_pInputManager->m_bEmptyFocusCursorSet = false; + g_pInputManager->m_emptyFocusCursorSet = false; auto pWorkspaceToChangeTo = g_pCompositor->getWorkspaceByID(BISWORKSPACECURRENT ? PPREVWS.id : workspaceToChangeTo); if (!pWorkspaceToChangeTo) @@ -1325,7 +1325,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { g_pCompositor->warpCursorTo(middle); } - if (!g_pInputManager->m_bLastFocusOnLS) { + if (!g_pInputManager->m_lastFocusOnLS) { if (g_pCompositor->m_lastFocus) g_pInputManager->sendMotionEventsToFocused(); else @@ -2812,7 +2812,7 @@ SDispatchResult CKeybindManager::mouse(std::string args) { SDispatchResult CKeybindManager::changeMouseBindMode(const eMouseBindMode MODE) { if (MODE != MBIND_INVALID) { - if (!g_pInputManager->currentlyDraggedWindow.expired() || g_pInputManager->dragMode != MBIND_INVALID) + if (!g_pInputManager->m_currentlyDraggedWindow.expired() || g_pInputManager->m_dragMode != MBIND_INVALID) return {}; const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); @@ -2824,18 +2824,18 @@ SDispatchResult CKeybindManager::changeMouseBindMode(const eMouseBindMode MODE) if (!PWINDOW->isFullscreen() && MODE == MBIND_MOVE) PWINDOW->checkInputOnDecos(INPUT_TYPE_DRAG_START, MOUSECOORDS); - if (g_pInputManager->currentlyDraggedWindow.expired()) - g_pInputManager->currentlyDraggedWindow = PWINDOW; + if (g_pInputManager->m_currentlyDraggedWindow.expired()) + g_pInputManager->m_currentlyDraggedWindow = PWINDOW; - g_pInputManager->dragMode = MODE; + g_pInputManager->m_dragMode = MODE; g_pLayoutManager->getCurrentLayout()->onBeginDragWindow(); } else { - if (g_pInputManager->currentlyDraggedWindow.expired() || g_pInputManager->dragMode == MBIND_INVALID) + if (g_pInputManager->m_currentlyDraggedWindow.expired() || g_pInputManager->m_dragMode == MBIND_INVALID) return {}; g_pLayoutManager->getCurrentLayout()->onEndDragWindow(); - g_pInputManager->dragMode = MODE; + g_pInputManager->m_dragMode = MODE; } return {}; diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index 14ff75f5..338b75e3 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -16,25 +16,25 @@ using namespace Hyprutils::OS; #define TIMESPEC_NSEC_PER_SEC 1000000000L CEventLoopManager::CEventLoopManager(wl_display* display, wl_event_loop* wlEventLoop) { - m_sTimers.timerfd = CFileDescriptor{timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC)}; - m_sWayland.loop = wlEventLoop; - m_sWayland.display = display; + m_timers.timerfd = CFileDescriptor{timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC)}; + m_wayland.loop = wlEventLoop; + m_wayland.display = display; } CEventLoopManager::~CEventLoopManager() { - for (auto const& [_, eventSourceData] : aqEventSources) { + for (auto const& [_, eventSourceData] : m_aqEventSources) { wl_event_source_remove(eventSourceData.eventSource); } - for (auto const& w : m_vReadableWaiters) { + for (auto const& w : m_readableWaiters) { if (w->source != nullptr) wl_event_source_remove(w->source); } - if (m_sWayland.eventSource) - wl_event_source_remove(m_sWayland.eventSource); - if (m_sIdle.eventSource) - wl_event_source_remove(m_sIdle.eventSource); + if (m_wayland.eventSource) + wl_event_source_remove(m_wayland.eventSource); + if (m_idle.eventSource) + wl_event_source_remove(m_idle.eventSource); if (m_configWatcherInotifySource) wl_event_source_remove(m_configWatcherInotifySource); } @@ -68,7 +68,7 @@ static int handleWaiterFD(int fd, uint32_t mask, void* data) { } void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) { - auto it = std::ranges::find_if(m_vReadableWaiters, [waiter](const UP& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; }); + auto it = std::ranges::find_if(m_readableWaiters, [waiter](const UP& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; }); if (waiter->source) { wl_event_source_remove(waiter->source); @@ -78,30 +78,30 @@ void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) { if (waiter->fn) waiter->fn(); - if (it != m_vReadableWaiters.end()) - m_vReadableWaiters.erase(it); + if (it != m_readableWaiters.end()) + m_readableWaiters.erase(it); } void CEventLoopManager::enterLoop() { - m_sWayland.eventSource = wl_event_loop_add_fd(m_sWayland.loop, m_sTimers.timerfd.get(), WL_EVENT_READABLE, timerWrite, nullptr); + m_wayland.eventSource = wl_event_loop_add_fd(m_wayland.loop, m_timers.timerfd.get(), WL_EVENT_READABLE, timerWrite, nullptr); if (const auto& FD = g_pConfigWatcher->getInotifyFD(); FD.isValid()) - m_configWatcherInotifySource = wl_event_loop_add_fd(m_sWayland.loop, FD.get(), WL_EVENT_READABLE, configWatcherWrite, nullptr); + m_configWatcherInotifySource = wl_event_loop_add_fd(m_wayland.loop, FD.get(), WL_EVENT_READABLE, configWatcherWrite, nullptr); syncPollFDs(); - m_sListeners.pollFDsChanged = g_pCompositor->m_aqBackend->events.pollFDsChanged.registerListener([this](std::any d) { syncPollFDs(); }); + m_listeners.pollFDsChanged = g_pCompositor->m_aqBackend->events.pollFDsChanged.registerListener([this](std::any d) { syncPollFDs(); }); // if we have a session, dispatch it to get the pending input devices if (g_pCompositor->m_aqBackend->hasSession()) g_pCompositor->m_aqBackend->session->dispatchPendingEventsAsync(); - wl_display_run(m_sWayland.display); + wl_display_run(m_wayland.display); Debug::log(LOG, "Kicked off the event loop! :("); } void CEventLoopManager::onTimerFire() { - for (auto const& t : m_sTimers.timers) { + for (auto const& t : m_timers.timers) { if (t.strongRef() > 1 /* if it's 1, it was lost. Don't call it. */ && t->passed() && !t->cancelled()) t->call(t); } @@ -110,12 +110,12 @@ void CEventLoopManager::onTimerFire() { } void CEventLoopManager::addTimer(SP timer) { - m_sTimers.timers.push_back(timer); + m_timers.timers.push_back(timer); nudgeTimers(); } void CEventLoopManager::removeTimer(SP timer) { - std::erase_if(m_sTimers.timers, [timer](const auto& t) { return timer == t; }); + std::erase_if(m_timers.timers, [timer](const auto& t) { return timer == t; }); nudgeTimers(); } @@ -134,11 +134,11 @@ static void timespecAddNs(timespec* pTimespec, int64_t delta) { void CEventLoopManager::nudgeTimers() { // remove timers that have gone missing - std::erase_if(m_sTimers.timers, [](const auto& t) { return t.strongRef() <= 1; }); + std::erase_if(m_timers.timers, [](const auto& t) { return t.strongRef() <= 1; }); long nextTimerUs = 10L * 1000 * 1000; // 10s - for (auto const& t : m_sTimers.timers) { + for (auto const& t : m_timers.timers) { if (auto const& µs = t->leftUs(); µs < nextTimerUs) nextTimerUs = µs; } @@ -151,17 +151,17 @@ void CEventLoopManager::nudgeTimers() { itimerspec ts = {.it_value = now}; - timerfd_settime(m_sTimers.timerfd.get(), TFD_TIMER_ABSTIME, &ts, nullptr); + timerfd_settime(m_timers.timerfd.get(), TFD_TIMER_ABSTIME, &ts, nullptr); } void CEventLoopManager::doLater(const std::function& fn) { - m_sIdle.fns.emplace_back(fn); + m_idle.fns.emplace_back(fn); - if (m_sIdle.eventSource) + if (m_idle.eventSource) return; - m_sIdle.eventSource = wl_event_loop_add_idle( - m_sWayland.loop, + m_idle.eventSource = wl_event_loop_add_idle( + m_wayland.loop, [](void* data) { auto IDLE = (CEventLoopManager::SIdleData*)data; auto cpy = IDLE->fns; @@ -172,7 +172,7 @@ void CEventLoopManager::doLater(const std::function& fn) { c(); } }, - &m_sIdle); + &m_idle); } void CEventLoopManager::doOnReadable(CFileDescriptor fd, const std::function& fn) { @@ -181,14 +181,14 @@ void CEventLoopManager::doOnReadable(CFileDescriptor fd, const std::function(nullptr, std::move(fd), fn)); - waiter->source = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, waiter->fd.get(), WL_EVENT_READABLE, ::handleWaiterFD, waiter.get()); + auto& waiter = m_readableWaiters.emplace_back(makeUnique(nullptr, std::move(fd), fn)); + waiter->source = wl_event_loop_add_fd(g_pEventLoopManager->m_wayland.loop, waiter->fd.get(), WL_EVENT_READABLE, ::handleWaiterFD, waiter.get()); } void CEventLoopManager::syncPollFDs() { auto aqPollFDs = g_pCompositor->m_aqBackend->getPollFDs(); - std::erase_if(aqEventSources, [&](const auto& item) { + std::erase_if(m_aqEventSources, [&](const auto& item) { auto const& [fd, eventSourceData] = item; // If no pollFD has the same fd, remove this event source @@ -200,8 +200,8 @@ void CEventLoopManager::syncPollFDs() { return shouldRemove; }); - for (auto& fd : aqPollFDs | std::views::filter([&](SP fd) { return !aqEventSources.contains(fd->fd); })) { - auto eventSource = wl_event_loop_add_fd(m_sWayland.loop, fd->fd, WL_EVENT_READABLE, aquamarineFDWrite, fd.get()); - aqEventSources[fd->fd] = {.pollFD = fd, .eventSource = eventSource}; + for (auto& fd : aqPollFDs | std::views::filter([&](SP fd) { return !m_aqEventSources.contains(fd->fd); })) { + auto eventSource = wl_event_loop_add_fd(m_wayland.loop, fd->fd, WL_EVENT_READABLE, aquamarineFDWrite, fd.get()); + m_aqEventSources[fd->fd] = {.pollFD = fd, .eventSource = eventSource}; } } diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index 8a0e0439..a3c755a7 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -62,20 +62,20 @@ class CEventLoopManager { wl_event_loop* loop = nullptr; wl_display* display = nullptr; wl_event_source* eventSource = nullptr; - } m_sWayland; + } m_wayland; struct { std::vector> timers; Hyprutils::OS::CFileDescriptor timerfd; - } m_sTimers; + } m_timers; - SIdleData m_sIdle; - std::map aqEventSources; - std::vector> m_vReadableWaiters; + SIdleData m_idle; + std::map m_aqEventSources; + std::vector> m_readableWaiters; struct { CHyprSignalListener pollFDsChanged; - } m_sListeners; + } m_listeners; wl_event_source* m_configWatcherInotifySource = nullptr; diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index 2ca0f4d6..e3712ce7 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -5,13 +5,13 @@ #include "../../protocols/core/Compositor.hpp" void CInputManager::newIdleInhibitor(std::any inhibitor) { - const auto PINHIBIT = m_vIdleInhibitors.emplace_back(makeUnique()).get(); + const auto PINHIBIT = m_idleInhibitors.emplace_back(makeUnique()).get(); PINHIBIT->inhibitor = std::any_cast>(inhibitor); Debug::log(LOG, "New idle inhibitor registered for surface {:x}", (uintptr_t)PINHIBIT->inhibitor->surface.get()); PINHIBIT->inhibitor->listeners.destroy = PINHIBIT->inhibitor->resource->events.destroy.registerListener([this, PINHIBIT](std::any data) { - std::erase_if(m_vIdleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); + std::erase_if(m_idleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); recheckIdleInhibitorStatus(); }); @@ -25,14 +25,14 @@ void CInputManager::newIdleInhibitor(std::any inhibitor) { } PINHIBIT->surfaceDestroyListener = WLSurface->m_events.destroy.registerListener( - [this, PINHIBIT](std::any data) { std::erase_if(m_vIdleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); }); + [this, PINHIBIT](std::any data) { std::erase_if(m_idleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); }); recheckIdleInhibitorStatus(); } void CInputManager::recheckIdleInhibitorStatus() { - for (auto const& ii : m_vIdleInhibitors) { + for (auto const& ii : m_idleInhibitors) { if (ii->nonDesktop) { PROTO::idle->setInhibit(true); return; @@ -73,7 +73,7 @@ bool CInputManager::isWindowInhibiting(const PHLWINDOW& w, bool onlyHl) { if (onlyHl) return false; - for (auto const& ii : m_vIdleInhibitors) { + for (auto const& ii : m_idleInhibitors) { if (ii->nonDesktop || !ii->inhibitor) continue; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index e1856f1d..804eb173 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -42,7 +42,7 @@ #include CInputManager::CInputManager() { - m_sListeners.setCursorShape = PROTO::cursorShape->events.setShape.registerListener([this](std::any data) { + m_listeners.setCursorShape = PROTO::cursorShape->events.setShape.registerListener([this](std::any data) { if (!cursorImageUnlocked()) return; @@ -56,39 +56,39 @@ CInputManager::CInputManager() { Debug::log(LOG, "cursorImage request: shape {} -> {}", (uint32_t)event.shape, event.shapeName); - m_sCursorSurfaceInfo.wlSurface->unassign(); - m_sCursorSurfaceInfo.vHotspot = {}; - m_sCursorSurfaceInfo.name = event.shapeName; - m_sCursorSurfaceInfo.hidden = false; + m_cursorSurfaceInfo.wlSurface->unassign(); + m_cursorSurfaceInfo.vHotspot = {}; + m_cursorSurfaceInfo.name = event.shapeName; + m_cursorSurfaceInfo.hidden = false; - m_sCursorSurfaceInfo.inUse = true; - g_pHyprRenderer->setCursorFromName(m_sCursorSurfaceInfo.name); + m_cursorSurfaceInfo.inUse = true; + g_pHyprRenderer->setCursorFromName(m_cursorSurfaceInfo.name); }); - m_sListeners.newIdleInhibitor = PROTO::idleInhibit->events.newIdleInhibitor.registerListener([this](std::any data) { this->newIdleInhibitor(data); }); - m_sListeners.newVirtualKeyboard = PROTO::virtualKeyboard->events.newKeyboard.registerListener([this](std::any data) { + m_listeners.newIdleInhibitor = PROTO::idleInhibit->events.newIdleInhibitor.registerListener([this](std::any data) { this->newIdleInhibitor(data); }); + m_listeners.newVirtualKeyboard = PROTO::virtualKeyboard->events.newKeyboard.registerListener([this](std::any data) { this->newVirtualKeyboard(std::any_cast>(data)); updateCapabilities(); }); - m_sListeners.newVirtualMouse = PROTO::virtualPointer->events.newPointer.registerListener([this](std::any data) { + m_listeners.newVirtualMouse = PROTO::virtualPointer->events.newPointer.registerListener([this](std::any data) { this->newVirtualMouse(std::any_cast>(data)); updateCapabilities(); }); - m_sListeners.setCursor = g_pSeatManager->events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); }); + m_listeners.setCursor = g_pSeatManager->events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); }); - m_sCursorSurfaceInfo.wlSurface = CWLSurface::create(); + m_cursorSurfaceInfo.wlSurface = CWLSurface::create(); } CInputManager::~CInputManager() { - m_vConstraints.clear(); - m_vKeyboards.clear(); - m_vPointers.clear(); - m_vTouches.clear(); - m_vTablets.clear(); - m_vTabletTools.clear(); - m_vTabletPads.clear(); - m_vIdleInhibitors.clear(); - m_lSwitches.clear(); + m_constraints.clear(); + m_keyboards.clear(); + m_pointers.clear(); + m_touches.clear(); + m_tablets.clear(); + m_tabletTools.clear(); + m_tabletPads.clear(); + m_idleInhibitors.clear(); + m_switches.clear(); } void CInputManager::onMouseMoved(IPointer::SMotionEvent e) { @@ -126,12 +126,12 @@ void CInputManager::onMouseMoved(IPointer::SMotionEvent e) { mouseMoveUnified(e.timeMs, false, e.mouse); - m_tmrLastCursorMovement.reset(); + m_lastCursorMovement.reset(); - m_bLastInputTouch = false; + m_lastInputTouch = false; if (e.mouse) - m_vLastMousePos = getMouseCoordsInternal(); + m_lastMousePos = getMouseCoordsInternal(); } void CInputManager::onMouseWarp(IPointer::SMotionAbsoluteEvent e) { @@ -139,13 +139,13 @@ void CInputManager::onMouseWarp(IPointer::SMotionAbsoluteEvent e) { mouseMoveUnified(e.timeMs); - m_tmrLastCursorMovement.reset(); + m_lastCursorMovement.reset(); - m_bLastInputTouch = false; + m_lastInputTouch = false; } void CInputManager::simulateMouseMovement() { - m_vLastCursorPosFloored = m_vLastCursorPosFloored - Vector2D(1, 1); // hack: force the mouseMoveUnified to report without making this a refocus. + m_lastCursorPosFloored = m_lastCursorPosFloored - Vector2D(1, 1); // hack: force the mouseMoveUnified to report without making this a refocus. mouseMoveUnified(Time::millis(Time::steadyNow())); } @@ -159,13 +159,13 @@ void CInputManager::sendMotionEventsToFocused() { const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_realPosition->goal() : (PLS ? Vector2D{PLS->m_geometry.x, PLS->m_geometry.y} : Vector2D{})); - m_bEmptyFocusCursorSet = false; + m_emptyFocusCursorSet = false; g_pSeatManager->setPointerFocus(g_pCompositor->m_lastFocus.lock(), LOCAL); } void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { - m_bLastInputMouse = mouse; + m_lastInputMouse = mouse; if (!g_pCompositor->m_readyToProcess || g_pCompositor->m_isShuttingDown || g_pCompositor->m_unsafeState) return; @@ -173,7 +173,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Vector2D const mouseCoords = getMouseCoordsInternal(); auto const MOUSECOORDSFLOORED = mouseCoords.floor(); - if (MOUSECOORDSFLOORED == m_vLastCursorPosFloored && !refocus) + if (MOUSECOORDSFLOORED == m_lastCursorPosFloored && !refocus) return; static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); @@ -188,14 +188,14 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { const auto FOLLOWMOUSE = *PFOLLOWONDND && PROTO::data->dndActive() ? 1 : *PFOLLOWMOUSE; - if (FOLLOWMOUSE == 1 && m_tmrLastCursorMovement.getSeconds() < 0.5) - m_fMousePosDelta += MOUSECOORDSFLOORED.distance(m_vLastCursorPosFloored); + if (FOLLOWMOUSE == 1 && m_lastCursorMovement.getSeconds() < 0.5) + m_mousePosDelta += MOUSECOORDSFLOORED.distance(m_lastCursorPosFloored); else - m_fMousePosDelta = 0; + m_mousePosDelta = 0; - m_pFoundSurfaceToFocus.reset(); - m_pFoundLSToFocus.reset(); - m_pFoundWindowToFocus.reset(); + m_foundSurfaceToFocus.reset(); + m_foundLSToFocus.reset(); + m_foundWindowToFocus.reset(); SP foundSurface; Vector2D surfaceCoords; Vector2D surfacePos = Vector2D(-1337, -1337); @@ -204,7 +204,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { EMIT_HOOK_EVENT_CANCELLABLE("mouseMove", MOUSECOORDSFLOORED); - m_vLastCursorPosFloored = MOUSECOORDSFLOORED; + m_lastCursorPosFloored = MOUSECOORDSFLOORED; const auto PMONITOR = isLocked() && g_pCompositor->m_lastMonitor ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromCursor(); @@ -246,7 +246,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Debug::log(ERR, "BUG THIS: Null SURF/CONSTRAINT in mouse refocus. Ignoring constraints. {:x} {:x}", (uintptr_t)SURF.get(), (uintptr_t)CONSTRAINT.get()); } - if (PMONITOR != g_pCompositor->m_lastMonitor && (*PMOUSEFOCUSMON || refocus) && m_pForcedFocus.expired()) + if (PMONITOR != g_pCompositor->m_lastMonitor && (*PMOUSEFOCUSMON || refocus) && m_forcedFocus.expired()) g_pCompositor->setActiveMonitor(PMONITOR); if (g_pSessionLockManager->isSessionLocked()) { @@ -276,7 +276,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { return; } - PHLWINDOW forcedFocus = m_pForcedFocus.lock(); + PHLWINDOW forcedFocus = m_forcedFocus.lock(); if (!forcedFocus) forcedFocus = g_pCompositor->getForceFocus(); @@ -289,17 +289,17 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // if we are holding a pointer button, // and we're not dnd-ing, don't refocus. Keep focus on last surface. - if (!PROTO::data->dndActive() && !m_lCurrentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->state.pointerFocus && - !m_bHardInput) { + if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->state.pointerFocus && + !m_hardInput) { foundSurface = g_pSeatManager->state.pointerFocus.lock(); // IME popups aren't desktop-like elements // TODO: make them. - CInputPopup* foundPopup = m_sIMERelay.popupFromSurface(foundSurface); + CInputPopup* foundPopup = m_relay.popupFromSurface(foundSurface); if (foundPopup) { - surfacePos = foundPopup->globalBox().pos(); - m_bFocusHeldByButtons = true; - m_bRefocusHeldByButtons = refocus; + surfacePos = foundPopup->globalBox().pos(); + m_focusHeldByButtons = true; + m_refocusHeldByButtons = refocus; } else { auto HLSurface = CWLSurface::fromResource(foundSurface); @@ -321,13 +321,13 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pLayoutManager->getCurrentLayout()->onMouseMove(getMouseCoordsInternal()); // forced above all - if (!g_pInputManager->m_dExclusiveLSes.empty()) { + if (!g_pInputManager->m_exclusiveLSes.empty()) { if (!foundSurface) - foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &g_pInputManager->m_dExclusiveLSes, &surfaceCoords, &pFoundLayerSurface); + foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &g_pInputManager->m_exclusiveLSes, &surfaceCoords, &pFoundLayerSurface); if (!foundSurface) { - foundSurface = (*g_pInputManager->m_dExclusiveLSes.begin())->m_surface->resource(); - surfacePos = (*g_pInputManager->m_dExclusiveLSes.begin())->m_realPosition->goal(); + foundSurface = (*g_pInputManager->m_exclusiveLSes.begin())->m_surface->resource(); + surfacePos = (*g_pInputManager->m_exclusiveLSes.begin())->m_realPosition->goal(); } } @@ -340,7 +340,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // also IME popups if (!foundSurface) { - auto popup = g_pInputManager->m_sIMERelay.popupFromCoords(mouseCoords); + auto popup = g_pInputManager->m_relay.popupFromCoords(mouseCoords); if (popup) { foundSurface = popup->getSurface(); surfacePos = popup->globalBox().pos(); @@ -437,7 +437,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // FIXME: This will be disabled during DnD operations because we do not exactly follow the spec // xdg-popup grabs should be keyboard-only, while they are absolute in our case... if (g_pSeatManager->seatGrab && !g_pSeatManager->seatGrab->accepts(foundSurface) && !PROTO::data->dndActive()) { - if (m_bHardInput || refocus) { + if (m_hardInput || refocus) { g_pSeatManager->setGrab(nullptr); return; // setGrab will refocus } else { @@ -456,19 +456,19 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (!foundSurface) { - if (!m_bEmptyFocusCursorSet) { - if (*PRESIZEONBORDER && *PRESIZECURSORICON && m_eBorderIconDirection != BORDERICON_NONE) { - m_eBorderIconDirection = BORDERICON_NONE; + if (!m_emptyFocusCursorSet) { + if (*PRESIZEONBORDER && *PRESIZECURSORICON && m_borderIconDirection != BORDERICON_NONE) { + m_borderIconDirection = BORDERICON_NONE; unsetCursorImage(); } // TODO: maybe wrap? - if (m_ecbClickBehavior == CLICKMODE_KILL) + if (m_clickBehavior == CLICKMODE_KILL) setCursorImageOverride("crosshair"); else setCursorImageOverride("left_ptr"); - m_bEmptyFocusCursorSet = true; + m_emptyFocusCursorSet = true; } g_pSeatManager->setPointerFocus(nullptr, {}); @@ -479,7 +479,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { return; } - m_bEmptyFocusCursorSet = false; + m_emptyFocusCursorSet = false; Vector2D surfaceLocal = surfacePos == Vector2D(-1337, -1337) ? surfaceCoords : mouseCoords - surfacePos; @@ -504,17 +504,17 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // set the values for use if (refocus) { - m_pFoundLSToFocus = pFoundLayerSurface; - m_pFoundWindowToFocus = pFoundWindow; - m_pFoundSurfaceToFocus = foundSurface; + m_foundLSToFocus = pFoundLayerSurface; + m_foundWindowToFocus = pFoundWindow; + m_foundSurfaceToFocus = foundSurface; } - if (currentlyDraggedWindow.lock() && pFoundWindow != currentlyDraggedWindow) { + if (m_currentlyDraggedWindow.lock() && pFoundWindow != m_currentlyDraggedWindow) { g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); return; } - if (pFoundWindow && foundSurface == pFoundWindow->m_wlSurface->resource() && !m_bCursorImageOverridden) { + if (pFoundWindow && foundSurface == pFoundWindow->m_wlSurface->resource() && !m_cursorImageOverridden) { const auto BOX = pFoundWindow->getWindowMainSurfaceBox(); if (!VECINRECT(mouseCoords, BOX.x, BOX.y, BOX.x + BOX.width, BOX.y + BOX.height)) setCursorImageOverride("left_ptr"); @@ -527,7 +527,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (*PRESIZEONBORDER && *PRESIZECURSORICON) { if (!pFoundWindow->isFullscreen() && !pFoundWindow->hasPopupAt(mouseCoords)) { setCursorIconOnBorder(pFoundWindow); - } else if (m_eBorderIconDirection != BORDERICON_NONE) { + } else if (m_borderIconDirection != BORDERICON_NONE) { unsetCursorImage(); } } @@ -551,17 +551,17 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (g_pSeatManager->state.pointerFocus == foundSurface) g_pSeatManager->sendPointerMotion(time, surfaceLocal); - m_bLastFocusOnLS = false; + m_lastFocusOnLS = false; return; // don't enter any new surfaces } else { - if (allowKeyboardRefocus && ((FOLLOWMOUSE != 3 && (*PMOUSEREFOCUS || m_pLastMouseFocus.lock() != pFoundWindow)) || refocus)) { - if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow || g_pCompositor->m_lastFocus != foundSurface || refocus) { - m_pLastMouseFocus = pFoundWindow; + if (allowKeyboardRefocus && ((FOLLOWMOUSE != 3 && (*PMOUSEREFOCUS || m_lastMouseFocus.lock() != pFoundWindow)) || refocus)) { + if (m_lastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow || g_pCompositor->m_lastFocus != foundSurface || refocus) { + m_lastMouseFocus = pFoundWindow; // TODO: this looks wrong. When over a popup, it constantly is switching. // Temp fix until that's figured out. Otherwise spams windowrule lookups and other shit. - if (m_pLastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow) { - if (m_fMousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) { + if (m_lastMouseFocus.lock() != pFoundWindow || g_pCompositor->m_lastWindow.lock() != pFoundWindow) { + if (m_mousePosDelta > *PFOLLOWMOUSETHRESHOLD || refocus) { const bool hasNoFollowMouse = pFoundWindow && pFoundWindow->m_windowData.noFollowMouse.valueOrDefault(); if (refocus || !hasNoFollowMouse) @@ -576,10 +576,10 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (g_pSeatManager->state.keyboardFocus == nullptr) g_pCompositor->focusWindow(pFoundWindow, foundSurface); - m_bLastFocusOnLS = false; + m_lastFocusOnLS = false; } else { - if (*PRESIZEONBORDER && *PRESIZECURSORICON && m_eBorderIconDirection != BORDERICON_NONE) { - m_eBorderIconDirection = BORDERICON_NONE; + if (*PRESIZEONBORDER && *PRESIZECURSORICON && m_borderIconDirection != BORDERICON_NONE) { + m_borderIconDirection = BORDERICON_NONE; unsetCursorImage(); } @@ -589,7 +589,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (pFoundLayerSurface) - m_bLastFocusOnLS = true; + m_lastFocusOnLS = true; } g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); @@ -602,30 +602,30 @@ void CInputManager::onMouseButton(IPointer::SButtonEvent e) { if (e.mouse) recheckMouseWarpOnMouseInput(); - m_tmrLastCursorMovement.reset(); + m_lastCursorMovement.reset(); if (e.state == WL_POINTER_BUTTON_STATE_PRESSED) { - m_lCurrentlyHeldButtons.push_back(e.button); + m_currentlyHeldButtons.push_back(e.button); } else { - if (std::find_if(m_lCurrentlyHeldButtons.begin(), m_lCurrentlyHeldButtons.end(), [&](const auto& other) { return other == e.button; }) == m_lCurrentlyHeldButtons.end()) + if (std::find_if(m_currentlyHeldButtons.begin(), m_currentlyHeldButtons.end(), [&](const auto& other) { return other == e.button; }) == m_currentlyHeldButtons.end()) return; - std::erase_if(m_lCurrentlyHeldButtons, [&](const auto& other) { return other == e.button; }); + std::erase_if(m_currentlyHeldButtons, [&](const auto& other) { return other == e.button; }); } - switch (m_ecbClickBehavior) { + switch (m_clickBehavior) { case CLICKMODE_DEFAULT: processMouseDownNormal(e); break; case CLICKMODE_KILL: processMouseDownKill(e); break; default: break; } - if (m_bFocusHeldByButtons && m_lCurrentlyHeldButtons.empty() && e.state == WL_POINTER_BUTTON_STATE_RELEASED) { - if (m_bRefocusHeldByButtons) + if (m_focusHeldByButtons && m_currentlyHeldButtons.empty() && e.state == WL_POINTER_BUTTON_STATE_RELEASED) { + if (m_refocusHeldByButtons) refocus(); else simulateMouseMovement(); - m_bFocusHeldByButtons = false; - m_bRefocusHeldByButtons = false; + m_focusHeldByButtons = false; + m_refocusHeldByButtons = false; } } @@ -637,79 +637,79 @@ void CInputManager::processMouseRequest(std::any E) { Debug::log(LOG, "cursorImage request: surface {:x}", (uintptr_t)e.surf.get()); - if (e.surf != m_sCursorSurfaceInfo.wlSurface->resource()) { - m_sCursorSurfaceInfo.wlSurface->unassign(); + if (e.surf != m_cursorSurfaceInfo.wlSurface->resource()) { + m_cursorSurfaceInfo.wlSurface->unassign(); if (e.surf) - m_sCursorSurfaceInfo.wlSurface->assign(e.surf); + m_cursorSurfaceInfo.wlSurface->assign(e.surf); } if (e.surf) { - m_sCursorSurfaceInfo.vHotspot = e.hotspot; - m_sCursorSurfaceInfo.hidden = false; + m_cursorSurfaceInfo.vHotspot = e.hotspot; + m_cursorSurfaceInfo.hidden = false; } else { - m_sCursorSurfaceInfo.vHotspot = {}; - m_sCursorSurfaceInfo.hidden = true; + m_cursorSurfaceInfo.vHotspot = {}; + m_cursorSurfaceInfo.hidden = true; } - m_sCursorSurfaceInfo.name = ""; + m_cursorSurfaceInfo.name = ""; - m_sCursorSurfaceInfo.inUse = true; - g_pHyprRenderer->setCursorSurface(m_sCursorSurfaceInfo.wlSurface, e.hotspot.x, e.hotspot.y); + m_cursorSurfaceInfo.inUse = true; + g_pHyprRenderer->setCursorSurface(m_cursorSurfaceInfo.wlSurface, e.hotspot.x, e.hotspot.y); } void CInputManager::restoreCursorIconToApp() { - if (m_sCursorSurfaceInfo.inUse) + if (m_cursorSurfaceInfo.inUse) return; - if (m_sCursorSurfaceInfo.hidden) { + if (m_cursorSurfaceInfo.hidden) { g_pHyprRenderer->setCursorSurface(nullptr, 0, 0); return; } - if (m_sCursorSurfaceInfo.name.empty()) { - if (m_sCursorSurfaceInfo.wlSurface->exists()) - g_pHyprRenderer->setCursorSurface(m_sCursorSurfaceInfo.wlSurface, m_sCursorSurfaceInfo.vHotspot.x, m_sCursorSurfaceInfo.vHotspot.y); + if (m_cursorSurfaceInfo.name.empty()) { + if (m_cursorSurfaceInfo.wlSurface->exists()) + g_pHyprRenderer->setCursorSurface(m_cursorSurfaceInfo.wlSurface, m_cursorSurfaceInfo.vHotspot.x, m_cursorSurfaceInfo.vHotspot.y); } else { - g_pHyprRenderer->setCursorFromName(m_sCursorSurfaceInfo.name); + g_pHyprRenderer->setCursorFromName(m_cursorSurfaceInfo.name); } - m_sCursorSurfaceInfo.inUse = true; + m_cursorSurfaceInfo.inUse = true; } void CInputManager::setCursorImageOverride(const std::string& name) { - if (m_bCursorImageOverridden) + if (m_cursorImageOverridden) return; - m_sCursorSurfaceInfo.inUse = false; + m_cursorSurfaceInfo.inUse = false; g_pHyprRenderer->setCursorFromName(name); } bool CInputManager::cursorImageUnlocked() { - if (m_ecbClickBehavior == CLICKMODE_KILL) + if (m_clickBehavior == CLICKMODE_KILL) return false; - if (m_bCursorImageOverridden) + if (m_cursorImageOverridden) return false; return true; } eClickBehaviorMode CInputManager::getClickMode() { - return m_ecbClickBehavior; + return m_clickBehavior; } void CInputManager::setClickMode(eClickBehaviorMode mode) { switch (mode) { case CLICKMODE_DEFAULT: Debug::log(LOG, "SetClickMode: DEFAULT"); - m_ecbClickBehavior = CLICKMODE_DEFAULT; + m_clickBehavior = CLICKMODE_DEFAULT; g_pHyprRenderer->setCursorFromName("left_ptr"); break; case CLICKMODE_KILL: Debug::log(LOG, "SetClickMode: KILL"); - m_ecbClickBehavior = CLICKMODE_KILL; + m_clickBehavior = CLICKMODE_KILL; // remove constraints g_pInputManager->unconstrainMouse(); @@ -739,12 +739,12 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { const auto mouseCoords = g_pInputManager->getMouseCoordsInternal(); const auto w = g_pCompositor->vectorToWindowUnified(mouseCoords, ALLOW_FLOATING | RESERVED_EXTENTS | INPUT_EXTENTS); - if (w && !m_bLastFocusOnLS && w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e)) + if (w && !m_lastFocusOnLS && w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e)) return; // clicking on border triggers resize // TODO detect click on LS properly - if (*PRESIZEONBORDER && !m_bLastFocusOnLS && e.state == WL_POINTER_BUTTON_STATE_PRESSED && (!w || !w->isX11OverrideRedirect())) { + if (*PRESIZEONBORDER && !m_lastFocusOnLS && e.state == WL_POINTER_BUTTON_STATE_PRESSED && (!w || !w->isX11OverrideRedirect())) { if (w && !w->isFullscreen()) { const CBox real = {w->m_realPosition->value().x, w->m_realPosition->value().y, w->m_realSize->value().x, w->m_realSize->value().y}; const CBox grab = {real.x - BORDER_GRAB_AREA, real.y - BORDER_GRAB_AREA, real.width + 2 * BORDER_GRAB_AREA, real.height + 2 * BORDER_GRAB_AREA}; @@ -765,11 +765,11 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { && (w && g_pCompositor->m_lastWindow.lock() != w) /* window should change */) { // a bit hacky // if we only pressed one button, allow us to refocus. m_lCurrentlyHeldButtons.size() > 0 will stick the focus - if (m_lCurrentlyHeldButtons.size() == 1) { - const auto COPY = m_lCurrentlyHeldButtons; - m_lCurrentlyHeldButtons.clear(); + if (m_currentlyHeldButtons.size() == 1) { + const auto COPY = m_currentlyHeldButtons; + m_currentlyHeldButtons.clear(); refocus(); - m_lCurrentlyHeldButtons = COPY; + m_currentlyHeldButtons = COPY; } else refocus(); } @@ -795,9 +795,9 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { g_pCompositor->setActiveMonitor(PMON); if (g_pSeatManager->seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) { - m_bHardInput = true; + m_hardInput = true; simulateMouseMovement(); - m_bHardInput = false; + m_hardInput = false; } } @@ -820,7 +820,7 @@ void CInputManager::processMouseDownKill(const IPointer::SButtonEvent& e) { } // reset click behavior mode - m_ecbClickBehavior = CLICKMODE_DEFAULT; + m_clickBehavior = CLICKMODE_DEFAULT; } void CInputManager::onMouseWheel(IPointer::SAxisEvent e) { @@ -844,7 +844,7 @@ void CInputManager::onMouseWheel(IPointer::SAxisEvent e) { if (!passEvent) return; - if (!m_bLastFocusOnLS) { + if (!m_lastFocusOnLS) { const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); const auto PWINDOW = g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); @@ -890,24 +890,24 @@ void CInputManager::onMouseWheel(IPointer::SAxisEvent e) { const int interval = factor != 0 ? std::round(120 * (1 / factor)) : 120; // reset the accumulator when timeout is reached or direction/axis has changed - if (std::signbit(e.deltaDiscrete) != m_ScrollWheelState.lastEventSign || e.axis != m_ScrollWheelState.lastEventAxis || - e.timeMs - m_ScrollWheelState.lastEventTime > 500 /* 500ms taken from libinput default timeout */) { + if (std::signbit(e.deltaDiscrete) != m_scrollWheelState.lastEventSign || e.axis != m_scrollWheelState.lastEventAxis || + e.timeMs - m_scrollWheelState.lastEventTime > 500 /* 500ms taken from libinput default timeout */) { - m_ScrollWheelState.accumulatedScroll = 0; + m_scrollWheelState.accumulatedScroll = 0; // send 1 discrete on first event for responsiveness discrete = std::copysign(1, e.deltaDiscrete); } else discrete = 0; - for (int ac = m_ScrollWheelState.accumulatedScroll; ac >= interval; ac -= interval) { + for (int ac = m_scrollWheelState.accumulatedScroll; ac >= interval; ac -= interval) { discrete += std::copysign(1, e.deltaDiscrete); - m_ScrollWheelState.accumulatedScroll -= interval; + m_scrollWheelState.accumulatedScroll -= interval; } - m_ScrollWheelState.lastEventSign = std::signbit(e.deltaDiscrete); - m_ScrollWheelState.lastEventAxis = e.axis; - m_ScrollWheelState.lastEventTime = e.timeMs; - m_ScrollWheelState.accumulatedScroll += std::abs(e.deltaDiscrete); + m_scrollWheelState.lastEventSign = std::signbit(e.deltaDiscrete); + m_scrollWheelState.lastEventAxis = e.axis; + m_scrollWheelState.lastEventTime = e.timeMs; + m_scrollWheelState.accumulatedScroll += std::abs(e.deltaDiscrete); delta = 15.0 * discrete * factor; } @@ -924,7 +924,7 @@ Vector2D CInputManager::getMouseCoordsInternal() { } void CInputManager::newKeyboard(SP keyboard) { - const auto PNEWKEYBOARD = m_vKeyboards.emplace_back(CKeyboard::create(keyboard)); + const auto PNEWKEYBOARD = m_keyboards.emplace_back(CKeyboard::create(keyboard)); setupKeyboard(PNEWKEYBOARD); @@ -932,7 +932,7 @@ void CInputManager::newKeyboard(SP keyboard) { } void CInputManager::newVirtualKeyboard(SP keyboard) { - const auto PNEWKEYBOARD = m_vKeyboards.emplace_back(CVirtualKeyboard::create(keyboard)); + const auto PNEWKEYBOARD = m_keyboards.emplace_back(CVirtualKeyboard::create(keyboard)); setupKeyboard(PNEWKEYBOARD); @@ -942,7 +942,7 @@ void CInputManager::newVirtualKeyboard(SP keyboard) void CInputManager::setupKeyboard(SP keeb) { static auto PDPMS = CConfigValue("misc:key_press_enables_dpms"); - m_vHIDs.emplace_back(keeb); + m_hids.emplace_back(keeb); try { keeb->m_hlName = getNameForNewDevice(keeb->m_deviceName); @@ -1015,7 +1015,7 @@ void CInputManager::setupKeyboard(SP keeb) { } void CInputManager::setKeyboardLayout() { - for (auto const& k : m_vKeyboards) + for (auto const& k : m_keyboards) applyConfigToKeyboard(k); g_pKeybindManager->updateXKBTranslationState(); @@ -1077,7 +1077,7 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { } void CInputManager::newVirtualMouse(SP mouse) { - const auto PMOUSE = m_vPointers.emplace_back(CVirtualPointer::create(mouse)); + const auto PMOUSE = m_pointers.emplace_back(CVirtualPointer::create(mouse)); setupMouse(PMOUSE); @@ -1085,7 +1085,7 @@ void CInputManager::newVirtualMouse(SP mouse) { } void CInputManager::newMouse(SP mouse) { - const auto PMOUSE = m_vPointers.emplace_back(CMouse::create(mouse)); + const auto PMOUSE = m_pointers.emplace_back(CMouse::create(mouse)); setupMouse(PMOUSE); @@ -1093,7 +1093,7 @@ void CInputManager::newMouse(SP mouse) { } void CInputManager::setupMouse(SP mauz) { - m_vHIDs.emplace_back(mauz); + m_hids.emplace_back(mauz); try { mauz->m_hlName = getNameForNewDevice(mauz->m_deviceName); @@ -1128,11 +1128,11 @@ void CInputManager::setupMouse(SP mauz) { g_pSeatManager->setMouse(mauz); - m_tmrLastCursorMovement.reset(); + m_lastCursorMovement.reset(); } void CInputManager::setPointerConfigs() { - for (auto const& m : m_vPointers) { + for (auto const& m : m_pointers) { auto devname = m->m_hlName; const auto HASCONFIG = g_pConfigManager->deviceConfigExists(devname); @@ -1288,18 +1288,18 @@ void CInputManager::setPointerConfigs() { } static void removeFromHIDs(WP hid) { - std::erase_if(g_pInputManager->m_vHIDs, [hid](const auto& e) { return e.expired() || e == hid; }); + std::erase_if(g_pInputManager->m_hids, [hid](const auto& e) { return e.expired() || e == hid; }); g_pInputManager->updateCapabilities(); } void CInputManager::destroyKeyboard(SP pKeyboard) { Debug::log(LOG, "Keyboard at {:x} removed", (uintptr_t)pKeyboard.get()); - std::erase_if(m_vKeyboards, [pKeyboard](const auto& other) { return other == pKeyboard; }); + std::erase_if(m_keyboards, [pKeyboard](const auto& other) { return other == pKeyboard; }); - if (m_vKeyboards.size() > 0) { + if (m_keyboards.size() > 0) { bool found = false; - for (auto const& k : m_vKeyboards | std::views::reverse) { + for (auto const& k : m_keyboards | std::views::reverse) { if (!k) continue; @@ -1319,9 +1319,9 @@ void CInputManager::destroyKeyboard(SP pKeyboard) { void CInputManager::destroyPointer(SP mouse) { Debug::log(LOG, "Pointer at {:x} removed", (uintptr_t)mouse.get()); - std::erase_if(m_vPointers, [mouse](const auto& other) { return other == mouse; }); + std::erase_if(m_pointers, [mouse](const auto& other) { return other == mouse; }); - g_pSeatManager->setMouse(m_vPointers.size() > 0 ? m_vPointers.front() : nullptr); + g_pSeatManager->setMouse(m_pointers.size() > 0 ? m_pointers.front() : nullptr); if (!g_pSeatManager->mouse.expired()) unconstrainMouse(); @@ -1332,7 +1332,7 @@ void CInputManager::destroyPointer(SP mouse) { void CInputManager::destroyTouchDevice(SP touch) { Debug::log(LOG, "Touch device at {:x} removed", (uintptr_t)touch.get()); - std::erase_if(m_vTouches, [touch](const auto& other) { return other == touch; }); + std::erase_if(m_touches, [touch](const auto& other) { return other == touch; }); removeFromHIDs(touch); } @@ -1340,7 +1340,7 @@ void CInputManager::destroyTouchDevice(SP touch) { void CInputManager::destroyTablet(SP tablet) { Debug::log(LOG, "Tablet device at {:x} removed", (uintptr_t)tablet.get()); - std::erase_if(m_vTablets, [tablet](const auto& other) { return other == tablet; }); + std::erase_if(m_tablets, [tablet](const auto& other) { return other == tablet; }); removeFromHIDs(tablet); } @@ -1348,7 +1348,7 @@ void CInputManager::destroyTablet(SP tablet) { void CInputManager::destroyTabletTool(SP tool) { Debug::log(LOG, "Tablet tool at {:x} removed", (uintptr_t)tool.get()); - std::erase_if(m_vTabletTools, [tool](const auto& other) { return other == tool; }); + std::erase_if(m_tabletTools, [tool](const auto& other) { return other == tool; }); removeFromHIDs(tool); } @@ -1356,7 +1356,7 @@ void CInputManager::destroyTabletTool(SP tool) { void CInputManager::destroyTabletPad(SP pad) { Debug::log(LOG, "Tablet pad at {:x} removed", (uintptr_t)pad.get()); - std::erase_if(m_vTabletPads, [pad](const auto& other) { return other == pad; }); + std::erase_if(m_tabletPads, [pad](const auto& other) { return other == pad; }); removeFromHIDs(pad); } @@ -1370,7 +1370,7 @@ void CInputManager::updateKeyboardsLeds(SP pKeyboard) { if (!leds.has_value()) return; - for (auto const& k : m_vKeyboards) { + for (auto const& k : m_keyboards) { k->updateLEDs(leds.value()); } } @@ -1389,7 +1389,7 @@ void CInputManager::onKeyboardKey(std::any event, SP pKeyboard) { auto e = std::any_cast(event); if (passEvent) { - const auto IME = m_sIMERelay.m_pIME.lock(); + const auto IME = m_relay.m_inputMethod.lock(); if (IME && IME->hasGrab() && !DISALLOWACTION) { IME->setKeyboard(pKeyboard); @@ -1414,7 +1414,7 @@ void CInputManager::onKeyboardMod(SP pKeyboard) { auto MODS = pKeyboard->m_modifiersState; MODS.depressed = ALLMODS; - const auto IME = m_sIMERelay.m_pIME.lock(); + const auto IME = m_relay.m_inputMethod.lock(); if (IME && IME->hasGrab() && !DISALLOWACTION) { IME->setKeyboard(pKeyboard); @@ -1444,7 +1444,7 @@ bool CInputManager::shouldIgnoreVirtualKeyboard(SP pKeyboard) { CVirtualKeyboard* vk = (CVirtualKeyboard*)pKeyboard.get(); - return !pKeyboard || (!m_sIMERelay.m_pIME.expired() && m_sIMERelay.m_pIME->grabClient() == vk->getClient()); + return !pKeyboard || (!m_relay.m_inputMethod.expired() && m_relay.m_inputMethod->grabClient() == vk->getClient()); } void CInputManager::refocus() { @@ -1452,7 +1452,7 @@ void CInputManager::refocus() { } bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { - if (!m_dExclusiveLSes.empty()) { + if (!m_exclusiveLSes.empty()) { Debug::log(LOG, "CInputManager::refocusLastWindow: ignoring, exclusive LS present."); return false; } @@ -1505,7 +1505,7 @@ void CInputManager::unconstrainMouse() { if (g_pSeatManager->mouse.expired()) return; - for (auto const& c : m_vConstraints) { + for (auto const& c : m_constraints) { const auto C = c.lock(); if (!C) @@ -1519,7 +1519,7 @@ void CInputManager::unconstrainMouse() { } bool CInputManager::isConstrained() { - return std::any_of(m_vConstraints.begin(), m_vConstraints.end(), [](auto const& c) { + return std::any_of(m_constraints.begin(), m_constraints.end(), [](auto const& c) { const auto constraint = c.lock(); return constraint && constraint->isActive() && constraint->owner()->resource() == g_pCompositor->m_lastFocus; }); @@ -1538,7 +1538,7 @@ bool CInputManager::isLocked() { void CInputManager::updateCapabilities() { uint32_t caps = 0; - for (auto const& h : m_vHIDs) { + for (auto const& h : m_hids) { if (h.expired()) continue; @@ -1546,14 +1546,14 @@ void CInputManager::updateCapabilities() { } g_pSeatManager->updateCapabilities(caps); - m_uiCapabilities = caps; + m_capabilities = caps; } uint32_t CInputManager::accumulateModsFromAllKBs() { uint32_t finalMask = 0; - for (auto const& kb : m_vKeyboards) { + for (auto const& kb : m_keyboards) { if (kb->isVirtual() && shouldIgnoreVirtualKeyboard(kb)) continue; @@ -1568,7 +1568,7 @@ uint32_t CInputManager::accumulateModsFromAllKBs() { void CInputManager::disableAllKeyboards(bool virt) { - for (auto const& k : m_vKeyboards) { + for (auto const& k : m_keyboards) { if (k->isVirtual() != virt) continue; @@ -1577,8 +1577,8 @@ void CInputManager::disableAllKeyboards(bool virt) { } void CInputManager::newTouchDevice(SP pDevice) { - const auto PNEWDEV = m_vTouches.emplace_back(CTouchDevice::create(pDevice)); - m_vHIDs.emplace_back(PNEWDEV); + const auto PNEWDEV = m_touches.emplace_back(CTouchDevice::create(pDevice)); + m_hids.emplace_back(PNEWDEV); try { PNEWDEV->m_hlName = getNameForNewDevice(PNEWDEV->m_deviceName); @@ -1647,13 +1647,13 @@ void CInputManager::setTouchDeviceConfigs(SP dev) { return; } - for (auto const& m : m_vTouches) { + for (auto const& m : m_touches) { setConfig(m); } } void CInputManager::setTabletConfigs() { - for (auto const& t : m_vTablets) { + for (auto const& t : m_tablets) { if (t->aq()->getLibinputHandle()) { const auto NAME = t->m_hlName; const auto LIBINPUTDEV = t->aq()->getLibinputHandle(); @@ -1696,7 +1696,7 @@ void CInputManager::setTabletConfigs() { } void CInputManager::newSwitch(SP pDevice) { - const auto PNEWDEV = &m_lSwitches.emplace_back(); + const auto PNEWDEV = &m_switches.emplace_back(); PNEWDEV->pDevice = pDevice; Debug::log(LOG, "New switch with name \"{}\" added", pDevice->getName()); @@ -1722,20 +1722,20 @@ void CInputManager::newSwitch(SP pDevice) { } void CInputManager::destroySwitch(SSwitchDevice* pDevice) { - m_lSwitches.remove(*pDevice); + m_switches.remove(*pDevice); } void CInputManager::setCursorImageUntilUnset(std::string name) { g_pHyprRenderer->setCursorFromName(name); - m_bCursorImageOverridden = true; - m_sCursorSurfaceInfo.inUse = false; + m_cursorImageOverridden = true; + m_cursorSurfaceInfo.inUse = false; } void CInputManager::unsetCursorImage() { - if (!m_bCursorImageOverridden) + if (!m_cursorImageOverridden) return; - m_bCursorImageOverridden = false; + m_cursorImageOverridden = false; restoreCursorIconToApp(); } @@ -1753,14 +1753,14 @@ std::string CInputManager::getNameForNewDevice(std::string internalName) { auto makeNewName = [&]() { return (proposedNewName.empty() ? "unknown-device" : proposedNewName) + (dupeno == 0 ? "" : ("-" + std::to_string(dupeno))); }; - while (std::find_if(m_vHIDs.begin(), m_vHIDs.end(), [&](const auto& other) { return other->m_hlName == makeNewName(); }) != m_vHIDs.end()) + while (std::find_if(m_hids.begin(), m_hids.end(), [&](const auto& other) { return other->m_hlName == makeNewName(); }) != m_hids.end()) dupeno++; return makeNewName(); } void CInputManager::releaseAllMouseButtons() { - const auto buttonsCopy = m_lCurrentlyHeldButtons; + const auto buttonsCopy = m_currentlyHeldButtons; if (PROTO::data->dndActive()) return; @@ -1769,13 +1769,13 @@ void CInputManager::releaseAllMouseButtons() { g_pSeatManager->sendPointerButton(Time::millis(Time::steadyNow()), mb, WL_POINTER_BUTTON_STATE_RELEASED); } - m_lCurrentlyHeldButtons.clear(); + m_currentlyHeldButtons.clear(); } void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { // do not override cursor icons set by mouse binds - if (g_pInputManager->currentlyDraggedWindow.expired()) { - m_eBorderIconDirection = BORDERICON_NONE; + if (g_pInputManager->m_currentlyDraggedWindow.expired()) { + m_borderIconDirection = BORDERICON_NONE; return; } @@ -1797,7 +1797,7 @@ void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { if (w->hasPopupAt(mouseCoords)) direction = BORDERICON_NONE; - else if (!boxFullGrabInput.containsPoint(mouseCoords) || (!m_lCurrentlyHeldButtons.empty() && currentlyDraggedWindow.expired())) + else if (!boxFullGrabInput.containsPoint(mouseCoords) || (!m_currentlyHeldButtons.empty() && m_currentlyDraggedWindow.expired())) direction = BORDERICON_NONE; else { @@ -1857,10 +1857,10 @@ void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { } } - if (direction == m_eBorderIconDirection) + if (direction == m_borderIconDirection) return; - m_eBorderIconDirection = direction; + m_borderIconDirection = direction; switch (direction) { case BORDERICON_NONE: unsetCursorImage(); break; @@ -1878,6 +1878,6 @@ void CInputManager::setCursorIconOnBorder(PHLWINDOW w) { void CInputManager::recheckMouseWarpOnMouseInput() { static auto PWARPFORNONMOUSE = CConfigValue("cursor:warp_back_after_non_mouse_input"); - if (!m_bLastInputMouse && *PWARPFORNONMOUSE) - g_pPointerManager->warpTo(m_vLastMousePos); + if (!m_lastInputMouse && *PWARPFORNONMOUSE) + g_pPointerManager->warpTo(m_lastMousePos); } diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index 62483c41..549a72fa 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -143,44 +143,44 @@ class CInputManager { void onTabletTip(CTablet::STipEvent); void onTabletButton(CTablet::SButtonEvent); - STouchData m_sTouchData; + STouchData m_touchData; // for dragging floating windows - PHLWINDOWREF currentlyDraggedWindow; - eMouseBindMode dragMode = MBIND_INVALID; - bool m_bWasDraggingWindow = false; - bool m_bDragThresholdReached = false; + PHLWINDOWREF m_currentlyDraggedWindow; + eMouseBindMode m_dragMode = MBIND_INVALID; + bool m_wasDraggingWindow = false; + bool m_dragThresholdReached = false; // for refocus to be forced - PHLWINDOWREF m_pForcedFocus; + PHLWINDOWREF m_forcedFocus; - std::vector> m_vKeyboards; - std::vector> m_vPointers; - std::vector> m_vTouches; - std::vector> m_vTablets; - std::vector> m_vTabletTools; - std::vector> m_vTabletPads; - std::vector> m_vHIDs; // general container for all HID devices connected to the input manager. + std::vector> m_keyboards; + std::vector> m_pointers; + std::vector> m_touches; + std::vector> m_tablets; + std::vector> m_tabletTools; + std::vector> m_tabletPads; + std::vector> m_hids; // general container for all HID devices connected to the input manager. // Switches - std::list m_lSwitches; + std::list m_switches; // Exclusive layer surfaces - std::vector m_dExclusiveLSes; + std::vector m_exclusiveLSes; // constraints - std::vector> m_vConstraints; + std::vector> m_constraints; // void newIdleInhibitor(std::any); void recheckIdleInhibitorStatus(); bool isWindowInhibiting(const PHLWINDOW& pWindow, bool onlyHl = true); - SSwipeGesture m_sActiveSwipe; + SSwipeGesture m_activeSwipe; - CTimer m_tmrLastCursorMovement; + CTimer m_lastCursorMovement; - CInputMethodRelay m_sIMERelay; + CInputMethodRelay m_relay; // for shared mods uint32_t accumulateModsFromAllKBs(); @@ -198,20 +198,19 @@ class CInputManager { void releaseAllMouseButtons(); // for some bugs in follow mouse 0 - bool m_bLastFocusOnLS = false; - bool m_bLastFocusOnIMEPopup = false; + bool m_lastFocusOnLS = false; // for hard input e.g. clicks - bool m_bHardInput = false; + bool m_hardInput = false; // for hiding cursor on touch - bool m_bLastInputTouch = false; + bool m_lastInputTouch = false; // for tracking mouse refocus - PHLWINDOWREF m_pLastMouseFocus; + PHLWINDOWREF m_lastMouseFocus; // - bool m_bEmptyFocusCursorSet = false; + bool m_emptyFocusCursorSet = false; private: // Listeners @@ -221,14 +220,14 @@ class CInputManager { CHyprSignalListener newVirtualKeyboard; CHyprSignalListener newVirtualMouse; CHyprSignalListener setCursor; - } m_sListeners; + } m_listeners; - bool m_bCursorImageOverridden = false; - eBorderIconDirection m_eBorderIconDirection = BORDERICON_NONE; + bool m_cursorImageOverridden = false; + eBorderIconDirection m_borderIconDirection = BORDERICON_NONE; // for click behavior override - eClickBehaviorMode m_ecbClickBehavior = CLICKMODE_DEFAULT; - Vector2D m_vLastCursorPosFloored = Vector2D(); + eClickBehaviorMode m_clickBehavior = CLICKMODE_DEFAULT; + Vector2D m_lastCursorPosFloored = Vector2D(); void setupKeyboard(SP keeb); void setupMouse(SP mauz); @@ -240,7 +239,7 @@ class CInputManager { void disableAllKeyboards(bool virt = false); - uint32_t m_uiCapabilities = 0; + uint32_t m_capabilities = 0; void mouseMoveUnified(uint32_t, bool refocus = false, bool mouse = false); void recheckMouseWarpOnMouseInput(); @@ -250,21 +249,21 @@ class CInputManager { void applyConfigToKeyboard(SP); // this will be set after a refocus() - WP m_pFoundSurfaceToFocus; - PHLLSREF m_pFoundLSToFocus; - PHLWINDOWREF m_pFoundWindowToFocus; + WP m_foundSurfaceToFocus; + PHLLSREF m_foundLSToFocus; + PHLWINDOWREF m_foundWindowToFocus; // used for warping back after non-mouse input - Vector2D m_vLastMousePos = {}; - double m_fMousePosDelta = 0; - bool m_bLastInputMouse = true; + Vector2D m_lastMousePos = {}; + double m_mousePosDelta = 0; + bool m_lastInputMouse = true; // for holding focus on buttons held - bool m_bFocusHeldByButtons = false; - bool m_bRefocusHeldByButtons = false; + bool m_focusHeldByButtons = false; + bool m_refocusHeldByButtons = false; // for releasing mouse buttons - std::list m_lCurrentlyHeldButtons; + std::list m_currentlyHeldButtons; // idle inhibitors struct SIdleInhibitor { @@ -272,7 +271,7 @@ class CInputManager { bool nonDesktop = false; CHyprSignalListener surfaceDestroyListener; }; - std::vector> m_vIdleInhibitors; + std::vector> m_idleInhibitors; // swipe void beginWorkspaceSwipe(); @@ -292,7 +291,7 @@ class CInputManager { Vector2D vHotspot; std::string name; // if not empty, means set by name. bool inUse = false; - } m_sCursorSurfaceInfo; + } m_cursorSurfaceInfo; void restoreCursorIconToApp(); // no-op if restored @@ -302,7 +301,7 @@ class CInputManager { bool lastEventAxis = false; uint32_t lastEventTime = 0; uint32_t accumulatedScroll = 0; - } m_ScrollWheelState; + } m_scrollWheelState; friend class CKeybindManager; friend class CWLSurface; diff --git a/src/managers/input/InputMethodPopup.cpp b/src/managers/input/InputMethodPopup.cpp index d0706bad..c374f63c 100644 --- a/src/managers/input/InputMethodPopup.cpp +++ b/src/managers/input/InputMethodPopup.cpp @@ -7,17 +7,17 @@ #include "../../helpers/Monitor.hpp" #include "../../render/Renderer.hpp" -CInputPopup::CInputPopup(SP popup_) : popup(popup_) { - listeners.commit = popup_->events.commit.registerListener([this](std::any d) { onCommit(); }); - listeners.map = popup_->events.map.registerListener([this](std::any d) { onMap(); }); - listeners.unmap = popup_->events.unmap.registerListener([this](std::any d) { onUnmap(); }); - listeners.destroy = popup_->events.destroy.registerListener([this](std::any d) { onDestroy(); }); - surface = CWLSurface::create(); - surface->assign(popup_->surface()); +CInputPopup::CInputPopup(SP popup_) : m_popup(popup_) { + m_listeners.commit = popup_->events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.map = popup_->events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmap = popup_->events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.destroy = popup_->events.destroy.registerListener([this](std::any d) { onDestroy(); }); + m_surface = CWLSurface::create(); + m_surface->assign(popup_->surface()); } SP CInputPopup::queryOwner() { - const auto FOCUSED = g_pInputManager->m_sIMERelay.getFocusedTextInput(); + const auto FOCUSED = g_pInputManager->m_relay.getFocusedTextInput(); if (!FOCUSED) return nullptr; @@ -26,7 +26,7 @@ SP CInputPopup::queryOwner() { } void CInputPopup::onDestroy() { - g_pInputManager->m_sIMERelay.removePopup(this); + g_pInputManager->m_relay.removePopup(this); } void CInputPopup::onMap() { @@ -40,7 +40,7 @@ void CInputPopup::onMap() { if (!PMONITOR) return; - PROTO::fractional->sendScale(surface->resource(), PMONITOR->m_scale); + PROTO::fractional->sendScale(m_surface->resource(), PMONITOR->m_scale); } void CInputPopup::onUnmap() { @@ -73,15 +73,15 @@ void CInputPopup::damageSurface() { } Vector2D pos = globalBox().pos(); - g_pHyprRenderer->damageSurface(surface->resource(), pos.x, pos.y); + g_pHyprRenderer->damageSurface(m_surface->resource(), pos.x, pos.y); } void CInputPopup::updateBox() { - if (!popup->mapped) + if (!m_popup->mapped) return; const auto OWNER = queryOwner(); - const auto PFOCUSEDTI = g_pInputManager->m_sIMERelay.getFocusedTextInput(); + const auto PFOCUSEDTI = g_pInputManager->m_relay.getFocusedTextInput(); if (!PFOCUSEDTI) return; @@ -102,7 +102,7 @@ void CInputPopup::updateBox() { cursorBoxParent = {0, 0, (int)parentBox.w, (int)parentBox.h}; } - Vector2D currentPopupSize = surface->getViewporterCorrectedSize() / surface->resource()->current.scale; + Vector2D currentPopupSize = m_surface->getViewporterCorrectedSize() / m_surface->resource()->current.scale; PHLMONITOR pMonitor = g_pCompositor->getMonitorFromVector(parentBox.middle()); @@ -118,24 +118,24 @@ void CInputPopup::updateBox() { popupOffset.x -= popupOverflow; CBox cursorBoxLocal({-popupOffset.x, -popupOffset.y}, cursorBoxParent.size()); - popup->sendInputRectangle(cursorBoxLocal); + m_popup->sendInputRectangle(cursorBoxLocal); CBox popupBoxParent(cursorBoxParent.pos() + popupOffset, currentPopupSize); - if (popupBoxParent != lastBoxLocal) { + if (popupBoxParent != m_lastBoxLocal) { damageEntire(); - lastBoxLocal = popupBoxParent; + m_lastBoxLocal = popupBoxParent; } damageSurface(); - if (const auto PM = g_pCompositor->getMonitorFromCursor(); PM && PM->m_id != lastMonitor) { - const auto PML = g_pCompositor->getMonitorFromID(lastMonitor); + if (const auto PM = g_pCompositor->getMonitorFromCursor(); PM && PM->m_id != m_lastMonitor) { + const auto PML = g_pCompositor->getMonitorFromID(m_lastMonitor); if (PML) - surface->resource()->leave(PML->m_self.lock()); + m_surface->resource()->leave(PML->m_self.lock()); - surface->resource()->enter(PM->m_self.lock()); + m_surface->resource()->enter(PM->m_self.lock()); - lastMonitor = PM->m_id; + m_lastMonitor = PM->m_id; } } @@ -148,7 +148,7 @@ CBox CInputPopup::globalBox() { } CBox parentBox = OWNER->getSurfaceBoxGlobal().value_or(CBox{0, 0, 500, 500}); - return lastBoxLocal.copy().translate(parentBox.pos()); + return m_lastBoxLocal.copy().translate(parentBox.pos()); } bool CInputPopup::isVecInPopup(const Vector2D& point) { @@ -156,5 +156,5 @@ bool CInputPopup::isVecInPopup(const Vector2D& point) { } SP CInputPopup::getSurface() { - return surface->resource(); + return m_surface->resource(); } diff --git a/src/managers/input/InputMethodPopup.hpp b/src/managers/input/InputMethodPopup.hpp index 53c11cff..20767963 100644 --- a/src/managers/input/InputMethodPopup.hpp +++ b/src/managers/input/InputMethodPopup.hpp @@ -29,15 +29,15 @@ class CInputPopup { void onMap(); void onUnmap(); - WP popup; - SP surface; - CBox lastBoxLocal; - MONITORID lastMonitor = MONITOR_INVALID; + WP m_popup; + SP m_surface; + CBox m_lastBoxLocal; + MONITORID m_lastMonitor = MONITOR_INVALID; struct { CHyprSignalListener map; CHyprSignalListener unmap; CHyprSignalListener destroy; CHyprSignalListener commit; - } listeners; + } m_listeners; }; diff --git a/src/managers/input/InputMethodRelay.cpp b/src/managers/input/InputMethodRelay.cpp index c51d3ebe..bafa9002 100644 --- a/src/managers/input/InputMethodRelay.cpp +++ b/src/managers/input/InputMethodRelay.cpp @@ -11,13 +11,13 @@ CInputMethodRelay::CInputMethodRelay() { static auto P = g_pHookSystem->hookDynamic("keyboardFocus", [&](void* self, SCallbackInfo& info, std::any param) { onKeyboardFocus(std::any_cast>(param)); }); - listeners.newTIV3 = PROTO::textInputV3->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); - listeners.newTIV1 = PROTO::textInputV1->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); - listeners.newIME = PROTO::ime->events.newIME.registerListener([this](std::any ime) { onNewIME(std::any_cast>(ime)); }); + m_listeners.newTIV3 = PROTO::textInputV3->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); + m_listeners.newTIV1 = PROTO::textInputV1->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); + m_listeners.newIME = PROTO::ime->events.newIME.registerListener([this](std::any ime) { onNewIME(std::any_cast>(ime)); }); } void CInputMethodRelay::onNewIME(SP pIME) { - if (!m_pIME.expired()) { + if (!m_inputMethod.expired()) { Debug::log(ERR, "Cannot register 2 IMEs at once!"); pIME->unavailable(); @@ -25,9 +25,9 @@ void CInputMethodRelay::onNewIME(SP pIME) { return; } - m_pIME = pIME; + m_inputMethod = pIME; - listeners.commitIME = pIME->events.onCommit.registerListener([this](std::any d) { + m_listeners.commitIME = pIME->events.onCommit.registerListener([this](std::any d) { const auto PTI = getFocusedTextInput(); if (!PTI) { @@ -35,10 +35,10 @@ void CInputMethodRelay::onNewIME(SP pIME) { return; } - PTI->updateIMEState(m_pIME.lock()); + PTI->updateIMEState(m_inputMethod.lock()); }); - listeners.destroyIME = pIME->events.destroy.registerListener([this](std::any d) { + m_listeners.destroyIME = pIME->events.destroy.registerListener([this](std::any d) { const auto PTI = getFocusedTextInput(); Debug::log(LOG, "IME Destroy"); @@ -46,11 +46,11 @@ void CInputMethodRelay::onNewIME(SP pIME) { if (PTI) PTI->leave(); - m_pIME.reset(); + m_inputMethod.reset(); }); - listeners.newPopup = pIME->events.newPopup.registerListener([this](std::any d) { - m_vIMEPopups.emplace_back(makeUnique(std::any_cast>(d))); + m_listeners.newPopup = pIME->events.newPopup.registerListener([this](std::any d) { + m_inputMethodPopups.emplace_back(makeUnique(std::any_cast>(d))); Debug::log(LOG, "New input popup"); }); @@ -58,7 +58,7 @@ void CInputMethodRelay::onNewIME(SP pIME) { if (!g_pCompositor->m_lastFocus) return; - for (auto const& ti : m_vTextInputs) { + for (auto const& ti : m_textInputs) { if (ti->client() != g_pCompositor->m_lastFocus->client()) continue; @@ -70,14 +70,14 @@ void CInputMethodRelay::onNewIME(SP pIME) { } void CInputMethodRelay::removePopup(CInputPopup* pPopup) { - std::erase_if(m_vIMEPopups, [pPopup](const auto& other) { return other.get() == pPopup; }); + std::erase_if(m_inputMethodPopups, [pPopup](const auto& other) { return other.get() == pPopup; }); } CTextInput* CInputMethodRelay::getFocusedTextInput() { if (!g_pCompositor->m_lastFocus) return nullptr; - for (auto const& ti : m_vTextInputs) { + for (auto const& ti : m_textInputs) { if (ti->focusedSurface() == g_pCompositor->m_lastFocus) return ti.get(); } @@ -86,58 +86,58 @@ CTextInput* CInputMethodRelay::getFocusedTextInput() { } void CInputMethodRelay::onNewTextInput(WP tiv3) { - m_vTextInputs.emplace_back(makeUnique(tiv3)); + m_textInputs.emplace_back(makeUnique(tiv3)); } void CInputMethodRelay::onNewTextInput(WP pTIV1) { - m_vTextInputs.emplace_back(makeUnique(pTIV1)); + m_textInputs.emplace_back(makeUnique(pTIV1)); } void CInputMethodRelay::removeTextInput(CTextInput* pInput) { - std::erase_if(m_vTextInputs, [pInput](const auto& other) { return other.get() == pInput; }); + std::erase_if(m_textInputs, [pInput](const auto& other) { return other.get() == pInput; }); } void CInputMethodRelay::updateAllPopups() { - for (auto const& p : m_vIMEPopups) { + for (auto const& p : m_inputMethodPopups) { p->onCommit(); } } void CInputMethodRelay::activateIME(CTextInput* pInput, bool shouldCommit) { - if (m_pIME.expired()) + if (m_inputMethod.expired()) return; - m_pIME->activate(); + m_inputMethod->activate(); if (shouldCommit) commitIMEState(pInput); } void CInputMethodRelay::deactivateIME(CTextInput* pInput, bool shouldCommit) { - if (m_pIME.expired()) + if (m_inputMethod.expired()) return; - m_pIME->deactivate(); + m_inputMethod->deactivate(); if (shouldCommit) commitIMEState(pInput); } void CInputMethodRelay::commitIMEState(CTextInput* pInput) { - if (m_pIME.expired()) + if (m_inputMethod.expired()) return; - pInput->commitStateToIME(m_pIME.lock()); + pInput->commitStateToIME(m_inputMethod.lock()); } void CInputMethodRelay::onKeyboardFocus(SP pSurface) { - if (m_pIME.expired()) + if (m_inputMethod.expired()) return; - if (pSurface == m_pLastKbFocus) + if (pSurface == m_lastKbFocus) return; - m_pLastKbFocus = pSurface; + m_lastKbFocus = pSurface; - for (auto const& ti : m_vTextInputs) { + for (auto const& ti : m_textInputs) { if (!ti->focusedSurface()) continue; @@ -147,7 +147,7 @@ void CInputMethodRelay::onKeyboardFocus(SP pSurface) { if (!pSurface) return; - for (auto const& ti : m_vTextInputs) { + for (auto const& ti : m_textInputs) { if (!ti->isV3()) continue; @@ -159,7 +159,7 @@ void CInputMethodRelay::onKeyboardFocus(SP pSurface) { } CInputPopup* CInputMethodRelay::popupFromCoords(const Vector2D& point) { - for (auto const& p : m_vIMEPopups) { + for (auto const& p : m_inputMethodPopups) { if (p->isVecInPopup(point)) return p.get(); } @@ -168,7 +168,7 @@ CInputPopup* CInputMethodRelay::popupFromCoords(const Vector2D& point) { } CInputPopup* CInputMethodRelay::popupFromSurface(const SP surface) { - for (auto const& p : m_vIMEPopups) { + for (auto const& p : m_inputMethodPopups) { if (p->getSurface() == surface) return p.get(); } diff --git a/src/managers/input/InputMethodRelay.hpp b/src/managers/input/InputMethodRelay.hpp index 602a939a..cb631b12 100644 --- a/src/managers/input/InputMethodRelay.hpp +++ b/src/managers/input/InputMethodRelay.hpp @@ -37,13 +37,13 @@ class CInputMethodRelay { void updateAllPopups(); - WP m_pIME; + WP m_inputMethod; private: - std::vector> m_vTextInputs; - std::vector> m_vIMEPopups; + std::vector> m_textInputs; + std::vector> m_inputMethodPopups; - WP m_pLastKbFocus; + WP m_lastKbFocus; struct { CHyprSignalListener newTIV3; @@ -52,7 +52,7 @@ class CInputMethodRelay { CHyprSignalListener commitIME; CHyprSignalListener destroyIME; CHyprSignalListener newPopup; - } listeners; + } m_listeners; friend class CHyprRenderer; friend class CInputManager; diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp index 62c0332a..f957c96e 100644 --- a/src/managers/input/Swipe.cpp +++ b/src/managers/input/Swipe.cpp @@ -33,11 +33,11 @@ void CInputManager::beginWorkspaceSwipe() { Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_name); - m_sActiveSwipe.pWorkspaceBegin = PWORKSPACE; - m_sActiveSwipe.delta = 0; - m_sActiveSwipe.pMonitor = g_pCompositor->m_lastMonitor; - m_sActiveSwipe.avgSpeed = 0; - m_sActiveSwipe.speedPoints = 0; + m_activeSwipe.pWorkspaceBegin = PWORKSPACE; + m_activeSwipe.delta = 0; + m_activeSwipe.pMonitor = g_pCompositor->m_lastMonitor; + m_activeSwipe.avgSpeed = 0; + m_activeSwipe.speedPoints = 0; if (PWORKSPACE->m_hasFullscreenWindow) { for (auto const& ls : g_pCompositor->m_lastMonitor->m_layerSurfaceLayers[2]) { @@ -49,7 +49,7 @@ void CInputManager::beginWorkspaceSwipe() { void CInputManager::onSwipeEnd(IPointer::SSwipeEndEvent e) { EMIT_HOOK_EVENT_CANCELLABLE("swipeEnd", e); - if (!m_sActiveSwipe.pWorkspaceBegin) + if (!m_activeSwipe.pWorkspaceBegin) return; // no valid swipe endWorkspaceSwipe(); } @@ -61,7 +61,7 @@ void CInputManager::endWorkspaceSwipe() { static auto PSWIPENEW = CConfigValue("gestures:workspace_swipe_create_new"); static auto PSWIPEUSER = CConfigValue("gestures:workspace_swipe_use_r"); static auto PWORKSPACEGAP = CConfigValue("general:gaps_workspaces"); - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); + const auto ANIMSTYLE = m_activeSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); // commit @@ -71,30 +71,30 @@ void CInputManager::endWorkspaceSwipe() { // If we've been swiping off the right end with PSWIPENEW enabled, there is // no workspace there yet, and we need to choose an ID for a new one now. - if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_id && *PSWIPENEW) { + if (workspaceIDRight <= m_activeSwipe.pWorkspaceBegin->m_id && *PSWIPENEW) { workspaceIDRight = getWorkspaceIDNameFromString("r+1").id; } auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER - const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->value(); - const auto XDISTANCE = m_sActiveSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; - const auto YDISTANCE = m_sActiveSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; + const auto RENDEROFFSETMIDDLE = m_activeSwipe.pWorkspaceBegin->m_renderOffset->value(); + const auto XDISTANCE = m_activeSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; + const auto YDISTANCE = m_activeSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; PHLWORKSPACE pSwitchedTo = nullptr; - if ((abs(m_sActiveSwipe.delta) < SWIPEDISTANCE * *PSWIPEPERC && (*PSWIPEFORC == 0 || (*PSWIPEFORC != 0 && m_sActiveSwipe.avgSpeed < *PSWIPEFORC))) || - abs(m_sActiveSwipe.delta) < 2) { + if ((abs(m_activeSwipe.delta) < SWIPEDISTANCE * *PSWIPEPERC && (*PSWIPEFORC == 0 || (*PSWIPEFORC != 0 && m_activeSwipe.avgSpeed < *PSWIPEFORC))) || + abs(m_activeSwipe.delta) < 2) { // revert - if (abs(m_sActiveSwipe.delta) < 2) { + if (abs(m_activeSwipe.delta) < 2) { if (PWORKSPACEL) PWORKSPACEL->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); if (PWORKSPACER) PWORKSPACER->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0, 0)); } else { - if (m_sActiveSwipe.delta < 0) { + if (m_activeSwipe.delta < 0) { // to left if (PWORKSPACEL) { @@ -111,31 +111,31 @@ void CInputManager::endWorkspaceSwipe() { *PWORKSPACER->m_renderOffset = Vector2D{XDISTANCE, 0.0}; } - *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(); + *m_activeSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(); } - pSwitchedTo = m_sActiveSwipe.pWorkspaceBegin; - } else if (m_sActiveSwipe.delta < 0) { + pSwitchedTo = m_activeSwipe.pWorkspaceBegin; + } else if (m_activeSwipe.delta < 0) { // switch to left const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_renderOffset->value() : Vector2D(); if (PWORKSPACEL) - m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft); + m_activeSwipe.pMonitor->changeWorkspace(workspaceIDLeft); else { - m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_sActiveSwipe.pMonitor->m_id)); + m_activeSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_activeSwipe.pMonitor->m_id)); PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); - PWORKSPACEL->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); + PWORKSPACEL->rememberPrevWorkspace(m_activeSwipe.pWorkspaceBegin); } PWORKSPACEL->m_renderOffset->setValue(RENDEROFFSET); PWORKSPACEL->m_alpha->setValueAndWarp(1.f); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); if (VERTANIMS) - *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, YDISTANCE); + *m_activeSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, YDISTANCE); else - *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(XDISTANCE, 0.0); - m_sActiveSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); + *m_activeSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(XDISTANCE, 0.0); + m_activeSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); g_pInputManager->unconstrainMouse(); @@ -147,22 +147,22 @@ void CInputManager::endWorkspaceSwipe() { const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_renderOffset->value() : Vector2D(); if (PWORKSPACER) - m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight); + m_activeSwipe.pMonitor->changeWorkspace(workspaceIDRight); else { - m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_sActiveSwipe.pMonitor->m_id)); + m_activeSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_activeSwipe.pMonitor->m_id)); PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); - PWORKSPACER->rememberPrevWorkspace(m_sActiveSwipe.pWorkspaceBegin); + PWORKSPACER->rememberPrevWorkspace(m_activeSwipe.pWorkspaceBegin); } PWORKSPACER->m_renderOffset->setValue(RENDEROFFSET); PWORKSPACER->m_alpha->setValueAndWarp(1.f); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValue(RENDEROFFSETMIDDLE); if (VERTANIMS) - *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, -YDISTANCE); + *m_activeSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(0.0, -YDISTANCE); else - *m_sActiveSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(-XDISTANCE, 0.0); - m_sActiveSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); + *m_activeSwipe.pWorkspaceBegin->m_renderOffset = Vector2D(-XDISTANCE, 0.0); + m_activeSwipe.pWorkspaceBegin->m_alpha->setValueAndWarp(1.f); g_pInputManager->unconstrainMouse(); @@ -170,18 +170,18 @@ void CInputManager::endWorkspaceSwipe() { pSwitchedTo = PWORKSPACER; } - m_sActiveSwipe.pWorkspaceBegin->rememberPrevWorkspace(pSwitchedTo); + m_activeSwipe.pWorkspaceBegin->rememberPrevWorkspace(pSwitchedTo); - g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); + g_pHyprRenderer->damageMonitor(m_activeSwipe.pMonitor.lock()); if (PWORKSPACEL) PWORKSPACEL->m_forceRendering = false; if (PWORKSPACER) PWORKSPACER->m_forceRendering = false; - m_sActiveSwipe.pWorkspaceBegin->m_forceRendering = false; + m_activeSwipe.pWorkspaceBegin->m_forceRendering = false; - m_sActiveSwipe.pWorkspaceBegin = nullptr; - m_sActiveSwipe.initialDirection = 0; + m_activeSwipe.pWorkspaceBegin = nullptr; + m_activeSwipe.initialDirection = 0; g_pInputManager->refocus(); @@ -194,13 +194,13 @@ void CInputManager::endWorkspaceSwipe() { void CInputManager::onSwipeUpdate(IPointer::SSwipeUpdateEvent e) { EMIT_HOOK_EVENT_CANCELLABLE("swipeUpdate", e); - if (!m_sActiveSwipe.pWorkspaceBegin) + if (!m_activeSwipe.pWorkspaceBegin) return; static auto PSWIPEINVR = CConfigValue("gestures:workspace_swipe_invert"); - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); + const auto ANIMSTYLE = m_activeSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); - const double delta = m_sActiveSwipe.delta + (VERTANIMS ? (*PSWIPEINVR ? -e.delta.y : e.delta.y) : (*PSWIPEINVR ? -e.delta.x : e.delta.x)); + const double delta = m_activeSwipe.delta + (VERTANIMS ? (*PSWIPEINVR ? -e.delta.y : e.delta.y) : (*PSWIPEINVR ? -e.delta.x : e.delta.x)); updateWorkspaceSwipe(delta); } @@ -214,66 +214,66 @@ void CInputManager::updateWorkspaceSwipe(double delta) { static auto PWORKSPACEGAP = CConfigValue("general:gaps_workspaces"); const auto SWIPEDISTANCE = std::clamp(*PSWIPEDIST, (int64_t)1LL, (int64_t)UINT32_MAX); - const auto XDISTANCE = m_sActiveSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; - const auto YDISTANCE = m_sActiveSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); + const auto XDISTANCE = m_activeSwipe.pMonitor->m_size.x + *PWORKSPACEGAP; + const auto YDISTANCE = m_activeSwipe.pMonitor->m_size.y + *PWORKSPACEGAP; + const auto ANIMSTYLE = m_activeSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); - const double d = m_sActiveSwipe.delta - delta; - m_sActiveSwipe.delta = delta; + const double d = m_activeSwipe.delta - delta; + m_activeSwipe.delta = delta; - m_sActiveSwipe.avgSpeed = (m_sActiveSwipe.avgSpeed * m_sActiveSwipe.speedPoints + abs(d)) / (m_sActiveSwipe.speedPoints + 1); - m_sActiveSwipe.speedPoints++; + m_activeSwipe.avgSpeed = (m_activeSwipe.avgSpeed * m_activeSwipe.speedPoints + abs(d)) / (m_activeSwipe.speedPoints + 1); + m_activeSwipe.speedPoints++; auto workspaceIDLeft = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r-1" : "m-1")).id; auto workspaceIDRight = getWorkspaceIDNameFromString((*PSWIPEUSER ? "r+1" : "m+1")).id; - if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_sActiveSwipe.pWorkspaceBegin->m_id) && !*PSWIPENEW) { - m_sActiveSwipe.pWorkspaceBegin = nullptr; // invalidate the swipe + if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_activeSwipe.pWorkspaceBegin->m_id) && !*PSWIPENEW) { + m_activeSwipe.pWorkspaceBegin = nullptr; // invalidate the swipe return; } - m_sActiveSwipe.pWorkspaceBegin->m_forceRendering = true; + m_activeSwipe.pWorkspaceBegin->m_forceRendering = true; - m_sActiveSwipe.delta = std::clamp(m_sActiveSwipe.delta, (double)-SWIPEDISTANCE, (double)SWIPEDISTANCE); + m_activeSwipe.delta = std::clamp(m_activeSwipe.delta, (double)-SWIPEDISTANCE, (double)SWIPEDISTANCE); - if ((m_sActiveSwipe.pWorkspaceBegin->m_id == workspaceIDLeft && *PSWIPENEW && (m_sActiveSwipe.delta < 0)) || - (m_sActiveSwipe.delta > 0 && m_sActiveSwipe.pWorkspaceBegin->getWindows() == 0 && workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_id) || - (m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_id <= workspaceIDLeft)) { + if ((m_activeSwipe.pWorkspaceBegin->m_id == workspaceIDLeft && *PSWIPENEW && (m_activeSwipe.delta < 0)) || + (m_activeSwipe.delta > 0 && m_activeSwipe.pWorkspaceBegin->getWindows() == 0 && workspaceIDRight <= m_activeSwipe.pWorkspaceBegin->m_id) || + (m_activeSwipe.delta < 0 && m_activeSwipe.pWorkspaceBegin->m_id <= workspaceIDLeft)) { - m_sActiveSwipe.delta = 0; + m_activeSwipe.delta = 0; return; } if (*PSWIPEDIRLOCK) { - if (m_sActiveSwipe.initialDirection != 0 && m_sActiveSwipe.initialDirection != (m_sActiveSwipe.delta < 0 ? -1 : 1)) - m_sActiveSwipe.delta = 0; - else if (m_sActiveSwipe.initialDirection == 0 && abs(m_sActiveSwipe.delta) > *PSWIPEDIRLOCKTHRESHOLD) - m_sActiveSwipe.initialDirection = m_sActiveSwipe.delta < 0 ? -1 : 1; + if (m_activeSwipe.initialDirection != 0 && m_activeSwipe.initialDirection != (m_activeSwipe.delta < 0 ? -1 : 1)) + m_activeSwipe.delta = 0; + else if (m_activeSwipe.initialDirection == 0 && abs(m_activeSwipe.delta) > *PSWIPEDIRLOCKTHRESHOLD) + m_activeSwipe.initialDirection = m_activeSwipe.delta < 0 ? -1 : 1; } - if (m_sActiveSwipe.delta < 0) { + if (m_activeSwipe.delta < 0) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDLeft); - if (workspaceIDLeft > m_sActiveSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { + if (workspaceIDLeft > m_activeSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { if (*PSWIPENEW) { - g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); + g_pHyprRenderer->damageMonitor(m_activeSwipe.pMonitor.lock()); if (VERTANIMS) - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); else - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos(); + m_activeSwipe.pWorkspaceBegin->updateWindowDecos(); return; } - m_sActiveSwipe.delta = 0; + m_activeSwipe.delta = 0; return; } PWORKSPACE->m_forceRendering = true; PWORKSPACE->m_alpha->setValueAndWarp(1.f); - if (workspaceIDLeft != workspaceIDRight && workspaceIDRight != m_sActiveSwipe.pWorkspaceBegin->m_id) { + if (workspaceIDLeft != workspaceIDRight && workspaceIDRight != m_activeSwipe.pWorkspaceBegin->m_id) { const auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); if (PWORKSPACER) { @@ -283,37 +283,37 @@ void CInputManager::updateWorkspaceSwipe(double delta) { } if (VERTANIMS) { - PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE - YDISTANCE)); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE - YDISTANCE)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); } else { - PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE - XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE - XDISTANCE, 0.0)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); } PWORKSPACE->updateWindowDecos(); } else { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight); - if (workspaceIDRight < m_sActiveSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { + if (workspaceIDRight < m_activeSwipe.pWorkspaceBegin->m_id || !PWORKSPACE) { if (*PSWIPENEW) { - g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); + g_pHyprRenderer->damageMonitor(m_activeSwipe.pMonitor.lock()); if (VERTANIMS) - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); else - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos(); + m_activeSwipe.pWorkspaceBegin->updateWindowDecos(); return; } - m_sActiveSwipe.delta = 0; + m_activeSwipe.delta = 0; return; } PWORKSPACE->m_forceRendering = true; PWORKSPACE->m_alpha->setValueAndWarp(1.f); - if (workspaceIDLeft != workspaceIDRight && workspaceIDLeft != m_sActiveSwipe.pWorkspaceBegin->m_id) { + if (workspaceIDLeft != workspaceIDRight && workspaceIDLeft != m_activeSwipe.pWorkspaceBegin->m_id) { const auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); if (PWORKSPACEL) { @@ -323,22 +323,22 @@ void CInputManager::updateWorkspaceSwipe(double delta) { } if (VERTANIMS) { - PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE + YDISTANCE)); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE + YDISTANCE)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(0.0, ((-m_activeSwipe.delta) / SWIPEDISTANCE) * YDISTANCE)); } else { - PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE + XDISTANCE, 0.0)); - m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); + PWORKSPACE->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE + XDISTANCE, 0.0)); + m_activeSwipe.pWorkspaceBegin->m_renderOffset->setValueAndWarp(Vector2D(((-m_activeSwipe.delta) / SWIPEDISTANCE) * XDISTANCE, 0.0)); } PWORKSPACE->updateWindowDecos(); } - g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor.lock()); + g_pHyprRenderer->damageMonitor(m_activeSwipe.pMonitor.lock()); - m_sActiveSwipe.pWorkspaceBegin->updateWindowDecos(); + m_activeSwipe.pWorkspaceBegin->updateWindowDecos(); if (*PSWIPEFOREVER) { - if (abs(m_sActiveSwipe.delta) >= SWIPEDISTANCE) { + if (abs(m_activeSwipe.delta) >= SWIPEDISTANCE) { onSwipeEnd({}); beginWorkspaceSwipe(); } diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 347ea6c7..5d80f1d4 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -136,7 +136,7 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { simulateMouseMovement(); refocusTablet(PTAB, PTOOL, true); - m_tmrLastCursorMovement.reset(); + m_lastCursorMovement.reset(); } if (e.updatedAxes & CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_PRESSURE) @@ -217,8 +217,8 @@ void CInputManager::onTabletProximity(CTablet::SProximityEvent e) { } void CInputManager::newTablet(SP pDevice) { - const auto PNEWTABLET = m_vTablets.emplace_back(CTablet::create(pDevice)); - m_vHIDs.emplace_back(PNEWTABLET); + const auto PNEWTABLET = m_tablets.emplace_back(CTablet::create(pDevice)); + m_hids.emplace_back(PNEWTABLET); try { PNEWTABLET->m_hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); @@ -240,13 +240,13 @@ void CInputManager::newTablet(SP pDevice) { SP CInputManager::ensureTabletToolPresent(SP pTool) { - for (auto const& t : m_vTabletTools) { + for (auto const& t : m_tabletTools) { if (t->aq() == pTool) return t; } - const auto PTOOL = m_vTabletTools.emplace_back(CTabletTool::create(pTool)); - m_vHIDs.emplace_back(PTOOL); + const auto PTOOL = m_tabletTools.emplace_back(CTabletTool::create(pTool)); + m_hids.emplace_back(PTOOL); try { PTOOL->m_hlName = g_pInputManager->getNameForNewDevice(pTool->getName()); @@ -265,8 +265,8 @@ SP CInputManager::ensureTabletToolPresent(SP pDevice) { - const auto PNEWPAD = m_vTabletPads.emplace_back(CTabletPad::create(pDevice)); - m_vHIDs.emplace_back(PNEWPAD); + const auto PNEWPAD = m_tabletPads.emplace_back(CTabletPad::create(pDevice)); + m_hids.emplace_back(PNEWPAD); try { PNEWPAD->m_hlName = g_pInputManager->getNameForNewDevice(pDevice->getName()); diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index 25c5b949..160d1c90 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -7,48 +7,48 @@ #include "../../protocols/InputMethodV2.hpp" #include "../../protocols/core/Compositor.hpp" -CTextInput::CTextInput(WP ti) : pV1Input(ti) { +CTextInput::CTextInput(WP ti) : m_v1Input(ti) { initCallbacks(); } -CTextInput::CTextInput(WP ti) : pV3Input(ti) { +CTextInput::CTextInput(WP ti) : m_v3Input(ti) { initCallbacks(); } void CTextInput::initCallbacks() { if (isV3()) { - const auto INPUT = pV3Input.lock(); + const auto INPUT = m_v3Input.lock(); - listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { onEnabled(); }); - listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); - listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); - listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); - listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); - g_pInputManager->m_sIMERelay.removeTextInput(this); - if (!g_pInputManager->m_sIMERelay.getFocusedTextInput()) - g_pInputManager->m_sIMERelay.deactivateIME(this); + m_listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { onEnabled(); }); + m_listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); + m_listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); + m_listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); + m_listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); + g_pInputManager->m_relay.removeTextInput(this); + if (!g_pInputManager->m_relay.getFocusedTextInput()) + g_pInputManager->m_relay.deactivateIME(this); }); if (!g_pCompositor->m_lastFocus.expired() && g_pCompositor->m_lastFocus->client() == INPUT->client()) enter(g_pCompositor->m_lastFocus.lock()); } else { - const auto INPUT = pV1Input.lock(); + const auto INPUT = m_v1Input.lock(); - listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { + m_listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { const auto SURFACE = std::any_cast>(p); onEnabled(SURFACE); }); - listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); - listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); - listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); - listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); - g_pInputManager->m_sIMERelay.removeTextInput(this); - if (!g_pInputManager->m_sIMERelay.getFocusedTextInput()) - g_pInputManager->m_sIMERelay.deactivateIME(this); + m_listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); + m_listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); + m_listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); + m_listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); + g_pInputManager->m_relay.removeTextInput(this); + if (!g_pInputManager->m_relay.getFocusedTextInput()) + g_pInputManager->m_relay.deactivateIME(this); }); } } @@ -56,24 +56,24 @@ void CTextInput::initCallbacks() { void CTextInput::onEnabled(SP surfV1) { Debug::log(LOG, "TI ENABLE"); - if (g_pInputManager->m_sIMERelay.m_pIME.expired()) { + if (g_pInputManager->m_relay.m_inputMethod.expired()) { // Debug::log(WARN, "Enabling TextInput on no IME!"); return; } // v1 only, map surface to PTI if (!isV3()) { - if (g_pCompositor->m_lastFocus != surfV1 || !pV1Input->active) + if (g_pCompositor->m_lastFocus != surfV1 || !m_v1Input->active) return; enter(surfV1); } - g_pInputManager->m_sIMERelay.activateIME(this); + g_pInputManager->m_relay.activateIME(this); } void CTextInput::onDisabled() { - if (g_pInputManager->m_sIMERelay.m_pIME.expired()) { + if (g_pInputManager->m_relay.m_inputMethod.expired()) { // Debug::log(WARN, "Disabling TextInput on no IME!"); return; } @@ -81,103 +81,103 @@ void CTextInput::onDisabled() { if (!isV3()) leave(); - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); if (!focusedSurface()) return; - const auto PFOCUSEDTI = g_pInputManager->m_sIMERelay.getFocusedTextInput(); + const auto PFOCUSEDTI = g_pInputManager->m_relay.getFocusedTextInput(); if (!PFOCUSEDTI || PFOCUSEDTI != this) return; - g_pInputManager->m_sIMERelay.deactivateIME(this); + g_pInputManager->m_relay.deactivateIME(this); } void CTextInput::onReset() { - if (g_pInputManager->m_sIMERelay.m_pIME.expired()) + if (g_pInputManager->m_relay.m_inputMethod.expired()) return; if (!focusedSurface()) return; - const auto PFOCUSEDTI = g_pInputManager->m_sIMERelay.getFocusedTextInput(); + const auto PFOCUSEDTI = g_pInputManager->m_relay.getFocusedTextInput(); if (!PFOCUSEDTI || PFOCUSEDTI != this) return; - g_pInputManager->m_sIMERelay.deactivateIME(this, false); - g_pInputManager->m_sIMERelay.activateIME(this); + g_pInputManager->m_relay.deactivateIME(this, false); + g_pInputManager->m_relay.activateIME(this); } void CTextInput::onCommit() { - if (g_pInputManager->m_sIMERelay.m_pIME.expired()) { + if (g_pInputManager->m_relay.m_inputMethod.expired()) { // Debug::log(WARN, "Committing TextInput on no IME!"); return; } - if (!(isV3() ? pV3Input->current.enabled.value : pV1Input->active)) { + if (!(isV3() ? m_v3Input->current.enabled.value : m_v1Input->active)) { Debug::log(WARN, "Disabled TextInput commit?"); return; } - g_pInputManager->m_sIMERelay.commitIMEState(this); + g_pInputManager->m_relay.commitIMEState(this); } void CTextInput::setFocusedSurface(SP pSurface) { - if (pSurface == pFocusedSurface) + if (pSurface == m_focusedSurface) return; - pFocusedSurface = pSurface; + m_focusedSurface = pSurface; if (!pSurface) return; - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); - listeners.surfaceUnmap = pSurface->events.unmap.registerListener([this](std::any d) { + m_listeners.surfaceUnmap = pSurface->events.unmap.registerListener([this](std::any d) { Debug::log(LOG, "Unmap TI owner1"); - if (enterLocks) - enterLocks--; - pFocusedSurface.reset(); - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); + if (m_enterLocks) + m_enterLocks--; + m_focusedSurface.reset(); + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); - if (isV3() && !pV3Input.expired() && pV3Input->current.enabled.value) { - pV3Input->pending.enabled.value = false; - pV3Input->pending.enabled.isDisablePending = false; - pV3Input->pending.enabled.isEnablePending = false; - pV3Input->current.enabled.value = false; + if (isV3() && !m_v3Input.expired() && m_v3Input->current.enabled.value) { + m_v3Input->pending.enabled.value = false; + m_v3Input->pending.enabled.isDisablePending = false; + m_v3Input->pending.enabled.isEnablePending = false; + m_v3Input->current.enabled.value = false; } - if (!g_pInputManager->m_sIMERelay.getFocusedTextInput()) - g_pInputManager->m_sIMERelay.deactivateIME(this); + if (!g_pInputManager->m_relay.getFocusedTextInput()) + g_pInputManager->m_relay.deactivateIME(this); }); - listeners.surfaceDestroy = pSurface->events.destroy.registerListener([this](std::any d) { + m_listeners.surfaceDestroy = pSurface->events.destroy.registerListener([this](std::any d) { Debug::log(LOG, "Destroy TI owner1"); - if (enterLocks) - enterLocks--; - pFocusedSurface.reset(); - listeners.surfaceUnmap.reset(); - listeners.surfaceDestroy.reset(); + if (m_enterLocks) + m_enterLocks--; + m_focusedSurface.reset(); + m_listeners.surfaceUnmap.reset(); + m_listeners.surfaceDestroy.reset(); - if (isV3() && !pV3Input.expired() && pV3Input->current.enabled.value) { - pV3Input->pending.enabled.value = false; - pV3Input->pending.enabled.isDisablePending = false; - pV3Input->pending.enabled.isEnablePending = false; - pV3Input->current.enabled.value = false; + if (isV3() && !m_v3Input.expired() && m_v3Input->current.enabled.value) { + m_v3Input->pending.enabled.value = false; + m_v3Input->pending.enabled.isDisablePending = false; + m_v3Input->pending.enabled.isEnablePending = false; + m_v3Input->current.enabled.value = false; } - if (!g_pInputManager->m_sIMERelay.getFocusedTextInput()) - g_pInputManager->m_sIMERelay.deactivateIME(this); + if (!g_pInputManager->m_relay.getFocusedTextInput()) + g_pInputManager->m_relay.deactivateIME(this); }); } bool CTextInput::isV3() { - return pV3Input && !pV1Input; + return m_v3Input && !m_v1Input; } void CTextInput::enter(SP pSurface) { @@ -190,17 +190,17 @@ void CTextInput::enter(SP pSurface) { if (focusedSurface()) leave(); - enterLocks++; - if (enterLocks != 1) { + m_enterLocks++; + if (m_enterLocks != 1) { Debug::log(ERR, "BUG THIS: TextInput has != 1 locks in enter"); leave(); - enterLocks = 1; + m_enterLocks = 1; } if (isV3()) - pV3Input->enter(pSurface); + m_v3Input->enter(pSurface); else { - pV1Input->enter(pSurface); + m_v1Input->enter(pSurface); } setFocusedSurface(pSurface); @@ -210,33 +210,33 @@ void CTextInput::leave() { if (!focusedSurface()) return; - enterLocks--; - if (enterLocks != 0) { + m_enterLocks--; + if (m_enterLocks != 0) { Debug::log(ERR, "BUG THIS: TextInput has != 0 locks in leave"); - enterLocks = 0; + m_enterLocks = 0; } if (isV3()) - pV3Input->leave(focusedSurface()); + m_v3Input->leave(focusedSurface()); else - pV1Input->leave(); + m_v1Input->leave(); setFocusedSurface(nullptr); - g_pInputManager->m_sIMERelay.deactivateIME(this); + g_pInputManager->m_relay.deactivateIME(this); } SP CTextInput::focusedSurface() { - return pFocusedSurface.lock(); + return m_focusedSurface.lock(); } wl_client* CTextInput::client() { - return isV3() ? pV3Input->client() : pV1Input->client(); + return isV3() ? m_v3Input->client() : m_v1Input->client(); } void CTextInput::commitStateToIME(SP ime) { - if (isV3() && !pV3Input.expired()) { - const auto INPUT = pV3Input.lock(); + if (isV3() && !m_v3Input.expired()) { + const auto INPUT = m_v3Input.lock(); if (INPUT->current.surrounding.updated) ime->surroundingText(INPUT->current.surrounding.text, INPUT->current.surrounding.cursor, INPUT->current.surrounding.anchor); @@ -245,26 +245,26 @@ void CTextInput::commitStateToIME(SP ime) { if (INPUT->current.contentType.updated) ime->textContentType(INPUT->current.contentType.hint, INPUT->current.contentType.purpose); - } else if (!pV1Input.expired()) { - const auto INPUT = pV1Input.lock(); + } else if (!m_v1Input.expired()) { + const auto INPUT = m_v1Input.lock(); if (INPUT->pendingSurrounding.isPending) ime->surroundingText(INPUT->pendingSurrounding.text, INPUT->pendingSurrounding.cursor, INPUT->pendingSurrounding.anchor); ime->textChangeCause(ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD); - if (pV1Input->pendingContentType.isPending) + if (m_v1Input->pendingContentType.isPending) ime->textContentType((zwpTextInputV3ContentHint)INPUT->pendingContentType.hint, (zwpTextInputV3ContentPurpose)INPUT->pendingContentType.purpose); } - g_pInputManager->m_sIMERelay.updateAllPopups(); + g_pInputManager->m_relay.updateAllPopups(); ime->done(); } void CTextInput::updateIMEState(SP ime) { if (isV3()) { - const auto INPUT = pV3Input.lock(); + const auto INPUT = m_v3Input.lock(); if (ime->current.preeditString.committed) INPUT->preeditString(ime->current.preeditString.string, ime->current.preeditString.begin, ime->current.preeditString.end); @@ -277,35 +277,35 @@ void CTextInput::updateIMEState(SP ime) { INPUT->sendDone(); } else { - const auto INPUT = pV1Input.lock(); + const auto INPUT = m_v1Input.lock(); if (ime->current.preeditString.committed) { INPUT->preeditCursor(ime->current.preeditString.begin); INPUT->preeditStyling(0, std::string(ime->current.preeditString.string).length(), ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); - INPUT->preeditString(pV1Input->serial, ime->current.preeditString.string.c_str(), ""); + INPUT->preeditString(m_v1Input->serial, ime->current.preeditString.string.c_str(), ""); } else { INPUT->preeditCursor(0); INPUT->preeditStyling(0, 0, ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); - INPUT->preeditString(pV1Input->serial, "", ""); + INPUT->preeditString(m_v1Input->serial, "", ""); } if (ime->current.committedString.committed) - INPUT->commitString(pV1Input->serial, ime->current.committedString.string.c_str()); + INPUT->commitString(m_v1Input->serial, ime->current.committedString.string.c_str()); if (ime->current.deleteSurrounding.committed) { INPUT->deleteSurroundingText(std::string(ime->current.preeditString.string).length() - ime->current.deleteSurrounding.before, ime->current.deleteSurrounding.after + ime->current.deleteSurrounding.before); if (ime->current.preeditString.committed) - INPUT->commitString(pV1Input->serial, ime->current.preeditString.string.c_str()); + INPUT->commitString(m_v1Input->serial, ime->current.preeditString.string.c_str()); } } } bool CTextInput::hasCursorRectangle() { - return !isV3() || pV3Input->current.box.updated; + return !isV3() || m_v3Input->current.box.updated; } CBox CTextInput::cursorBox() { - return CBox{isV3() ? pV3Input->current.box.cursorBox : pV1Input->cursorRectangle}; + return CBox{isV3() ? m_v3Input->current.box.cursorBox : m_v1Input->cursorRectangle}; } diff --git a/src/managers/input/TextInput.hpp b/src/managers/input/TextInput.hpp index 37b471af..fd24dbfa 100644 --- a/src/managers/input/TextInput.hpp +++ b/src/managers/input/TextInput.hpp @@ -38,10 +38,10 @@ class CTextInput { void setFocusedSurface(SP pSurface); void initCallbacks(); - WP pFocusedSurface; - int enterLocks = 0; - WP pV3Input; - WP pV1Input; + WP m_focusedSurface; + int m_enterLocks = 0; + WP m_v3Input; + WP m_v1Input; struct { CHyprSignalListener enable; @@ -51,5 +51,5 @@ class CTextInput { CHyprSignalListener destroy; CHyprSignalListener surfaceUnmap; CHyprSignalListener surfaceDestroy; - } listeners; + } m_listeners; }; diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index f8964521..83447593 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -12,7 +12,7 @@ #include "debug/Log.hpp" void CInputManager::onTouchDown(ITouch::SDownEvent e) { - m_bLastInputTouch = true; + m_lastInputTouch = true; static auto PSWIPETOUCH = CConfigValue("gestures:workspace_swipe_touch"); static auto PGAPSOUTDATA = CConfigValue("general:gaps_out"); @@ -31,7 +31,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { refocus(); - if (m_ecbClickBehavior == CLICKMODE_KILL) { + if (m_clickBehavior == CLICKMODE_KILL) { IPointer::SButtonEvent e; e.state = WL_POINTER_BUTTON_STATE_PRESSED; g_pInputManager->processMouseDownKill(e); @@ -39,10 +39,10 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { } // Don't propagate new touches when a workspace swipe is in progress. - if (m_sActiveSwipe.pWorkspaceBegin) { + if (m_activeSwipe.pWorkspaceBegin) { return; // TODO: Don't swipe if you touched a floating window. - } else if (*PSWIPETOUCH && (m_pFoundLSToFocus.expired() || m_pFoundLSToFocus->m_layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { + } else if (*PSWIPETOUCH && (m_foundLSToFocus.expired() || m_foundLSToFocus->m_layer <= 1) && !g_pSessionLockManager->isSessionLocked()) { const auto PWORKSPACE = PMONITOR->m_activeWorkspace; const auto STYLE = PWORKSPACE->m_renderOffset->getStyle(); const bool VERTANIMS = STYLE == "slidevert" || STYLE.starts_with("slidefadevert"); @@ -51,83 +51,83 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { const double POSITION = (VERTANIMS ? e.pos.y : e.pos.x); if (POSITION < TARGETLEFT || POSITION > TARGETRIGHT) { beginWorkspaceSwipe(); - m_sActiveSwipe.touch_id = e.touchID; + m_activeSwipe.touch_id = e.touchID; // Set the initial direction based on which edge you started from if (POSITION > 0.5) - m_sActiveSwipe.initialDirection = *PSWIPEINVR ? -1 : 1; + m_activeSwipe.initialDirection = *PSWIPEINVR ? -1 : 1; else - m_sActiveSwipe.initialDirection = *PSWIPEINVR ? 1 : -1; + m_activeSwipe.initialDirection = *PSWIPEINVR ? 1 : -1; return; } } if (g_pSessionLockManager->isSessionLocked()) { - m_sTouchData.touchFocusLockSurface = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); - if (!m_sTouchData.touchFocusLockSurface) + m_touchData.touchFocusLockSurface = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); + if (!m_touchData.touchFocusLockSurface) Debug::log(WARN, "The session is locked but can't find a lock surface"); else - m_sTouchData.touchFocusSurface = m_sTouchData.touchFocusLockSurface->surface->surface(); + m_touchData.touchFocusSurface = m_touchData.touchFocusLockSurface->surface->surface(); } else { - m_sTouchData.touchFocusLockSurface.reset(); - m_sTouchData.touchFocusWindow = m_pFoundWindowToFocus; - m_sTouchData.touchFocusSurface = m_pFoundSurfaceToFocus; - m_sTouchData.touchFocusLS = m_pFoundLSToFocus; + m_touchData.touchFocusLockSurface.reset(); + m_touchData.touchFocusWindow = m_foundWindowToFocus; + m_touchData.touchFocusSurface = m_foundSurfaceToFocus; + m_touchData.touchFocusLS = m_foundLSToFocus; } Vector2D local; - if (m_sTouchData.touchFocusLockSurface) { - local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->m_position; - m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; - } else if (!m_sTouchData.touchFocusWindow.expired()) { - if (m_sTouchData.touchFocusWindow->m_isX11) { - local = (g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_realPosition->goal()) * m_sTouchData.touchFocusWindow->m_X11SurfaceScaledBy; - m_sTouchData.touchSurfaceOrigin = m_sTouchData.touchFocusWindow->m_realPosition->goal(); + if (m_touchData.touchFocusLockSurface) { + local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->m_position; + m_touchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; + } else if (!m_touchData.touchFocusWindow.expired()) { + if (m_touchData.touchFocusWindow->m_isX11) { + local = (g_pInputManager->getMouseCoordsInternal() - m_touchData.touchFocusWindow->m_realPosition->goal()) * m_touchData.touchFocusWindow->m_X11SurfaceScaledBy; + m_touchData.touchSurfaceOrigin = m_touchData.touchFocusWindow->m_realPosition->goal(); } else { - g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_sTouchData.touchFocusWindow.lock(), local); - m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; + g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_touchData.touchFocusWindow.lock(), local); + m_touchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } - } else if (!m_sTouchData.touchFocusLS.expired()) { - local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusLS->m_geometry.pos(); + } else if (!m_touchData.touchFocusLS.expired()) { + local = g_pInputManager->getMouseCoordsInternal() - m_touchData.touchFocusLS->m_geometry.pos(); - m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; + m_touchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local; } else return; // oops, nothing found. - g_pSeatManager->sendTouchDown(m_sTouchData.touchFocusSurface.lock(), e.timeMs, e.touchID, local); + g_pSeatManager->sendTouchDown(m_touchData.touchFocusSurface.lock(), e.timeMs, e.touchID, local); } void CInputManager::onTouchUp(ITouch::SUpEvent e) { - m_bLastInputTouch = true; + m_lastInputTouch = true; EMIT_HOOK_EVENT_CANCELLABLE("touchUp", e); - if (m_sActiveSwipe.pWorkspaceBegin) { + if (m_activeSwipe.pWorkspaceBegin) { // If there was a swipe from this finger, end it. - if (e.touchID == m_sActiveSwipe.touch_id) + if (e.touchID == m_activeSwipe.touch_id) endWorkspaceSwipe(); return; } - if (m_sTouchData.touchFocusSurface) + if (m_touchData.touchFocusSurface) g_pSeatManager->sendTouchUp(e.timeMs, e.touchID); } void CInputManager::onTouchMove(ITouch::SMotionEvent e) { - m_bLastInputTouch = true; + m_lastInputTouch = true; EMIT_HOOK_EVENT_CANCELLABLE("touchMove", e); - if (m_sActiveSwipe.pWorkspaceBegin) { + if (m_activeSwipe.pWorkspaceBegin) { // Do nothing if this is using a different finger. - if (e.touchID != m_sActiveSwipe.touch_id) + if (e.touchID != m_activeSwipe.touch_id) return; - const auto ANIMSTYLE = m_sActiveSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); + const auto ANIMSTYLE = m_activeSwipe.pWorkspaceBegin->m_renderOffset->getStyle(); const bool VERTANIMS = ANIMSTYLE == "slidevert" || ANIMSTYLE.starts_with("slidefadevert"); static auto PSWIPEINVR = CConfigValue("gestures:workspace_swipe_touch_invert"); static auto PSWIPEDIST = CConfigValue("gestures:workspace_swipe_distance"); const auto SWIPEDISTANCE = std::clamp(*PSWIPEDIST, (int64_t)1LL, (int64_t)UINT32_MAX); // Handle the workspace swipe if there is one - if (m_sActiveSwipe.initialDirection == -1) { + if (m_activeSwipe.initialDirection == -1) { if (*PSWIPEINVR) // go from 0 to -SWIPEDISTANCE updateWorkspaceSwipe(SWIPEDISTANCE * ((VERTANIMS ? e.pos.y : e.pos.x) - 1)); @@ -142,27 +142,27 @@ void CInputManager::onTouchMove(ITouch::SMotionEvent e) { updateWorkspaceSwipe(SWIPEDISTANCE * (1 - (VERTANIMS ? e.pos.y : e.pos.x))); return; } - if (m_sTouchData.touchFocusLockSurface) { - const auto PMONITOR = g_pCompositor->getMonitorFromID(m_sTouchData.touchFocusLockSurface->iMonitorID); + if (m_touchData.touchFocusLockSurface) { + const auto PMONITOR = g_pCompositor->getMonitorFromID(m_touchData.touchFocusLockSurface->iMonitorID); g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); auto local = g_pInputManager->getMouseCoordsInternal() - PMONITOR->m_position; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); - } else if (validMapped(m_sTouchData.touchFocusWindow)) { - const auto PMONITOR = m_sTouchData.touchFocusWindow->m_monitor.lock(); + } else if (validMapped(m_touchData.touchFocusWindow)) { + const auto PMONITOR = m_touchData.touchFocusWindow->m_monitor.lock(); g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); - auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin; - if (m_sTouchData.touchFocusWindow->m_isX11) - local = local * m_sTouchData.touchFocusWindow->m_X11SurfaceScaledBy; + auto local = g_pInputManager->getMouseCoordsInternal() - m_touchData.touchSurfaceOrigin; + if (m_touchData.touchFocusWindow->m_isX11) + local = local * m_touchData.touchFocusWindow->m_X11SurfaceScaledBy; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); - } else if (!m_sTouchData.touchFocusLS.expired()) { - const auto PMONITOR = m_sTouchData.touchFocusLS->m_monitor.lock(); + } else if (!m_touchData.touchFocusLS.expired()) { + const auto PMONITOR = m_touchData.touchFocusLS->m_monitor.lock(); g_pCompositor->warpCursorTo({PMONITOR->m_position.x + e.pos.x * PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y}, true); - const auto local = g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchSurfaceOrigin; + const auto local = g_pInputManager->getMouseCoordsInternal() - m_touchData.touchSurfaceOrigin; g_pSeatManager->sendTouchMotion(e.timeMs, e.touchID, local); } diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index ed24a5fe..2858ee95 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -69,7 +69,7 @@ CPointerConstraint::CPointerConstraint(SP resource_, SPm_vConstraints, [this](const auto& c) { + std::erase_if(g_pInputManager->m_constraints, [this](const auto& c) { const auto SHP = c.lock(); return !SHP || SHP.get() == this; }); @@ -85,7 +85,7 @@ void CPointerConstraint::sharedConstructions() { if (active) deactivate(); - std::erase_if(g_pInputManager->m_vConstraints, [this](const auto& c) { + std::erase_if(g_pInputManager->m_constraints, [this](const auto& c) { const auto SHP = c.lock(); return !SHP || SHP.get() == this; }); @@ -113,7 +113,7 @@ void CPointerConstraint::deactivate() { if (lifetime == ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT) { dead = true; // remove from inputmgr - std::erase_if(g_pInputManager->m_vConstraints, [this](const auto& c) { + std::erase_if(g_pInputManager->m_constraints, [this](const auto& c) { const auto SHP = c.lock(); return !SHP || SHP.get() == this; }); @@ -240,7 +240,7 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra OWNER->appendConstraint(constraint); - g_pInputManager->m_vConstraints.emplace_back(constraint); + g_pInputManager->m_constraints.emplace_back(constraint); if (g_pCompositor->m_lastFocus == OWNER->resource()) constraint->activate(); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 445c39cd..9dbc732b 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -104,13 +104,13 @@ CHyprRenderer::CHyprRenderer() { }); static auto P2 = g_pHookSystem->hookDynamic("mouseMove", [&](void* self, SCallbackInfo& info, std::any param) { - if (!m_sCursorHiddenConditions.hiddenOnKeyboard && m_sCursorHiddenConditions.hiddenOnTouch == g_pInputManager->m_bLastInputTouch && + if (!m_sCursorHiddenConditions.hiddenOnKeyboard && m_sCursorHiddenConditions.hiddenOnTouch == g_pInputManager->m_lastInputTouch && !m_sCursorHiddenConditions.hiddenOnTimeout) return; m_sCursorHiddenConditions.hiddenOnKeyboard = false; m_sCursorHiddenConditions.hiddenOnTimeout = false; - m_sCursorHiddenConditions.hiddenOnTouch = g_pInputManager->m_bLastInputTouch; + m_sCursorHiddenConditions.hiddenOnTouch = g_pInputManager->m_lastInputTouch; ensureCursorRenderingMode(); }); @@ -969,7 +969,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA } // Render IME popups - for (auto const& imep : g_pInputManager->m_sIMERelay.m_vIMEPopups) { + for (auto const& imep : g_pInputManager->m_relay.m_inputMethodPopups) { renderIMEPopup(imep.get(), pMonitor, time); } @@ -2004,7 +2004,7 @@ void CHyprRenderer::ensureCursorRenderingMode() { m_sCursorHiddenConditions.hiddenOnKeyboard = false; if (*PCURSORTIMEOUT > 0) - m_sCursorHiddenConditions.hiddenOnTimeout = *PCURSORTIMEOUT < g_pInputManager->m_tmrLastCursorMovement.getSeconds(); + m_sCursorHiddenConditions.hiddenOnTimeout = *PCURSORTIMEOUT < g_pInputManager->m_lastCursorMovement.getSeconds(); const bool HIDE = m_sCursorHiddenConditions.hiddenOnTimeout || m_sCursorHiddenConditions.hiddenOnTouch || m_sCursorHiddenConditions.hiddenOnKeyboard; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index aa070e67..bb7383b3 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -404,7 +404,7 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) { g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; } - g_pInputManager->currentlyDraggedWindow = pWindow; + g_pInputManager->m_currentlyDraggedWindow = pWindow; if (!g_pCompositor->isWindowActive(pWindow)) g_pCompositor->focusWindow(pWindow); @@ -421,11 +421,11 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); const bool FLOATEDINTOTILED = !m_pWindow->m_isFloating && !pDraggedWindow->m_draggingTiled; - g_pInputManager->m_bWasDraggingWindow = false; + g_pInputManager->m_wasDraggingWindow = false; if (!pDraggedWindow->canBeGroupedInto(m_pWindow.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR) || (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_groupData.pNextWindow.lock() && m_pWindow->m_groupData.pNextWindow.lock())) { - g_pInputManager->m_bWasDraggingWindow = true; + g_pInputManager->m_wasDraggingWindow = true; return false; } diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index ed0e3000..3813e714 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -51,7 +51,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { if (!TEXTURE->m_iTexID) return; - const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->currentlyDraggedWindow && g_pInputManager->dragMode == MBIND_RESIZE; + const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; TRACY_GPU_ZONE("RenderSurface"); auto PSURFACE = CWLSurface::fromResource(data.surface); @@ -140,7 +140,7 @@ void CSurfacePassElement::draw(const CRegion& damage) { CBox CSurfacePassElement::getTexBox() { const double outputX = -data.pMonitor->m_position.x, outputY = -data.pMonitor->m_position.y; - const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->currentlyDraggedWindow && g_pInputManager->dragMode == MBIND_RESIZE; + const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; auto PSURFACE = CWLSurface::fromResource(data.surface); CBox windowBox; From 6f174a9e0892aab5c4c17a7da9be7f92bcdcebec Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 2 May 2025 00:16:17 +0100 Subject: [PATCH 0140/1077] renderer: render fading out floating windows over fs --- src/render/Renderer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 9dbc732b..15c52ba9 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -338,7 +338,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(PHLMONITOR pMonitor, PHLWOR // then render windows over fullscreen. for (auto const& w : g_pCompositor->m_windows) { - if (w->m_workspace != pWorkspaceWindow->m_workspace || !w->m_isFloating || (!w->m_createdOverFullscreen && !w->m_pinned) || (!w->m_isMapped && !w->m_fadingOut) || + if (w->workspaceID() != pWorkspaceWindow->workspaceID() || !w->m_isFloating || (!w->m_createdOverFullscreen && !w->m_pinned) || (!w->m_isMapped && !w->m_fadingOut) || w->isFullscreen()) continue; @@ -2146,7 +2146,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { if (w == PCANDIDATE || (!w->m_isMapped && !w->m_fadingOut) || w->isHidden()) continue; - if (w->m_workspace == PCANDIDATE->m_workspace && w->m_isFloating && w->m_createdOverFullscreen && w->visibleOnMonitor(pMonitor)) + if (w->workspaceID() == PCANDIDATE->workspaceID() && w->m_isFloating && w->m_createdOverFullscreen && w->visibleOnMonitor(pMonitor)) return; } From ce821294e21978cadf4c3facbeec421b245ea2c9 Mon Sep 17 00:00:00 2001 From: davc0n Date: Fri, 2 May 2025 17:07:20 +0200 Subject: [PATCH 0141/1077] managers: refactor class member vars (#10242) --- src/Compositor.cpp | 12 +- src/config/ConfigManager.cpp | 4 +- src/debug/HyprCtl.cpp | 10 +- src/debug/HyprDebugOverlay.cpp | 2 +- src/desktop/LayerSurface.cpp | 8 +- src/desktop/Window.cpp | 8 +- src/events/Windows.cpp | 20 +- src/layout/MasterLayout.cpp | 6 +- src/managers/AnimationManager.cpp | 16 +- src/managers/AnimationManager.hpp | 6 +- src/managers/CursorManager.cpp | 161 ++++--- src/managers/CursorManager.hpp | 22 +- src/managers/DonationNagManager.cpp | 8 +- src/managers/DonationNagManager.hpp | 2 +- src/managers/EventManager.cpp | 38 +- src/managers/EventManager.hpp | 6 +- src/managers/HookSystemManager.cpp | 14 +- src/managers/HookSystemManager.hpp | 6 +- src/managers/KeybindManager.cpp | 446 +++++++++--------- src/managers/KeybindManager.hpp | 38 +- src/managers/LayoutManager.cpp | 32 +- src/managers/LayoutManager.hpp | 8 +- src/managers/PointerManager.cpp | 210 ++++----- src/managers/PointerManager.hpp | 22 +- src/managers/ProtocolManager.cpp | 4 +- src/managers/ProtocolManager.hpp | 2 +- src/managers/SeatManager.cpp | 274 +++++------ src/managers/SeatManager.hpp | 35 +- src/managers/SessionLockManager.cpp | 68 +-- src/managers/SessionLockManager.hpp | 8 +- src/managers/TokenManager.cpp | 12 +- src/managers/TokenManager.hpp | 2 +- src/managers/VersionKeeperManager.cpp | 4 +- src/managers/VersionKeeperManager.hpp | 2 +- src/managers/XCursorManager.cpp | 72 +-- src/managers/XCursorManager.hpp | 12 +- src/managers/input/InputManager.cpp | 42 +- src/managers/input/Tablets.cpp | 4 +- src/plugins/PluginAPI.cpp | 6 +- src/protocols/DataDeviceWlr.cpp | 4 +- src/protocols/FocusGrab.cpp | 10 +- src/protocols/InputMethodV2.cpp | 4 +- src/protocols/PointerConstraints.cpp | 2 +- src/protocols/PointerGestures.cpp | 50 +- src/protocols/PrimarySelection.cpp | 16 +- src/protocols/RelativePointer.cpp | 4 +- src/protocols/Tablet.cpp | 2 +- src/protocols/ToplevelExport.cpp | 2 +- src/protocols/XDGShell.cpp | 6 +- src/protocols/core/DataDevice.cpp | 42 +- src/protocols/core/Seat.cpp | 16 +- .../decorations/CHyprGroupBarDecoration.cpp | 8 +- src/render/pass/Pass.cpp | 14 +- src/xwayland/XWM.cpp | 30 +- 54 files changed, 930 insertions(+), 932 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index eca31e96..a9106480 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -93,8 +93,8 @@ static void handleUnrecoverableSignal(int sig) { signal(SIGABRT, SIG_DFL); signal(SIGSEGV, SIG_DFL); - if (g_pHookSystem && g_pHookSystem->m_bCurrentEventPlugin) { - longjmp(g_pHookSystem->m_jbHookFaultJumpBuf, 1); + if (g_pHookSystem && g_pHookSystem->m_currentEventPlugin) { + longjmp(g_pHookSystem->m_hookFaultJumpBuf, 1); return; } @@ -1132,7 +1132,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface return; } - if (m_lastWindow.lock() == pWindow && g_pSeatManager->state.keyboardFocus == pSurface && g_pSeatManager->state.keyboardFocus) + if (m_lastWindow.lock() == pWindow && g_pSeatManager->m_state.keyboardFocus == pSurface && g_pSeatManager->m_state.keyboardFocus) return; if (pWindow->m_pinned) @@ -1216,13 +1216,13 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindowOwner) { - if (g_pSeatManager->state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->state.keyboardFocus == pWindowOwner->m_wlSurface->resource())) + if (g_pSeatManager->m_state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->m_state.keyboardFocus == pWindowOwner->m_wlSurface->resource())) return; // Don't focus when already focused on this. if (g_pSessionLockManager->isSessionLocked() && pSurface && !g_pSessionLockManager->isSurfaceSessionLock(pSurface)) return; - if (g_pSeatManager->seatGrab && !g_pSeatManager->seatGrab->accepts(pSurface)) { + if (g_pSeatManager->m_seatGrab && !g_pSeatManager->m_seatGrab->accepts(pSurface)) { Debug::log(LOG, "surface {:x} won't receive kb focus becuase grab rejected it", (uintptr_t)pSurface.get()); return; } @@ -1242,7 +1242,7 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo return; } - if (g_pSeatManager->keyboard) + if (g_pSeatManager->m_keyboard) g_pSeatManager->setKeyboardFocus(pSurface); if (pWindowOwner) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index ea79f614..54bc685c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2359,9 +2359,9 @@ std::optional CConfigManager::handleBind(const std::string& command // to lower std::transform(HANDLER.begin(), HANDLER.end(), HANDLER.begin(), ::tolower); - const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(HANDLER); + const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(HANDLER); - if (DISPATCHER == g_pKeybindManager->m_mDispatchers.end()) { + if (DISPATCHER == g_pKeybindManager->m_dispatchers.end()) { Debug::log(ERR, "Invalid dispatcher: {}", HANDLER); return "Invalid dispatcher, requested \"" + HANDLER + "\" does not exist"; } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index d1b879d0..68362008 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -866,7 +866,7 @@ static std::string globalShortcutsRequest(eHyprCtlOutputFormat format, std::stri static std::string bindsRequest(eHyprCtlOutputFormat format, std::string request) { std::string ret = ""; if (format == eHyprCtlOutputFormat::FORMAT_NORMAL) { - for (auto const& kb : g_pKeybindManager->m_vKeybinds) { + for (auto const& kb : g_pKeybindManager->m_keybinds) { ret += "bind"; if (kb->locked) ret += "l"; @@ -887,7 +887,7 @@ static std::string bindsRequest(eHyprCtlOutputFormat format, std::string request } else { // json ret += "["; - for (auto const& kb : g_pKeybindManager->m_vKeybinds) { + for (auto const& kb : g_pKeybindManager->m_keybinds) { ret += std::format( R"#( {{ @@ -1076,8 +1076,8 @@ static std::string dispatchRequest(eHyprCtlOutputFormat format, std::string in) if ((int)in.find_first_of(' ') != -1) DISPATCHARG = in.substr(in.find_first_of(' ') + 1); - const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(DISPATCHSTR); - if (DISPATCHER == g_pKeybindManager->m_mDispatchers.end()) + const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(DISPATCHSTR); + if (DISPATCHER == g_pKeybindManager->m_dispatchers.end()) return "Invalid dispatcher"; SDispatchResult res = DISPATCHER->second(DISPATCHARG); @@ -1352,7 +1352,7 @@ static std::string dispatchSeterror(eHyprCtlOutputFormat format, std::string req } static std::string dispatchSetProp(eHyprCtlOutputFormat format, std::string request) { - auto result = g_pKeybindManager->m_mDispatchers["setprop"](request.substr(request.find_first_of(' ') + 1)); + auto result = g_pKeybindManager->m_dispatchers["setprop"](request.substr(request.find_first_of(' ') + 1)); return "DEPRECATED: use hyprctl dispatch setprop instead" + (result.success ? "" : "\n" + result.error); } diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index 874252d0..e5714f4f 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -62,7 +62,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->m_refreshRate) m_lastAnimationTicks.pop_front(); - m_lastAnimationTicks.push_back(g_pAnimationManager->m_fLastTickTime); + m_lastAnimationTicks.push_back(g_pAnimationManager->m_lastTickTimeMs); } } diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 21730dff..c31f9bb7 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -163,7 +163,7 @@ void CLayerSurface::onMap() { const bool GRABSFOCUS = ISEXCLUSIVE || (m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && // don't focus if constrained - (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained())); + (g_pSeatManager->m_mouse.expired() || !g_pInputManager->isConstrained())); if (GRABSFOCUS) { // TODO: use the new superb really very cool grab @@ -231,7 +231,7 @@ void CLayerSurface::onUnmap() { const auto PMONITOR = m_monitor.lock(); - const bool WASLASTFOCUS = g_pSeatManager->state.keyboardFocus == m_surface->resource() || g_pSeatManager->state.pointerFocus == m_surface->resource(); + const bool WASLASTFOCUS = g_pSeatManager->m_state.keyboardFocus == m_surface->resource() || g_pSeatManager->m_state.pointerFocus == m_surface->resource(); if (!PMONITOR) return; @@ -333,12 +333,12 @@ void CLayerSurface::onCommit() { if (m_mapped && (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) { bool WASLASTFOCUS = false; m_layerSurface->surface->breadthfirst( - [&WASLASTFOCUS](SP surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->state.keyboardFocus == surf; }, + [&WASLASTFOCUS](SP surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->m_state.keyboardFocus == surf; }, nullptr); if (!WASLASTFOCUS && m_popupHead) { m_popupHead->breadthfirst( [&WASLASTFOCUS](WP popup, void* data) { - WASLASTFOCUS = WASLASTFOCUS || (popup->m_wlSurface && g_pSeatManager->state.keyboardFocus == popup->m_wlSurface->resource()); + WASLASTFOCUS = WASLASTFOCUS || (popup->m_wlSurface && g_pSeatManager->m_state.keyboardFocus == popup->m_wlSurface->resource()); }, nullptr); } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index c355979b..64771895 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -945,13 +945,13 @@ void CWindow::destroyGroup() { w->m_groupData.head = false; } - const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked; - g_pKeybindManager->m_bGroupsLocked = true; + const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked; + g_pKeybindManager->m_groupsLocked = true; for (auto const& w : members) { g_pLayoutManager->getCurrentLayout()->onWindowCreated(w); w->updateWindowDecos(); } - g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; + g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV; if (m_workspace) { m_workspace->updateWindows(); @@ -1000,7 +1000,7 @@ bool CWindow::canBeGroupedInto(PHLWINDOW pWindow) { static auto ALLOWGROUPMERGE = CConfigValue("group:merge_groups_on_drag"); bool isGroup = m_groupData.pNextWindow; bool disallowDragIntoGroup = g_pInputManager->m_wasDraggingWindow && isGroup && !bool(*ALLOWGROUPMERGE); - return !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged + return !g_pKeybindManager->m_groupsLocked // global group lock disengaged && ((m_groupRules & GROUP_INVADE && m_firstMap) // window ignore local group locks, or || (!pWindow->getGroupHead()->m_groupData.locked // target unlocked && !(m_groupData.pNextWindow.lock() && getGroupHead()->m_groupData.locked))) // source unlocked or isn't group diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 450f213e..eec01a7d 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -169,7 +169,7 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto PMONITORFROMID = PWINDOW->m_monitor.lock(); if (PWINDOW->m_monitor != PMONITOR) { - g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); + g_pKeybindManager->m_dispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; @@ -363,7 +363,7 @@ void Events::listener_mapWindow(void* owner, void* data) { if (pWorkspace->m_isSpecialWorkspace) pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace); else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_noInitialFocus) - g_pKeybindManager->m_mDispatchers["workspace"](requestedWorkspaceName); + g_pKeybindManager->m_dispatchers["workspace"](requestedWorkspaceName); PMONITOR = g_pCompositor->m_lastMonitor.lock(); } @@ -382,7 +382,7 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto PMONITORFROMID = PWINDOW->m_monitor.lock(); if (PWINDOW->m_monitor != PMONITOR) { - g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); + g_pKeybindManager->m_dispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID())); PMONITOR = PMONITORFROMID; } PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; @@ -690,7 +690,7 @@ void Events::listener_mapWindow(void* owner, void* data) { g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_scale); g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_transform); - if (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained()) + if (g_pSeatManager->m_mouse.expired() || !g_pInputManager->isConstrained()) g_pInputManager->sendMotionEventsToFocused(); // fix some xwayland apps that don't behave nicely @@ -871,19 +871,19 @@ void Events::listener_commitWindow(void* owner, void* data) { const auto PMONITOR = PWINDOW->m_monitor.lock(); if (PMONITOR) - PMONITOR->debugLastPresentation(g_pSeatManager->isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow"); + PMONITOR->debugLastPresentation(g_pSeatManager->m_isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow"); - if (g_pSeatManager->isPointerFrameCommit) { - g_pSeatManager->isPointerFrameSkipped = false; - g_pSeatManager->isPointerFrameCommit = false; + if (g_pSeatManager->m_isPointerFrameCommit) { + g_pSeatManager->m_isPointerFrameSkipped = false; + g_pSeatManager->m_isPointerFrameCommit = false; } else g_pHyprRenderer->damageSurface(PWINDOW->m_wlSurface->resource(), PWINDOW->m_realPosition->goal().x, PWINDOW->m_realPosition->goal().y, PWINDOW->m_isX11 ? 1.0 / PWINDOW->m_X11SurfaceScaledBy : 1.0); - if (g_pSeatManager->isPointerFrameSkipped) { + if (g_pSeatManager->m_isPointerFrameSkipped) { g_pPointerManager->sendStoredMovement(); g_pSeatManager->sendPointerFrame(); - g_pSeatManager->isPointerFrameCommit = true; + g_pSeatManager->m_isPointerFrameCommit = true; } if (!PWINDOW->m_isX11) { diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index ef59674c..065dcdc2 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -1174,7 +1174,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri return 0; if (header.pWindow->m_isFloating) { - g_pKeybindManager->m_mDispatchers["swapnext"](""); + g_pKeybindManager->m_dispatchers["swapnext"](""); return 0; } @@ -1191,7 +1191,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri return 0; if (header.pWindow->m_isFloating) { - g_pKeybindManager->m_mDispatchers["swapnext"]("prev"); + g_pKeybindManager->m_dispatchers["swapnext"]("prev"); return 0; } @@ -1296,7 +1296,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri } else if (command == "orientationcycle") { runOrientationCycle(header, &vars, 1); } else if (command == "mfact") { - g_pKeybindManager->m_mDispatchers["splitratio"](vars[1] + " " + vars[2]); + g_pKeybindManager->m_dispatchers["splitratio"](vars[1] + " " + vars[2]); } else if (command == "rollnext") { const auto PWINDOW = header.pWindow; const auto PNODE = getNodeFromWindow(PWINDOW); diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 0d3aa9c7..d49b4790 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -33,9 +33,9 @@ static int wlTick(SP self, void* data) { } CHyprAnimationManager::CHyprAnimationManager() { - m_pAnimationTimer = SP(new CEventLoopTimer(std::chrono::microseconds(500), wlTick, nullptr)); + m_animationTimer = SP(new CEventLoopTimer(std::chrono::microseconds(500), wlTick, nullptr)); if (g_pEventLoopManager) // null in --verify-config mode - g_pEventLoopManager->addTimer(m_pAnimationTimer); + g_pEventLoopManager->addTimer(m_animationTimer); addBezierWithName("linear", Vector2D(0.0, 0.0), Vector2D(1.0, 1.0)); } @@ -213,7 +213,7 @@ static void handleUpdate(CAnimatedVariable& av, bool warp) { void CHyprAnimationManager::tick() { static std::chrono::time_point lastTick = std::chrono::high_resolution_clock::now(); - m_fLastTickTime = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - lastTick).count() / 1000.0; + m_lastTickTimeMs = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - lastTick).count() / 1000.0; lastTick = std::chrono::high_resolution_clock::now(); static auto PANIMENABLED = CConfigValue("animations:enabled"); @@ -250,15 +250,15 @@ void CHyprAnimationManager::tick() { } void CHyprAnimationManager::scheduleTick() { - if (m_bTickScheduled) + if (m_tickScheduled) return; - m_bTickScheduled = true; + m_tickScheduled = true; const auto PMOSTHZ = g_pHyprRenderer->m_pMostHzMonitor; if (!PMOSTHZ) { - m_pAnimationTimer->updateTimeout(std::chrono::milliseconds(16)); + m_animationTimer->updateTimeout(std::chrono::milliseconds(16)); return; } @@ -268,11 +268,11 @@ void CHyprAnimationManager::scheduleTick() { const auto TOPRES = std::clamp(refreshDelayMs - SINCEPRES, 1.1f, 1000.f); // we can't send 0, that will disarm it - m_pAnimationTimer->updateTimeout(std::chrono::milliseconds((int)std::floor(TOPRES))); + m_animationTimer->updateTimeout(std::chrono::milliseconds((int)std::floor(TOPRES))); } void CHyprAnimationManager::onTicked() { - m_bTickScheduled = false; + m_tickScheduled = false; } // diff --git a/src/managers/AnimationManager.hpp b/src/managers/AnimationManager.hpp index 833087d7..07e30c90 100644 --- a/src/managers/AnimationManager.hpp +++ b/src/managers/AnimationManager.hpp @@ -49,12 +49,12 @@ class CHyprAnimationManager : public Hyprutils::Animation::CAnimationManager { std::string styleValidInConfigVar(const std::string&, const std::string&); - SP m_pAnimationTimer; + SP m_animationTimer; - float m_fLastTickTime; // in ms + float m_lastTickTimeMs; private: - bool m_bTickScheduled = false; + bool m_tickScheduled = false; // Anim stuff void animationPopin(PHLWINDOW, bool close = false, float minPerc = 0.f); diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index b7c2e4e2..77ea5a28 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -69,45 +69,45 @@ void CCursorBuffer::endDataPtr() { } CCursorManager::CCursorManager() { - m_pHyprcursor = makeUnique(m_szTheme.empty() ? nullptr : m_szTheme.c_str(), hcLogger); - m_pXcursor = makeUnique(); + m_hyprcursor = makeUnique(m_theme.empty() ? nullptr : m_theme.c_str(), hcLogger); + m_xcursor = makeUnique(); static auto PUSEHYPRCURSOR = CConfigValue("cursor:enable_hyprcursor"); - if (m_pHyprcursor->valid() && *PUSEHYPRCURSOR) { + if (m_hyprcursor->valid() && *PUSEHYPRCURSOR) { // find default size. First, HYPRCURSOR_SIZE then default to 24 auto const* SIZE = getenv("HYPRCURSOR_SIZE"); if (SIZE) { try { - m_iSize = std::stoi(SIZE); + m_size = std::stoi(SIZE); } catch (...) { ; } } - if (m_iSize <= 0) { + if (m_size <= 0) { Debug::log(WARN, "HYPRCURSOR_SIZE size not set, defaulting to size 24"); - m_iSize = 24; + m_size = 24; } } else { - Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to Xcursor.", m_szTheme); + Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to Xcursor.", m_theme); auto const* SIZE = getenv("XCURSOR_SIZE"); if (SIZE) { try { - m_iSize = std::stoi(SIZE); + m_size = std::stoi(SIZE); } catch (...) { ; } } - if (m_iSize <= 0) { + if (m_size <= 0) { Debug::log(WARN, "XCURSOR_SIZE size not set, defaulting to size 24"); - m_iSize = 24; + m_size = 24; } } // since we fallback to xcursor always load it on startup. otherwise we end up with a empty theme if hyprcursor is enabled in the config // and then later is disabled. - m_pXcursor->loadTheme(getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default", m_iSize, m_fCursorScale); + m_xcursor->loadTheme(getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default", m_size, m_cursorScale); - m_pAnimationTimer = makeShared(std::nullopt, cursorAnimTimer, this); - g_pEventLoopManager->addTimer(m_pAnimationTimer); + m_animationTimer = makeShared(std::nullopt, cursorAnimTimer, this); + g_pEventLoopManager->addTimer(m_animationTimer); updateTheme(); @@ -115,17 +115,17 @@ CCursorManager::CCursorManager() { } CCursorManager::~CCursorManager() { - if (m_pAnimationTimer && g_pEventLoopManager) { - g_pEventLoopManager->removeTimer(m_pAnimationTimer); - m_pAnimationTimer.reset(); + if (m_animationTimer && g_pEventLoopManager) { + g_pEventLoopManager->removeTimer(m_animationTimer); + m_animationTimer.reset(); } - if (m_pHyprcursor->valid() && m_sCurrentStyleInfo.size > 0) - m_pHyprcursor->cursorSurfaceStyleDone(m_sCurrentStyleInfo); + if (m_hyprcursor->valid() && m_currentStyleInfo.size > 0) + m_hyprcursor->cursorSurfaceStyleDone(m_currentStyleInfo); } SP CCursorManager::getCursorBuffer() { - return !m_vCursorBuffers.empty() ? m_vCursorBuffers.back() : nullptr; + return !m_cursorBuffers.empty() ? m_cursorBuffers.back() : nullptr; } void CCursorManager::setCursorSurface(SP surf, const Vector2D& hotspot) { @@ -134,28 +134,28 @@ void CCursorManager::setCursorSurface(SP surf, const Vector2D& hotsp else g_pPointerManager->setCursorSurface(surf, hotspot); - m_bOurBufferConnected = false; + m_ourBufferConnected = false; } void CCursorManager::setCursorBuffer(SP buf, const Vector2D& hotspot, const float& scale) { - m_vCursorBuffers.emplace_back(buf); + m_cursorBuffers.emplace_back(buf); g_pPointerManager->setCursorBuffer(getCursorBuffer(), hotspot, scale); - if (m_vCursorBuffers.size() > 1) - std::erase_if(m_vCursorBuffers, [this](const auto& buf) { return buf.get() == m_vCursorBuffers.front().get(); }); + if (m_cursorBuffers.size() > 1) + std::erase_if(m_cursorBuffers, [this](const auto& buf) { return buf.get() == m_cursorBuffers.front().get(); }); - m_bOurBufferConnected = true; + m_ourBufferConnected = true; } void CCursorManager::setAnimationTimer(const int& frame, const int& delay) { if (delay > 0) { // arm - m_pAnimationTimer->updateTimeout(std::chrono::milliseconds(delay)); + m_animationTimer->updateTimeout(std::chrono::milliseconds(delay)); } else { // disarm - m_pAnimationTimer->updateTimeout(std::nullopt); + m_animationTimer->updateTimeout(std::nullopt); } - m_iCurrentAnimationFrame = frame; + m_currentAnimationFrame = frame; } void CCursorManager::setCursorFromName(const std::string& name) { @@ -163,9 +163,9 @@ void CCursorManager::setCursorFromName(const std::string& name) { static auto PUSEHYPRCURSOR = CConfigValue("cursor:enable_hyprcursor"); auto setXCursor = [this](auto const& name) { - float scale = std::ceil(m_fCursorScale); + float scale = std::ceil(m_cursorScale); - auto xcursor = m_pXcursor->getShape(name, m_iSize, m_fCursorScale); + auto xcursor = m_xcursor->getShape(name, m_size, m_cursorScale); auto& icon = xcursor->images.front(); auto buf = makeShared((uint8_t*)icon.pixels.data(), icon.size, icon.hotspot); setCursorBuffer(buf, icon.hotspot / scale, scale); @@ -181,90 +181,89 @@ void CCursorManager::setCursorFromName(const std::string& name) { }; auto setHyprCursor = [this](auto const& name) { - m_sCurrentCursorShapeData = m_pHyprcursor->getShape(name.c_str(), m_sCurrentStyleInfo); + m_currentCursorShapeData = m_hyprcursor->getShape(name.c_str(), m_currentStyleInfo); - if (m_sCurrentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.size() < 1) { // try with '_' first (old hc, etc) std::string newName = name; std::replace(newName.begin(), newName.end(), '-', '_'); - m_sCurrentCursorShapeData = m_pHyprcursor->getShape(newName.c_str(), m_sCurrentStyleInfo); + m_currentCursorShapeData = m_hyprcursor->getShape(newName.c_str(), m_currentStyleInfo); } - if (m_sCurrentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.size() < 1) { // fallback to a default if available constexpr const std::array fallbackShapes = {"default", "left_ptr", "left-ptr"}; for (auto const& s : fallbackShapes) { - m_sCurrentCursorShapeData = m_pHyprcursor->getShape(s, m_sCurrentStyleInfo); + m_currentCursorShapeData = m_hyprcursor->getShape(s, m_currentStyleInfo); - if (m_sCurrentCursorShapeData.images.size() > 0) + if (m_currentCursorShapeData.images.size() > 0) break; } - if (m_sCurrentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.size() < 1) { Debug::log(ERR, "BUG THIS: No fallback found for a cursor in setCursorFromName"); return false; } } - auto buf = - makeShared(m_sCurrentCursorShapeData.images[0].surface, Vector2D{m_sCurrentCursorShapeData.images[0].size, m_sCurrentCursorShapeData.images[0].size}, - Vector2D{m_sCurrentCursorShapeData.images[0].hotspotX, m_sCurrentCursorShapeData.images[0].hotspotY}); - auto hotspot = Vector2D{m_sCurrentCursorShapeData.images[0].hotspotX, m_sCurrentCursorShapeData.images[0].hotspotY} / m_fCursorScale; - setCursorBuffer(buf, hotspot, m_fCursorScale); + auto buf = makeShared(m_currentCursorShapeData.images[0].surface, Vector2D{m_currentCursorShapeData.images[0].size, m_currentCursorShapeData.images[0].size}, + Vector2D{m_currentCursorShapeData.images[0].hotspotX, m_currentCursorShapeData.images[0].hotspotY}); + auto hotspot = Vector2D{m_currentCursorShapeData.images[0].hotspotX, m_currentCursorShapeData.images[0].hotspotY} / m_cursorScale; + setCursorBuffer(buf, hotspot, m_cursorScale); int delay = 0; int frame = 0; - if (m_sCurrentCursorShapeData.images.size() > 1) - delay = m_sCurrentCursorShapeData.images[frame].delay; + if (m_currentCursorShapeData.images.size() > 1) + delay = m_currentCursorShapeData.images[frame].delay; setAnimationTimer(frame, delay); return true; }; - if (!m_pHyprcursor->valid() || !*PUSEHYPRCURSOR || !setHyprCursor(name)) + if (!m_hyprcursor->valid() || !*PUSEHYPRCURSOR || !setHyprCursor(name)) setXCursor(name); } void CCursorManager::tickAnimatedCursor() { - if (!m_bOurBufferConnected) + if (!m_ourBufferConnected) return; - if (!m_pHyprcursor->valid() && m_currentXcursor->images.size() > 1) { - m_iCurrentAnimationFrame++; + if (!m_hyprcursor->valid() && m_currentXcursor->images.size() > 1) { + m_currentAnimationFrame++; - if ((size_t)m_iCurrentAnimationFrame >= m_currentXcursor->images.size()) - m_iCurrentAnimationFrame = 0; + if ((size_t)m_currentAnimationFrame >= m_currentXcursor->images.size()) + m_currentAnimationFrame = 0; - float scale = std::ceil(m_fCursorScale); - auto& icon = m_currentXcursor->images.at(m_iCurrentAnimationFrame); + float scale = std::ceil(m_cursorScale); + auto& icon = m_currentXcursor->images.at(m_currentAnimationFrame); auto buf = makeShared((uint8_t*)icon.pixels.data(), icon.size, icon.hotspot); setCursorBuffer(buf, icon.hotspot / scale, scale); - setAnimationTimer(m_iCurrentAnimationFrame, m_currentXcursor->images[m_iCurrentAnimationFrame].delay); - } else if (m_sCurrentCursorShapeData.images.size() > 1) { - m_iCurrentAnimationFrame++; + setAnimationTimer(m_currentAnimationFrame, m_currentXcursor->images[m_currentAnimationFrame].delay); + } else if (m_currentCursorShapeData.images.size() > 1) { + m_currentAnimationFrame++; - if ((size_t)m_iCurrentAnimationFrame >= m_sCurrentCursorShapeData.images.size()) - m_iCurrentAnimationFrame = 0; + if ((size_t)m_currentAnimationFrame >= m_currentCursorShapeData.images.size()) + m_currentAnimationFrame = 0; auto hotspot = - Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotX, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotY} / m_fCursorScale; + Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotX, m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotY} / m_cursorScale; auto buf = makeShared( - m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].surface, - Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].size, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].size}, - Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotX, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotY}); - setCursorBuffer(buf, hotspot, m_fCursorScale); - setAnimationTimer(m_iCurrentAnimationFrame, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].delay); + m_currentCursorShapeData.images[m_currentAnimationFrame].surface, + Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].size, m_currentCursorShapeData.images[m_currentAnimationFrame].size}, + Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotX, m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotY}); + setCursorBuffer(buf, hotspot, m_cursorScale); + setAnimationTimer(m_currentAnimationFrame, m_currentCursorShapeData.images[m_currentAnimationFrame].delay); } } SCursorImageData CCursorManager::dataFor(const std::string& name) { - if (!m_pHyprcursor->valid()) + if (!m_hyprcursor->valid()) return {}; - const auto IMAGES = m_pHyprcursor->getShape(name.c_str(), m_sCurrentStyleInfo); + const auto IMAGES = m_hyprcursor->getShape(name.c_str(), m_currentStyleInfo); if (IMAGES.images.empty()) return {}; @@ -279,7 +278,7 @@ void CCursorManager::setXWaylandCursor() { g_pXWayland->setCursor(cairo_image_surface_get_data(CURSOR.surface), cairo_image_surface_get_stride(CURSOR.surface), {CURSOR.size, CURSOR.size}, {CURSOR.hotspotX, CURSOR.hotspotY}); else { - auto xcursor = m_pXcursor->getShape("left_ptr", m_iSize, 1); + auto xcursor = m_xcursor->getShape("left_ptr", m_size, 1); auto& icon = xcursor->images.front(); g_pXWayland->setCursor((uint8_t*)icon.pixels.data(), icon.size.x * 4, icon.size, icon.hotspot); @@ -295,16 +294,16 @@ void CCursorManager::updateTheme() { highestScale = m->m_scale; } - m_fCursorScale = highestScale; + m_cursorScale = highestScale; if (*PUSEHYPRCURSOR) { - if (m_sCurrentStyleInfo.size > 0 && m_pHyprcursor->valid()) - m_pHyprcursor->cursorSurfaceStyleDone(m_sCurrentStyleInfo); + if (m_currentStyleInfo.size > 0 && m_hyprcursor->valid()) + m_hyprcursor->cursorSurfaceStyleDone(m_currentStyleInfo); - m_sCurrentStyleInfo.size = std::round(m_iSize * highestScale); + m_currentStyleInfo.size = std::round(m_size * highestScale); - if (m_pHyprcursor->valid()) - m_pHyprcursor->loadThemeStyle(m_sCurrentStyleInfo); + if (m_hyprcursor->valid()) + m_hyprcursor->loadThemeStyle(m_currentStyleInfo); } for (auto const& m : g_pCompositor->m_monitors) { @@ -315,24 +314,24 @@ void CCursorManager::updateTheme() { bool CCursorManager::changeTheme(const std::string& name, const int size) { static auto PUSEHYPRCURSOR = CConfigValue("cursor:enable_hyprcursor"); - m_szTheme = name.empty() ? "" : name; - m_iSize = size <= 0 ? 24 : size; + m_theme = name.empty() ? "" : name; + m_size = size <= 0 ? 24 : size; auto xcursor_theme = getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default"; if (*PUSEHYPRCURSOR) { auto options = Hyprcursor::SManagerOptions(); options.logFn = hcLogger; options.allowDefaultFallback = false; - m_szTheme = name.empty() ? "" : name; - m_iSize = size; + m_theme = name.empty() ? "" : name; + m_size = size; - m_pHyprcursor = makeUnique(m_szTheme.empty() ? nullptr : m_szTheme.c_str(), options); - if (!m_pHyprcursor->valid()) { - Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to XCursor.", m_szTheme); - m_pXcursor->loadTheme(m_szTheme.empty() ? xcursor_theme : m_szTheme, m_iSize, m_fCursorScale); + m_hyprcursor = makeUnique(m_theme.empty() ? nullptr : m_theme.c_str(), options); + if (!m_hyprcursor->valid()) { + Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to XCursor.", m_theme); + m_xcursor->loadTheme(m_theme.empty() ? xcursor_theme : m_theme, m_size, m_cursorScale); } } else - m_pXcursor->loadTheme(m_szTheme.empty() ? xcursor_theme : m_szTheme, m_iSize, m_fCursorScale); + m_xcursor->loadTheme(m_theme.empty() ? xcursor_theme : m_theme, m_size, m_cursorScale); updateTheme(); @@ -340,5 +339,5 @@ bool CCursorManager::changeTheme(const std::string& name, const int size) { } void CCursorManager::syncGsettings() { - m_pXcursor->syncGsettings(); + m_xcursor->syncGsettings(); } diff --git a/src/managers/CursorManager.hpp b/src/managers/CursorManager.hpp index 30741a62..03420dab 100644 --- a/src/managers/CursorManager.hpp +++ b/src/managers/CursorManager.hpp @@ -56,22 +56,22 @@ class CCursorManager { void tickAnimatedCursor(); private: - bool m_bOurBufferConnected = false; - std::vector> m_vCursorBuffers; + bool m_ourBufferConnected = false; + std::vector> m_cursorBuffers; - UP m_pHyprcursor; - UP m_pXcursor; + UP m_hyprcursor; + UP m_xcursor; SP m_currentXcursor; - std::string m_szTheme = ""; - int m_iSize = 0; - float m_fCursorScale = 1.0; + std::string m_theme = ""; + int m_size = 0; + float m_cursorScale = 1.0; - Hyprcursor::SCursorStyleInfo m_sCurrentStyleInfo; + Hyprcursor::SCursorStyleInfo m_currentStyleInfo; - SP m_pAnimationTimer; - int m_iCurrentAnimationFrame = 0; - Hyprcursor::SCursorShapeData m_sCurrentCursorShapeData; + SP m_animationTimer; + int m_currentAnimationFrame = 0; + Hyprcursor::SCursorShapeData m_currentCursorShapeData; }; inline UP g_pCursorManager; diff --git a/src/managers/DonationNagManager.cpp b/src/managers/DonationNagManager.cpp index 454a02a0..249fbdcf 100644 --- a/src/managers/DonationNagManager.cpp +++ b/src/managers/DonationNagManager.cpp @@ -102,7 +102,7 @@ CDonationNagManager::CDonationNagManager() { break; } - if (!m_bFired) + if (!m_fired) Debug::log(LOG, "DonationNag: didn't hit any nagging periods, checking update"); if (state.major < currentMajor) { @@ -115,18 +115,18 @@ CDonationNagManager::CDonationNagManager() { writeState(state); } - if (!m_bFired) + if (!m_fired) Debug::log(LOG, "DonationNag: didn't hit nagging conditions"); } bool CDonationNagManager::fired() { - return m_bFired; + return m_fired; } void CDonationNagManager::fire() { static const auto DATAROOT = NFsUtils::getDataHome(); - m_bFired = true; + m_fired = true; g_pEventLoopManager->doLater([] { CProcess proc("hyprland-donate-screen", {}); diff --git a/src/managers/DonationNagManager.hpp b/src/managers/DonationNagManager.hpp index ce6015de..c33ae07a 100644 --- a/src/managers/DonationNagManager.hpp +++ b/src/managers/DonationNagManager.hpp @@ -19,7 +19,7 @@ class CDonationNagManager { void writeState(const SStateData& s); void fire(); - bool m_bFired = false; + bool m_fired = false; }; inline UP g_pDonationNagManager; \ No newline at end of file diff --git a/src/managers/EventManager.cpp b/src/managers/EventManager.cpp index d7535dc7..651bf436 100644 --- a/src/managers/EventManager.cpp +++ b/src/managers/EventManager.cpp @@ -11,8 +11,8 @@ #include using namespace Hyprutils::OS; -CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) { - if (!m_iSocketFD.isValid()) { +CEventManager::CEventManager() : m_socketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) { + if (!m_socketFD.isValid()) { Debug::log(ERR, "Couldn't start the Hyprland Socket 2. (1) IPC will not work."); return; } @@ -26,27 +26,27 @@ CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_ strncpy(SERVERADDRESS.sun_path, PATH.c_str(), sizeof(SERVERADDRESS.sun_path) - 1); - if (bind(m_iSocketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) { + if (bind(m_socketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) { Debug::log(ERR, "Couldn't bind the Hyprland Socket 2. (3) IPC will not work."); return; } // 10 max queued. - if (listen(m_iSocketFD.get(), 10) < 0) { + if (listen(m_socketFD.get(), 10) < 0) { Debug::log(ERR, "Couldn't listen on the Hyprland Socket 2. (4) IPC will not work."); return; } - m_pEventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_iSocketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr); + m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_socketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr); } CEventManager::~CEventManager() { - for (const auto& client : m_vClients) { + for (const auto& client : m_clients) { wl_event_source_remove(client.eventSource); } - if (m_pEventSource != nullptr) - wl_event_source_remove(m_pEventSource); + if (m_eventSource != nullptr) + wl_event_source_remove(m_eventSource); } int CEventManager::onServerEvent(int fd, uint32_t mask, void* data) { @@ -61,22 +61,22 @@ int CEventManager::onServerEvent(int fd, uint32_t mask) { if (mask & WL_EVENT_ERROR || mask & WL_EVENT_HANGUP) { Debug::log(ERR, "Socket2 hangup?? IPC broke"); - wl_event_source_remove(m_pEventSource); - m_pEventSource = nullptr; - m_iSocketFD.reset(); + wl_event_source_remove(m_eventSource); + m_eventSource = nullptr; + m_socketFD.reset(); return 0; } sockaddr_in clientAddress; socklen_t clientSize = sizeof(clientAddress); - CFileDescriptor ACCEPTEDCONNECTION{accept4(m_iSocketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC | SOCK_NONBLOCK)}; + CFileDescriptor ACCEPTEDCONNECTION{accept4(m_socketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC | SOCK_NONBLOCK)}; if (!ACCEPTEDCONNECTION.isValid()) { if (errno != EAGAIN) { Debug::log(ERR, "Socket2 failed receiving connection, errno: {}", errno); - wl_event_source_remove(m_pEventSource); - m_pEventSource = nullptr; - m_iSocketFD.reset(); + wl_event_source_remove(m_eventSource); + m_eventSource = nullptr; + m_socketFD.reset(); } return 0; @@ -86,7 +86,7 @@ int CEventManager::onServerEvent(int fd, uint32_t mask) { // add to event loop so we can close it when we need to auto* eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, ACCEPTEDCONNECTION.get(), 0, onServerEvent, nullptr); - m_vClients.emplace_back(SClient{ + m_clients.emplace_back(SClient{ std::move(ACCEPTEDCONNECTION), {}, eventSource, @@ -123,14 +123,14 @@ int CEventManager::onClientEvent(int fd, uint32_t mask) { } std::vector::iterator CEventManager::findClientByFD(int fd) { - return std::find_if(m_vClients.begin(), m_vClients.end(), [fd](const auto& client) { return client.fd.get() == fd; }); + return std::find_if(m_clients.begin(), m_clients.end(), [fd](const auto& client) { return client.fd.get() == fd; }); } std::vector::iterator CEventManager::removeClientByFD(int fd) { const auto CLIENTIT = findClientByFD(fd); wl_event_source_remove(CLIENTIT->eventSource); - return m_vClients.erase(CLIENTIT); + return m_clients.erase(CLIENTIT); } std::string CEventManager::formatEvent(const SHyprIPCEvent& event) const { @@ -148,7 +148,7 @@ void CEventManager::postEvent(const SHyprIPCEvent& event) { const size_t MAX_QUEUED_EVENTS = 64; auto sharedEvent = makeShared(formatEvent(event)); - for (auto it = m_vClients.begin(); it != m_vClients.end();) { + for (auto it = m_clients.begin(); it != m_clients.end();) { // try to send the event immediately if the queue is empty const auto QUEUESIZE = it->events.size(); if (QUEUESIZE > 0 || write(it->fd.get(), sharedEvent->c_str(), sharedEvent->length()) < 0) { diff --git a/src/managers/EventManager.hpp b/src/managers/EventManager.hpp index c8335d20..bfed9790 100644 --- a/src/managers/EventManager.hpp +++ b/src/managers/EventManager.hpp @@ -35,10 +35,10 @@ class CEventManager { std::vector::iterator removeClientByFD(int fd); private: - Hyprutils::OS::CFileDescriptor m_iSocketFD; - wl_event_source* m_pEventSource = nullptr; + Hyprutils::OS::CFileDescriptor m_socketFD; + wl_event_source* m_eventSource = nullptr; - std::vector m_vClients; + std::vector m_clients; }; inline UP g_pEventManager; diff --git a/src/managers/HookSystemManager.cpp b/src/managers/HookSystemManager.cpp index 624d2fe1..67e6e732 100644 --- a/src/managers/HookSystemManager.cpp +++ b/src/managers/HookSystemManager.cpp @@ -9,12 +9,12 @@ CHookSystemManager::CHookSystemManager() { // returns the pointer to the function SP CHookSystemManager::hookDynamic(const std::string& event, HOOK_CALLBACK_FN fn, HANDLE handle) { SP hookFN = makeShared(fn); - m_mRegisteredHooks[event].emplace_back(SCallbackFNPtr{.fn = hookFN, .handle = handle}); + m_registeredHooks[event].emplace_back(SCallbackFNPtr{.fn = hookFN, .handle = handle}); return hookFN; } void CHookSystemManager::unhook(SP fn) { - for (auto& [k, v] : m_mRegisteredHooks) { + for (auto& [k, v] : m_registeredHooks) { std::erase_if(v, [&](const auto& other) { SP fn_ = other.fn.lock(); @@ -32,7 +32,7 @@ void CHookSystemManager::emit(std::vector* const callbacks, SCal for (auto const& cb : *callbacks) { - m_bCurrentEventPlugin = false; + m_currentEventPlugin = false; if (!cb.handle) { // we don't guard hl hooks @@ -44,13 +44,13 @@ void CHookSystemManager::emit(std::vector* const callbacks, SCal continue; } - m_bCurrentEventPlugin = true; + m_currentEventPlugin = true; if (std::find(faultyHandles.begin(), faultyHandles.end(), cb.handle) != faultyHandles.end()) continue; try { - if (!setjmp(m_jbHookFaultJumpBuf)) { + if (!setjmp(m_hookFaultJumpBuf)) { if (SP fn = cb.fn.lock()) (*fn)(fn.get(), info, data); else @@ -76,8 +76,8 @@ void CHookSystemManager::emit(std::vector* const callbacks, SCal } std::vector* CHookSystemManager::getVecForEvent(const std::string& event) { - if (!m_mRegisteredHooks.contains(event)) + if (!m_registeredHooks.contains(event)) Debug::log(LOG, "[hookSystem] New hook event registered: {}", event); - return &m_mRegisteredHooks[event]; + return &m_registeredHooks[event]; } diff --git a/src/managers/HookSystemManager.hpp b/src/managers/HookSystemManager.hpp index c679c380..69d54a60 100644 --- a/src/managers/HookSystemManager.hpp +++ b/src/managers/HookSystemManager.hpp @@ -50,11 +50,11 @@ class CHookSystemManager { void emit(std::vector* const callbacks, SCallbackInfo& info, std::any data = 0); std::vector* getVecForEvent(const std::string& event); - bool m_bCurrentEventPlugin = false; - jmp_buf m_jbHookFaultJumpBuf; + bool m_currentEventPlugin = false; + jmp_buf m_hookFaultJumpBuf; private: - std::unordered_map> m_mRegisteredHooks; + std::unordered_map> m_registeredHooks; }; inline UP g_pHookSystem; diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 98c0360b..aea49061 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -70,109 +70,109 @@ static std::vector> getHyprlandLaunchEnv(PHL CKeybindManager::CKeybindManager() { // initialize all dispatchers - m_mDispatchers["exec"] = spawn; - m_mDispatchers["execr"] = spawnRaw; - m_mDispatchers["killactive"] = closeActive; - m_mDispatchers["forcekillactive"] = killActive; - m_mDispatchers["closewindow"] = closeWindow; - m_mDispatchers["killwindow"] = killWindow; - m_mDispatchers["signal"] = signalActive; - m_mDispatchers["signalwindow"] = signalWindow; - m_mDispatchers["togglefloating"] = toggleActiveFloating; - m_mDispatchers["setfloating"] = setActiveFloating; - m_mDispatchers["settiled"] = setActiveTiled; - m_mDispatchers["workspace"] = changeworkspace; - m_mDispatchers["renameworkspace"] = renameWorkspace; - m_mDispatchers["fullscreen"] = fullscreenActive; - m_mDispatchers["fullscreenstate"] = fullscreenStateActive; - m_mDispatchers["movetoworkspace"] = moveActiveToWorkspace; - m_mDispatchers["movetoworkspacesilent"] = moveActiveToWorkspaceSilent; - m_mDispatchers["pseudo"] = toggleActivePseudo; - m_mDispatchers["movefocus"] = moveFocusTo; - m_mDispatchers["movewindow"] = moveActiveTo; - m_mDispatchers["swapwindow"] = swapActive; - m_mDispatchers["centerwindow"] = centerWindow; - m_mDispatchers["togglegroup"] = toggleGroup; - m_mDispatchers["changegroupactive"] = changeGroupActive; - m_mDispatchers["movegroupwindow"] = moveGroupWindow; - m_mDispatchers["togglesplit"] = toggleSplit; - m_mDispatchers["swapsplit"] = swapSplit; - m_mDispatchers["splitratio"] = alterSplitRatio; - m_mDispatchers["focusmonitor"] = focusMonitor; - m_mDispatchers["movecursortocorner"] = moveCursorToCorner; - m_mDispatchers["movecursor"] = moveCursor; - m_mDispatchers["workspaceopt"] = workspaceOpt; - m_mDispatchers["exit"] = exitHyprland; - m_mDispatchers["movecurrentworkspacetomonitor"] = moveCurrentWorkspaceToMonitor; - m_mDispatchers["focusworkspaceoncurrentmonitor"] = focusWorkspaceOnCurrentMonitor; - m_mDispatchers["moveworkspacetomonitor"] = moveWorkspaceToMonitor; - m_mDispatchers["togglespecialworkspace"] = toggleSpecialWorkspace; - m_mDispatchers["forcerendererreload"] = forceRendererReload; - m_mDispatchers["resizeactive"] = resizeActive; - m_mDispatchers["moveactive"] = moveActive; - m_mDispatchers["cyclenext"] = circleNext; - m_mDispatchers["focuswindowbyclass"] = focusWindow; - m_mDispatchers["focuswindow"] = focusWindow; - m_mDispatchers["tagwindow"] = tagWindow; - m_mDispatchers["toggleswallow"] = toggleSwallow; - m_mDispatchers["submap"] = setSubmap; - m_mDispatchers["pass"] = pass; - m_mDispatchers["sendshortcut"] = sendshortcut; - m_mDispatchers["sendkeystate"] = sendkeystate; - m_mDispatchers["layoutmsg"] = layoutmsg; - m_mDispatchers["dpms"] = dpms; - m_mDispatchers["movewindowpixel"] = moveWindow; - m_mDispatchers["resizewindowpixel"] = resizeWindow; - m_mDispatchers["swapnext"] = swapnext; - m_mDispatchers["swapactiveworkspaces"] = swapActiveWorkspaces; - m_mDispatchers["pin"] = pinActive; - m_mDispatchers["mouse"] = mouse; - m_mDispatchers["bringactivetotop"] = bringActiveToTop; - m_mDispatchers["alterzorder"] = alterZOrder; - m_mDispatchers["focusurgentorlast"] = focusUrgentOrLast; - m_mDispatchers["focuscurrentorlast"] = focusCurrentOrLast; - m_mDispatchers["lockgroups"] = lockGroups; - m_mDispatchers["lockactivegroup"] = lockActiveGroup; - m_mDispatchers["moveintogroup"] = moveIntoGroup; - m_mDispatchers["moveoutofgroup"] = moveOutOfGroup; - m_mDispatchers["movewindoworgroup"] = moveWindowOrGroup; - m_mDispatchers["setignoregrouplock"] = setIgnoreGroupLock; - m_mDispatchers["denywindowfromgroup"] = denyWindowFromGroup; - m_mDispatchers["event"] = event; - m_mDispatchers["global"] = global; - m_mDispatchers["setprop"] = setProp; + m_dispatchers["exec"] = spawn; + m_dispatchers["execr"] = spawnRaw; + m_dispatchers["killactive"] = closeActive; + m_dispatchers["forcekillactive"] = killActive; + m_dispatchers["closewindow"] = closeWindow; + m_dispatchers["killwindow"] = killWindow; + m_dispatchers["signal"] = signalActive; + m_dispatchers["signalwindow"] = signalWindow; + m_dispatchers["togglefloating"] = toggleActiveFloating; + m_dispatchers["setfloating"] = setActiveFloating; + m_dispatchers["settiled"] = setActiveTiled; + m_dispatchers["workspace"] = changeworkspace; + m_dispatchers["renameworkspace"] = renameWorkspace; + m_dispatchers["fullscreen"] = fullscreenActive; + m_dispatchers["fullscreenstate"] = fullscreenStateActive; + m_dispatchers["movetoworkspace"] = moveActiveToWorkspace; + m_dispatchers["movetoworkspacesilent"] = moveActiveToWorkspaceSilent; + m_dispatchers["pseudo"] = toggleActivePseudo; + m_dispatchers["movefocus"] = moveFocusTo; + m_dispatchers["movewindow"] = moveActiveTo; + m_dispatchers["swapwindow"] = swapActive; + m_dispatchers["centerwindow"] = centerWindow; + m_dispatchers["togglegroup"] = toggleGroup; + m_dispatchers["changegroupactive"] = changeGroupActive; + m_dispatchers["movegroupwindow"] = moveGroupWindow; + m_dispatchers["togglesplit"] = toggleSplit; + m_dispatchers["swapsplit"] = swapSplit; + m_dispatchers["splitratio"] = alterSplitRatio; + m_dispatchers["focusmonitor"] = focusMonitor; + m_dispatchers["movecursortocorner"] = moveCursorToCorner; + m_dispatchers["movecursor"] = moveCursor; + m_dispatchers["workspaceopt"] = workspaceOpt; + m_dispatchers["exit"] = exitHyprland; + m_dispatchers["movecurrentworkspacetomonitor"] = moveCurrentWorkspaceToMonitor; + m_dispatchers["focusworkspaceoncurrentmonitor"] = focusWorkspaceOnCurrentMonitor; + m_dispatchers["moveworkspacetomonitor"] = moveWorkspaceToMonitor; + m_dispatchers["togglespecialworkspace"] = toggleSpecialWorkspace; + m_dispatchers["forcerendererreload"] = forceRendererReload; + m_dispatchers["resizeactive"] = resizeActive; + m_dispatchers["moveactive"] = moveActive; + m_dispatchers["cyclenext"] = circleNext; + m_dispatchers["focuswindowbyclass"] = focusWindow; + m_dispatchers["focuswindow"] = focusWindow; + m_dispatchers["tagwindow"] = tagWindow; + m_dispatchers["toggleswallow"] = toggleSwallow; + m_dispatchers["submap"] = setSubmap; + m_dispatchers["pass"] = pass; + m_dispatchers["sendshortcut"] = sendshortcut; + m_dispatchers["sendkeystate"] = sendkeystate; + m_dispatchers["layoutmsg"] = layoutmsg; + m_dispatchers["dpms"] = dpms; + m_dispatchers["movewindowpixel"] = moveWindow; + m_dispatchers["resizewindowpixel"] = resizeWindow; + m_dispatchers["swapnext"] = swapnext; + m_dispatchers["swapactiveworkspaces"] = swapActiveWorkspaces; + m_dispatchers["pin"] = pinActive; + m_dispatchers["mouse"] = mouse; + m_dispatchers["bringactivetotop"] = bringActiveToTop; + m_dispatchers["alterzorder"] = alterZOrder; + m_dispatchers["focusurgentorlast"] = focusUrgentOrLast; + m_dispatchers["focuscurrentorlast"] = focusCurrentOrLast; + m_dispatchers["lockgroups"] = lockGroups; + m_dispatchers["lockactivegroup"] = lockActiveGroup; + m_dispatchers["moveintogroup"] = moveIntoGroup; + m_dispatchers["moveoutofgroup"] = moveOutOfGroup; + m_dispatchers["movewindoworgroup"] = moveWindowOrGroup; + m_dispatchers["setignoregrouplock"] = setIgnoreGroupLock; + m_dispatchers["denywindowfromgroup"] = denyWindowFromGroup; + m_dispatchers["event"] = event; + m_dispatchers["global"] = global; + m_dispatchers["setprop"] = setProp; - m_tScrollTimer.reset(); + m_scrollTimer.reset(); - m_pLongPressTimer = makeShared( + m_longPressTimer = makeShared( std::nullopt, [this](SP self, void* data) { - if (!m_pLastLongPressKeybind || g_pSeatManager->keyboard.expired()) + if (!m_lastLongPressKeybind || g_pSeatManager->m_keyboard.expired()) return; - const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock(); if (!PACTIVEKEEB->m_allowBinds) return; - const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(m_pLastLongPressKeybind->handler); + const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(m_lastLongPressKeybind->handler); Debug::log(LOG, "Long press timeout passed, calling dispatcher."); - DISPATCHER->second(m_pLastLongPressKeybind->arg); + DISPATCHER->second(m_lastLongPressKeybind->arg); }, nullptr); - m_pRepeatKeyTimer = makeShared( + m_repeatKeyTimer = makeShared( std::nullopt, [this](SP self, void* data) { - if (m_vActiveKeybinds.size() == 0 || g_pSeatManager->keyboard.expired()) + if (m_activeKeybinds.size() == 0 || g_pSeatManager->m_keyboard.expired()) return; - const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock(); if (!PACTIVEKEEB->m_allowBinds) return; - for (const auto& k : m_vActiveKeybinds) { - const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(k->handler); + for (const auto& k : m_activeKeybinds) { + const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(k->handler); Debug::log(LOG, "Keybind repeat triggered, calling dispatcher."); DISPATCHER->second(k->arg); @@ -184,43 +184,43 @@ CKeybindManager::CKeybindManager() { // null in --verify-config mode if (g_pEventLoopManager) { - g_pEventLoopManager->addTimer(m_pLongPressTimer); - g_pEventLoopManager->addTimer(m_pRepeatKeyTimer); + g_pEventLoopManager->addTimer(m_longPressTimer); + g_pEventLoopManager->addTimer(m_repeatKeyTimer); } static auto P = g_pHookSystem->hookDynamic("configReloaded", [this](void* hk, SCallbackInfo& info, std::any param) { // clear cuz realloc'd - m_vActiveKeybinds.clear(); - m_pLastLongPressKeybind.reset(); - m_vPressedSpecialBinds.clear(); + m_activeKeybinds.clear(); + m_lastLongPressKeybind.reset(); + m_pressedSpecialBinds.clear(); }); } CKeybindManager::~CKeybindManager() { - if (m_pXKBTranslationState) - xkb_state_unref(m_pXKBTranslationState); - if (m_pLongPressTimer && g_pEventLoopManager) { - g_pEventLoopManager->removeTimer(m_pLongPressTimer); - m_pLongPressTimer.reset(); + if (m_xkbTranslationState) + xkb_state_unref(m_xkbTranslationState); + if (m_longPressTimer && g_pEventLoopManager) { + g_pEventLoopManager->removeTimer(m_longPressTimer); + m_longPressTimer.reset(); } - if (m_pRepeatKeyTimer && g_pEventLoopManager) { - g_pEventLoopManager->removeTimer(m_pRepeatKeyTimer); - m_pRepeatKeyTimer.reset(); + if (m_repeatKeyTimer && g_pEventLoopManager) { + g_pEventLoopManager->removeTimer(m_repeatKeyTimer); + m_repeatKeyTimer.reset(); } } void CKeybindManager::addKeybind(SKeybind kb) { - m_vKeybinds.emplace_back(makeShared(kb)); + m_keybinds.emplace_back(makeShared(kb)); - m_vActiveKeybinds.clear(); - m_pLastLongPressKeybind.reset(); + m_activeKeybinds.clear(); + m_lastLongPressKeybind.reset(); } void CKeybindManager::removeKeybind(uint32_t mod, const SParsedKey& key) { - std::erase_if(m_vKeybinds, [&mod, &key](const auto& el) { return el->modmask == mod && el->key == key.key && el->keycode == key.keycode && el->catchAll == key.catchAll; }); + std::erase_if(m_keybinds, [&mod, &key](const auto& el) { return el->modmask == mod && el->key == key.key && el->keycode == key.keycode && el->catchAll == key.catchAll; }); - m_vActiveKeybinds.clear(); - m_pLastLongPressKeybind.reset(); + m_activeKeybinds.clear(); + m_lastLongPressKeybind.reset(); } uint32_t CKeybindManager::stringToModMask(std::string mods) { @@ -266,10 +266,10 @@ uint32_t CKeybindManager::keycodeToModifier(xkb_keycode_t keycode) { } void CKeybindManager::updateXKBTranslationState() { - if (m_pXKBTranslationState) { - xkb_state_unref(m_pXKBTranslationState); + if (m_xkbTranslationState) { + xkb_state_unref(m_xkbTranslationState); - m_pXKBTranslationState = nullptr; + m_xkbTranslationState = nullptr; } static auto PFILEPATH = CConfigValue("input:kb_file"); @@ -308,7 +308,7 @@ void CKeybindManager::updateXKBTranslationState() { } xkb_context_unref(PCONTEXT); - m_pXKBTranslationState = xkb_state_new(PKEYMAP); + m_xkbTranslationState = xkb_state_new(PKEYMAP); xkb_keymap_unref(PKEYMAP); } @@ -427,18 +427,18 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { if (!g_pCompositor->m_sessionActive || g_pCompositor->m_unsafeState) { - m_dPressedKeys.clear(); + m_pressedKeys.clear(); return true; } if (!pKeyboard->m_allowBinds) return true; - if (!m_pXKBTranslationState) { + if (!m_xkbTranslationState) { Debug::log(ERR, "BUG THIS: m_pXKBTranslationState nullptr!"); updateXKBTranslationState(); - if (!m_pXKBTranslationState) + if (!m_xkbTranslationState) return true; } @@ -446,7 +446,7 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput - const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->m_resolveBindsBySym ? pKeyboard->m_xkbSymState : m_pXKBTranslationState, KEYCODE); + const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->m_resolveBindsBySym ? pKeyboard->m_xkbSymState : m_xkbTranslationState, KEYCODE); const xkb_keysym_t internalKeysym = xkb_state_key_get_one_sym(pKeyboard->m_xkbState, KEYCODE); if (keysym == XKB_KEY_Escape || internalKeysym == XKB_KEY_Escape) @@ -459,9 +459,9 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { const auto MODS = g_pInputManager->accumulateModsFromAllKBs(); - m_uTimeLastMs = e.timeMs; - m_uLastCode = KEYCODE; - m_uLastMouseCode = 0; + m_timeLastMs = e.timeMs; + m_lastCode = KEYCODE; + m_lastMouseCode = 0; bool mouseBindWasActive = ensureMouseBindState(); @@ -470,34 +470,34 @@ bool CKeybindManager::onKeyEvent(std::any event, SP pKeyboard) { .keycode = KEYCODE, .modmaskAtPressTime = MODS, .sent = true, - .submapAtPress = m_szCurrentSelectedSubmap, + .submapAtPress = m_currentSelectedSubmap, .mousePosAtPress = g_pInputManager->getMouseCoordsInternal(), }; - m_vActiveKeybinds.clear(); + m_activeKeybinds.clear(); - m_pLastLongPressKeybind.reset(); + m_lastLongPressKeybind.reset(); bool suppressEvent = false; if (e.state == WL_KEYBOARD_KEY_STATE_PRESSED) { - m_dPressedKeys.push_back(KEY); + m_pressedKeys.push_back(KEY); suppressEvent = !handleKeybinds(MODS, KEY, true).passEvent; if (suppressEvent) shadowKeybinds(keysym, KEYCODE); - m_dPressedKeys.back().sent = !suppressEvent; + m_pressedKeys.back().sent = !suppressEvent; } else { // key release bool foundInPressedKeys = false; - for (auto it = m_dPressedKeys.begin(); it != m_dPressedKeys.end();) { + for (auto it = m_pressedKeys.begin(); it != m_pressedKeys.end();) { if (it->keycode == KEYCODE) { handleKeybinds(MODS, *it, false); foundInPressedKeys = true; suppressEvent = !it->sent; - it = m_dPressedKeys.erase(it); + it = m_pressedKeys.erase(it); } else { ++it; } @@ -519,14 +519,14 @@ bool CKeybindManager::onAxisEvent(const IPointer::SAxisEvent& e) { static auto PDELAY = CConfigValue("binds:scroll_event_delay"); - if (m_tScrollTimer.getMillis() < *PDELAY) { - m_tScrollTimer.reset(); + if (m_scrollTimer.getMillis() < *PDELAY) { + m_scrollTimer.reset(); return true; // timer hasn't passed yet! } - m_tScrollTimer.reset(); + m_scrollTimer.reset(); - m_vActiveKeybinds.clear(); + m_activeKeybinds.clear(); bool found = false; if (e.source == WL_POINTER_AXIS_SOURCE_WHEEL && e.axis == WL_POINTER_AXIS_VERTICAL_SCROLL) { @@ -552,9 +552,9 @@ bool CKeybindManager::onMouseEvent(const IPointer::SButtonEvent& e) { bool suppressEvent = false; - m_uLastMouseCode = e.button; - m_uLastCode = 0; - m_uTimeLastMs = e.timeMs; + m_lastMouseCode = e.button; + m_lastCode = 0; + m_timeLastMs = e.timeMs; bool mouseBindWasActive = ensureMouseBindState(); @@ -566,25 +566,25 @@ bool CKeybindManager::onMouseEvent(const IPointer::SButtonEvent& e) { .mousePosAtPress = g_pInputManager->getMouseCoordsInternal(), }; - m_vActiveKeybinds.clear(); + m_activeKeybinds.clear(); if (e.state == WL_POINTER_BUTTON_STATE_PRESSED) { - m_dPressedKeys.push_back(KEY); + m_pressedKeys.push_back(KEY); suppressEvent = !handleKeybinds(MODS, KEY, true).passEvent; if (suppressEvent) shadowKeybinds(); - m_dPressedKeys.back().sent = !suppressEvent; + m_pressedKeys.back().sent = !suppressEvent; } else { bool foundInPressedKeys = false; - for (auto it = m_dPressedKeys.begin(); it != m_dPressedKeys.end();) { + for (auto it = m_pressedKeys.begin(); it != m_pressedKeys.end();) { if (it->keyName == KEY_NAME) { suppressEvent = !handleKeybinds(MODS, *it, false).passEvent; foundInPressedKeys = true; suppressEvent = !it->sent; - it = m_dPressedKeys.erase(it); + it = m_pressedKeys.erase(it); } else { ++it; } @@ -639,14 +639,14 @@ eMultiKeyCase CKeybindManager::mkKeysymSetMatches(const std::set k } eMultiKeyCase CKeybindManager::mkBindMatches(const SP keybind) { - if (mkKeysymSetMatches(keybind->sMkMods, m_sMkMods) != MK_FULL_MATCH) + if (mkKeysymSetMatches(keybind->sMkMods, m_mkMods) != MK_FULL_MATCH) return MK_NO_MATCH; - return mkKeysymSetMatches(keybind->sMkKeys, m_sMkKeys); + return mkKeysymSetMatches(keybind->sMkKeys, m_mkKeys); } std::string CKeybindManager::getCurrentSubmap() { - return m_szCurrentSelectedSubmap; + return m_currentSelectedSubmap; } SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SPressedKeyWithMods& key, bool pressed) { @@ -658,20 +658,20 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP if (pressed) { if (keycodeToModifier(key.keycode)) - m_sMkMods.insert(key.keysym); + m_mkMods.insert(key.keysym); else - m_sMkKeys.insert(key.keysym); + m_mkKeys.insert(key.keysym); } else { if (keycodeToModifier(key.keycode)) - m_sMkMods.erase(key.keysym); + m_mkMods.erase(key.keysym); else - m_sMkKeys.erase(key.keysym); + m_mkKeys.erase(key.keysym); } - for (auto& k : m_vKeybinds) { + for (auto& k : m_keybinds) { const bool SPECIALDISPATCHER = k->handler == "global" || k->handler == "pass" || k->handler == "sendshortcut" || k->handler == "mouse"; const bool SPECIALTRIGGERED = - std::find_if(m_vPressedSpecialBinds.begin(), m_vPressedSpecialBinds.end(), [&](const auto& other) { return other == k; }) != m_vPressedSpecialBinds.end(); + std::find_if(m_pressedSpecialBinds.begin(), m_pressedSpecialBinds.end(), [&](const auto& other) { return other == k; }) != m_pressedSpecialBinds.end(); const bool IGNORECONDITIONS = SPECIALDISPATCHER && !pressed && SPECIALTRIGGERED; // ignore mods. Pass, global dispatchers should be released immediately once the key is released. @@ -681,7 +681,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP if (!k->locked && g_pSessionLockManager->isSessionLocked()) continue; - if (!IGNORECONDITIONS && ((modmask != k->modmask && !k->ignoreMods) || k->submap != m_szCurrentSelectedSubmap || k->shadowed)) + if (!IGNORECONDITIONS && ((modmask != k->modmask && !k->ignoreMods) || k->submap != m_currentSelectedSubmap || k->shadowed)) continue; if (k->multiKey) { @@ -697,7 +697,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP if (key.keycode != k->keycode) continue; } else if (k->catchAll) { - if (found || key.submapAtPress != m_szCurrentSelectedSubmap) + if (found || key.submapAtPress != m_currentSelectedSubmap) continue; } else { // in this case, we only have the keysym to go off of for this keybind, and it's invalid @@ -762,29 +762,29 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP } if (k->longPress) { - const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock(); - m_pLongPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); - m_pLastLongPressKeybind = k; + m_longPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); + m_lastLongPressKeybind = k; continue; } - const auto DISPATCHER = m_mDispatchers.find(k->mouse ? "mouse" : k->handler); + const auto DISPATCHER = m_dispatchers.find(k->mouse ? "mouse" : k->handler); if (SPECIALTRIGGERED && !pressed) - std::erase_if(m_vPressedSpecialBinds, [&](const auto& other) { return other == k; }); + std::erase_if(m_pressedSpecialBinds, [&](const auto& other) { return other == k; }); else if (SPECIALDISPATCHER && pressed) - m_vPressedSpecialBinds.emplace_back(k); + m_pressedSpecialBinds.emplace_back(k); // Should never happen, as we check in the ConfigManager, but oh well - if (DISPATCHER == m_mDispatchers.end()) { + if (DISPATCHER == m_dispatchers.end()) { Debug::log(ERR, "Invalid handler in a keybind! (handler {} does not exist)", k->handler); } else { // call the dispatcher Debug::log(LOG, "Keybind triggered, calling dispatcher ({}, {}, {}, {})", modmask, key.keyName, key.keysym, DISPATCHER->first); - m_iPassPressed = (int)pressed; + m_passPressed = (int)pressed; // if the dispatchers says to pass event then we will if (k->handler == "mouse") @@ -792,7 +792,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP else res = DISPATCHER->second(k->arg); - m_iPassPressed = -1; + m_passPressed = -1; if (k->handler == "submap") { found = true; // don't process keybinds on submap change. @@ -801,10 +801,10 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP } if (k->repeat) { - const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock(); + const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock(); - m_vActiveKeybinds.emplace_back(k); - m_pRepeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); + m_activeKeybinds.emplace_back(k); + m_repeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay)); } if (!k->nonConsuming) @@ -830,7 +830,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const uint32_t doesntHaveCode) { // shadow disables keybinds after one has been triggered - for (auto& k : m_vKeybinds) { + for (auto& k : m_keybinds) { bool shadow = false; @@ -843,7 +843,7 @@ void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const uint3 const auto KBKEY = xkb_keysym_from_name(k->key.c_str(), XKB_KEYSYM_CASE_INSENSITIVE); const auto KBKEYUPPER = xkb_keysym_to_upper(KBKEY); - for (auto const& pk : m_dPressedKeys) { + for (auto const& pk : m_pressedKeys) { if ((pk.keysym != 0 && (pk.keysym == KBKEY || pk.keysym == KBKEYUPPER))) { shadow = true; @@ -1125,7 +1125,7 @@ SDispatchResult CKeybindManager::signalWindow(std::string args) { } void CKeybindManager::clearKeybinds() { - m_vKeybinds.clear(); + m_keybinds.clear(); } static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional floatState) { @@ -1336,7 +1336,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { if (*PWARPONWORKSPACECHANGE > 0) { auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow(); - auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + auto HLSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (PLAST && (!HLSurface || HLSurface->getWindow())) PLAST->warpCursor(*PWARPONWORKSPACECHANGE == 2); @@ -2154,7 +2154,7 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { if (*PWARPONTOGGLESPECIAL > 0) { auto PLAST = focusedWorkspace->getLastFocusedWindow(); - auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + auto HLSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (PLAST && (!HLSurface || HLSurface->getWindow())) PLAST->warpCursor(*PWARPONTOGGLESPECIAL == 2); @@ -2400,19 +2400,19 @@ SDispatchResult CKeybindManager::toggleSwallow(std::string args) { SDispatchResult CKeybindManager::setSubmap(std::string submap) { if (submap == "reset" || submap == "") { - m_szCurrentSelectedSubmap = ""; + m_currentSelectedSubmap = ""; Debug::log(LOG, "Reset active submap to the default one."); g_pEventManager->postEvent(SHyprIPCEvent{"submap", ""}); - EMIT_HOOK_EVENT("submap", m_szCurrentSelectedSubmap); + EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap); return {}; } - for (const auto& k : g_pKeybindManager->m_vKeybinds) { + for (const auto& k : g_pKeybindManager->m_keybinds) { if (k->submap == submap) { - m_szCurrentSelectedSubmap = submap; + m_currentSelectedSubmap = submap; Debug::log(LOG, "Changed keybind submap to {}", submap); g_pEventManager->postEvent(SHyprIPCEvent{"submap", submap}); - EMIT_HOOK_EVENT("submap", m_szCurrentSelectedSubmap); + EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap); return {}; } } @@ -2431,18 +2431,18 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { return {.success = false, .error = "pass: window not found"}; } - if (!g_pSeatManager->keyboard) { + if (!g_pSeatManager->m_keyboard) { Debug::log(ERR, "No kb in pass?"); return {.success = false, .error = "No kb in pass?"}; } const auto XWTOXW = PWINDOW->m_isX11 && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_isX11; - const auto LASTMOUSESURF = g_pSeatManager->state.pointerFocus.lock(); - const auto LASTKBSURF = g_pSeatManager->state.keyboardFocus.lock(); + const auto LASTMOUSESURF = g_pSeatManager->m_state.pointerFocus.lock(); + const auto LASTKBSURF = g_pSeatManager->m_state.keyboardFocus.lock(); // pass all mf shit if (!XWTOXW) { - if (g_pKeybindManager->m_uLastCode != 0) + if (g_pKeybindManager->m_lastCode != 0) g_pSeatManager->setKeyboardFocus(PWINDOW->m_wlSurface->resource()); else g_pSeatManager->setPointerFocus(PWINDOW->m_wlSurface->resource(), {1, 1}); @@ -2450,24 +2450,24 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { g_pSeatManager->sendKeyboardMods(g_pInputManager->accumulateModsFromAllKBs(), 0, 0, 0); - if (g_pKeybindManager->m_iPassPressed == 1) { - if (g_pKeybindManager->m_uLastCode != 0) - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); + if (g_pKeybindManager->m_passPressed == 1) { + if (g_pKeybindManager->m_lastCode != 0) + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); else - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED); - } else if (g_pKeybindManager->m_iPassPressed == 0) - if (g_pKeybindManager->m_uLastCode != 0) - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED); + } else if (g_pKeybindManager->m_passPressed == 0) + if (g_pKeybindManager->m_lastCode != 0) + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); else - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED); else { // dynamic call of the dispatcher - if (g_pKeybindManager->m_uLastCode != 0) { - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); + if (g_pKeybindManager->m_lastCode != 0) { + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); } else { - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED); - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED); } } @@ -2478,18 +2478,18 @@ SDispatchResult CKeybindManager::pass(std::string regexp) { // this will make g_pSeatManager NOT send the leave event to XWayland apps, provided we are not on an XWayland window already. // please kill me if (PWINDOW->m_isX11) { - if (g_pKeybindManager->m_uLastCode != 0) { - g_pSeatManager->state.keyboardFocus.reset(); - g_pSeatManager->state.keyboardFocusResource.reset(); + if (g_pKeybindManager->m_lastCode != 0) { + g_pSeatManager->m_state.keyboardFocus.reset(); + g_pSeatManager->m_state.keyboardFocusResource.reset(); } else { - g_pSeatManager->state.pointerFocus.reset(); - g_pSeatManager->state.pointerFocusResource.reset(); + g_pSeatManager->m_state.pointerFocus.reset(); + g_pSeatManager->m_state.pointerFocusResource.reset(); } } const auto SL = PWINDOW->m_realPosition->goal() - g_pInputManager->getMouseCoordsInternal(); - if (g_pKeybindManager->m_uLastCode != 0) + if (g_pKeybindManager->m_lastCode != 0) g_pSeatManager->setKeyboardFocus(LASTKBSURF); else g_pSeatManager->setPointerFocus(LASTMOUSESURF, SL); @@ -2531,7 +2531,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { const auto KEYSYM = xkb_keysym_from_name(KEY.c_str(), XKB_KEYSYM_CASE_INSENSITIVE); keycode = 0; - const auto KB = g_pSeatManager->keyboard; + const auto KB = g_pSeatManager->m_keyboard; if (!KB) { Debug::log(ERR, "sendshortcut: no kb"); @@ -2540,7 +2540,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { const auto KEYPAIRSTRING = std::format("{}{}", (uintptr_t)KB.get(), KEY); - if (!g_pKeybindManager->m_mKeyToCodeCache.contains(KEYPAIRSTRING)) { + if (!g_pKeybindManager->m_keyToCodeCache.contains(KEYPAIRSTRING)) { xkb_keymap* km = KB->m_xkbKeymap; xkb_state* ks = KB->m_xkbState; @@ -2552,8 +2552,8 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { xkb_keysym_t sym = xkb_state_key_get_one_sym(ks, kc); if (sym == KEYSYM) { - keycode = kc; - g_pKeybindManager->m_mKeyToCodeCache[KEYPAIRSTRING] = keycode; + keycode = kc; + g_pKeybindManager->m_keyToCodeCache[KEYPAIRSTRING] = keycode; } } @@ -2563,7 +2563,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { } } else - keycode = g_pKeybindManager->m_mKeyToCodeCache[KEYPAIRSTRING]; + keycode = g_pKeybindManager->m_keyToCodeCache[KEYPAIRSTRING]; } if (!keycode) { @@ -2585,7 +2585,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { return {.success = false, .error = "sendshortcut: window not found"}; } - if (!g_pSeatManager->keyboard) { + if (!g_pSeatManager->m_keyboard) { Debug::log(ERR, "No kb in sendshortcut?"); return {.success = false, .error = "No kb in sendshortcut?"}; } @@ -2606,24 +2606,24 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { g_pSeatManager->sendKeyboardMods(MOD, 0, 0, 0); - if (g_pKeybindManager->m_iPassPressed == 1) { + if (g_pKeybindManager->m_passPressed == 1) { if (!isMouse) - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); else - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED); - } else if (g_pKeybindManager->m_iPassPressed == 0) { + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED); + } else if (g_pKeybindManager->m_passPressed == 0) { if (!isMouse) - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); else - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED); } else { // dynamic call of the dispatcher if (!isMouse) { - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); - g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED); + g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED); } else { - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED); - g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED); + g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED); } } @@ -2634,11 +2634,11 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { if (PWINDOW->m_isX11) { //xwayland hack, see pass if (!isMouse) { - g_pSeatManager->state.keyboardFocus.reset(); - g_pSeatManager->state.keyboardFocusResource.reset(); + g_pSeatManager->m_state.keyboardFocus.reset(); + g_pSeatManager->m_state.keyboardFocusResource.reset(); } else { - g_pSeatManager->state.pointerFocus.reset(); - g_pSeatManager->state.pointerFocusResource.reset(); + g_pSeatManager->m_state.pointerFocus.reset(); + g_pSeatManager->m_state.pointerFocusResource.reset(); } } @@ -2877,13 +2877,13 @@ SDispatchResult CKeybindManager::alterZOrder(std::string args) { SDispatchResult CKeybindManager::lockGroups(std::string args) { if (args == "lock" || args.empty() || args == "lockgroups") - g_pKeybindManager->m_bGroupsLocked = true; + g_pKeybindManager->m_groupsLocked = true; else if (args == "toggle") - g_pKeybindManager->m_bGroupsLocked = !g_pKeybindManager->m_bGroupsLocked; + g_pKeybindManager->m_groupsLocked = !g_pKeybindManager->m_groupsLocked; else - g_pKeybindManager->m_bGroupsLocked = false; + g_pKeybindManager->m_groupsLocked = false; - g_pEventManager->postEvent(SHyprIPCEvent{"lockgroups", g_pKeybindManager->m_bGroupsLocked ? "1" : "0"}); + g_pEventManager->postEvent(SHyprIPCEvent{"lockgroups", g_pKeybindManager->m_groupsLocked ? "1" : "0"}); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); return {}; @@ -2962,12 +2962,12 @@ void CKeybindManager::moveWindowOutOfGroup(PHLWINDOW pWindow, const std::string& } else { g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); - const auto GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked; - g_pKeybindManager->m_bGroupsLocked = true; + const auto GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked; + g_pKeybindManager->m_groupsLocked = true; g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow, direction); - g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; + g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV; } if (*BFOCUSREMOVEDWINDOW) { @@ -2986,7 +2986,7 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) { static auto PIGNOREGROUPLOCK = CConfigValue("binds:ignore_group_lock"); - if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) + if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked) return {}; if (!isDirection(args)) { @@ -3016,7 +3016,7 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) { SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) { static auto PIGNOREGROUPLOCK = CConfigValue("binds:ignore_group_lock"); - if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) + if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked) return {.success = false, .error = "Groups locked"}; PHLWINDOW PWINDOW = nullptr; @@ -3054,7 +3054,7 @@ SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) { if (PWINDOW->isFullscreen()) return {}; - if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) { + if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked) { g_pLayoutManager->getCurrentLayout()->moveWindowTo(PWINDOW, args); return {}; } @@ -3130,7 +3130,7 @@ SDispatchResult CKeybindManager::global(std::string args) { if (!PROTO::globalShortcuts->isTaken(APPID, NAME)) return {}; - PROTO::globalShortcuts->sendGlobalShortcutEvent(APPID, NAME, g_pKeybindManager->m_iPassPressed); + PROTO::globalShortcuts->sendGlobalShortcutEvent(APPID, NAME, g_pKeybindManager->m_passPressed); return {}; } @@ -3296,21 +3296,21 @@ SDispatchResult CKeybindManager::sendkeystate(std::string args) { std::string modifiedArgs = ARGS[0] + "," + ARGS[1] + "," + ARGS[3]; - const int oldPassPressed = g_pKeybindManager->m_iPassPressed; + const int oldPassPressed = g_pKeybindManager->m_passPressed; if (STATE == "down") - g_pKeybindManager->m_iPassPressed = 1; + g_pKeybindManager->m_passPressed = 1; else if (STATE == "up") - g_pKeybindManager->m_iPassPressed = 0; + g_pKeybindManager->m_passPressed = 0; else if (STATE == "repeat") - g_pKeybindManager->m_iPassPressed = 1; + g_pKeybindManager->m_passPressed = 1; auto result = sendshortcut(modifiedArgs); if (STATE == "repeat" && result.success) result = sendshortcut(modifiedArgs); - g_pKeybindManager->m_iPassPressed = oldPassPressed; + g_pKeybindManager->m_passPressed = oldPassPressed; if (!result.success && !result.error.empty()) { size_t pos = result.error.find("sendshortcut:"); diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index ede16402..be2d114b 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -100,50 +100,52 @@ class CKeybindManager { void shadowKeybinds(const xkb_keysym_t& doesntHave = 0, const uint32_t doesntHaveCode = 0); std::string getCurrentSubmap(); - std::unordered_map> m_mDispatchers; + std::unordered_map> m_dispatchers; - bool m_bGroupsLocked = false; + bool m_groupsLocked = false; - std::vector> m_vKeybinds; + std::vector> m_keybinds; //since we cant find keycode through keyname in xkb: //on sendshortcut call, we once search for keyname (e.g. "g") the correct keycode (e.g. 42) //and cache it in this map to make sendshortcut calls faster //we also store the keyboard pointer (in the string) to differentiate between different keyboard (layouts) - std::unordered_map m_mKeyToCodeCache; + std::unordered_map m_keyToCodeCache; static SDispatchResult changeMouseBindMode(const eMouseBindMode mode); private: - std::vector m_dPressedKeys; + std::vector m_pressedKeys; - inline static std::string m_szCurrentSelectedSubmap = ""; + inline static std::string m_currentSelectedSubmap = ""; - std::vector> m_vActiveKeybinds; - WP m_pLastLongPressKeybind; - SP m_pLongPressTimer, m_pRepeatKeyTimer; + std::vector> m_activeKeybinds; + WP m_lastLongPressKeybind; - uint32_t m_uTimeLastMs = 0; - uint32_t m_uLastCode = 0; - uint32_t m_uLastMouseCode = 0; + SP m_longPressTimer; + SP m_repeatKeyTimer; - std::vector> m_vPressedSpecialBinds; + uint32_t m_timeLastMs = 0; + uint32_t m_lastCode = 0; + uint32_t m_lastMouseCode = 0; - int m_iPassPressed = -1; // used for pass + std::vector> m_pressedSpecialBinds; - CTimer m_tScrollTimer; + int m_passPressed = -1; // used for pass + + CTimer m_scrollTimer; SDispatchResult handleKeybinds(const uint32_t, const SPressedKeyWithMods&, bool); - std::set m_sMkKeys = {}; - std::set m_sMkMods = {}; + std::set m_mkKeys = {}; + std::set m_mkMods = {}; eMultiKeyCase mkBindMatches(const SP); eMultiKeyCase mkKeysymSetMatches(const std::set, const std::set); bool handleInternalKeybinds(xkb_keysym_t); bool handleVT(xkb_keysym_t); - xkb_state* m_pXKBTranslationState = nullptr; + xkb_state* m_xkbTranslationState = nullptr; void updateXKBTranslationState(); bool ensureMouseBindState(); diff --git a/src/managers/LayoutManager.cpp b/src/managers/LayoutManager.cpp index 70c2d2a3..a929b42e 100644 --- a/src/managers/LayoutManager.cpp +++ b/src/managers/LayoutManager.cpp @@ -1,22 +1,22 @@ #include "LayoutManager.hpp" CLayoutManager::CLayoutManager() { - m_vLayouts.emplace_back(std::make_pair<>("dwindle", &m_cDwindleLayout)); - m_vLayouts.emplace_back(std::make_pair<>("master", &m_cMasterLayout)); + m_layouts.emplace_back(std::make_pair<>("dwindle", &m_dwindleLayout)); + m_layouts.emplace_back(std::make_pair<>("master", &m_masterLayout)); } IHyprLayout* CLayoutManager::getCurrentLayout() { - return m_vLayouts[m_iCurrentLayoutID].second; + return m_layouts[m_currentLayoutID].second; } void CLayoutManager::switchToLayout(std::string layout) { - for (size_t i = 0; i < m_vLayouts.size(); ++i) { - if (m_vLayouts[i].first == layout) { - if (i == (size_t)m_iCurrentLayoutID) + for (size_t i = 0; i < m_layouts.size(); ++i) { + if (m_layouts[i].first == layout) { + if (i == (size_t)m_currentLayoutID) return; getCurrentLayout()->onDisable(); - m_iCurrentLayoutID = i; + m_currentLayoutID = i; getCurrentLayout()->onEnable(); return; } @@ -26,10 +26,10 @@ void CLayoutManager::switchToLayout(std::string layout) { } bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) { - if (std::find_if(m_vLayouts.begin(), m_vLayouts.end(), [&](const auto& other) { return other.first == name || other.second == layout; }) != m_vLayouts.end()) + if (std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.first == name || other.second == layout; }) != m_layouts.end()) return false; - m_vLayouts.emplace_back(std::make_pair<>(name, layout)); + m_layouts.emplace_back(std::make_pair<>(name, layout)); Debug::log(LOG, "Added new layout {} at {:x}", name, (uintptr_t)layout); @@ -37,24 +37,24 @@ bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) { } bool CLayoutManager::removeLayout(IHyprLayout* layout) { - const auto IT = std::find_if(m_vLayouts.begin(), m_vLayouts.end(), [&](const auto& other) { return other.second == layout; }); + const auto IT = std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.second == layout; }); - if (IT == m_vLayouts.end() || IT->first == "dwindle" || IT->first == "master") + if (IT == m_layouts.end() || IT->first == "dwindle" || IT->first == "master") return false; - if (m_iCurrentLayoutID == IT - m_vLayouts.begin()) + if (m_currentLayoutID == IT - m_layouts.begin()) switchToLayout("dwindle"); Debug::log(LOG, "Removed a layout {} at {:x}", IT->first, (uintptr_t)layout); - std::erase(m_vLayouts, *IT); + std::erase(m_layouts, *IT); return true; } std::vector CLayoutManager::getAllLayoutNames() { - std::vector results(m_vLayouts.size()); - for (size_t i = 0; i < m_vLayouts.size(); ++i) - results[i] = m_vLayouts[i].first; + std::vector results(m_layouts.size()); + for (size_t i = 0; i < m_layouts.size(); ++i) + results[i] = m_layouts[i].first; return results; } diff --git a/src/managers/LayoutManager.hpp b/src/managers/LayoutManager.hpp index 63e54baa..80c522fb 100644 --- a/src/managers/LayoutManager.hpp +++ b/src/managers/LayoutManager.hpp @@ -21,11 +21,11 @@ class CLayoutManager { LAYOUT_MASTER }; - int m_iCurrentLayoutID = LAYOUT_DWINDLE; + int m_currentLayoutID = LAYOUT_DWINDLE; - CHyprDwindleLayout m_cDwindleLayout; - CHyprMasterLayout m_cMasterLayout; - std::vector> m_vLayouts; + CHyprDwindleLayout m_dwindleLayout; + CHyprMasterLayout m_masterLayout; + std::vector> m_layouts; }; inline UP g_pLayoutManager; diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 1dcc0107..48044a69 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -24,7 +24,7 @@ using namespace Hyprutils::Utils; CPointerManager::CPointerManager() { - hooks.monitorAdded = g_pHookSystem->hookDynamic("monitorAdded", [this](void* self, SCallbackInfo& info, std::any data) { + m_hooks.monitorAdded = g_pHookSystem->hookDynamic("monitorAdded", [this](void* self, SCallbackInfo& info, std::any data) { auto PMONITOR = std::any_cast(data); onMonitorLayoutChange(); @@ -34,12 +34,12 @@ CPointerManager::CPointerManager() { PMONITOR->m_events.destroy.registerStaticListener( [this](void* owner, std::any data) { if (g_pCompositor && !g_pCompositor->m_isShuttingDown) - std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); }); + std::erase_if(m_monitorStates, [](const auto& other) { return other->monitor.expired(); }); }, nullptr); }); - hooks.monitorPreRender = g_pHookSystem->hookDynamic("preMonitorCommit", [this](void* self, SCallbackInfo& info, std::any data) { + m_hooks.monitorPreRender = g_pHookSystem->hookDynamic("preMonitorCommit", [this](void* self, SCallbackInfo& info, std::any data) { auto state = stateFor(std::any_cast(data)); if (!state) return; @@ -49,14 +49,14 @@ CPointerManager::CPointerManager() { } void CPointerManager::lockSoftwareAll() { - for (auto const& state : monitorStates) + for (auto const& state : m_monitorStates) state->softwareLocks++; updateCursorBackend(); } void CPointerManager::unlockSoftwareAll() { - for (auto const& state : monitorStates) + for (auto const& state : m_monitorStates) state->softwareLocks--; updateCursorBackend(); @@ -86,26 +86,26 @@ bool CPointerManager::softwareLockedFor(PHLMONITOR mon) { } Vector2D CPointerManager::position() { - return pointerPos; + return m_pointerPos; } bool CPointerManager::hasCursor() { - return currentCursorImage.pBuffer || currentCursorImage.surface; + return m_currentCursorImage.pBuffer || m_currentCursorImage.surface; } SP CPointerManager::stateFor(PHLMONITOR mon) { - auto it = std::find_if(monitorStates.begin(), monitorStates.end(), [mon](const auto& other) { return other->monitor == mon; }); - if (it == monitorStates.end()) - return monitorStates.emplace_back(makeShared(mon)); + auto it = std::find_if(m_monitorStates.begin(), m_monitorStates.end(), [mon](const auto& other) { return other->monitor == mon; }); + if (it == m_monitorStates.end()) + return m_monitorStates.emplace_back(makeShared(mon)); return *it; } void CPointerManager::setCursorBuffer(SP buf, const Vector2D& hotspot, const float& scale) { damageIfSoftware(); - if (buf == currentCursorImage.pBuffer) { - if (hotspot != currentCursorImage.hotspot || scale != currentCursorImage.scale) { - currentCursorImage.hotspot = hotspot; - currentCursorImage.scale = scale; + if (buf == m_currentCursorImage.pBuffer) { + if (hotspot != m_currentCursorImage.hotspot || scale != m_currentCursorImage.scale) { + m_currentCursorImage.hotspot = hotspot; + m_currentCursorImage.scale = scale; updateCursorBackend(); damageIfSoftware(); } @@ -116,12 +116,12 @@ void CPointerManager::setCursorBuffer(SP buf, const Vector2 resetCursorImage(false); if (buf) { - currentCursorImage.size = buf->size; - currentCursorImage.pBuffer = buf; + m_currentCursorImage.size = buf->size; + m_currentCursorImage.pBuffer = buf; } - currentCursorImage.hotspot = hotspot; - currentCursorImage.scale = scale; + m_currentCursorImage.hotspot = hotspot; + m_currentCursorImage.scale = scale; updateCursorBackend(); damageIfSoftware(); @@ -130,10 +130,10 @@ void CPointerManager::setCursorBuffer(SP buf, const Vector2 void CPointerManager::setCursorSurface(SP surf, const Vector2D& hotspot) { damageIfSoftware(); - if (surf == currentCursorImage.surface) { - if (hotspot != currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->current.scale : 1.F) != currentCursorImage.scale) { - currentCursorImage.hotspot = hotspot; - currentCursorImage.scale = surf && surf->resource() ? surf->resource()->current.scale : 1.F; + if (surf == m_currentCursorImage.surface) { + if (hotspot != m_currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->current.scale : 1.F) != m_currentCursorImage.scale) { + m_currentCursorImage.hotspot = hotspot; + m_currentCursorImage.scale = surf && surf->resource() ? surf->resource()->current.scale : 1.F; updateCursorBackend(); damageIfSoftware(); } @@ -144,28 +144,28 @@ void CPointerManager::setCursorSurface(SP surf, const Vector2D& hots resetCursorImage(false); if (surf) { - currentCursorImage.surface = surf; - currentCursorImage.scale = surf->resource()->current.scale; + m_currentCursorImage.surface = surf; + m_currentCursorImage.scale = surf->resource()->current.scale; surf->resource()->map(); - currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); }); - currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) { + m_currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); }); + m_currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) { damageIfSoftware(); - currentCursorImage.size = currentCursorImage.surface->resource()->current.texture ? currentCursorImage.surface->resource()->current.bufferSize : Vector2D{}; - currentCursorImage.scale = currentCursorImage.surface ? currentCursorImage.surface->resource()->current.scale : 1.F; + m_currentCursorImage.size = m_currentCursorImage.surface->resource()->current.texture ? m_currentCursorImage.surface->resource()->current.bufferSize : Vector2D{}; + m_currentCursorImage.scale = m_currentCursorImage.surface ? m_currentCursorImage.surface->resource()->current.scale : 1.F; recheckEnteredOutputs(); updateCursorBackend(); damageIfSoftware(); }); if (surf->resource()->current.texture) { - currentCursorImage.size = surf->resource()->current.bufferSize; + m_currentCursorImage.size = surf->resource()->current.bufferSize; surf->resource()->frame(Time::steadyNow()); } } - currentCursorImage.hotspot = hotspot; + m_currentCursorImage.hotspot = hotspot; recheckEnteredOutputs(); updateCursorBackend(); @@ -178,7 +178,7 @@ void CPointerManager::recheckEnteredOutputs() { auto box = getCursorBoxGlobal(); - for (auto const& s : monitorStates) { + for (auto const& s : m_monitorStates) { if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled) continue; @@ -187,12 +187,12 @@ void CPointerManager::recheckEnteredOutputs() { if (!s->entered && overlaps) { s->entered = true; - if (!currentCursorImage.surface) + if (!m_currentCursorImage.surface) continue; - currentCursorImage.surface->resource()->enter(s->monitor.lock()); - PROTO::fractional->sendScale(currentCursorImage.surface->resource(), s->monitor->m_scale); - g_pCompositor->setPreferredScaleForSurface(currentCursorImage.surface->resource(), s->monitor->m_scale); + m_currentCursorImage.surface->resource()->enter(s->monitor.lock()); + PROTO::fractional->sendScale(m_currentCursorImage.surface->resource(), s->monitor->m_scale); + g_pCompositor->setPreferredScaleForSurface(m_currentCursorImage.surface->resource(), s->monitor->m_scale); } else if (s->entered && !overlaps) { s->entered = false; @@ -202,10 +202,10 @@ void CPointerManager::recheckEnteredOutputs() { (s->monitor->m_output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER)) setHWCursorBuffer(s, nullptr); - if (!currentCursorImage.surface) + if (!m_currentCursorImage.surface) continue; - currentCursorImage.surface->resource()->leave(s->monitor.lock()); + m_currentCursorImage.surface->resource()->leave(s->monitor.lock()); } } } @@ -213,26 +213,26 @@ void CPointerManager::recheckEnteredOutputs() { void CPointerManager::resetCursorImage(bool apply) { damageIfSoftware(); - if (currentCursorImage.surface) { + if (m_currentCursorImage.surface) { for (auto const& m : g_pCompositor->m_monitors) { - currentCursorImage.surface->resource()->leave(m); + m_currentCursorImage.surface->resource()->leave(m); } - currentCursorImage.surface->resource()->unmap(); + m_currentCursorImage.surface->resource()->unmap(); - currentCursorImage.destroySurface.reset(); - currentCursorImage.commitSurface.reset(); - currentCursorImage.surface.reset(); - } else if (currentCursorImage.pBuffer) - currentCursorImage.pBuffer = nullptr; + m_currentCursorImage.destroySurface.reset(); + m_currentCursorImage.commitSurface.reset(); + m_currentCursorImage.surface.reset(); + } else if (m_currentCursorImage.pBuffer) + m_currentCursorImage.pBuffer = nullptr; - if (currentCursorImage.bufferTex) - currentCursorImage.bufferTex = nullptr; + if (m_currentCursorImage.bufferTex) + m_currentCursorImage.bufferTex = nullptr; - currentCursorImage.scale = 1.F; - currentCursorImage.hotspot = {0, 0}; + m_currentCursorImage.scale = 1.F; + m_currentCursorImage.hotspot = {0, 0}; - for (auto const& s : monitorStates) { + for (auto const& s : m_monitorStates) { if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled) continue; @@ -242,7 +242,7 @@ void CPointerManager::resetCursorImage(bool apply) { if (!apply) return; - for (auto const& ms : monitorStates) { + for (auto const& ms : m_monitorStates) { if (!ms->monitor || !ms->monitor->m_enabled || !ms->monitor->m_dpmsStatus) { Debug::log(TRACE, "Not updating hw cursors: disabled / dpms off display"); continue; @@ -392,7 +392,7 @@ bool CPointerManager::setHWCursorBuffer(SP state, SP CPointerManager::renderHWCursorBuffer(SP state, SP texture) { auto maxSize = state->monitor->m_output->cursorPlaneSize(); - auto const& cursorSize = currentCursorImage.size; + auto const& cursorSize = m_currentCursorImage.size; static auto PCPUBUFFER = CConfigValue("cursor:use_cpu_buffer"); @@ -403,7 +403,7 @@ SP CPointerManager::renderHWCursorBuffer(SP maxSize.x || cursorSize.y > maxSize.y) { - Debug::log(TRACE, "hardware cursor too big! {} > {}", currentCursorImage.size, maxSize); + Debug::log(TRACE, "hardware cursor too big! {} > {}", m_currentCursorImage.size, maxSize); return nullptr; } } else @@ -464,8 +464,8 @@ SP CPointerManager::renderHWCursorBuffer(SPdataCopy(); if (texData.empty()) { - if (currentCursorImage.surface && currentCursorImage.surface->resource()->role->role() == SURFACE_ROLE_CURSOR) { - const auto SURFACE = currentCursorImage.surface->resource(); + if (m_currentCursorImage.surface && m_currentCursorImage.surface->resource()->role->role() == SURFACE_ROLE_CURSOR) { + const auto SURFACE = m_currentCursorImage.surface->resource(); auto& shmBuffer = CCursorSurfaceRole::cursorPixelData(SURFACE); bool flipRB = false; @@ -523,7 +523,7 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->m_transform; // we need to scale the cursor to the right size, because it might not be (esp with XCursor) - const auto SCALE = texture->m_vSize / (currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale); + const auto SCALE = texture->m_vSize / (m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale); cairo_matrix_scale(&matrixPre, SCALE.x, SCALE.y); if (TR) { @@ -577,9 +577,9 @@ SP CPointerManager::renderHWCursorBuffer(SPbeginSimple(state->monitor.lock(), {0, 0, INT16_MAX, INT16_MAX}, RBO); g_pHyprOpenGL->clear(CHyprColor{0.F, 0.F, 0.F, 0.F}); - CBox xbox = {{}, Vector2D{currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale}.round()}; - Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->m_name, currentCursorImage.size, cursorSize, - currentCursorImage.scale, state->monitor->m_scale, xbox.size()); + CBox xbox = {{}, Vector2D{m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale}.round()}; + Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->m_name, m_currentCursorImage.size, cursorSize, + m_currentCursorImage.scale, state->monitor->m_scale, xbox.size()); g_pHyprOpenGL->renderTexture(texture, xbox, 1.F); @@ -599,8 +599,8 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: auto state = stateFor(pMonitor); if (!state->hardwareFailed && state->softwareLocks == 0 && !forceRender) { - if (currentCursorImage.surface) - currentCursorImage.surface->resource()->frame(now); + if (m_currentCursorImage.surface) + m_currentCursorImage.surface->resource()->frame(now); return; } @@ -627,12 +627,12 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); - if (currentCursorImage.surface) - currentCursorImage.surface->resource()->frame(now); + if (m_currentCursorImage.surface) + m_currentCursorImage.surface->resource()->frame(now); } Vector2D CPointerManager::getCursorPosForMonitor(PHLMONITOR pMonitor) { - return CBox{pointerPos - pMonitor->m_position, {0, 0}} + return CBox{m_pointerPos - pMonitor->m_position, {0, 0}} .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_transformedSize.x / pMonitor->m_scale, pMonitor->m_transformedSize.y / pMonitor->m_scale) .pos() * @@ -643,7 +643,7 @@ Vector2D CPointerManager::transformedHotspot(PHLMONITOR pMonitor) { if (!pMonitor->m_cursorSwapchain) return {}; // doesn't matter, we have no hw cursor, and this is only for hw cursors - return CBox{currentCursorImage.hotspot * pMonitor->m_scale, {0, 0}} + return CBox{m_currentCursorImage.hotspot * pMonitor->m_scale, {0, 0}} .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_cursorSwapchain->currentOptions().size.x, pMonitor->m_cursorSwapchain->currentOptions().size.y) .pos(); @@ -654,7 +654,7 @@ CBox CPointerManager::getCursorBoxLogicalForMonitor(PHLMONITOR pMonitor) { } CBox CPointerManager::getCursorBoxGlobal() { - return CBox{pointerPos, currentCursorImage.size / currentCursorImage.scale}.translate(-currentCursorImage.hotspot); + return CBox{m_pointerPos, m_currentCursorImage.size / m_currentCursorImage.scale}.translate(-m_currentCursorImage.hotspot); } Vector2D CPointerManager::closestValid(const Vector2D& pos) { @@ -665,7 +665,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) { // static auto INSIDE_LAYOUT = [this](const CBox& box) -> bool { - for (auto const& b : currentMonitorLayout.monitorBoxes) { + for (auto const& b : m_currentMonitorLayout.monitorBoxes) { if (box.inside(b)) return true; } @@ -673,7 +673,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) { }; static auto INSIDE_LAYOUT_COORD = [this](const Vector2D& vec) -> bool { - for (auto const& b : currentMonitorLayout.monitorBoxes) { + for (auto const& b : m_currentMonitorLayout.monitorBoxes) { if (b.containsPoint(vec)) return true; } @@ -684,7 +684,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) { Vector2D leader; float distanceSq = __FLT_MAX__; - for (auto const& b : currentMonitorLayout.monitorBoxes) { + for (auto const& b : m_currentMonitorLayout.monitorBoxes) { auto p = b.closestPoint(vec); auto distSq = p.distanceSq(vec); @@ -736,7 +736,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) { void CPointerManager::damageIfSoftware() { auto b = getCursorBoxGlobal().expand(4); - for (auto const& mw : monitorStates) { + for (auto const& mw : m_monitorStates) { if (mw->monitor.expired() || !mw->monitor->m_output) continue; @@ -751,7 +751,7 @@ void CPointerManager::damageIfSoftware() { void CPointerManager::warpTo(const Vector2D& logical) { damageIfSoftware(); - pointerPos = closestValid(logical); + m_pointerPos = closestValid(logical); if (!g_pInputManager->isLocked()) { recheckEnteredOutputs(); @@ -762,7 +762,7 @@ void CPointerManager::warpTo(const Vector2D& logical) { } void CPointerManager::move(const Vector2D& deltaLogical) { - const auto oldPos = pointerPos; + const auto oldPos = m_pointerPos; auto newPos = oldPos + Vector2D{std::isnan(deltaLogical.x) ? 0.0 : deltaLogical.x, std::isnan(deltaLogical.y) ? 0.0 : deltaLogical.y}; warpTo(newPos); @@ -839,10 +839,10 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { damageIfSoftware(); if (std::isnan(abs.x) || std::isnan(abs.y)) { - pointerPos.x = std::isnan(abs.x) ? pointerPos.x : mappedArea.x + mappedArea.w * abs.x; - pointerPos.y = std::isnan(abs.y) ? pointerPos.y : mappedArea.y + mappedArea.h * abs.y; + m_pointerPos.x = std::isnan(abs.x) ? m_pointerPos.x : mappedArea.x + mappedArea.w * abs.x; + m_pointerPos.y = std::isnan(abs.y) ? m_pointerPos.y : mappedArea.y + mappedArea.h * abs.y; } else - pointerPos = mappedArea.pos() + mappedArea.size() * abs; + m_pointerPos = mappedArea.pos() + mappedArea.size() * abs; onCursorMoved(); recheckEnteredOutputs(); @@ -851,17 +851,17 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP dev) { } void CPointerManager::onMonitorLayoutChange() { - currentMonitorLayout.monitorBoxes.clear(); + m_currentMonitorLayout.monitorBoxes.clear(); for (auto const& m : g_pCompositor->m_monitors) { if (m->isMirror() || !m->m_enabled || !m->m_output) continue; - currentMonitorLayout.monitorBoxes.emplace_back(m->m_position, m->m_size); + m_currentMonitorLayout.monitorBoxes.emplace_back(m->m_position, m->m_size); } damageIfSoftware(); - pointerPos = closestValid(pointerPos); + m_pointerPos = closestValid(m_pointerPos); updateCursorBackend(); recheckEnteredOutputs(); @@ -869,16 +869,16 @@ void CPointerManager::onMonitorLayoutChange() { } SP CPointerManager::getCurrentCursorTexture() { - if (!currentCursorImage.pBuffer && (!currentCursorImage.surface || !currentCursorImage.surface->resource()->current.texture)) + if (!m_currentCursorImage.pBuffer && (!m_currentCursorImage.surface || !m_currentCursorImage.surface->resource()->current.texture)) return nullptr; - if (currentCursorImage.pBuffer) { - if (!currentCursorImage.bufferTex) - currentCursorImage.bufferTex = makeShared(currentCursorImage.pBuffer, true); - return currentCursorImage.bufferTex; + if (m_currentCursorImage.pBuffer) { + if (!m_currentCursorImage.bufferTex) + m_currentCursorImage.bufferTex = makeShared(m_currentCursorImage.pBuffer, true); + return m_currentCursorImage.bufferTex; } - return currentCursorImage.surface->resource()->current.texture; + return m_currentCursorImage.surface->resource()->current.texture; } void CPointerManager::attachPointer(SP pointer) { @@ -888,7 +888,7 @@ void CPointerManager::attachPointer(SP pointer) { static auto PMOUSEDPMS = CConfigValue("misc:mouse_move_enables_dpms"); // - auto listener = pointerListeners.emplace_back(makeShared()); + auto listener = m_pointerListeners.emplace_back(makeShared()); listener->pointer = pointer; @@ -937,12 +937,12 @@ void CPointerManager::attachPointer(SP pointer) { listener->frame = pointer->m_pointerEvents.frame.registerListener([] (std::any e) { bool shouldSkip = false; - if (!g_pSeatManager->mouse.expired() && g_pInputManager->isLocked()) { + if (!g_pSeatManager->m_mouse.expired() && g_pInputManager->isLocked()) { auto PMONITOR = g_pCompositor->m_lastMonitor.get(); shouldSkip = PMONITOR && PMONITOR->shouldSkipScheduleFrameOnMouseEvent(); } - g_pSeatManager->isPointerFrameSkipped = shouldSkip; - if (!g_pSeatManager->isPointerFrameSkipped) + g_pSeatManager->m_isPointerFrameSkipped = shouldSkip; + if (!g_pSeatManager->m_isPointerFrameSkipped) g_pSeatManager->sendPointerFrame(); }); @@ -1027,7 +1027,7 @@ void CPointerManager::attachTouch(SP touch) { static auto PMOUSEDPMS = CConfigValue("misc:mouse_move_enables_dpms"); // - auto listener = touchListeners.emplace_back(makeShared()); + auto listener = m_touchListeners.emplace_back(makeShared()); listener->touch = touch; @@ -1082,7 +1082,7 @@ void CPointerManager::attachTablet(SP tablet) { static auto PMOUSEDPMS = CConfigValue("misc:mouse_move_enables_dpms"); // - auto listener = tabletListeners.emplace_back(makeShared()); + auto listener = m_tabletListeners.emplace_back(makeShared()); listener->tablet = tablet; @@ -1134,19 +1134,19 @@ void CPointerManager::attachTablet(SP tablet) { } void CPointerManager::detachPointer(SP pointer) { - std::erase_if(pointerListeners, [pointer](const auto& e) { return e->pointer.expired() || e->pointer == pointer; }); + std::erase_if(m_pointerListeners, [pointer](const auto& e) { return e->pointer.expired() || e->pointer == pointer; }); } void CPointerManager::detachTouch(SP touch) { - std::erase_if(touchListeners, [touch](const auto& e) { return e->touch.expired() || e->touch == touch; }); + std::erase_if(m_touchListeners, [touch](const auto& e) { return e->touch.expired() || e->touch == touch; }); } void CPointerManager::detachTablet(SP tablet) { - std::erase_if(tabletListeners, [tablet](const auto& e) { return e->tablet.expired() || e->tablet == tablet; }); + std::erase_if(m_tabletListeners, [tablet](const auto& e) { return e->tablet.expired() || e->tablet == tablet; }); } void CPointerManager::damageCursor(PHLMONITOR pMonitor) { - for (auto const& mw : monitorStates) { + for (auto const& mw : m_monitorStates) { if (mw->monitor != pMonitor) continue; @@ -1162,24 +1162,24 @@ void CPointerManager::damageCursor(PHLMONITOR pMonitor) { } Vector2D CPointerManager::cursorSizeLogical() { - return currentCursorImage.size / currentCursorImage.scale; + return m_currentCursorImage.size / m_currentCursorImage.scale; } void CPointerManager::storeMovement(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) { - storedTime = time; - storedDelta += delta; - storedUnaccel += deltaUnaccel; + m_storedTime = time; + m_storedDelta += delta; + m_storedUnaccel += deltaUnaccel; } void CPointerManager::setStoredMovement(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) { - storedTime = time; - storedDelta = delta; - storedUnaccel = deltaUnaccel; + m_storedTime = time; + m_storedDelta = delta; + m_storedUnaccel = deltaUnaccel; } void CPointerManager::sendStoredMovement() { - PROTO::relativePointer->sendRelativeMotion((uint64_t)storedTime * 1000, storedDelta, storedUnaccel); - storedTime = 0; - storedDelta = Vector2D{}; - storedUnaccel = Vector2D{}; + PROTO::relativePointer->sendRelativeMotion((uint64_t)m_storedTime * 1000, m_storedDelta, m_storedUnaccel); + m_storedTime = 0; + m_storedDelta = Vector2D{}; + m_storedUnaccel = Vector2D{}; } diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index 3569b218..62a5d18f 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -110,7 +110,7 @@ class CPointerManager { WP pointer; }; - std::vector> pointerListeners; + std::vector> m_pointerListeners; struct STouchListener { CHyprSignalListener destroy; @@ -122,7 +122,7 @@ class CPointerManager { WP touch; }; - std::vector> touchListeners; + std::vector> m_touchListeners; struct STabletListener { CHyprSignalListener destroy; @@ -133,11 +133,11 @@ class CPointerManager { WP tablet; }; - std::vector> tabletListeners; + std::vector> m_tabletListeners; struct { std::vector monitorBoxes; - } currentMonitorLayout; + } m_currentMonitorLayout; struct { SP pBuffer; @@ -150,13 +150,13 @@ class CPointerManager { CHyprSignalListener destroySurface; CHyprSignalListener commitSurface; - } currentCursorImage; // TODO: support various sizes per-output so we can have pixel-perfect cursors + } m_currentCursorImage; // TODO: support various sizes per-output so we can have pixel-perfect cursors - Vector2D pointerPos = {0, 0}; + Vector2D m_pointerPos = {0, 0}; - uint64_t storedTime = 0; - Vector2D storedDelta = {0, 0}; - Vector2D storedUnaccel = {0, 0}; + uint64_t m_storedTime = 0; + Vector2D m_storedDelta = {0, 0}; + Vector2D m_storedUnaccel = {0, 0}; struct SMonitorPointerState { SMonitorPointerState(const PHLMONITOR& m) : monitor(m) {} @@ -174,7 +174,7 @@ class CPointerManager { SP cursorFrontBuffer; }; - std::vector> monitorStates; + std::vector> m_monitorStates; SP stateFor(PHLMONITOR mon); bool attemptHardwareCursor(SP state); SP renderHWCursorBuffer(SP state, SP texture); @@ -183,7 +183,7 @@ class CPointerManager { struct { SP monitorAdded; SP monitorPreRender; - } hooks; + } m_hooks; }; inline UP g_pPointerManager; diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index 2de13da0..f2a9b0ea 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -122,7 +122,7 @@ CProtocolManager::CProtocolManager() { PROTO::outputs.emplace(M->m_name, ref); ref->self = ref; - m_mModeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); }); + m_modeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); }); }); static auto P2 = g_pHookSystem->hookDynamic("monitorRemoved", [this](void* self, SCallbackInfo& info, std::any param) { @@ -130,7 +130,7 @@ CProtocolManager::CProtocolManager() { if (!PROTO::outputs.contains(M->m_name)) return; PROTO::outputs.at(M->m_name)->remove(); - m_mModeChangeListeners.erase(M->m_name); + m_modeChangeListeners.erase(M->m_name); }); // Core diff --git a/src/managers/ProtocolManager.hpp b/src/managers/ProtocolManager.hpp index 1ec8db4a..86c6c0df 100644 --- a/src/managers/ProtocolManager.hpp +++ b/src/managers/ProtocolManager.hpp @@ -13,7 +13,7 @@ class CProtocolManager { bool isGlobalPrivileged(const wl_global* global); private: - std::unordered_map m_mModeChangeListeners; + std::unordered_map m_modeChangeListeners; void onMonitorModeChange(PHLMONITOR pMonitor); }; diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 3fe407b3..809c0ad5 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -14,20 +14,20 @@ #include CSeatManager::CSeatManager() { - listeners.newSeatResource = PROTO::seat->events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast>(res)); }); + m_listeners.newSeatResource = PROTO::seat->events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast>(res)); }); } CSeatManager::SSeatResourceContainer::SSeatResourceContainer(SP res) : resource(res) { listeners.destroy = res->events.destroy.registerListener( - [this](std::any data) { std::erase_if(g_pSeatManager->seatResources, [this](const auto& e) { return e->resource.expired() || e->resource == resource; }); }); + [this](std::any data) { std::erase_if(g_pSeatManager->m_seatResources, [this](const auto& e) { return e->resource.expired() || e->resource == resource; }); }); } void CSeatManager::onNewSeatResource(SP resource) { - seatResources.emplace_back(makeShared(resource)); + m_seatResources.emplace_back(makeShared(resource)); } SP CSeatManager::containerForResource(SP seatResource) { - for (auto const& c : seatResources) { + for (auto const& c : m_seatResources) { if (c->resource == seatResource) return c; } @@ -76,19 +76,19 @@ void CSeatManager::updateCapabilities(uint32_t capabilities) { } void CSeatManager::setMouse(SP MAUZ) { - if (mouse == MAUZ) + if (m_mouse == MAUZ) return; - mouse = MAUZ; + m_mouse = MAUZ; } void CSeatManager::setKeyboard(SP KEEB) { - if (keyboard == KEEB) + if (m_keyboard == KEEB) return; - if (keyboard) - keyboard->m_active = false; - keyboard = KEEB; + if (m_keyboard) + m_keyboard->m_active = false; + m_keyboard = KEEB; if (KEEB) KEEB->m_active = true; @@ -97,25 +97,25 @@ void CSeatManager::setKeyboard(SP KEEB) { } void CSeatManager::updateActiveKeyboardData() { - if (keyboard) - PROTO::seat->updateRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay); + if (m_keyboard) + PROTO::seat->updateRepeatInfo(m_keyboard->m_repeatRate, m_keyboard->m_repeatDelay); PROTO::seat->updateKeymap(); } void CSeatManager::setKeyboardFocus(SP surf) { - if (state.keyboardFocus == surf) + if (m_state.keyboardFocus == surf) return; - if (!keyboard) { + if (!m_keyboard) { Debug::log(ERR, "BUG THIS: setKeyboardFocus without a valid keyboard set"); return; } - listeners.keyboardSurfaceDestroy.reset(); + m_listeners.keyboardSurfaceDestroy.reset(); - if (state.keyboardFocusResource) { - auto client = state.keyboardFocusResource->client(); - for (auto const& s : seatResources) { + if (m_state.keyboardFocusResource) { + auto client = m_state.keyboardFocusResource->client(); + for (auto const& s : m_seatResources) { if (s->resource->client() != client) continue; @@ -128,40 +128,40 @@ void CSeatManager::setKeyboardFocus(SP surf) { } } - state.keyboardFocusResource.reset(); - state.keyboardFocus = surf; + m_state.keyboardFocusResource.reset(); + m_state.keyboardFocus = surf; if (!surf) { - events.keyboardFocusChange.emit(); + m_events.keyboardFocusChange.emit(); return; } auto client = surf->client(); - for (auto const& r : seatResources | std::views::reverse) { + for (auto const& r : m_seatResources | std::views::reverse) { if (r->resource->client() != client) continue; - state.keyboardFocusResource = r->resource; + m_state.keyboardFocusResource = r->resource; for (auto const& k : r->resource->keyboards) { if (!k) continue; k->sendEnter(surf); - k->sendMods(keyboard->m_modifiersState.depressed, keyboard->m_modifiersState.latched, keyboard->m_modifiersState.locked, keyboard->m_modifiersState.group); + k->sendMods(m_keyboard->m_modifiersState.depressed, m_keyboard->m_modifiersState.latched, m_keyboard->m_modifiersState.locked, m_keyboard->m_modifiersState.group); } } - listeners.keyboardSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); }); + m_listeners.keyboardSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); }); - events.keyboardFocusChange.emit(); + m_events.keyboardFocusChange.emit(); } void CSeatManager::sendKeyboardKey(uint32_t timeMs, uint32_t key, wl_keyboard_key_state state_) { - if (!state.keyboardFocusResource) + if (!m_state.keyboardFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.keyboardFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.keyboardFocusResource->client()) continue; for (auto const& k : s->resource->keyboards) { @@ -174,11 +174,11 @@ void CSeatManager::sendKeyboardKey(uint32_t timeMs, uint32_t key, wl_keyboard_ke } void CSeatManager::sendKeyboardMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - if (!state.keyboardFocusResource) + if (!m_state.keyboardFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.keyboardFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.keyboardFocusResource->client()) continue; for (auto const& k : s->resource->keyboards) { @@ -191,28 +191,28 @@ void CSeatManager::sendKeyboardMods(uint32_t depressed, uint32_t latched, uint32 } void CSeatManager::setPointerFocus(SP surf, const Vector2D& local) { - if (state.pointerFocus == surf) + if (m_state.pointerFocus == surf) return; if (PROTO::data->dndActive() && surf) { - if (state.dndPointerFocus == surf) + if (m_state.dndPointerFocus == surf) return; Debug::log(LOG, "[seatmgr] Refusing pointer focus during an active dnd, but setting dndPointerFocus"); - state.dndPointerFocus = surf; - events.dndPointerFocusChange.emit(); + m_state.dndPointerFocus = surf; + m_events.dndPointerFocusChange.emit(); return; } - if (!mouse) { + if (!m_mouse) { Debug::log(ERR, "BUG THIS: setPointerFocus without a valid mouse set"); return; } - listeners.pointerSurfaceDestroy.reset(); + m_listeners.pointerSurfaceDestroy.reset(); - if (state.pointerFocusResource) { - auto client = state.pointerFocusResource->client(); - for (auto const& s : seatResources) { + if (m_state.pointerFocusResource) { + auto client = m_state.pointerFocusResource->client(); + for (auto const& s : m_seatResources) { if (s->resource->client() != client) continue; @@ -225,26 +225,26 @@ void CSeatManager::setPointerFocus(SP surf, const Vector2D& } } - auto lastPointerFocusResource = state.pointerFocusResource; + auto lastPointerFocusResource = m_state.pointerFocusResource; - state.dndPointerFocus.reset(); - state.pointerFocusResource.reset(); - state.pointerFocus = surf; + m_state.dndPointerFocus.reset(); + m_state.pointerFocusResource.reset(); + m_state.pointerFocus = surf; if (!surf) { sendPointerFrame(lastPointerFocusResource); - events.pointerFocusChange.emit(); + m_events.pointerFocusChange.emit(); return; } - state.dndPointerFocus = surf; + m_state.dndPointerFocus = surf; auto client = surf->client(); - for (auto const& r : seatResources | std::views::reverse) { + for (auto const& r : m_seatResources | std::views::reverse) { if (r->resource->client() != client) continue; - state.pointerFocusResource = r->resource; + m_state.pointerFocusResource = r->resource; for (auto const& p : r->resource->pointers) { if (!p) continue; @@ -253,23 +253,23 @@ void CSeatManager::setPointerFocus(SP surf, const Vector2D& } } - if (state.pointerFocusResource != lastPointerFocusResource) + if (m_state.pointerFocusResource != lastPointerFocusResource) sendPointerFrame(lastPointerFocusResource); sendPointerFrame(); - listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); }); + m_listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); }); - events.pointerFocusChange.emit(); - events.dndPointerFocusChange.emit(); + m_events.pointerFocusChange.emit(); + m_events.dndPointerFocusChange.emit(); } void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) { - if (!state.pointerFocusResource) + if (!m_state.pointerFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.pointerFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.pointerFocusResource->client()) continue; for (auto const& p : s->resource->pointers) { @@ -280,15 +280,15 @@ void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) { } } - lastLocalCoords = local; + m_lastLocalCoords = local; } void CSeatManager::sendPointerButton(uint32_t timeMs, uint32_t key, wl_pointer_button_state state_) { - if (!state.pointerFocusResource || PROTO::data->dndActive()) + if (!m_state.pointerFocusResource || PROTO::data->dndActive()) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.pointerFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.pointerFocusResource->client()) continue; for (auto const& p : s->resource->pointers) { @@ -301,17 +301,17 @@ void CSeatManager::sendPointerButton(uint32_t timeMs, uint32_t key, wl_pointer_b } void CSeatManager::sendPointerFrame() { - if (!state.pointerFocusResource) + if (!m_state.pointerFocusResource) return; - sendPointerFrame(state.pointerFocusResource); + sendPointerFrame(m_state.pointerFocusResource); } void CSeatManager::sendPointerFrame(WP pResource) { if (!pResource) return; - for (auto const& s : seatResources) { + for (auto const& s : m_seatResources) { if (s->resource->client() != pResource->client()) continue; @@ -326,11 +326,11 @@ void CSeatManager::sendPointerFrame(WP pResource) { void CSeatManager::sendPointerAxis(uint32_t timeMs, wl_pointer_axis axis, double value, int32_t discrete, int32_t value120, wl_pointer_axis_source source, wl_pointer_axis_relative_direction relative) { - if (!state.pointerFocusResource) + if (!m_state.pointerFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.pointerFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.pointerFocusResource->client()) continue; for (auto const& p : s->resource->pointers) { @@ -353,17 +353,17 @@ void CSeatManager::sendPointerAxis(uint32_t timeMs, wl_pointer_axis axis, double } void CSeatManager::sendTouchDown(SP surf, uint32_t timeMs, int32_t id, const Vector2D& local) { - listeners.touchSurfaceDestroy.reset(); + m_listeners.touchSurfaceDestroy.reset(); - state.touchFocusResource.reset(); - state.touchFocus = surf; + m_state.touchFocusResource.reset(); + m_state.touchFocus = surf; auto client = surf->client(); - for (auto const& r : seatResources | std::views::reverse) { + for (auto const& r : m_seatResources | std::views::reverse) { if (r->resource->client() != client) continue; - state.touchFocusResource = r->resource; + m_state.touchFocusResource = r->resource; for (auto const& t : r->resource->touches) { if (!t) continue; @@ -372,24 +372,24 @@ void CSeatManager::sendTouchDown(SP surf, uint32_t timeMs, i } } - listeners.touchSurfaceDestroy = surf->events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); }); + m_listeners.touchSurfaceDestroy = surf->events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); }); - touchLocks++; + m_touchLocks++; - if (touchLocks <= 1) - events.touchFocusChange.emit(); + if (m_touchLocks <= 1) + m_events.touchFocusChange.emit(); } void CSeatManager::sendTouchUp(uint32_t timeMs, int32_t id) { - if (!state.touchFocusResource || touchLocks <= 0) + if (!m_state.touchFocusResource || m_touchLocks <= 0) return; - auto client = state.touchFocusResource->client(); - for (auto const& r : seatResources | std::views::reverse) { + auto client = m_state.touchFocusResource->client(); + for (auto const& r : m_seatResources | std::views::reverse) { if (r->resource->client() != client) continue; - state.touchFocusResource = r->resource; + m_state.touchFocusResource = r->resource; for (auto const& t : r->resource->touches) { if (!t) continue; @@ -398,18 +398,18 @@ void CSeatManager::sendTouchUp(uint32_t timeMs, int32_t id) { } } - touchLocks--; + m_touchLocks--; - if (touchLocks <= 0) - events.touchFocusChange.emit(); + if (m_touchLocks <= 0) + m_events.touchFocusChange.emit(); } void CSeatManager::sendTouchMotion(uint32_t timeMs, int32_t id, const Vector2D& local) { - if (!state.touchFocusResource) + if (!m_state.touchFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.touchFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.touchFocusResource->client()) continue; for (auto const& t : s->resource->touches) { @@ -422,11 +422,11 @@ void CSeatManager::sendTouchMotion(uint32_t timeMs, int32_t id, const Vector2D& } void CSeatManager::sendTouchFrame() { - if (!state.touchFocusResource) + if (!m_state.touchFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.touchFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.touchFocusResource->client()) continue; for (auto const& t : s->resource->touches) { @@ -439,11 +439,11 @@ void CSeatManager::sendTouchFrame() { } void CSeatManager::sendTouchCancel() { - if (!state.touchFocusResource) + if (!m_state.touchFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.touchFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.touchFocusResource->client()) continue; for (auto const& t : s->resource->touches) { @@ -456,11 +456,11 @@ void CSeatManager::sendTouchCancel() { } void CSeatManager::sendTouchShape(int32_t id, const Vector2D& shape) { - if (!state.touchFocusResource) + if (!m_state.touchFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.touchFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.touchFocusResource->client()) continue; for (auto const& t : s->resource->touches) { @@ -473,11 +473,11 @@ void CSeatManager::sendTouchShape(int32_t id, const Vector2D& shape) { } void CSeatManager::sendTouchOrientation(int32_t id, double angle) { - if (!state.touchFocusResource) + if (!m_state.touchFocusResource) return; - for (auto const& s : seatResources) { - if (s->resource->client() != state.touchFocusResource->client()) + for (auto const& s : m_seatResources) { + if (s->resource->client() != m_state.touchFocusResource->client()) continue; for (auto const& t : s->resource->touches) { @@ -490,13 +490,13 @@ void CSeatManager::sendTouchOrientation(int32_t id, double angle) { } void CSeatManager::refocusGrab() { - if (!seatGrab) + if (!m_seatGrab) return; - if (seatGrab->surfs.size() > 0) { + if (m_seatGrab->m_surfs.size() > 0) { // try to find a surf in focus first const auto MOUSE = g_pInputManager->getMouseCoordsInternal(); - for (auto const& s : seatGrab->surfs) { + for (auto const& s : m_seatGrab->m_surfs) { auto hlSurf = CWLSurface::fromResource(s.lock()); if (!hlSurf) continue; @@ -508,23 +508,23 @@ void CSeatManager::refocusGrab() { if (!b->containsPoint(MOUSE)) continue; - if (seatGrab->keyboard) + if (m_seatGrab->m_keyboard) setKeyboardFocus(s.lock()); - if (seatGrab->pointer) + if (m_seatGrab->m_pointer) setPointerFocus(s.lock(), MOUSE - b->pos()); return; } - SP surf = seatGrab->surfs.at(0).lock(); - if (seatGrab->keyboard) + SP surf = m_seatGrab->m_surfs.at(0).lock(); + if (m_seatGrab->m_keyboard) setKeyboardFocus(surf); - if (seatGrab->pointer) + if (m_seatGrab->m_pointer) setPointerFocus(surf, {}); } } void CSeatManager::onSetCursor(SP seatResource, uint32_t serial, SP surf, const Vector2D& hotspot) { - if (!state.pointerFocusResource || !seatResource || seatResource->client() != state.pointerFocusResource->client()) { + if (!m_state.pointerFocusResource || !seatResource || seatResource->client() != m_state.pointerFocusResource->client()) { Debug::log(LOG, "[seatmgr] Rejecting a setCursor because the client ain't in focus"); return; } @@ -535,7 +535,7 @@ void CSeatManager::onSetCursor(SP seatResource, uint32_t serial // return; // } - events.setCursor.emit(SSetCursorEvent{surf, hotspot}); + m_events.setCursor.emit(SSetCursorEvent{surf, hotspot}); } SP CSeatManager::seatResourceForClient(wl_client* client) { @@ -543,62 +543,62 @@ SP CSeatManager::seatResourceForClient(wl_client* client) { } void CSeatManager::setCurrentSelection(SP source) { - if (source == selection.currentSelection) { + if (source == m_selection.currentSelection) { Debug::log(WARN, "[seat] duplicated setCurrentSelection?"); return; } - selection.destroySelection.reset(); + m_selection.destroySelection.reset(); - if (selection.currentSelection) - selection.currentSelection->cancelled(); + if (m_selection.currentSelection) + m_selection.currentSelection->cancelled(); if (!source) PROTO::data->setSelection(nullptr); - selection.currentSelection = source; + m_selection.currentSelection = source; if (source) { - selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); }); + m_selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); }); PROTO::data->setSelection(source); PROTO::dataWlr->setSelection(source, false); } - events.setSelection.emit(); + m_events.setSelection.emit(); } void CSeatManager::setCurrentPrimarySelection(SP source) { - if (source == selection.currentPrimarySelection) { + if (source == m_selection.currentPrimarySelection) { Debug::log(WARN, "[seat] duplicated setCurrentPrimarySelection?"); return; } - selection.destroyPrimarySelection.reset(); + m_selection.destroyPrimarySelection.reset(); - if (selection.currentPrimarySelection) - selection.currentPrimarySelection->cancelled(); + if (m_selection.currentPrimarySelection) + m_selection.currentPrimarySelection->cancelled(); if (!source) PROTO::primarySelection->setSelection(nullptr); - selection.currentPrimarySelection = source; + m_selection.currentPrimarySelection = source; if (source) { - selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); }); + m_selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); }); PROTO::primarySelection->setSelection(source); PROTO::dataWlr->setSelection(source, true); } - events.setPrimarySelection.emit(); + m_events.setPrimarySelection.emit(); } void CSeatManager::setGrab(SP grab) { - if (seatGrab) { - auto oldGrab = seatGrab; - seatGrab.reset(); + if (m_seatGrab) { + auto oldGrab = m_seatGrab; + m_seatGrab.reset(); g_pInputManager->refocus(); - auto currentFocus = state.keyboardFocus.lock(); + auto currentFocus = m_state.keyboardFocus.lock(); auto refocus = !currentFocus; SP surf; @@ -627,23 +627,23 @@ void CSeatManager::setGrab(SP grab) { g_pCompositor->focusWindow(candidate); } - if (oldGrab->onEnd) - oldGrab->onEnd(); + if (oldGrab->m_onEnd) + oldGrab->m_onEnd(); } if (!grab) return; - seatGrab = grab; + m_seatGrab = grab; refocusGrab(); } void CSeatManager::resendEnterEvents() { - SP kb = state.keyboardFocus.lock(); - SP pt = state.pointerFocus.lock(); + SP kb = m_state.keyboardFocus.lock(); + SP pt = m_state.pointerFocus.lock(); - auto last = lastLocalCoords; + auto last = m_lastLocalCoords; setKeyboardFocus(nullptr); setPointerFocus(nullptr, {}); @@ -653,23 +653,23 @@ void CSeatManager::resendEnterEvents() { } bool CSeatGrab::accepts(SP surf) { - return std::find(surfs.begin(), surfs.end(), surf) != surfs.end(); + return std::find(m_surfs.begin(), m_surfs.end(), surf) != m_surfs.end(); } void CSeatGrab::add(SP surf) { - surfs.emplace_back(surf); + m_surfs.emplace_back(surf); } void CSeatGrab::remove(SP surf) { - std::erase(surfs, surf); - if ((keyboard && g_pSeatManager->state.keyboardFocus == surf) || (pointer && g_pSeatManager->state.pointerFocus == surf)) + std::erase(m_surfs, surf); + if ((m_keyboard && g_pSeatManager->m_state.keyboardFocus == surf) || (m_pointer && g_pSeatManager->m_state.pointerFocus == surf)) g_pSeatManager->refocusGrab(); } void CSeatGrab::setCallback(std::function onEnd_) { - onEnd = onEnd_; + m_onEnd = onEnd_; } void CSeatGrab::clear() { - surfs.clear(); + m_surfs.clear(); } diff --git a/src/managers/SeatManager.hpp b/src/managers/SeatManager.hpp index 32472aa3..6310f0d2 100644 --- a/src/managers/SeatManager.hpp +++ b/src/managers/SeatManager.hpp @@ -33,15 +33,12 @@ class CSeatGrab { void setCallback(std::function onEnd_); void clear(); - bool keyboard = false; - bool pointer = false; - bool touch = false; - - bool removeOnInput = true; // on hard input e.g. click outside, remove + bool m_keyboard = false; + bool m_pointer = false; private: - std::vector> surfs; - std::function onEnd; + std::vector> m_surfs; + std::function m_onEnd; friend class CSeatManager; }; @@ -96,7 +93,7 @@ class CSeatManager { WP touchFocusResource; WP dndPointerFocus; - } state; + } m_state; struct SSetCursorEvent { SP surf = nullptr; @@ -111,27 +108,27 @@ class CSeatManager { CSignal setCursor; // SSetCursorEvent CSignal setSelection; CSignal setPrimarySelection; - } events; + } m_events; struct { WP currentSelection; CHyprSignalListener destroySelection; WP currentPrimarySelection; CHyprSignalListener destroyPrimarySelection; - } selection; + } m_selection; void setCurrentSelection(SP source); void setCurrentPrimarySelection(SP source); // do not write to directly, use set... - WP mouse; - WP keyboard; + WP m_mouse; + WP m_keyboard; void setGrab(SP grab); // nullptr removes - SP seatGrab; + SP m_seatGrab; - bool isPointerFrameSkipped = false; - bool isPointerFrameCommit = false; + bool m_isPointerFrameSkipped = false; + bool m_isPointerFrameCommit = false; private: struct SSeatResourceContainer { @@ -145,7 +142,7 @@ class CSeatManager { } listeners; }; - std::vector> seatResources; + std::vector> m_seatResources; void onNewSeatResource(SP resource); SP containerForResource(SP seatResource); @@ -156,10 +153,10 @@ class CSeatManager { CHyprSignalListener keyboardSurfaceDestroy; CHyprSignalListener pointerSurfaceDestroy; CHyprSignalListener touchSurfaceDestroy; - } listeners; + } m_listeners; - Vector2D lastLocalCoords; - int touchLocks = 0; // we assume there aint like 20 touch devices at once... + Vector2D m_lastLocalCoords; + int m_touchLocks = 0; // we assume there aint like 20 touch devices at once... friend struct SSeatResourceContainer; friend class CSeatGrab; diff --git a/src/managers/SessionLockManager.cpp b/src/managers/SessionLockManager.cpp index 83a238a6..bb01c944 100644 --- a/src/managers/SessionLockManager.cpp +++ b/src/managers/SessionLockManager.cpp @@ -42,7 +42,7 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : sur } CSessionLockManager::CSessionLockManager() { - listeners.newLock = PROTO::sessionLock->events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast>(data)); }); + m_listeners.newLock = PROTO::sessionLock->events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast>(data)); }); } void CSessionLockManager::onNewSessionLock(SP pLock) { @@ -57,30 +57,30 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { Debug::log(LOG, "Session got locked by {:x}", (uintptr_t)pLock.get()); - m_pSessionLock = makeUnique(); - m_pSessionLock->lock = pLock; - m_pSessionLock->mLockTimer.reset(); + m_sessionLock = makeUnique(); + m_sessionLock->lock = pLock; + m_sessionLock->mLockTimer.reset(); - m_pSessionLock->listeners.newSurface = pLock->events.newLockSurface.registerListener([this](std::any data) { + m_sessionLock->listeners.newSurface = pLock->events.newLockSurface.registerListener([this](std::any data) { auto SURFACE = std::any_cast>(data); const auto PMONITOR = SURFACE->monitor(); - const auto NEWSURFACE = m_pSessionLock->vSessionLockSurfaces.emplace_back(makeUnique(SURFACE)).get(); + const auto NEWSURFACE = m_sessionLock->vSessionLockSurfaces.emplace_back(makeUnique(SURFACE)).get(); NEWSURFACE->iMonitorID = PMONITOR->m_id; PROTO::fractional->sendScale(SURFACE->surface(), PMONITOR->m_scale); }); - m_pSessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) { - m_pSessionLock.reset(); + m_sessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) { + m_sessionLock.reset(); g_pInputManager->refocus(); for (auto const& m : g_pCompositor->m_monitors) g_pHyprRenderer->damageMonitor(m); }); - m_pSessionLock->listeners.destroy = pLock->events.destroyed.registerListener([this](std::any data) { - m_pSessionLock.reset(); + m_sessionLock->listeners.destroy = pLock->events.destroyed.registerListener([this](std::any data) { + m_sessionLock.reset(); g_pCompositor->focusSurface(nullptr); for (auto const& m : g_pCompositor->m_monitors) @@ -93,8 +93,8 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { // Normally the locked event is sent after each output rendered a lock screen frame. // When there are no outputs, send it right away. if (g_pCompositor->m_unsafeState) { - m_pSessionLock->lock->sendLocked(); - m_pSessionLock->m_hasSentLocked = true; + m_sessionLock->lock->sendLocked(); + m_sessionLock->hasSentLocked = true; } } @@ -103,10 +103,10 @@ bool CSessionLockManager::isSessionLocked() { } WP CSessionLockManager::getSessionLockSurfaceForMonitor(uint64_t id) { - if (!m_pSessionLock) + if (!m_sessionLock) return {}; - for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) { + for (auto const& sls : m_sessionLock->vSessionLockSurfaces) { if (sls->iMonitorID == id) { if (sls->mapped) return sls; @@ -120,14 +120,14 @@ WP CSessionLockManager::getSessionLockSurfaceForMonitor(uin // We don't want the red screen to flash. float CSessionLockManager::getRedScreenAlphaForMonitor(uint64_t id) { - if (!m_pSessionLock) + if (!m_sessionLock) return 1.F; - const auto& NOMAPPEDSURFACETIMER = m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.find(id); + const auto& NOMAPPEDSURFACETIMER = m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.find(id); - if (NOMAPPEDSURFACETIMER == m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.end()) { - m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.emplace(id, CTimer()); - m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers[id].reset(); + if (NOMAPPEDSURFACETIMER == m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.end()) { + m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.emplace(id, CTimer()); + m_sessionLock->mMonitorsWithoutMappedSurfaceTimers[id].reset(); return 0.f; } @@ -135,13 +135,13 @@ float CSessionLockManager::getRedScreenAlphaForMonitor(uint64_t id) { } void CSessionLockManager::onLockscreenRenderedOnMonitor(uint64_t id) { - if (!m_pSessionLock || m_pSessionLock->m_hasSentLocked) + if (!m_sessionLock || m_sessionLock->hasSentLocked) return; - m_pSessionLock->m_lockedMonitors.emplace(id); - const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->m_id); }); - if (LOCKED && m_pSessionLock->lock->good()) { - m_pSessionLock->lock->sendLocked(); - m_pSessionLock->m_hasSentLocked = true; + m_sessionLock->lockedMonitors.emplace(id); + const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_sessionLock->lockedMonitors.contains(m->m_id); }); + if (LOCKED && m_sessionLock->lock->good()) { + m_sessionLock->lock->sendLocked(); + m_sessionLock->hasSentLocked = true; } } @@ -149,10 +149,10 @@ bool CSessionLockManager::isSurfaceSessionLock(SP pSurface) // TODO: this has some edge cases when it's wrong (e.g. destroyed lock but not yet surfaces) // but can be easily fixed when I rewrite wlr_surface - if (!m_pSessionLock) + if (!m_sessionLock) return false; - for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) { + for (auto const& sls : m_sessionLock->vSessionLockSurfaces) { if (sls->surface->surface() == pSurface) return true; } @@ -161,15 +161,15 @@ bool CSessionLockManager::isSurfaceSessionLock(SP pSurface) } void CSessionLockManager::removeSessionLockSurface(SSessionLockSurface* pSLS) { - if (!m_pSessionLock) + if (!m_sessionLock) return; - std::erase_if(m_pSessionLock->vSessionLockSurfaces, [&](const auto& other) { return pSLS == other.get(); }); + std::erase_if(m_sessionLock->vSessionLockSurfaces, [&](const auto& other) { return pSLS == other.get(); }); if (g_pCompositor->m_lastFocus) return; - for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) { + for (auto const& sls : m_sessionLock->vSessionLockSurfaces) { if (!sls->mapped) continue; @@ -179,18 +179,18 @@ void CSessionLockManager::removeSessionLockSurface(SSessionLockSurface* pSLS) { } bool CSessionLockManager::isSessionLockPresent() { - return m_pSessionLock && !m_pSessionLock->vSessionLockSurfaces.empty(); + return m_sessionLock && !m_sessionLock->vSessionLockSurfaces.empty(); } bool CSessionLockManager::anySessionLockSurfacesPresent() { - return m_pSessionLock && std::ranges::any_of(m_pSessionLock->vSessionLockSurfaces, [](const auto& surf) { return surf->mapped; }); + return m_sessionLock && std::ranges::any_of(m_sessionLock->vSessionLockSurfaces, [](const auto& surf) { return surf->mapped; }); } bool CSessionLockManager::shallConsiderLockMissing() { - if (!m_pSessionLock) + if (!m_sessionLock) return false; static auto LOCKDEAD_SCREEN_DELAY = CConfigValue("misc:lockdead_screen_delay"); - return m_pSessionLock->mLockTimer.getMillis() > *LOCKDEAD_SCREEN_DELAY; + return m_sessionLock->mLockTimer.getMillis() > *LOCKDEAD_SCREEN_DELAY; } diff --git a/src/managers/SessionLockManager.hpp b/src/managers/SessionLockManager.hpp index b80da2fd..da15496e 100644 --- a/src/managers/SessionLockManager.hpp +++ b/src/managers/SessionLockManager.hpp @@ -40,8 +40,8 @@ struct SSessionLock { CHyprSignalListener destroy; } listeners; - bool m_hasSentLocked = false; - std::unordered_set m_lockedMonitors; + bool hasSentLocked = false; + std::unordered_set lockedMonitors; }; class CSessionLockManager { @@ -65,11 +65,11 @@ class CSessionLockManager { bool shallConsiderLockMissing(); private: - UP m_pSessionLock; + UP m_sessionLock; struct { CHyprSignalListener newLock; - } listeners; + } m_listeners; void onNewSessionLock(SP pWlrLock); }; diff --git a/src/managers/TokenManager.cpp b/src/managers/TokenManager.cpp index 446b87ce..141ea65e 100644 --- a/src/managers/TokenManager.cpp +++ b/src/managers/TokenManager.cpp @@ -18,7 +18,7 @@ std::string CTokenManager::getRandomUUID() { uuid = std::format("{:02x}{:02x}{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}{:02x}{:02x}{:02x}{:02x}", (uint16_t)uuid_[0], (uint16_t)uuid_[1], (uint16_t)uuid_[2], (uint16_t)uuid_[3], (uint16_t)uuid_[4], (uint16_t)uuid_[5], (uint16_t)uuid_[6], (uint16_t)uuid_[7], (uint16_t)uuid_[8], (uint16_t)uuid_[9], (uint16_t)uuid_[10], (uint16_t)uuid_[11], (uint16_t)uuid_[12], (uint16_t)uuid_[13], (uint16_t)uuid_[14], (uint16_t)uuid_[15]); - } while (m_mTokens.contains(uuid)); + } while (m_tokens.contains(uuid)); return uuid; } @@ -26,7 +26,7 @@ std::string CTokenManager::getRandomUUID() { std::string CTokenManager::registerNewToken(std::any data, Time::steady_dur expires) { std::string uuid = getRandomUUID(); - m_mTokens[uuid] = makeShared(uuid, data, expires); + m_tokens[uuid] = makeShared(uuid, data, expires); return uuid; } @@ -34,16 +34,16 @@ SP CTokenManager::getToken(const std::string& uuid) { // cleanup expired tokens const auto NOW = Time::steadyNow(); - std::erase_if(m_mTokens, [&NOW](const auto& el) { return el.second->m_expiresAt < NOW; }); + std::erase_if(m_tokens, [&NOW](const auto& el) { return el.second->m_expiresAt < NOW; }); - if (!m_mTokens.contains(uuid)) + if (!m_tokens.contains(uuid)) return {}; - return m_mTokens.at(uuid); + return m_tokens.at(uuid); } void CTokenManager::removeToken(SP token) { if (!token) return; - m_mTokens.erase(token->m_uuid); + m_tokens.erase(token->m_uuid); } diff --git a/src/managers/TokenManager.hpp b/src/managers/TokenManager.hpp index cccb9bd9..10faee7b 100644 --- a/src/managers/TokenManager.hpp +++ b/src/managers/TokenManager.hpp @@ -31,7 +31,7 @@ class CTokenManager { void removeToken(SP token); private: - std::unordered_map> m_mTokens; + std::unordered_map> m_tokens; }; inline UP g_pTokenManager; \ No newline at end of file diff --git a/src/managers/VersionKeeperManager.cpp b/src/managers/VersionKeeperManager.cpp index 95c11b4b..ef9c274d 100644 --- a/src/managers/VersionKeeperManager.cpp +++ b/src/managers/VersionKeeperManager.cpp @@ -50,7 +50,7 @@ CVersionKeeperManager::CVersionKeeperManager() { return; } - m_bFired = true; + m_fired = true; g_pEventLoopManager->doLater([]() { CProcess proc("hyprland-update-screen", {"--new-version", HYPRLAND_VERSION}); @@ -81,5 +81,5 @@ bool CVersionKeeperManager::isVersionOlderThanRunning(const std::string& ver) { } bool CVersionKeeperManager::fired() { - return m_bFired; + return m_fired; } diff --git a/src/managers/VersionKeeperManager.hpp b/src/managers/VersionKeeperManager.hpp index 250a36b8..15821879 100644 --- a/src/managers/VersionKeeperManager.hpp +++ b/src/managers/VersionKeeperManager.hpp @@ -12,7 +12,7 @@ class CVersionKeeperManager { private: bool isVersionOlderThanRunning(const std::string& ver); - bool m_bFired = false; + bool m_fired = false; }; inline UP g_pVersionKeeperMgr; \ No newline at end of file diff --git a/src/managers/XCursorManager.cpp b/src/managers/XCursorManager.cpp index 7d629785..79bb7a5d 100644 --- a/src/managers/XCursorManager.cpp +++ b/src/managers/XCursorManager.cpp @@ -97,45 +97,45 @@ static std::vector HYPR_XCURSOR_PIXELS = { // clang-format on CXCursorManager::CXCursorManager() { - hyprCursor = makeShared(); + m_hyprCursor = makeShared(); SXCursorImage image; image.size = {32, 32}; image.hotspot = {3, 2}; image.pixels = HYPR_XCURSOR_PIXELS; image.delay = 0; - hyprCursor->images.push_back(image); - hyprCursor->shape = "left_ptr"; - defaultCursor = hyprCursor; + m_hyprCursor->images.push_back(image); + m_hyprCursor->shape = "left_ptr"; + m_defaultCursor = m_hyprCursor; } void CXCursorManager::loadTheme(std::string const& name, int size, float scale) { - if (lastLoadSize == (size * std::ceil(scale)) && themeName == name && lastLoadScale == scale) + if (m_lastLoadSize == (size * std::ceil(scale)) && m_themeName == name && m_lastLoadScale == scale) return; - lastLoadSize = size * std::ceil(scale); - lastLoadScale = scale; - themeName = name.empty() ? "default" : name; - defaultCursor.reset(); - cursors.clear(); + m_lastLoadSize = size * std::ceil(scale); + m_lastLoadScale = scale; + m_themeName = name.empty() ? "default" : name; + m_defaultCursor.reset(); + m_cursors.clear(); - auto paths = themePaths(themeName); + auto paths = themePaths(m_themeName); if (paths.empty()) { Debug::log(ERR, "XCursor librarypath is empty loading standard XCursors"); - cursors = loadStandardCursors(themeName, lastLoadSize); + m_cursors = loadStandardCursors(m_themeName, m_lastLoadSize); } else { for (auto const& p : paths) { try { - auto dirCursors = loadAllFromDir(p, lastLoadSize); - std::copy_if(dirCursors.begin(), dirCursors.end(), std::back_inserter(cursors), - [this](auto const& p) { return std::none_of(cursors.begin(), cursors.end(), [&p](auto const& dp) { return dp->shape == p->shape; }); }); + auto dirCursors = loadAllFromDir(p, m_lastLoadSize); + std::copy_if(dirCursors.begin(), dirCursors.end(), std::back_inserter(m_cursors), + [this](auto const& p) { return std::none_of(m_cursors.begin(), m_cursors.end(), [&p](auto const& dp) { return dp->shape == p->shape; }); }); } catch (std::exception& e) { Debug::log(ERR, "XCursor path {} can't be loaded: threw error {}", p, e.what()); } } } - if (cursors.empty()) { - Debug::log(ERR, "XCursor failed finding any shapes in theme \"{}\".", themeName); - defaultCursor = hyprCursor; + if (m_cursors.empty()) { + Debug::log(ERR, "XCursor failed finding any shapes in theme \"{}\".", m_themeName); + m_defaultCursor = m_hyprCursor; return; } @@ -144,14 +144,14 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale) if (legacyName.empty()) continue; - auto it = std::find_if(cursors.begin(), cursors.end(), [&legacyName](auto const& c) { return c->shape == legacyName; }); + auto it = std::find_if(m_cursors.begin(), m_cursors.end(), [&legacyName](auto const& c) { return c->shape == legacyName; }); - if (it == cursors.end()) { + if (it == m_cursors.end()) { Debug::log(LOG, "XCursor failed to find a legacy shape with name {}, skipping", legacyName); continue; } - if (std::any_of(cursors.begin(), cursors.end(), [&shape](auto const& dp) { return dp->shape == shape; })) { + if (std::any_of(m_cursors.begin(), m_cursors.end(), [&shape](auto const& dp) { return dp->shape == shape; })) { Debug::log(LOG, "XCursor already has a shape {} loaded, skipping", shape); continue; } @@ -160,7 +160,7 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale) cursor->images = it->get()->images; cursor->shape = shape; - cursors.emplace_back(cursor); + m_cursors.emplace_back(cursor); } syncGsettings(); @@ -168,11 +168,11 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale) SP CXCursorManager::getShape(std::string const& shape, int size, float scale) { // monitor scaling changed etc, so reload theme with new size. - if ((size * std::ceil(scale)) != lastLoadSize || scale != lastLoadScale) - loadTheme(themeName, size, scale); + if ((size * std::ceil(scale)) != m_lastLoadSize || scale != m_lastLoadScale) + loadTheme(m_themeName, size, scale); // try to get an icon we know if we have one - for (auto const& c : cursors) { + for (auto const& c : m_cursors) { if (c->shape != shape) continue; @@ -180,7 +180,7 @@ SP CXCursorManager::getShape(std::string const& shape, int size, floa } Debug::log(WARN, "XCursor couldn't find shape {} , using default cursor instead", shape); - return defaultCursor; + return m_defaultCursor; } SP CXCursorManager::createCursor(std::string const& shape, void* ximages) { @@ -504,15 +504,15 @@ std::vector> CXCursorManager::loadStandardCursors(std::string cons auto cursor = createCursor(shape, xImages); newCursors.emplace_back(cursor); - if (!defaultCursor && (shape == "left_ptr" || shape == "arrow")) - defaultCursor = cursor; + if (!m_defaultCursor && (shape == "left_ptr" || shape == "arrow")) + m_defaultCursor = cursor; XcursorImagesDestroy(xImages); } // broken theme.. just set it. - if (!newCursors.empty() && !defaultCursor) - defaultCursor = newCursors.front(); + if (!newCursors.empty() && !m_defaultCursor) + m_defaultCursor = newCursors.front(); return newCursors; } @@ -551,16 +551,16 @@ std::vector> CXCursorManager::loadAllFromDir(std::string const& pa auto cursor = createCursor(shape, xImages); newCursors.emplace_back(cursor); - if (!defaultCursor && (shape == "left_ptr" || shape == "arrow")) - defaultCursor = cursor; + if (!m_defaultCursor && (shape == "left_ptr" || shape == "arrow")) + m_defaultCursor = cursor; XcursorImagesDestroy(xImages); } } // broken theme.. just set it. - if (!newCursors.empty() && !defaultCursor) - defaultCursor = newCursors.front(); + if (!newCursors.empty() && !m_defaultCursor) + m_defaultCursor = newCursors.front(); return newCursors; } @@ -617,7 +617,7 @@ void CXCursorManager::syncGsettings() { g_object_unref(gsettings); }; - int unscaledSize = lastLoadSize / std::ceil(lastLoadScale); - setValue("cursor-theme", themeName, "org.gnome.desktop.interface"); + int unscaledSize = m_lastLoadSize / std::ceil(m_lastLoadScale); + setValue("cursor-theme", m_themeName, "org.gnome.desktop.interface"); setValue("cursor-size", unscaledSize, "org.gnome.desktop.interface"); } diff --git a/src/managers/XCursorManager.hpp b/src/managers/XCursorManager.hpp index 8e804a0c..2535d8a0 100644 --- a/src/managers/XCursorManager.hpp +++ b/src/managers/XCursorManager.hpp @@ -36,10 +36,10 @@ class CXCursorManager { std::vector> loadStandardCursors(std::string const& name, int size); std::vector> loadAllFromDir(std::string const& path, int size); - int lastLoadSize = 0; - float lastLoadScale = 0; - std::string themeName = ""; - SP defaultCursor; - SP hyprCursor; - std::vector> cursors; + int m_lastLoadSize = 0; + float m_lastLoadScale = 0; + std::string m_themeName = ""; + SP m_defaultCursor; + SP m_hyprCursor; + std::vector> m_cursors; }; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 804eb173..1e62af64 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -48,10 +48,10 @@ CInputManager::CInputManager() { auto event = std::any_cast(data); - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - if (wl_resource_get_client(event.pMgr->resource()) != g_pSeatManager->state.pointerFocusResource->client()) + if (wl_resource_get_client(event.pMgr->resource()) != g_pSeatManager->m_state.pointerFocusResource->client()) return; Debug::log(LOG, "cursorImage request: shape {} -> {}", (uint32_t)event.shape, event.shapeName); @@ -74,7 +74,7 @@ CInputManager::CInputManager() { this->newVirtualMouse(std::any_cast>(data)); updateCapabilities(); }); - m_listeners.setCursor = g_pSeatManager->events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); }); + m_listeners.setCursor = g_pSeatManager->m_events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); }); m_cursorSurfaceInfo.wlSurface = CWLSurface::create(); } @@ -112,7 +112,7 @@ void CInputManager::onMouseMoved(IPointer::SMotionEvent e) { const auto DELTA = *PNOACCEL == 1 ? unaccel : delta; - if (g_pSeatManager->isPointerFrameSkipped) + if (g_pSeatManager->m_isPointerFrameSkipped) g_pPointerManager->storeMovement((uint64_t)e.timeMs, DELTA, unaccel); else g_pPointerManager->setStoredMovement((uint64_t)e.timeMs, DELTA, unaccel); @@ -221,7 +221,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { g_pCompositor->scheduleFrameForMonitor(PMONITOR, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE); // constraints - if (!g_pSeatManager->mouse.expired() && isConstrained()) { + if (!g_pSeatManager->m_mouse.expired() && isConstrained()) { const auto SURF = CWLSurface::fromResource(g_pCompositor->m_lastFocus.lock()); const auto CONSTRAINT = SURF ? SURF->constraint() : nullptr; @@ -289,9 +289,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // if we are holding a pointer button, // and we're not dnd-ing, don't refocus. Keep focus on last surface. - if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->state.pointerFocus && + if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->m_state.pointerFocus && !m_hardInput) { - foundSurface = g_pSeatManager->state.pointerFocus.lock(); + foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); // IME popups aren't desktop-like elements // TODO: make them. @@ -436,13 +436,13 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // FIXME: This will be disabled during DnD operations because we do not exactly follow the spec // xdg-popup grabs should be keyboard-only, while they are absolute in our case... - if (g_pSeatManager->seatGrab && !g_pSeatManager->seatGrab->accepts(foundSurface) && !PROTO::data->dndActive()) { + if (g_pSeatManager->m_seatGrab && !g_pSeatManager->m_seatGrab->accepts(foundSurface) && !PROTO::data->dndActive()) { if (m_hardInput || refocus) { g_pSeatManager->setGrab(nullptr); return; // setGrab will refocus } else { // we need to grab the last surface. - foundSurface = g_pSeatManager->state.pointerFocus.lock(); + foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); auto HLSurface = CWLSurface::fromResource(foundSurface); @@ -548,7 +548,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (FOLLOWMOUSE != 0 || pFoundWindow == g_pCompositor->m_lastWindow) g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); - if (g_pSeatManager->state.pointerFocus == foundSurface) + if (g_pSeatManager->m_state.pointerFocus == foundSurface) g_pSeatManager->sendPointerMotion(time, surfaceLocal); m_lastFocusOnLS = false; @@ -573,7 +573,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } } - if (g_pSeatManager->state.keyboardFocus == nullptr) + if (g_pSeatManager->m_state.keyboardFocus == nullptr) g_pCompositor->focusWindow(pFoundWindow, foundSurface); m_lastFocusOnLS = false; @@ -761,7 +761,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { if (*PFOLLOWMOUSE == 3) // don't refocus on full loose break; - if ((g_pSeatManager->mouse.expired() || !isConstrained()) /* No constraints */ + if ((g_pSeatManager->m_mouse.expired() || !isConstrained()) /* No constraints */ && (w && g_pCompositor->m_lastWindow.lock() != w) /* window should change */) { // a bit hacky // if we only pressed one button, allow us to refocus. m_lCurrentlyHeldButtons.size() > 0 will stick the focus @@ -775,10 +775,10 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { } // if clicked on a floating window make it top - if (!g_pSeatManager->state.pointerFocus) + if (!g_pSeatManager->m_state.pointerFocus) break; - auto HLSurf = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + auto HLSurf = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (HLSurf && HLSurf->getWindow()) g_pCompositor->changeWindowZOrder(HLSurf->getWindow(), true); @@ -794,7 +794,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) { if (const auto PMON = g_pCompositor->getMonitorFromVector(mouseCoords); PMON != g_pCompositor->m_lastMonitor && PMON) g_pCompositor->setActiveMonitor(PMON); - if (g_pSeatManager->seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) { + if (g_pSeatManager->m_seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) { m_hardInput = true; simulateMouseMovement(); m_hardInput = false; @@ -870,8 +870,8 @@ void CInputManager::onMouseWheel(IPointer::SAxisEvent e) { } } - if (g_pSeatManager->state.pointerFocus) { - const auto PCURRWINDOW = g_pCompositor->getWindowFromSurface(g_pSeatManager->state.pointerFocus.lock()); + if (g_pSeatManager->m_state.pointerFocus) { + const auto PCURRWINDOW = g_pCompositor->getWindowFromSurface(g_pSeatManager->m_state.pointerFocus.lock()); if (*PFOLLOWMOUSE == 1 && PCURRWINDOW && PWINDOW != PCURRWINDOW) simulateMouseMovement(); @@ -995,9 +995,9 @@ void CInputManager::setupKeyboard(SP keeb) { auto PKEEB = ((IKeyboard*)owner)->m_self.lock(); const auto LAYOUT = PKEEB->getActiveLayout(); - if (PKEEB == g_pSeatManager->keyboard) { + if (PKEEB == g_pSeatManager->m_keyboard) { g_pSeatManager->updateActiveKeyboardData(); - g_pKeybindManager->m_mKeyToCodeCache.clear(); + g_pKeybindManager->m_keyToCodeCache.clear(); } g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEEB->m_hlName + "," + LAYOUT}); @@ -1323,7 +1323,7 @@ void CInputManager::destroyPointer(SP mouse) { g_pSeatManager->setMouse(m_pointers.size() > 0 ? m_pointers.front() : nullptr); - if (!g_pSeatManager->mouse.expired()) + if (!g_pSeatManager->m_mouse.expired()) unconstrainMouse(); removeFromHIDs(mouse); @@ -1502,7 +1502,7 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { } void CInputManager::unconstrainMouse() { - if (g_pSeatManager->mouse.expired()) + if (g_pSeatManager->m_mouse.expired()) return; for (auto const& c : m_constraints) { diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 5d80f1d4..5b9ca378 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -36,7 +36,7 @@ static void focusTool(SP tool, SP tablet, SP tab, SP tool, bool motion = false) { - const auto LASTHLSURFACE = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + const auto LASTHLSURFACE = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (!LASTHLSURFACE || !tool->m_active) { if (tool->getSurface()) @@ -56,7 +56,7 @@ static void refocusTablet(SP tab, SP tool, bool motion = f const auto CURSORPOS = g_pInputManager->getMouseCoordsInternal(); - focusTool(tool, tab, g_pSeatManager->state.pointerFocus.lock()); + focusTool(tool, tab, g_pSeatManager->m_state.pointerFocus.lock()); if (!motion) return; diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index 2bca8eb4..96effde6 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -200,7 +200,7 @@ APICALL bool HyprlandAPI::addDispatcher(HANDLE handle, const std::string& name, PLUGIN->registeredDispatchers.push_back(name); - g_pKeybindManager->m_mDispatchers[name] = [handler](std::string arg1) -> SDispatchResult { + g_pKeybindManager->m_dispatchers[name] = [handler](std::string arg1) -> SDispatchResult { handler(arg1); return {}; }; @@ -216,7 +216,7 @@ APICALL bool HyprlandAPI::addDispatcherV2(HANDLE handle, const std::string& name PLUGIN->registeredDispatchers.push_back(name); - g_pKeybindManager->m_mDispatchers[name] = handler; + g_pKeybindManager->m_dispatchers[name] = handler; return true; } @@ -227,7 +227,7 @@ APICALL bool HyprlandAPI::removeDispatcher(HANDLE handle, const std::string& nam if (!PLUGIN) return false; - std::erase_if(g_pKeybindManager->m_mDispatchers, [&](const auto& other) { return other.first == name; }); + std::erase_if(g_pKeybindManager->m_dispatchers, [&](const auto& other) { return other.first == name; }); std::erase_if(PLUGIN->registeredDispatchers, [&](const auto& other) { return other == name; }); return true; diff --git a/src/protocols/DataDeviceWlr.cpp b/src/protocols/DataDeviceWlr.cpp index 3da5afd6..680840da 100644 --- a/src/protocols/DataDeviceWlr.cpp +++ b/src/protocols/DataDeviceWlr.cpp @@ -154,8 +154,8 @@ wl_client* CWLRDataDevice::client() { } void CWLRDataDevice::sendInitialSelections() { - PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->selection.currentSelection.lock(), false); - PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->selection.currentPrimarySelection.lock(), true); + PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->m_selection.currentSelection.lock(), false); + PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->m_selection.currentPrimarySelection.lock(), true); } void CWLRDataDevice::sendDataOffer(SP offer) { diff --git a/src/protocols/FocusGrab.cpp b/src/protocols/FocusGrab.cpp index bef69f62..9a3e1c51 100644 --- a/src/protocols/FocusGrab.cpp +++ b/src/protocols/FocusGrab.cpp @@ -15,9 +15,9 @@ CFocusGrab::CFocusGrab(SP resource_) : resource(resource_) if UNLIKELY (!resource->resource()) return; - grab = makeShared(); - grab->keyboard = true; - grab->pointer = true; + grab = makeShared(); + grab->m_keyboard = true; + grab->m_pointer = true; grab->setCallback([this]() { finish(true); }); resource->setDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); }); @@ -58,7 +58,7 @@ void CFocusGrab::finish(bool sendCleared) { if (m_bGrabActive) { m_bGrabActive = false; - if (g_pSeatManager->seatGrab == grab) + if (g_pSeatManager->m_seatGrab == grab) g_pSeatManager->setGrab(nullptr); grab->clear(); @@ -91,7 +91,7 @@ void CFocusGrab::eraseSurface(SP surface) { } void CFocusGrab::refocusKeyboard() { - auto keyboardSurface = g_pSeatManager->state.keyboardFocus; + auto keyboardSurface = g_pSeatManager->m_state.keyboardFocus; if (keyboardSurface && isSurfaceComitted(keyboardSurface.lock())) return; diff --git a/src/protocols/InputMethodV2.cpp b/src/protocols/InputMethodV2.cpp index 6b022601..05cf90e1 100644 --- a/src/protocols/InputMethodV2.cpp +++ b/src/protocols/InputMethodV2.cpp @@ -13,12 +13,12 @@ CInputMethodKeyboardGrabV2::CInputMethodKeyboardGrabV2(SPsetRelease([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); resource->setOnDestroy([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); - if (!g_pSeatManager->keyboard) { + if (!g_pSeatManager->m_keyboard) { LOGM(ERR, "IME called but no active keyboard???"); return; } - sendKeyboardData(g_pSeatManager->keyboard.lock()); + sendKeyboardData(g_pSeatManager->m_keyboard.lock()); } CInputMethodKeyboardGrabV2::~CInputMethodKeyboardGrabV2() { diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index 2858ee95..c97759d8 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -125,7 +125,7 @@ void CPointerConstraint::activate() { return; // TODO: hack, probably not a super duper great idea - if (g_pSeatManager->state.pointerFocus != pHLSurface->resource()) { + if (g_pSeatManager->m_state.pointerFocus != pHLSurface->resource()) { const auto SURFBOX = pHLSurface->getSurfaceBoxGlobal(); const auto LOCAL = SURFBOX.has_value() ? logicPositionHint() - SURFBOX->pos() : Vector2D{}; g_pSeatManager->setPointerFocus(pHLSurface->resource(), LOCAL); diff --git a/src/protocols/PointerGestures.cpp b/src/protocols/PointerGestures.cpp index 8de73ffa..e6c50dad 100644 --- a/src/protocols/PointerGestures.cpp +++ b/src/protocols/PointerGestures.cpp @@ -103,26 +103,26 @@ void CPointerGesturesProtocol::onGetHoldGesture(CZwpPointerGesturesV1* pMgr, uin } void CPointerGesturesProtocol::swipeBegin(uint32_t timeMs, uint32_t fingers) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vSwipes) { if (sw->resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers); + sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } void CPointerGesturesProtocol::swipeUpdate(uint32_t timeMs, const Vector2D& delta) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); for (auto const& sw : m_vSwipes) { if (sw->resource->client() != FOCUSEDCLIENT) @@ -133,12 +133,12 @@ void CPointerGesturesProtocol::swipeUpdate(uint32_t timeMs, const Vector2D& delt } void CPointerGesturesProtocol::swipeEnd(uint32_t timeMs, bool cancelled) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vSwipes) { if (sw->resource->client() != FOCUSEDCLIENT) @@ -149,26 +149,26 @@ void CPointerGesturesProtocol::swipeEnd(uint32_t timeMs, bool cancelled) { } void CPointerGesturesProtocol::pinchBegin(uint32_t timeMs, uint32_t fingers) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vPinches) { if (sw->resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers); + sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } void CPointerGesturesProtocol::pinchUpdate(uint32_t timeMs, const Vector2D& delta, double scale, double rotation) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); for (auto const& sw : m_vPinches) { if (sw->resource->client() != FOCUSEDCLIENT) @@ -179,12 +179,12 @@ void CPointerGesturesProtocol::pinchUpdate(uint32_t timeMs, const Vector2D& delt } void CPointerGesturesProtocol::pinchEnd(uint32_t timeMs, bool cancelled) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vPinches) { if (sw->resource->client() != FOCUSEDCLIENT) @@ -195,28 +195,28 @@ void CPointerGesturesProtocol::pinchEnd(uint32_t timeMs, bool cancelled) { } void CPointerGesturesProtocol::holdBegin(uint32_t timeMs, uint32_t fingers) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vHolds) { if (sw->resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers); + sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } void CPointerGesturesProtocol::holdEnd(uint32_t timeMs, bool cancelled) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock()); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); for (auto const& sw : m_vHolds) { if (sw->resource->client() != FOCUSEDCLIENT) diff --git a/src/protocols/PrimarySelection.cpp b/src/protocols/PrimarySelection.cpp index 620f262e..2cd610ec 100644 --- a/src/protocols/PrimarySelection.cpp +++ b/src/protocols/PrimarySelection.cpp @@ -228,7 +228,7 @@ void CPrimarySelectionProtocol::bindManager(wl_client* client, void* data, uint3 // we need to do it here because protocols come before seatMgr if (!listeners.onPointerFocusChange) - listeners.onPointerFocusChange = g_pSeatManager->events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); }); + listeners.onPointerFocusChange = g_pSeatManager->m_events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); }); } void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionManager* resource) { @@ -279,10 +279,10 @@ void CPrimarySelectionProtocol::setSelection(SP source) { if (!source) { LOGM(LOG, "resetting selection"); - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client()); if (DESTDEVICE) sendSelectionToDevice(DESTDEVICE, nullptr); @@ -291,10 +291,10 @@ void CPrimarySelectionProtocol::setSelection(SP source) { LOGM(LOG, "New selection for data source {:x}", (uintptr_t)source.get()); - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client()); if (!DESTDEVICE) { LOGM(LOG, "CWLDataDeviceProtocol::setSelection: cannot send selection to a client without a data_device"); @@ -305,17 +305,17 @@ void CPrimarySelectionProtocol::setSelection(SP source) { } void CPrimarySelectionProtocol::updateSelection() { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client()); if (!DESTDEVICE) { LOGM(LOG, "CPrimarySelectionProtocol::updateSelection: cannot send selection to a client without a data_device"); return; } - sendSelectionToDevice(DESTDEVICE, g_pSeatManager->selection.currentPrimarySelection.lock()); + sendSelectionToDevice(DESTDEVICE, g_pSeatManager->m_selection.currentPrimarySelection.lock()); } void CPrimarySelectionProtocol::onPointerFocus() { diff --git a/src/protocols/RelativePointer.cpp b/src/protocols/RelativePointer.cpp index f002fac1..9876852f 100644 --- a/src/protocols/RelativePointer.cpp +++ b/src/protocols/RelativePointer.cpp @@ -59,10 +59,10 @@ void CRelativePointerProtocol::onGetRelativePointer(CZwpRelativePointerManagerV1 void CRelativePointerProtocol::sendRelativeMotion(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) { - if (!g_pSeatManager->state.pointerFocusResource) + if (!g_pSeatManager->m_state.pointerFocusResource) return; - const auto FOCUSED = g_pSeatManager->state.pointerFocusResource->client(); + const auto FOCUSED = g_pSeatManager->m_state.pointerFocusResource->client(); for (auto const& rp : m_vRelativePointers) { if (FOCUSED != rp->client()) diff --git a/src/protocols/Tablet.cpp b/src/protocols/Tablet.cpp index 0aec67e1..58aaa54c 100644 --- a/src/protocols/Tablet.cpp +++ b/src/protocols/Tablet.cpp @@ -157,7 +157,7 @@ CTabletToolV2Resource::CTabletToolV2Resource(SP resource_, SP< resource->setOnDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); }); resource->setSetCursor([](CZwpTabletToolV2* r, uint32_t serial, wl_resource* surf, int32_t hot_x, int32_t hot_y) { - if (!g_pSeatManager->state.pointerFocusResource || g_pSeatManager->state.pointerFocusResource->client() != r->client()) + if (!g_pSeatManager->m_state.pointerFocusResource || g_pSeatManager->m_state.pointerFocusResource->client() != r->client()) return; g_pInputManager->processMouseRequest(CSeatManager::SSetCursorEvent{surf ? CWLSurfaceResource::fromResource(surf) : nullptr, {hot_x, hot_y}}); diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 9496acb2..57fc415e 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -372,7 +372,7 @@ bool CToplevelExportFrame::shouldOverlayCursor() const { if (!cursorOverlayRequested) return false; - auto pointerSurfaceResource = g_pSeatManager->state.pointerFocus.lock(); + auto pointerSurfaceResource = g_pSeatManager->m_state.pointerFocus.lock(); if (!pointerSurfaceResource) return false; diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index 59eca367..a82ba17e 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -764,9 +764,9 @@ void CXDGWMBase::ping() { } CXDGShellProtocol::CXDGShellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { - grab = makeShared(); - grab->keyboard = true; - grab->pointer = true; + grab = makeShared(); + grab->m_keyboard = true; + grab->m_pointer = true; grab->setCallback([this]() { for (auto const& g : grabbed) { g->done(); diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 1cd003f0..fda46980 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -385,8 +385,8 @@ bool CWLDataDeviceManagerResource::good() { CWLDataDeviceProtocol::CWLDataDeviceProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { g_pEventLoopManager->doLater([this]() { - listeners.onKeyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); }); - listeners.onDndPointerFocusChange = g_pSeatManager->events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); }); + listeners.onKeyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); }); + listeners.onDndPointerFocusChange = g_pSeatManager->m_events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); }); }); } @@ -451,7 +451,7 @@ void CWLDataDeviceProtocol::sendSelectionToDevice(SP dev, SPgetX11(); X11) - offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->state.keyboardFocus.lock(), sel); + offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), sel); #endif if UNLIKELY (!offer) { @@ -482,10 +482,10 @@ void CWLDataDeviceProtocol::setSelection(SP source) { if (!source) { LOGM(LOG, "resetting selection"); - if (!g_pSeatManager->state.keyboardFocusResource) + if (!g_pSeatManager->m_state.keyboardFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client()); if (DESTDEVICE && DESTDEVICE->type() == DATA_SOURCE_TYPE_WAYLAND) sendSelectionToDevice(DESTDEVICE, nullptr); @@ -494,10 +494,10 @@ void CWLDataDeviceProtocol::setSelection(SP source) { LOGM(LOG, "New selection for data source {:x}", (uintptr_t)source.get()); - if (!g_pSeatManager->state.keyboardFocusResource) + if (!g_pSeatManager->m_state.keyboardFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client()); if (!DESTDEVICE) { LOGM(LOG, "CWLDataDeviceProtocol::setSelection: cannot send selection to a client without a data_device"); @@ -513,17 +513,17 @@ void CWLDataDeviceProtocol::setSelection(SP source) { } void CWLDataDeviceProtocol::updateSelection() { - if (!g_pSeatManager->state.keyboardFocusResource) + if (!g_pSeatManager->m_state.keyboardFocusResource) return; - auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client()); + auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client()); if (!DESTDEVICE) { LOGM(LOG, "CWLDataDeviceProtocol::onKeyboardFocus: cannot send selection to a client without a data_device"); return; } - sendSelectionToDevice(DESTDEVICE, g_pSeatManager->selection.currentSelection.lock()); + sendSelectionToDevice(DESTDEVICE, g_pSeatManager->m_selection.currentSelection.lock()); } void CWLDataDeviceProtocol::onKeyboardFocus() { @@ -593,8 +593,8 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource dnd.mouseMove = g_pHookSystem->hookDynamic("mouseMove", [this](void* self, SCallbackInfo& info, std::any e) { auto V = std::any_cast(e); - if (dnd.focusedDevice && g_pSeatManager->state.dndPointerFocus) { - auto surf = CWLSurface::fromResource(g_pSeatManager->state.dndPointerFocus.lock()); + if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { + auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock()); if (!surf) return; @@ -611,8 +611,8 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource dnd.touchMove = g_pHookSystem->hookDynamic("touchMove", [this](void* self, SCallbackInfo& info, std::any e) { auto E = std::any_cast(e); - if (dnd.focusedDevice && g_pSeatManager->state.dndPointerFocus) { - auto surf = CWLSurface::fromResource(g_pSeatManager->state.dndPointerFocus.lock()); + if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { + auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock()); if (!surf) return; @@ -630,9 +630,9 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource // unfocus the pointer from the surface, this is part of """standard""" wayland procedure and gtk will freak out if this isn't happening. // BTW, the spec does NOT require this explicitly... // Fuck you gtk. - const auto LASTDNDFOCUS = g_pSeatManager->state.dndPointerFocus; + const auto LASTDNDFOCUS = g_pSeatManager->m_state.dndPointerFocus; g_pSeatManager->setPointerFocus(nullptr, {}); - g_pSeatManager->state.dndPointerFocus = LASTDNDFOCUS; + g_pSeatManager->m_state.dndPointerFocus = LASTDNDFOCUS; // make a new offer, etc updateDrag(); @@ -645,10 +645,10 @@ void CWLDataDeviceProtocol::updateDrag() { if (dnd.focusedDevice) dnd.focusedDevice->sendLeave(); - if (!g_pSeatManager->state.dndPointerFocus) + if (!g_pSeatManager->m_state.dndPointerFocus) return; - dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->state.dndPointerFocus->client()); + dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->m_state.dndPointerFocus->client()); if (!dnd.focusedDevice) return; @@ -669,7 +669,7 @@ void CWLDataDeviceProtocol::updateDrag() { } #ifndef NO_XWAYLAND else if (const auto X11 = dnd.focusedDevice->getX11(); X11) - offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->state.keyboardFocus.lock(), dnd.currentSource.lock()); + offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), dnd.currentSource.lock()); #endif if (!offer) { @@ -683,8 +683,8 @@ void CWLDataDeviceProtocol::updateDrag() { dnd.focusedDevice->sendDataOffer(offer); if (const auto WL = offer->getWayland(); WL) WL->sendData(); - dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->state.dndPointerFocus.lock(), - g_pSeatManager->state.dndPointerFocus->current.size / 2.F, offer); + dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->m_state.dndPointerFocus.lock(), + g_pSeatManager->m_state.dndPointerFocus->current.size / 2.F, offer); } void CWLDataDeviceProtocol::cleanupDndState(bool resetDevice, bool resetSource, bool simulateInput) { diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 5a704717..6dbed8fd 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -133,8 +133,8 @@ CWLPointerResource::CWLPointerResource(SP resource_, SPonSetCursor(owner.lock(), serial, surfResource, {hotX, hotY}); }); - if (g_pSeatManager->state.pointerFocus && g_pSeatManager->state.pointerFocus->client() == resource->client()) - sendEnter(g_pSeatManager->state.pointerFocus.lock(), {-1, -1} /* Coords don't really matter that much, they will be updated next move */); + if (g_pSeatManager->m_state.pointerFocus && g_pSeatManager->m_state.pointerFocus->client() == resource->client()) + sendEnter(g_pSeatManager->m_state.pointerFocus.lock(), {-1, -1} /* Coords don't really matter that much, they will be updated next move */); } int CWLPointerResource::version() { @@ -297,16 +297,16 @@ CWLKeyboardResource::CWLKeyboardResource(SP resource_, SPsetRelease([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); resource->setOnDestroy([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); - if (!g_pSeatManager->keyboard) { + if (!g_pSeatManager->m_keyboard) { LOGM(ERR, "No keyboard on bound wl_keyboard??"); return; } - sendKeymap(g_pSeatManager->keyboard.lock()); - repeatInfo(g_pSeatManager->keyboard->m_repeatRate, g_pSeatManager->keyboard->m_repeatDelay); + sendKeymap(g_pSeatManager->m_keyboard.lock()); + repeatInfo(g_pSeatManager->m_keyboard->m_repeatRate, g_pSeatManager->m_keyboard->m_repeatDelay); - if (g_pSeatManager->state.keyboardFocus && g_pSeatManager->state.keyboardFocus->client() == resource->client()) - sendEnter(g_pSeatManager->state.keyboardFocus.lock()); + if (g_pSeatManager->m_state.keyboardFocus && g_pSeatManager->m_state.keyboardFocus->client() == resource->client()) + sendEnter(g_pSeatManager->m_state.keyboardFocus.lock()); } bool CWLKeyboardResource::good() { @@ -533,7 +533,7 @@ void CWLSeatProtocol::updateKeymap() { return; for (auto const& k : m_vKeyboards) { - k->sendKeymap(g_pSeatManager->keyboard.lock()); + k->sendKeymap(g_pSeatManager->m_keyboard.lock()); } } diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index bb7383b3..aec84575 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -149,7 +149,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { rect.scale(pMonitor->m_scale).round(); - const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_bGroupsLocked; + const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_groupsLocked; const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE; @@ -398,10 +398,10 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) { // hack g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); if (!pWindow->m_isFloating) { - const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked; - g_pKeybindManager->m_bGroupsLocked = true; + const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked; + g_pKeybindManager->m_groupsLocked = true; g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow); - g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; + g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV; } g_pInputManager->m_currentlyDraggedWindow = pWindow; diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 65d0ee65..8897be33 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -238,19 +238,19 @@ void CRenderPass::renderDebugData() { offsets[surface.get()] += texture->m_vSize.y; }; - renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); - renderHLSurface(debugData.pointerFocusText, g_pSeatManager->state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); + renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->m_state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); + renderHLSurface(debugData.pointerFocusText, g_pSeatManager->m_state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); if (g_pCompositor->m_lastWindow) renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); - if (g_pSeatManager->state.pointerFocus) { - if (g_pSeatManager->state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->state.pointerFocus->current.size}).getExtents().size() != - g_pSeatManager->state.pointerFocus->current.size) { - auto hlSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock()); + if (g_pSeatManager->m_state.pointerFocus) { + if (g_pSeatManager->m_state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->m_state.pointerFocus->current.size}).getExtents().size() != + g_pSeatManager->m_state.pointerFocus->current.size) { + auto hlSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (hlSurface) { auto BOX = hlSurface->getSurfaceBoxGlobal(); if (BOX) { - auto region = g_pSeatManager->state.pointerFocus->current.input.copy() + auto region = g_pSeatManager->m_state.pointerFocus->current.input.copy() .scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale) .translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->m_position); g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.8F, 0.8F, 0.2F, 0.4F}, region); diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 613ec5f9..1c0e8ff4 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -650,7 +650,7 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) { return; } - if (!g_pSeatManager->state.keyboardFocusResource || g_pSeatManager->state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) { + if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) { Debug::log(TRACE, "[xwm] Ignoring clipboard access: xwayland not in focus"); selectionSendNotify(e, false); return; @@ -659,8 +659,8 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) { if (e->target == HYPRATOMS["TARGETS"]) { // send mime types std::vector mimes; - if (sel == &clipboard && g_pSeatManager->selection.currentSelection) - mimes = g_pSeatManager->selection.currentSelection->mimes(); + if (sel == &clipboard && g_pSeatManager->m_selection.currentSelection) + mimes = g_pSeatManager->m_selection.currentSelection->mimes(); else if (sel == &dndSelection && !dndDataOffers.empty() && dndDataOffers.at(0)->source) mimes = dndDataOffers.at(0)->source->mimes(); @@ -1179,8 +1179,8 @@ void CXWM::initSelection() { XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; xcb_xfixes_select_selection_input(connection, clipboard.window, HYPRATOMS["CLIPBOARD"], mask2); - clipboard.listeners.setSelection = g_pSeatManager->events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); }); - clipboard.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); }); + clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); }); + clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); }); primarySelection.window = xcb_generate_id(connection); xcb_create_window(connection, XCB_COPY_FROM_PARENT, primarySelection.window, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, @@ -1189,8 +1189,8 @@ void CXWM::initSelection() { xcb_xfixes_select_selection_input(connection, primarySelection.window, HYPRATOMS["PRIMARY"], mask2); - primarySelection.listeners.setSelection = g_pSeatManager->events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); }); - primarySelection.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); }); + primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); }); + primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); }); dndSelection.window = xcb_generate_id(connection); xcb_create_window(connection, XCB_COPY_FROM_PARENT, dndSelection.window, screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, screen->root_visual, XCB_CW_EVENT_MASK, @@ -1330,16 +1330,16 @@ SP CXWM::createX11DataOffer(SP surf, SPpWM->clipboard && g_pSeatManager->selection.currentSelection && g_pSeatManager->selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || - (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection && - g_pSeatManager->selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11)) + if ((this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection && g_pSeatManager->m_selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || + (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection && + g_pSeatManager->m_selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11)) return; - if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->selection.currentSelection) { + if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection) { xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); xcb_flush(g_pXWayland->pWM->connection); g_pXWayland->pWM->clipboard.notifyOnFocus = true; - } else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection) { + } else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection) { xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); xcb_flush(g_pXWayland->pWM->connection); g_pXWayland->pWM->primarySelection.notifyOnFocus = true; @@ -1347,7 +1347,7 @@ void SXSelection::onSelection() { } void SXSelection::onKeyboardFocus() { - if (!g_pSeatManager->state.keyboardFocusResource || g_pSeatManager->state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) + if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) return; if (this == &g_pXWayland->pWM->clipboard && g_pXWayland->pWM->clipboard.notifyOnFocus) { @@ -1404,9 +1404,9 @@ static int readDataSource(int fd, uint32_t mask, void* data) { bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) { WP selection; if (this == &g_pXWayland->pWM->clipboard) - selection = g_pSeatManager->selection.currentSelection; + selection = g_pSeatManager->m_selection.currentSelection; else if (this == &g_pXWayland->pWM->primarySelection) - selection = g_pSeatManager->selection.currentPrimarySelection; + selection = g_pSeatManager->m_selection.currentPrimarySelection; else if (!g_pXWayland->pWM->dndDataOffers.empty()) selection = g_pXWayland->pWM->dndDataOffers.at(0)->getSource(); From f1ac1847ffaccad9d4faf2e47066202d7ab915d1 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 2 May 2025 15:08:46 +0000 Subject: [PATCH 0142/1077] [gha] Nix: update inputs --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 2fcbdf9e..1e507853 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1745930157, - "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", + "lastModified": 1746141548, + "narHash": "sha256-IgBWhX7A2oJmZFIrpRuMnw5RAufVnfvOgHWgIdds+hc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev": "f02fddb8acef29a8b32f10a335d44828d7825b78", "type": "github" }, "original": { From 77ecf0950685c7872b3aa8c2e63ef4147b0bb685 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 2 May 2025 16:29:04 +0100 Subject: [PATCH 0143/1077] internal: fix name confusion in SAlphaValue fixes #10251 --- src/desktop/Window.hpp | 8 ++++---- src/managers/KeybindManager.cpp | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index cc62dd3b..449c9c60 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -68,13 +68,13 @@ class IWindowTransformer; struct SAlphaValue { float alpha; - bool override; + bool overridden; - float applyAlpha(float alpha) const { - if (override) + float applyAlpha(float a) const { + if (overridden) return alpha; else - return alpha * alpha; + return alpha * a; }; }; diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index aea49061..bae7c559 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -3194,13 +3194,13 @@ SDispatchResult CKeybindManager::setProp(std::string args) { PWINDOW->clampWindowSize(PWINDOW->m_windowData.minSize.value(), std::nullopt); PWINDOW->setHidden(false); } else if (PROP == "alpha") { - PWINDOW->m_windowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alpha.valueOrDefault().override}, PRIORITY_SET_PROP); + PWINDOW->m_windowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alpha.valueOrDefault().overridden}, PRIORITY_SET_PROP); } else if (PROP == "alphainactive") { PWINDOW->m_windowData.alphaInactive = - CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaInactive.valueOrDefault().override}, PRIORITY_SET_PROP); + CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaInactive.valueOrDefault().overridden}, PRIORITY_SET_PROP); } else if (PROP == "alphafullscreen") { PWINDOW->m_windowData.alphaFullscreen = - CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaFullscreen.valueOrDefault().override}, PRIORITY_SET_PROP); + CWindowOverridableVar(SAlphaValue{std::stof(VAL), PWINDOW->m_windowData.alphaFullscreen.valueOrDefault().overridden}, PRIORITY_SET_PROP); } else if (PROP == "alphaoverride") { PWINDOW->m_windowData.alpha = CWindowOverridableVar(SAlphaValue{PWINDOW->m_windowData.alpha.valueOrDefault().alpha, (bool)configStringToInt(VAL).value_or(0)}, PRIORITY_SET_PROP); From 0c736217a787928a87224b2bf7e984c446d4fc22 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 2 May 2025 17:53:55 +0100 Subject: [PATCH 0144/1077] configmgr: fix CConfigValue<> from plugins --- src/config/ConfigManager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 54bc685c..4d3b67c5 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1640,6 +1640,9 @@ Hyprlang::CConfigValue* CConfigManager::getHyprlangConfigValuePtr(const std::str if (!specialCat.empty()) return m_config->getSpecialConfigValuePtr(specialCat.c_str(), name.c_str(), nullptr); + if (name.starts_with("plugin:")) + return m_config->getSpecialConfigValuePtr("plugin", name.substr(7).c_str(), nullptr); + return m_config->getConfigValuePtr(name.c_str()); } From d9cad5e1b63f2e1e86eb54551c72d17ee4dd070d Mon Sep 17 00:00:00 2001 From: davc0n Date: Sat, 3 May 2025 16:02:49 +0200 Subject: [PATCH 0145/1077] protocols: refactor class member vars (core) (#10259) --- src/Compositor.cpp | 8 +- src/desktop/LayerSurface.cpp | 14 +- src/desktop/Popup.cpp | 14 +- src/desktop/Subsurface.cpp | 44 +-- src/desktop/WLSurface.cpp | 41 +-- src/desktop/Window.cpp | 30 +- src/devices/Tablet.cpp | 2 +- src/events/Windows.cpp | 5 +- src/helpers/Monitor.cpp | 14 +- src/layout/IHyprLayout.cpp | 2 +- src/managers/PointerManager.cpp | 30 +- src/managers/ProtocolManager.cpp | 2 +- src/managers/SeatManager.cpp | 44 +-- src/managers/input/InputManager.cpp | 6 +- src/managers/input/InputMethodPopup.cpp | 2 +- src/managers/input/TextInput.cpp | 6 +- src/protocols/AlphaModifier.cpp | 4 +- src/protocols/CTMControl.cpp | 2 +- src/protocols/ColorManagement.cpp | 6 +- src/protocols/ContentType.cpp | 10 +- src/protocols/DRMSyncobj.cpp | 24 +- src/protocols/FocusGrab.cpp | 2 +- src/protocols/ForeignToplevelWlr.cpp | 2 +- src/protocols/FractionalScale.cpp | 2 +- src/protocols/FrogColorManagement.cpp | 42 +-- src/protocols/GammaControl.cpp | 2 +- src/protocols/HyprlandSurface.cpp | 6 +- src/protocols/IdleInhibit.cpp | 2 +- src/protocols/InputMethodV2.cpp | 8 +- src/protocols/LayerShell.cpp | 14 +- src/protocols/OutputPower.cpp | 2 +- src/protocols/PointerConstraints.cpp | 6 +- src/protocols/Screencopy.cpp | 2 +- src/protocols/SessionLock.cpp | 10 +- src/protocols/Viewporter.cpp | 32 +- src/protocols/VirtualPointer.cpp | 2 +- src/protocols/XDGOutput.cpp | 4 +- src/protocols/XDGShell.cpp | 16 +- src/protocols/XXColorManagement.cpp | 16 +- src/protocols/core/Compositor.cpp | 374 ++++++++++----------- src/protocols/core/Compositor.hpp | 50 +-- src/protocols/core/DataDevice.cpp | 416 ++++++++++++------------ src/protocols/core/DataDevice.hpp | 56 ++-- src/protocols/core/Output.cpp | 86 ++--- src/protocols/core/Output.hpp | 22 +- src/protocols/core/Seat.cpp | 332 +++++++++---------- src/protocols/core/Seat.hpp | 62 ++-- src/protocols/core/Shm.cpp | 116 +++---- src/protocols/core/Shm.hpp | 31 +- src/protocols/core/Subcompositor.cpp | 156 ++++----- src/protocols/core/Subcompositor.hpp | 26 +- src/render/OpenGL.cpp | 18 +- src/render/Renderer.cpp | 53 +-- src/render/pass/Pass.cpp | 6 +- src/render/pass/SurfacePassElement.cpp | 22 +- src/xwayland/XSurface.cpp | 10 +- src/xwayland/XWM.cpp | 2 +- 57 files changed, 1160 insertions(+), 1158 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index a9106480..fcb67873 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1288,14 +1288,14 @@ SP CCompositor::vectorToLayerSurface(const Vector2D& pos, st bool aboveLockscreen) { for (auto const& ls : *layerSurfaces | std::views::reverse) { - if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->mapped) || ls->m_alpha->value() == 0.f || + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->m_mapped) || ls->m_alpha->value() == 0.f || (aboveLockscreen && (!ls->m_aboveLockscreen || !ls->m_aboveLockscreenInteractable))) continue; auto [surf, local] = ls->m_layerSurface->surface->at(pos - ls->m_geometry.pos(), true); if (surf) { - if (surf->current.input.empty()) + if (surf->m_current.input.empty()) continue; *ppLayerSurfaceFound = ls.lock(); @@ -1310,10 +1310,10 @@ SP CCompositor::vectorToLayerSurface(const Vector2D& pos, st } PHLWINDOW CCompositor::getWindowFromSurface(SP pSurface) { - if (!pSurface || !pSurface->hlSurface) + if (!pSurface || !pSurface->m_hlSurface) return nullptr; - return pSurface->hlSurface->getWindow(); + return pSurface->m_hlSurface->getWindow(); } PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) { diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index c31f9bb7..9818c093 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -238,7 +238,7 @@ void CLayerSurface::onUnmap() { // refocus if needed // vvvvvvvvvvvvv if there is a last focus and the last focus is not keyboard focusable, fallback to window - if (WASLASTFOCUS || (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->hlSurface && !g_pCompositor->m_lastFocus->hlSurface->keyboardFocusable())) { + if (WASLASTFOCUS || (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->m_hlSurface && !g_pCompositor->m_lastFocus->m_hlSurface->keyboardFocusable())) { if (!g_pInputManager->refocusLastWindow(PMONITOR)) g_pInputManager->refocus(); } else if (g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus != m_surface->resource()) @@ -247,8 +247,8 @@ void CLayerSurface::onUnmap() { CBox geomFixed = {m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - geomFixed = {m_geometry.x + (int)PMONITOR->m_position.x, m_geometry.y + (int)PMONITOR->m_position.y, (int)m_layerSurface->surface->current.size.x, - (int)m_layerSurface->surface->current.size.y}; + geomFixed = {m_geometry.x + (int)PMONITOR->m_position.x, m_geometry.y + (int)PMONITOR->m_position.y, (int)m_layerSurface->surface->m_current.size.x, + (int)m_layerSurface->surface->m_current.size.y}; g_pHyprRenderer->damageBox(geomFixed); g_pInputManager->simulateMouseMovement(); @@ -262,7 +262,7 @@ void CLayerSurface::onCommit() { if (!m_mapped) { // we're re-mapping if this is the case - if (m_layerSurface->surface && !m_layerSurface->surface->current.texture) { + if (m_layerSurface->surface && !m_layerSurface->surface->m_current.texture) { m_fadingOut = false; m_geometry = {}; g_pHyprRenderer->arrangeLayersForMonitor(monitorID()); @@ -308,12 +308,12 @@ void CLayerSurface::onCommit() { m_position = Vector2D(m_geometry.x, m_geometry.y); // update geom if it changed - if (m_layerSurface->surface->current.scale == 1 && PMONITOR->m_scale != 1.f && m_layerSurface->surface->current.viewport.hasDestination) { + if (m_layerSurface->surface->m_current.scale == 1 && PMONITOR->m_scale != 1.f && m_layerSurface->surface->m_current.viewport.hasDestination) { // fractional scaling. Dirty hack. - m_geometry = {m_geometry.pos(), m_layerSurface->surface->current.viewport.destination}; + m_geometry = {m_geometry.pos(), m_layerSurface->surface->m_current.viewport.destination}; } else { // this is because some apps like e.g. rofi-lbonn can't fucking use the protocol correctly. - m_geometry = {m_geometry.pos(), m_layerSurface->surface->current.size}; + m_geometry = {m_geometry.pos(), m_layerSurface->surface->m_current.size}; } } diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 30cf966d..86928faf 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -93,7 +93,7 @@ void CPopup::onMap() { return; m_mapped = true; - m_lastSize = m_resource->surface->surface->current.size; + m_lastSize = m_resource->surface->surface->m_current.size; const auto COORDS = coordsGlobal(); const auto PMONITOR = g_pCompositor->getMonitorFromVector(COORDS); @@ -128,7 +128,7 @@ void CPopup::onUnmap() { m_mapped = false; - m_lastSize = m_resource->surface->surface->current.size; + m_lastSize = m_resource->surface->surface->m_current.size; const auto COORDS = coordsGlobal(); @@ -172,7 +172,7 @@ void CPopup::onCommit(bool ignoreSiblings) { } if (!m_windowOwner.expired() && (!m_windowOwner->m_isMapped || !m_windowOwner->m_workspace->m_visible)) { - m_lastSize = m_resource->surface->surface->current.size; + m_lastSize = m_resource->surface->surface->m_current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) @@ -186,10 +186,10 @@ void CPopup::onCommit(bool ignoreSiblings) { const auto COORDS = coordsGlobal(); const auto COORDSLOCAL = coordsRelativeToParent(); - if (m_lastSize != m_resource->surface->surface->current.size || m_requestedReposition || m_lastPos != COORDSLOCAL) { + if (m_lastSize != m_resource->surface->surface->m_current.size || m_requestedReposition || m_lastPos != COORDSLOCAL) { CBox box = {localToGlobal(m_lastPos), m_lastSize}; g_pHyprRenderer->damageBox(box); - m_lastSize = m_resource->surface->surface->current.size; + m_lastSize = m_resource->surface->surface->m_current.size; box = {COORDS, m_lastSize}; g_pHyprRenderer->damageBox(box); @@ -246,7 +246,7 @@ Vector2D CPopup::coordsRelativeToParent() { while (current->m_parent && current->m_resource) { - offset += current->m_wlSurface->resource()->current.offset; + offset += current->m_wlSurface->resource()->m_current.offset; offset += current->m_resource->geometry.pos(); current = current->m_parent; @@ -363,7 +363,7 @@ WP CPopup::at(const Vector2D& globalCoords, bool allowsInput) { if (BOX.containsPoint(globalCoords)) return p; } else { - const auto REGION = CRegion{p->m_wlSurface->resource()->current.input}.intersect(CBox{{}, p->m_wlSurface->resource()->current.size}).translate(p->coordsGlobal()); + const auto REGION = CRegion{p->m_wlSurface->resource()->m_current.input}.intersect(CBox{{}, p->m_wlSurface->resource()->m_current.size}).translate(p->coordsGlobal()); if (REGION.containsPoint(globalCoords)) return p; } diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp index 419c7e31..1c5d5c70 100644 --- a/src/desktop/Subsurface.cpp +++ b/src/desktop/Subsurface.cpp @@ -32,9 +32,9 @@ UP CSubsurface::create(SP pSubsurface, PHLWI subsurface->m_subsurface = pSubsurface; subsurface->m_self = subsurface; subsurface->m_wlSurface = CWLSurface::create(); - subsurface->m_wlSurface->assign(pSubsurface->surface.lock(), subsurface.get()); + subsurface->m_wlSurface->assign(pSubsurface->m_surface.lock(), subsurface.get()); subsurface->initSignals(); - subsurface->initExistingSubsurfaces(pSubsurface->surface.lock()); + subsurface->initExistingSubsurfaces(pSubsurface->m_surface.lock()); return subsurface; } @@ -44,27 +44,27 @@ UP CSubsurface::create(SP pSubsurface, WPm_subsurface = pSubsurface; subsurface->m_self = subsurface; subsurface->m_wlSurface = CWLSurface::create(); - subsurface->m_wlSurface->assign(pSubsurface->surface.lock(), subsurface.get()); + subsurface->m_wlSurface->assign(pSubsurface->m_surface.lock(), subsurface.get()); subsurface->initSignals(); - subsurface->initExistingSubsurfaces(pSubsurface->surface.lock()); + subsurface->initExistingSubsurfaces(pSubsurface->m_surface.lock()); return subsurface; } void CSubsurface::initSignals() { if (m_subsurface) { - m_listeners.commitSubsurface = m_subsurface->surface->events.commit.registerListener([this](std::any d) { onCommit(); }); - m_listeners.destroySubsurface = m_subsurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); - m_listeners.mapSubsurface = m_subsurface->surface->events.map.registerListener([this](std::any d) { onMap(); }); - m_listeners.unmapSubsurface = m_subsurface->surface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.commitSubsurface = m_subsurface->m_surface->m_events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.destroySubsurface = m_subsurface->m_events.destroy.registerListener([this](std::any d) { onDestroy(); }); + m_listeners.mapSubsurface = m_subsurface->m_surface->m_events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmapSubsurface = m_subsurface->m_surface->m_events.unmap.registerListener([this](std::any d) { onUnmap(); }); m_listeners.newSubsurface = - m_subsurface->surface->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); + m_subsurface->m_surface->m_events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); } else { if (m_windowParent) - m_listeners.newSubsurface = m_windowParent->m_wlSurface->resource()->events.newSubsurface.registerListener( + m_listeners.newSubsurface = m_windowParent->m_wlSurface->resource()->m_events.newSubsurface.registerListener( [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else if (m_popupParent) - m_listeners.newSubsurface = - m_popupParent->m_wlSurface->resource()->events.newSubsurface.registerListener([this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); + m_listeners.newSubsurface = m_popupParent->m_wlSurface->resource()->m_events.newSubsurface.registerListener( + [this](std::any d) { onNewSubsurface(std::any_cast>(d)); }); else ASSERT(false); } @@ -95,7 +95,7 @@ void CSubsurface::recheckDamageForSubsurfaces() { void CSubsurface::onCommit() { // no damaging if it's not visible if (!m_windowParent.expired() && (!m_windowParent->m_isMapped || !m_windowParent->m_workspace->m_visible)) { - m_lastSize = m_wlSurface->resource()->current.size; + m_lastSize = m_wlSurface->resource()->m_current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) @@ -115,10 +115,10 @@ void CSubsurface::onCommit() { // I do not think this is correct, but it solves a lot of issues with some apps (e.g. firefox) checkSiblingDamage(); - if (m_lastSize != m_wlSurface->resource()->current.size || m_lastPosition != m_subsurface->position) { + if (m_lastSize != m_wlSurface->resource()->m_current.size || m_lastPosition != m_subsurface->m_position) { damageLastArea(); - m_lastSize = m_wlSurface->resource()->current.size; - m_lastPosition = m_subsurface->position; + m_lastSize = m_wlSurface->resource()->m_current.size; + m_lastPosition = m_subsurface->m_position; } } @@ -151,8 +151,8 @@ void CSubsurface::onNewSubsurface(SP pSubsurface) { } void CSubsurface::onMap() { - m_lastSize = m_wlSurface->resource()->current.size; - m_lastPosition = m_subsurface->position; + m_lastSize = m_wlSurface->resource()->m_current.size; + m_lastPosition = m_subsurface->m_position; const auto COORDS = coordsGlobal(); CBox box{COORDS, m_lastSize}; @@ -175,7 +175,7 @@ void CSubsurface::onUnmap() { } void CSubsurface::damageLastArea() { - const auto COORDS = coordsGlobal() + m_lastPosition - m_subsurface->position; + const auto COORDS = coordsGlobal() + m_lastPosition - m_subsurface->m_position; CBox box{COORDS, m_lastSize}; box.expand(4); g_pHyprRenderer->damageBox(box); @@ -199,15 +199,15 @@ Vector2D CSubsurface::coordsGlobal() { } void CSubsurface::initExistingSubsurfaces(SP pSurface) { - for (auto const& s : pSurface->subsurfaces) { - if (!s || s->surface->hlSurface /* already assigned */) + for (auto const& s : pSurface->m_subsurfaces) { + if (!s || s->m_surface->m_hlSurface /* already assigned */) continue; onNewSubsurface(s.lock()); } } Vector2D CSubsurface::size() { - return m_wlSurface->resource()->current.size; + return m_wlSurface->resource()->m_current.size; } bool CSubsurface::visible() { diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index d5e35be1..6666ea52 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -59,12 +59,12 @@ bool CWLSurface::small() const { if (!validMapped(m_windowOwner) || !exists()) return false; - if (!m_resource->current.texture) + if (!m_resource->m_current.texture) return false; const auto O = m_windowOwner.lock(); - return O->m_reportedSize.x > m_resource->current.size.x + 1 || O->m_reportedSize.y > m_resource->current.size.y + 1; + return O->m_reportedSize.x > m_resource->m_current.size.x + 1 || O->m_reportedSize.y > m_resource->m_current.size.y + 1; } Vector2D CWLSurface::correctSmallVec() const { @@ -78,36 +78,37 @@ Vector2D CWLSurface::correctSmallVec() const { } Vector2D CWLSurface::correctSmallVecBuf() const { - if (!exists() || !small() || m_fillIgnoreSmall || !m_resource->current.texture) + if (!exists() || !small() || m_fillIgnoreSmall || !m_resource->m_current.texture) return {}; const auto SIZE = getViewporterCorrectedSize(); - const auto BS = m_resource->current.bufferSize; + const auto BS = m_resource->m_current.bufferSize; return Vector2D{(BS.x - SIZE.x) / 2, (BS.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}); } Vector2D CWLSurface::getViewporterCorrectedSize() const { - if (!exists() || !m_resource->current.texture) + if (!exists() || !m_resource->m_current.texture) return {}; - return m_resource->current.viewport.hasDestination ? m_resource->current.viewport.destination : m_resource->current.bufferSize; + return m_resource->m_current.viewport.hasDestination ? m_resource->m_current.viewport.destination : m_resource->m_current.bufferSize; } CRegion CWLSurface::computeDamage() const { - if (!m_resource->current.texture) + if (!m_resource->m_current.texture) return {}; - CRegion damage = m_resource->current.accumulateBufferDamage(); - damage.transform(wlTransformToHyprutils(m_resource->current.transform), m_resource->current.bufferSize.x, m_resource->current.bufferSize.y); + CRegion damage = m_resource->m_current.accumulateBufferDamage(); + damage.transform(wlTransformToHyprutils(m_resource->m_current.transform), m_resource->m_current.bufferSize.x, m_resource->m_current.bufferSize.y); - const auto BUFSIZE = m_resource->current.bufferSize; + const auto BUFSIZE = m_resource->m_current.bufferSize; const auto CORRECTVEC = correctSmallVecBuf(); - if (m_resource->current.viewport.hasSource) - damage.intersect(m_resource->current.viewport.source); + if (m_resource->m_current.viewport.hasSource) + damage.intersect(m_resource->m_current.viewport.source); - const auto SCALEDSRCSIZE = m_resource->current.viewport.hasSource ? m_resource->current.viewport.source.size() * m_resource->current.scale : m_resource->current.bufferSize; + const auto SCALEDSRCSIZE = + m_resource->m_current.viewport.hasSource ? m_resource->m_current.viewport.source.size() * m_resource->m_current.scale : m_resource->m_current.bufferSize; damage.scale({BUFSIZE.x / SCALEDSRCSIZE.x, BUFSIZE.y / SCALEDSRCSIZE.y}); damage.translate(CORRECTVEC); @@ -115,8 +116,8 @@ CRegion CWLSurface::computeDamage() const { // go from buffer coords in the damage to hl logical const auto BOX = getSurfaceBoxGlobal(); - const Vector2D SCALE = BOX.has_value() ? BOX->size() / m_resource->current.bufferSize : - Vector2D{1.0 / m_resource->current.scale, 1.0 / m_resource->current.scale /* Wrong... but we can't really do better */}; + const Vector2D SCALE = BOX.has_value() ? BOX->size() / m_resource->m_current.bufferSize : + Vector2D{1.0 / m_resource->m_current.scale, 1.0 / m_resource->m_current.scale /* Wrong... but we can't really do better */}; damage.scale(SCALE); @@ -135,7 +136,7 @@ void CWLSurface::destroy() { m_constraint.reset(); m_listeners.destroy.reset(); - m_resource->hlSurface.reset(); + m_resource->m_hlSurface.reset(); m_windowOwner.reset(); m_layerOwner.reset(); m_popupOwner = nullptr; @@ -154,11 +155,11 @@ void CWLSurface::init() { if (!m_resource) return; - RASSERT(!m_resource->hlSurface, "Attempted to duplicate CWLSurface ownership!"); + RASSERT(!m_resource->m_hlSurface, "Attempted to duplicate CWLSurface ownership!"); - m_resource->hlSurface = m_self.lock(); + m_resource->m_hlSurface = m_self.lock(); - m_listeners.destroy = m_resource->events.destroy.registerListener([this](std::any d) { destroy(); }); + m_listeners.destroy = m_resource->m_events.destroy.registerListener([this](std::any d) { destroy(); }); Debug::log(LOG, "CWLSurface {:x} called init()", (uintptr_t)this); } @@ -222,7 +223,7 @@ bool CWLSurface::visible() { SP CWLSurface::fromResource(SP pSurface) { if (!pSurface) return nullptr; - return pSurface->hlSurface.lock(); + return pSurface->m_hlSurface.lock(); } bool CWLSurface::keyboardFocusable() const { diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 64771895..4686ecb1 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -184,11 +184,11 @@ SBoxExtents CWindow::getFullWindowExtents() { if (-surfaceExtents.y > maxExtents.topLeft.y) maxExtents.topLeft.y = -surfaceExtents.y; - if (surfaceExtents.x + surfaceExtents.width > m_wlSurface->resource()->current.size.x + maxExtents.bottomRight.x) - maxExtents.bottomRight.x = surfaceExtents.x + surfaceExtents.width - m_wlSurface->resource()->current.size.x; + if (surfaceExtents.x + surfaceExtents.width > m_wlSurface->resource()->m_current.size.x + maxExtents.bottomRight.x) + maxExtents.bottomRight.x = surfaceExtents.x + surfaceExtents.width - m_wlSurface->resource()->m_current.size.x; - if (surfaceExtents.y + surfaceExtents.height > m_wlSurface->resource()->current.size.y + maxExtents.bottomRight.y) - maxExtents.bottomRight.y = surfaceExtents.y + surfaceExtents.height - m_wlSurface->resource()->current.size.y; + if (surfaceExtents.y + surfaceExtents.height > m_wlSurface->resource()->m_current.size.y + maxExtents.bottomRight.y) + maxExtents.bottomRight.y = surfaceExtents.y + surfaceExtents.height - m_wlSurface->resource()->m_current.size.y; } return maxExtents; @@ -1159,18 +1159,18 @@ bool CWindow::opaque() { if (PWORKSPACE->m_alpha->value() != 1.f) return false; - if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->surface && m_xwaylandSurface->surface->current.texture) - return m_xwaylandSurface->surface->current.texture->m_bOpaque; + if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->surface && m_xwaylandSurface->surface->m_current.texture) + return m_xwaylandSurface->surface->m_current.texture->m_bOpaque; - if (!m_wlSurface->resource() || !m_wlSurface->resource()->current.texture) + if (!m_wlSurface->resource() || !m_wlSurface->resource()->m_current.texture) return false; // TODO: this is wrong - const auto EXTENTS = m_xdgSurface->surface->current.opaque.getExtents(); - if (EXTENTS.w >= m_xdgSurface->surface->current.bufferSize.x && EXTENTS.h >= m_xdgSurface->surface->current.bufferSize.y) + const auto EXTENTS = m_xdgSurface->surface->m_current.opaque.getExtents(); + if (EXTENTS.w >= m_xdgSurface->surface->m_current.bufferSize.x && EXTENTS.h >= m_xdgSurface->surface->m_current.bufferSize.y) return true; - return m_wlSurface->resource()->current.texture->m_bOpaque; + return m_wlSurface->resource()->m_current.texture->m_bOpaque; } float CWindow::rounding() { @@ -1772,19 +1772,19 @@ void CWindow::sendWindowSize(bool force) { } NContentType::eContentType CWindow::getContentType() { - if (!m_wlSurface || !m_wlSurface->resource() || !m_wlSurface->resource()->contentType.valid()) + if (!m_wlSurface || !m_wlSurface->resource() || !m_wlSurface->resource()->m_contentType.valid()) return CONTENT_TYPE_NONE; - return m_wlSurface->resource()->contentType->value; + return m_wlSurface->resource()->m_contentType->value; } void CWindow::setContentType(NContentType::eContentType contentType) { - if (!m_wlSurface->resource()->contentType.valid()) - m_wlSurface->resource()->contentType = PROTO::contentType->getContentType(m_wlSurface->resource()); + if (!m_wlSurface->resource()->m_contentType.valid()) + m_wlSurface->resource()->m_contentType = PROTO::contentType->getContentType(m_wlSurface->resource()); // else disallow content type change if proto is used? Debug::log(INFO, "ContentType for window {}", (int)contentType); - m_wlSurface->resource()->contentType->value = contentType; + m_wlSurface->resource()->m_contentType->value = contentType; } void CWindow::deactivateGroupMembers() { diff --git a/src/devices/Tablet.cpp b/src/devices/Tablet.cpp index e4c399c9..faeb3d73 100644 --- a/src/devices/Tablet.cpp +++ b/src/devices/Tablet.cpp @@ -265,7 +265,7 @@ void CTabletTool::setSurface(SP surf) { m_surface = surf; if (surf) { - m_listeners.destroySurface = surf->events.destroy.registerListener([this](std::any d) { + m_listeners.destroySurface = surf->m_events.destroy.registerListener([this](std::any d) { PROTO::tablet->proximityOut(m_self.lock()); m_surface.reset(); m_listeners.destroySurface.reset(); diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index eec01a7d..87429874 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -892,8 +892,9 @@ void Events::listener_commitWindow(void* owner, void* data) { } // tearing: if solitary, redraw it. This still might be a single surface window - if (PMONITOR && PMONITOR->m_solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->m_tearingState.canTear && PWINDOW->m_wlSurface->resource()->current.texture) { - CRegion damageBox{PWINDOW->m_wlSurface->resource()->current.accumulateBufferDamage()}; + if (PMONITOR && PMONITOR->m_solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->m_tearingState.canTear && + PWINDOW->m_wlSurface->resource()->m_current.texture) { + CRegion damageBox{PWINDOW->m_wlSurface->resource()->m_current.accumulateBufferDamage()}; if (!damageBox.empty()) { if (PMONITOR->m_tearingState.busy) { diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 2edba78a..043cd5cc 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1368,20 +1368,20 @@ bool CMonitor::attemptDirectScanout() { const auto PSURFACE = g_pXWaylandManager->getWindowSurface(PCANDIDATE); - if (!PSURFACE || !PSURFACE->current.texture || !PSURFACE->current.buffer) + if (!PSURFACE || !PSURFACE->m_current.texture || !PSURFACE->m_current.buffer) return false; - if (PSURFACE->current.bufferSize != m_pixelSize || PSURFACE->current.transform != m_transform) + if (PSURFACE->m_current.bufferSize != m_pixelSize || PSURFACE->m_current.transform != m_transform) return false; // we can't scanout shm buffers. - const auto params = PSURFACE->current.buffer->dmabuf(); - if (!params.success || !PSURFACE->current.texture->m_pEglImage /* dmabuf */) + const auto params = PSURFACE->m_current.buffer->dmabuf(); + if (!params.success || !PSURFACE->m_current.texture->m_pEglImage /* dmabuf */) return false; - Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->current.buffer.buffer.get()); + Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->m_current.buffer.buffer.get()); - auto PBUFFER = PSURFACE->current.buffer.buffer; + auto PBUFFER = PSURFACE->m_current.buffer.buffer; if (PBUFFER == m_output->state->state().buffer) { PSURFACE->presentFeedback(Time::steadyNow(), m_self.lock()); @@ -1427,7 +1427,7 @@ bool CMonitor::attemptDirectScanout() { PSURFACE->presentFeedback(Time::steadyNow(), m_self.lock()); - m_output->state->addDamage(PSURFACE->current.accumulateBufferDamage()); + m_output->state->addDamage(PSURFACE->m_current.accumulateBufferDamage()); m_output->state->resetExplicitFences(); // no need to do explicit sync here as surface current can only ever be ready to read diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 3b0821d7..e107a9e1 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -118,7 +118,7 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { if (desiredGeometry.width <= 5 || desiredGeometry.height <= 5) { const auto PWINDOWSURFACE = pWindow->m_wlSurface->resource(); - *pWindow->m_realSize = PWINDOWSURFACE->current.size; + *pWindow->m_realSize = PWINDOWSURFACE->m_current.size; if ((desiredGeometry.width <= 1 || desiredGeometry.height <= 1) && pWindow->m_isX11 && pWindow->isX11OverrideRedirect()) { // XDG windows should be fine. TODO: check for weird atoms? diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 48044a69..d9dd602e 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -131,9 +131,9 @@ void CPointerManager::setCursorSurface(SP surf, const Vector2D& hots damageIfSoftware(); if (surf == m_currentCursorImage.surface) { - if (hotspot != m_currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->current.scale : 1.F) != m_currentCursorImage.scale) { + if (hotspot != m_currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->m_current.scale : 1.F) != m_currentCursorImage.scale) { m_currentCursorImage.hotspot = hotspot; - m_currentCursorImage.scale = surf && surf->resource() ? surf->resource()->current.scale : 1.F; + m_currentCursorImage.scale = surf && surf->resource() ? surf->resource()->m_current.scale : 1.F; updateCursorBackend(); damageIfSoftware(); } @@ -145,22 +145,22 @@ void CPointerManager::setCursorSurface(SP surf, const Vector2D& hots if (surf) { m_currentCursorImage.surface = surf; - m_currentCursorImage.scale = surf->resource()->current.scale; + m_currentCursorImage.scale = surf->resource()->m_current.scale; surf->resource()->map(); m_currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); }); - m_currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) { + m_currentCursorImage.commitSurface = surf->resource()->m_events.commit.registerListener([this](std::any data) { damageIfSoftware(); - m_currentCursorImage.size = m_currentCursorImage.surface->resource()->current.texture ? m_currentCursorImage.surface->resource()->current.bufferSize : Vector2D{}; - m_currentCursorImage.scale = m_currentCursorImage.surface ? m_currentCursorImage.surface->resource()->current.scale : 1.F; + m_currentCursorImage.size = m_currentCursorImage.surface->resource()->m_current.texture ? m_currentCursorImage.surface->resource()->m_current.bufferSize : Vector2D{}; + m_currentCursorImage.scale = m_currentCursorImage.surface ? m_currentCursorImage.surface->resource()->m_current.scale : 1.F; recheckEnteredOutputs(); updateCursorBackend(); damageIfSoftware(); }); - if (surf->resource()->current.texture) { - m_currentCursorImage.size = surf->resource()->current.bufferSize; + if (surf->resource()->m_current.texture) { + m_currentCursorImage.size = surf->resource()->m_current.bufferSize; surf->resource()->frame(Time::steadyNow()); } } @@ -464,18 +464,18 @@ SP CPointerManager::renderHWCursorBuffer(SPdataCopy(); if (texData.empty()) { - if (m_currentCursorImage.surface && m_currentCursorImage.surface->resource()->role->role() == SURFACE_ROLE_CURSOR) { + if (m_currentCursorImage.surface && m_currentCursorImage.surface->resource()->m_role->role() == SURFACE_ROLE_CURSOR) { const auto SURFACE = m_currentCursorImage.surface->resource(); auto& shmBuffer = CCursorSurfaceRole::cursorPixelData(SURFACE); bool flipRB = false; - if (SURFACE->current.texture) { - Debug::log(TRACE, "Cursor CPU surface: format {}, expecting AR24", NFormatUtils::drmFormatName(SURFACE->current.texture->m_iDrmFormat)); - if (SURFACE->current.texture->m_iDrmFormat == DRM_FORMAT_ABGR8888) { + if (SURFACE->m_current.texture) { + Debug::log(TRACE, "Cursor CPU surface: format {}, expecting AR24", NFormatUtils::drmFormatName(SURFACE->m_current.texture->m_iDrmFormat)); + if (SURFACE->m_current.texture->m_iDrmFormat == DRM_FORMAT_ABGR8888) { Debug::log(TRACE, "Cursor CPU surface format AB24, will flip. WARNING: this will break on big endian!"); flipRB = true; - } else if (SURFACE->current.texture->m_iDrmFormat != DRM_FORMAT_ARGB8888) { + } else if (SURFACE->m_current.texture->m_iDrmFormat != DRM_FORMAT_ARGB8888) { Debug::log(TRACE, "Cursor CPU surface format rejected, falling back to sw"); return nullptr; } @@ -869,7 +869,7 @@ void CPointerManager::onMonitorLayoutChange() { } SP CPointerManager::getCurrentCursorTexture() { - if (!m_currentCursorImage.pBuffer && (!m_currentCursorImage.surface || !m_currentCursorImage.surface->resource()->current.texture)) + if (!m_currentCursorImage.pBuffer && (!m_currentCursorImage.surface || !m_currentCursorImage.surface->resource()->m_current.texture)) return nullptr; if (m_currentCursorImage.pBuffer) { @@ -878,7 +878,7 @@ SP CPointerManager::getCurrentCursorTexture() { return m_currentCursorImage.bufferTex; } - return m_currentCursorImage.surface->resource()->current.texture; + return m_currentCursorImage.surface->resource()->m_current.texture; } void CPointerManager::attachPointer(SP pointer) { diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index f2a9b0ea..ab542fc2 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -120,7 +120,7 @@ CProtocolManager::CProtocolManager() { auto ref = makeShared(&wl_output_interface, 4, std::format("WLOutput ({})", M->m_name), M->m_self.lock()); PROTO::outputs.emplace(M->m_name, ref); - ref->self = ref; + ref->m_self = ref; m_modeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); }); }); diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 809c0ad5..f910598d 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -14,11 +14,11 @@ #include CSeatManager::CSeatManager() { - m_listeners.newSeatResource = PROTO::seat->events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast>(res)); }); + m_listeners.newSeatResource = PROTO::seat->m_events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast>(res)); }); } CSeatManager::SSeatResourceContainer::SSeatResourceContainer(SP res) : resource(res) { - listeners.destroy = res->events.destroy.registerListener( + listeners.destroy = res->m_events.destroy.registerListener( [this](std::any data) { std::erase_if(g_pSeatManager->m_seatResources, [this](const auto& e) { return e->resource.expired() || e->resource == resource; }); }); } @@ -119,7 +119,7 @@ void CSeatManager::setKeyboardFocus(SP surf) { if (s->resource->client() != client) continue; - for (auto const& k : s->resource->keyboards) { + for (auto const& k : s->resource->m_keyboards) { if (!k) continue; @@ -142,7 +142,7 @@ void CSeatManager::setKeyboardFocus(SP surf) { continue; m_state.keyboardFocusResource = r->resource; - for (auto const& k : r->resource->keyboards) { + for (auto const& k : r->resource->m_keyboards) { if (!k) continue; @@ -151,7 +151,7 @@ void CSeatManager::setKeyboardFocus(SP surf) { } } - m_listeners.keyboardSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); }); + m_listeners.keyboardSurfaceDestroy = surf->m_events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); }); m_events.keyboardFocusChange.emit(); } @@ -164,7 +164,7 @@ void CSeatManager::sendKeyboardKey(uint32_t timeMs, uint32_t key, wl_keyboard_ke if (s->resource->client() != m_state.keyboardFocusResource->client()) continue; - for (auto const& k : s->resource->keyboards) { + for (auto const& k : s->resource->m_keyboards) { if (!k) continue; @@ -181,7 +181,7 @@ void CSeatManager::sendKeyboardMods(uint32_t depressed, uint32_t latched, uint32 if (s->resource->client() != m_state.keyboardFocusResource->client()) continue; - for (auto const& k : s->resource->keyboards) { + for (auto const& k : s->resource->m_keyboards) { if (!k) continue; @@ -216,7 +216,7 @@ void CSeatManager::setPointerFocus(SP surf, const Vector2D& if (s->resource->client() != client) continue; - for (auto const& p : s->resource->pointers) { + for (auto const& p : s->resource->m_pointers) { if (!p) continue; @@ -245,7 +245,7 @@ void CSeatManager::setPointerFocus(SP surf, const Vector2D& continue; m_state.pointerFocusResource = r->resource; - for (auto const& p : r->resource->pointers) { + for (auto const& p : r->resource->m_pointers) { if (!p) continue; @@ -258,7 +258,7 @@ void CSeatManager::setPointerFocus(SP surf, const Vector2D& sendPointerFrame(); - m_listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); }); + m_listeners.pointerSurfaceDestroy = surf->m_events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); }); m_events.pointerFocusChange.emit(); m_events.dndPointerFocusChange.emit(); @@ -272,7 +272,7 @@ void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) { if (s->resource->client() != m_state.pointerFocusResource->client()) continue; - for (auto const& p : s->resource->pointers) { + for (auto const& p : s->resource->m_pointers) { if (!p) continue; @@ -291,7 +291,7 @@ void CSeatManager::sendPointerButton(uint32_t timeMs, uint32_t key, wl_pointer_b if (s->resource->client() != m_state.pointerFocusResource->client()) continue; - for (auto const& p : s->resource->pointers) { + for (auto const& p : s->resource->m_pointers) { if (!p) continue; @@ -315,7 +315,7 @@ void CSeatManager::sendPointerFrame(WP pResource) { if (s->resource->client() != pResource->client()) continue; - for (auto const& p : s->resource->pointers) { + for (auto const& p : s->resource->m_pointers) { if (!p) continue; @@ -333,7 +333,7 @@ void CSeatManager::sendPointerAxis(uint32_t timeMs, wl_pointer_axis axis, double if (s->resource->client() != m_state.pointerFocusResource->client()) continue; - for (auto const& p : s->resource->pointers) { + for (auto const& p : s->resource->m_pointers) { if (!p) continue; @@ -364,7 +364,7 @@ void CSeatManager::sendTouchDown(SP surf, uint32_t timeMs, i continue; m_state.touchFocusResource = r->resource; - for (auto const& t : r->resource->touches) { + for (auto const& t : r->resource->m_touches) { if (!t) continue; @@ -372,7 +372,7 @@ void CSeatManager::sendTouchDown(SP surf, uint32_t timeMs, i } } - m_listeners.touchSurfaceDestroy = surf->events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); }); + m_listeners.touchSurfaceDestroy = surf->m_events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); }); m_touchLocks++; @@ -390,7 +390,7 @@ void CSeatManager::sendTouchUp(uint32_t timeMs, int32_t id) { continue; m_state.touchFocusResource = r->resource; - for (auto const& t : r->resource->touches) { + for (auto const& t : r->resource->m_touches) { if (!t) continue; @@ -412,7 +412,7 @@ void CSeatManager::sendTouchMotion(uint32_t timeMs, int32_t id, const Vector2D& if (s->resource->client() != m_state.touchFocusResource->client()) continue; - for (auto const& t : s->resource->touches) { + for (auto const& t : s->resource->m_touches) { if (!t) continue; @@ -429,7 +429,7 @@ void CSeatManager::sendTouchFrame() { if (s->resource->client() != m_state.touchFocusResource->client()) continue; - for (auto const& t : s->resource->touches) { + for (auto const& t : s->resource->m_touches) { if (!t) continue; @@ -446,7 +446,7 @@ void CSeatManager::sendTouchCancel() { if (s->resource->client() != m_state.touchFocusResource->client()) continue; - for (auto const& t : s->resource->touches) { + for (auto const& t : s->resource->m_touches) { if (!t) continue; @@ -463,7 +463,7 @@ void CSeatManager::sendTouchShape(int32_t id, const Vector2D& shape) { if (s->resource->client() != m_state.touchFocusResource->client()) continue; - for (auto const& t : s->resource->touches) { + for (auto const& t : s->resource->m_touches) { if (!t) continue; @@ -480,7 +480,7 @@ void CSeatManager::sendTouchOrientation(int32_t id, double angle) { if (s->resource->client() != m_state.touchFocusResource->client()) continue; - for (auto const& t : s->resource->touches) { + for (auto const& t : s->resource->m_touches) { if (!t) continue; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 1e62af64..c48ca908 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -289,8 +289,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // if we are holding a pointer button, // and we're not dnd-ing, don't refocus. Keep focus on last surface. - if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->m_state.pointerFocus && - !m_hardInput) { + if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->m_mapped && + g_pSeatManager->m_state.pointerFocus && !m_hardInput) { foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); // IME popups aren't desktop-like elements @@ -1490,7 +1490,7 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { } else { // otherwise fall back to a normal refocus. - if (foundSurface && !foundSurface->hlSurface->keyboardFocusable()) { + if (foundSurface && !foundSurface->m_hlSurface->keyboardFocusable()) { const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock(); g_pCompositor->focusWindow(PLASTWINDOW); } diff --git a/src/managers/input/InputMethodPopup.cpp b/src/managers/input/InputMethodPopup.cpp index c374f63c..ac526c7b 100644 --- a/src/managers/input/InputMethodPopup.cpp +++ b/src/managers/input/InputMethodPopup.cpp @@ -102,7 +102,7 @@ void CInputPopup::updateBox() { cursorBoxParent = {0, 0, (int)parentBox.w, (int)parentBox.h}; } - Vector2D currentPopupSize = m_surface->getViewporterCorrectedSize() / m_surface->resource()->current.scale; + Vector2D currentPopupSize = m_surface->getViewporterCorrectedSize() / m_surface->resource()->m_current.scale; PHLMONITOR pMonitor = g_pCompositor->getMonitorFromVector(parentBox.middle()); diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index 160d1c90..a629cd18 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -135,7 +135,7 @@ void CTextInput::setFocusedSurface(SP pSurface) { m_listeners.surfaceUnmap.reset(); m_listeners.surfaceDestroy.reset(); - m_listeners.surfaceUnmap = pSurface->events.unmap.registerListener([this](std::any d) { + m_listeners.surfaceUnmap = pSurface->m_events.unmap.registerListener([this](std::any d) { Debug::log(LOG, "Unmap TI owner1"); if (m_enterLocks) @@ -155,7 +155,7 @@ void CTextInput::setFocusedSurface(SP pSurface) { g_pInputManager->m_relay.deactivateIME(this); }); - m_listeners.surfaceDestroy = pSurface->events.destroy.registerListener([this](std::any d) { + m_listeners.surfaceDestroy = pSurface->m_events.destroy.registerListener([this](std::any d) { Debug::log(LOG, "Destroy TI owner1"); if (m_enterLocks) @@ -181,7 +181,7 @@ bool CTextInput::isV3() { } void CTextInput::enter(SP pSurface) { - if (!pSurface || !pSurface->mapped) + if (!pSurface || !pSurface->m_mapped) return; if (pSurface == focusedSurface()) diff --git a/src/protocols/AlphaModifier.cpp b/src/protocols/AlphaModifier.cpp index 3fea51fe..87c46765 100644 --- a/src/protocols/AlphaModifier.cpp +++ b/src/protocols/AlphaModifier.cpp @@ -30,7 +30,7 @@ void CAlphaModifier::setResource(SP resource) { m_fAlpha = alpha / (float)UINT32_MAX; }); - listeners.surfaceCommitted = m_pSurface->events.commit.registerListener([this](std::any data) { + listeners.surfaceCommitted = m_pSurface->m_events.commit.registerListener([this](std::any data) { auto surface = CWLSurface::fromResource(m_pSurface.lock()); if (surface && surface->m_alphaModifier != m_fAlpha) { @@ -45,7 +45,7 @@ void CAlphaModifier::setResource(SP resource) { } }); - listeners.surfaceDestroyed = m_pSurface->events.destroy.registerListener([this](std::any data) { + listeners.surfaceDestroyed = m_pSurface->m_events.destroy.registerListener([this](std::any data) { if (!m_pResource) PROTO::alphaModifier->destroyAlphaModifier(this); }); diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index a6fad119..c848fab8 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -25,7 +25,7 @@ CHyprlandCTMControlResource::CHyprlandCTMControlResource(SPmonitor.lock(); + const auto PMONITOR = OUTPUTRESOURCE->m_monitor.lock(); if UNLIKELY (!PMONITOR) return; // ?!?! diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 812ac4c6..5810b414 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -74,7 +74,7 @@ CColorManager::CColorManager(SP resource) : m_resource(resour return; } - const auto PMONITOR = OUTPUTRESOURCE->monitor.lock(); + const auto PMONITOR = OUTPUTRESOURCE->m_monitor.lock(); if UNLIKELY (!PMONITOR) { r->error(-1, "Invalid output (2)"); @@ -102,7 +102,7 @@ CColorManager::CColorManager(SP resource) : m_resource(resour return; } - if (SURF->colorManagement) { + if (SURF->m_colorManagement) { r->error(WP_COLOR_MANAGER_V1_ERROR_SURFACE_EXISTS, "CM Surface already exists"); return; } @@ -117,7 +117,7 @@ CColorManager::CColorManager(SP resource) : m_resource(resour RESOURCE->self = RESOURCE; - SURF->colorManagement = RESOURCE; + SURF->m_colorManagement = RESOURCE; }); m_resource->setGetSurfaceFeedback([](CWpColorManagerV1* r, uint32_t id, wl_resource* surface) { LOGM(TRACE, "Get feedback surface for id={}, surface={}", id, (uintptr_t)surface); diff --git a/src/protocols/ContentType.cpp b/src/protocols/ContentType.cpp index 0dd5481a..8ea212f1 100644 --- a/src/protocols/ContentType.cpp +++ b/src/protocols/ContentType.cpp @@ -19,7 +19,7 @@ CContentTypeManager::CContentTypeManager(SP resource) : return; } - if (SURF->colorManagement) { + if (SURF->m_colorManagement) { r->error(WP_CONTENT_TYPE_MANAGER_V1_ERROR_ALREADY_CONSTRUCTED, "CT manager already exists"); return; } @@ -33,7 +33,7 @@ CContentTypeManager::CContentTypeManager(SP resource) : RESOURCE->self = RESOURCE; - SURF->contentType = RESOURCE; + SURF->m_contentType = RESOURCE; }); } @@ -42,7 +42,7 @@ bool CContentTypeManager::good() { } CContentType::CContentType(WP surface) { - destroy = surface->events.destroy.registerListener([this](std::any d) { PROTO::contentType->destroyResource(this); }); + destroy = surface->m_events.destroy.registerListener([this](std::any d) { PROTO::contentType->destroyResource(this); }); } CContentType::CContentType(SP resource) : m_resource(resource) { @@ -80,8 +80,8 @@ void CContentTypeProtocol::bindManager(wl_client* client, void* data, uint32_t v } SP CContentTypeProtocol::getContentType(WP surface) { - if (surface->contentType.valid()) - return surface->contentType.lock(); + if (surface->m_contentType.valid()) + return surface->m_contentType.lock(); return m_vContentTypes.emplace_back(makeShared(surface)); } diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index 48a80dcc..2da2340a 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -74,38 +74,38 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UPtimeline, ((uint64_t)hi << 32) | (uint64_t)lo}; }); - listeners.surfacePrecommit = surface->events.precommit.registerListener([this](std::any d) { - if (!surface->pending.updated.buffer || !surface->pending.buffer) { + listeners.surfacePrecommit = surface->m_events.precommit.registerListener([this](std::any d) { + if (!surface->m_pending.updated.buffer || !surface->m_pending.buffer) { if (pendingAcquire.timeline() || pendingRelease.timeline()) { resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_BUFFER, "Missing buffer"); - surface->pending.rejected = true; + surface->m_pending.rejected = true; } return; } if (!pendingAcquire.timeline()) { resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline"); - surface->pending.rejected = true; + surface->m_pending.rejected = true; return; } if (!pendingRelease.timeline()) { resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline"); - surface->pending.rejected = true; + surface->m_pending.rejected = true; return; } if (pendingAcquire.timeline() == pendingRelease.timeline() && pendingAcquire.point() >= pendingRelease.point()) { resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_CONFLICTING_POINTS, "Acquire and release points are on the same timeline, and acquire >= release"); - surface->pending.rejected = true; + surface->m_pending.rejected = true; return; } - surface->pending.updated.acquire = true; - surface->pending.acquire = pendingAcquire; - pendingAcquire = {}; + surface->m_pending.updated.acquire = true; + surface->m_pending.acquire = pendingAcquire; + pendingAcquire = {}; - surface->pending.buffer->addReleasePoint(pendingRelease); + surface->m_pending.buffer->addReleasePoint(pendingRelease); pendingRelease = {}; }); } @@ -163,7 +163,7 @@ CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UPsyncobj) { + if UNLIKELY (SURF->m_syncobj) { resource->error(WP_LINUX_DRM_SYNCOBJ_MANAGER_V1_ERROR_SURFACE_EXISTS, "Surface already has a syncobj attached"); return; } @@ -176,7 +176,7 @@ CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UPsyncobj = RESOURCE; + SURF->m_syncobj = RESOURCE; LOGM(LOG, "New linux_syncobj at {:x} for surface {:x}", (uintptr_t)RESOURCE.get(), (uintptr_t)SURF.get()); }); diff --git a/src/protocols/FocusGrab.cpp b/src/protocols/FocusGrab.cpp index 9a3e1c51..9751666d 100644 --- a/src/protocols/FocusGrab.cpp +++ b/src/protocols/FocusGrab.cpp @@ -8,7 +8,7 @@ #include CFocusGrabSurfaceState::CFocusGrabSurfaceState(CFocusGrab* grab, SP surface) { - listeners.destroy = surface->events.destroy.registerListener([=](std::any d) { grab->eraseSurface(surface); }); + listeners.destroy = surface->m_events.destroy.registerListener([=](std::any d) { grab->eraseSurface(surface); }); } CFocusGrab::CFocusGrab(SP resource_) : resource(resource_) { diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index 2a2929e5..38ce60d2 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -41,7 +41,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPmonitor; + const auto wpMonitor = CWLOutputResource::fromResource(output)->m_monitor; if (!wpMonitor.expired()) { const auto monitor = wpMonitor.lock(); diff --git a/src/protocols/FractionalScale.cpp b/src/protocols/FractionalScale.cpp index 494de9c5..a9fbcb16 100644 --- a/src/protocols/FractionalScale.cpp +++ b/src/protocols/FractionalScale.cpp @@ -47,7 +47,7 @@ void CFractionalScaleProtocol::onGetFractionalScale(CWpFractionalScaleManagerV1* if (std::ranges::find_if(m_mSurfaceScales, [surface](const auto& e) { return e.first == surface; }) == m_mSurfaceScales.end()) m_mSurfaceScales.emplace(surface, 1.F); - if (surface->mapped) + if (surface->m_mapped) PADDON->setScale(m_mSurfaceScales.at(surface)); // clean old diff --git a/src/protocols/FrogColorManagement.cpp b/src/protocols/FrogColorManagement.cpp index 99bdb2bb..870b573f 100644 --- a/src/protocols/FrogColorManagement.cpp +++ b/src/protocols/FrogColorManagement.cpp @@ -61,7 +61,7 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPclient(); - if (!surface->colorManagement.valid()) { + if (!surface->m_colorManagement.valid()) { const auto RESOURCE = PROTO::colorManagement->m_vSurfaces.emplace_back(makeShared(surface_)); if UNLIKELY (!RESOURCE) { resource->noMemory(); @@ -71,12 +71,12 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPself = RESOURCE; - surface->colorManagement = RESOURCE; + surface->m_colorManagement = RESOURCE; resource->setOnDestroy([this](CFrogColorManagedSurface* r) { LOGM(TRACE, "Destroy frog cm and xx cm for surface {}", (uintptr_t)surface); if (surface.valid()) - PROTO::colorManagement->destroyResource(surface->colorManagement.get()); + PROTO::colorManagement->destroyResource(surface->m_colorManagement.get()); PROTO::frogColorManagement->destroyResource(this); }); } else @@ -94,7 +94,7 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPid()); switch (tf) { case FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ: - surface->colorManagement->m_imageDescription.transferFunction = + surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ)); break; ; @@ -102,7 +102,7 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPcolorManagement->m_imageDescription.transferFunction = + surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ)); break; }; @@ -110,40 +110,40 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPcolorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(tf)); + surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(tf)); - surface->colorManagement->setHasImageDescription(true); + surface->m_colorManagement->setHasImageDescription(true); } }); resource->setSetKnownContainerColorVolume([this](CFrogColorManagedSurface* r, frogColorManagedSurfacePrimaries primariesName) { LOGM(TRACE, "Set frog cm primaries {}", (uint32_t)primariesName); switch (primariesName) { case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_UNDEFINED: - case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC709: surface->colorManagement->m_imageDescription.primaries = NColorPrimaries::BT709; break; - case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC2020: surface->colorManagement->m_imageDescription.primaries = NColorPrimaries::BT2020; break; + case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC709: surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT709; break; + case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC2020: surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT2020; break; } - surface->colorManagement->m_imageDescription.primariesNamed = convertPrimaries(getWPPrimaries(primariesName)); + surface->m_colorManagement->m_imageDescription.primariesNamed = convertPrimaries(getWPPrimaries(primariesName)); - surface->colorManagement->setHasImageDescription(true); + surface->m_colorManagement->setHasImageDescription(true); }); resource->setSetRenderIntent([this](CFrogColorManagedSurface* r, frogColorManagedSurfaceRenderIntent intent) { LOGM(TRACE, "Set frog cm intent {}", (uint32_t)intent); pqIntentSent = intent == FROG_COLOR_MANAGED_SURFACE_RENDER_INTENT_PERCEPTUAL; - surface->colorManagement->setHasImageDescription(true); + surface->m_colorManagement->setHasImageDescription(true); }); resource->setSetHdrMetadata([this](CFrogColorManagedSurface* r, uint32_t r_x, uint32_t r_y, uint32_t g_x, uint32_t g_y, uint32_t b_x, uint32_t b_y, uint32_t w_x, uint32_t w_y, uint32_t max_lum, uint32_t min_lum, uint32_t cll, uint32_t fall) { LOGM(TRACE, "Set frog primaries r:{},{} g:{},{} b:{},{} w:{},{} luminances {} - {} cll {} fall {}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y, min_lum, max_lum, cll, fall); - surface->colorManagement->m_imageDescription.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 50000.0f, .y = r_y / 50000.0f}, - .green = {.x = g_x / 50000.0f, .y = g_y / 50000.0f}, - .blue = {.x = b_x / 50000.0f, .y = b_y / 50000.0f}, - .white = {.x = w_x / 50000.0f, .y = w_y / 50000.0f}}; - surface->colorManagement->m_imageDescription.masteringLuminances.min = min_lum / 10000.0f; - surface->colorManagement->m_imageDescription.masteringLuminances.max = max_lum; - surface->colorManagement->m_imageDescription.maxCLL = cll; - surface->colorManagement->m_imageDescription.maxFALL = fall; + surface->m_colorManagement->m_imageDescription.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 50000.0f, .y = r_y / 50000.0f}, + .green = {.x = g_x / 50000.0f, .y = g_y / 50000.0f}, + .blue = {.x = b_x / 50000.0f, .y = b_y / 50000.0f}, + .white = {.x = w_x / 50000.0f, .y = w_y / 50000.0f}}; + surface->m_colorManagement->m_imageDescription.masteringLuminances.min = min_lum / 10000.0f; + surface->m_colorManagement->m_imageDescription.masteringLuminances.max = max_lum; + surface->m_colorManagement->m_imageDescription.maxCLL = cll; + surface->m_colorManagement->m_imageDescription.maxFALL = fall; - surface->colorManagement->setHasImageDescription(true); + surface->m_colorManagement->setHasImageDescription(true); }); } diff --git a/src/protocols/GammaControl.cpp b/src/protocols/GammaControl.cpp index 322f0e56..1309ffc5 100644 --- a/src/protocols/GammaControl.cpp +++ b/src/protocols/GammaControl.cpp @@ -18,7 +18,7 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out return; } - pMonitor = OUTPUTRES->monitor; + pMonitor = OUTPUTRES->m_monitor; if UNLIKELY (!pMonitor || !pMonitor->m_output) { LOGM(ERR, "No CMonitor"); diff --git a/src/protocols/HyprlandSurface.cpp b/src/protocols/HyprlandSurface.cpp index cdf6d722..13d5a49a 100644 --- a/src/protocols/HyprlandSurface.cpp +++ b/src/protocols/HyprlandSurface.cpp @@ -48,10 +48,10 @@ void CHyprlandSurface::setResource(SP resource) { } m_bVisibleRegionChanged = true; - m_visibleRegion = CWLRegionResource::fromResource(region)->region; + m_visibleRegion = CWLRegionResource::fromResource(region)->m_region; }); - listeners.surfaceCommitted = m_pSurface->events.commit.registerListener([this](std::any data) { + listeners.surfaceCommitted = m_pSurface->m_events.commit.registerListener([this](std::any data) { auto surface = CWLSurface::fromResource(m_pSurface.lock()); if (surface && (surface->m_overallOpacity != m_fOpacity || m_bVisibleRegionChanged)) { @@ -67,7 +67,7 @@ void CHyprlandSurface::setResource(SP resource) { } }); - listeners.surfaceDestroyed = m_pSurface->events.destroy.registerListener([this](std::any data) { + listeners.surfaceDestroyed = m_pSurface->m_events.destroy.registerListener([this](std::any data) { if (!m_pResource) PROTO::hyprlandSurface->destroySurface(this); }); diff --git a/src/protocols/IdleInhibit.cpp b/src/protocols/IdleInhibit.cpp index a015cdd0..b8ba01e2 100644 --- a/src/protocols/IdleInhibit.cpp +++ b/src/protocols/IdleInhibit.cpp @@ -6,7 +6,7 @@ CIdleInhibitor::CIdleInhibitor(SP resource_, SP resource_, SP surface_) : resource(resource_), surface(surface_) { - listeners.destroySurface = surface->events.destroy.registerListener([this](std::any d) { + listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { surface.reset(); listeners.destroySurface.reset(); destroySent = true; diff --git a/src/protocols/InputMethodV2.cpp b/src/protocols/InputMethodV2.cpp index 05cf90e1..ae575250 100644 --- a/src/protocols/InputMethodV2.cpp +++ b/src/protocols/InputMethodV2.cpp @@ -88,7 +88,7 @@ CInputMethodPopupV2::CInputMethodPopupV2(SP resource_, pSurface = surface; - listeners.destroySurface = surface->events.destroy.registerListener([this](std::any d) { + listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { if (mapped) events.unmap.emit(); @@ -101,15 +101,15 @@ CInputMethodPopupV2::CInputMethodPopupV2(SP resource_, pSurface.reset(); }); - listeners.commitSurface = surface->events.commit.registerListener([this](std::any d) { - if (pSurface->current.texture && !mapped) { + listeners.commitSurface = surface->m_events.commit.registerListener([this](std::any d) { + if (pSurface->m_current.texture && !mapped) { mapped = true; pSurface->map(); events.map.emit(); return; } - if (!pSurface->current.texture && mapped) { + if (!pSurface->m_current.texture && mapped) { mapped = false; pSurface->unmap(); events.unmap.emit(); diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index 7f5d366a..bc4112fa 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -33,18 +33,18 @@ CLayerShellResource::CLayerShellResource(SP resource_, SPdestroyResource(this); }); - listeners.destroySurface = surf_->events.destroy.registerListener([this](std::any d) { + listeners.destroySurface = surf_->m_events.destroy.registerListener([this](std::any d) { events.destroy.emit(); PROTO::layerShell->destroyResource(this); }); - listeners.unmapSurface = surf_->events.unmap.registerListener([this](std::any d) { events.unmap.emit(); }); + listeners.unmapSurface = surf_->m_events.unmap.registerListener([this](std::any d) { events.unmap.emit(); }); - listeners.commitSurface = surf_->events.commit.registerListener([this](std::any d) { + listeners.commitSurface = surf_->m_events.commit.registerListener([this](std::any d) { current = pending; pending.committed = 0; - bool attachedBuffer = surface->current.texture; + bool attachedBuffer = surface->m_current.texture; if (attachedBuffer && !configured) { surface->error(-1, "layerSurface was not configured, but a buffer was attached"); @@ -220,7 +220,7 @@ void CLayerShellProtocol::destroyResource(CLayerShellResource* surf) { void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* output, zwlrLayerShellV1Layer layer, std::string namespace_) { const auto CLIENT = pMgr->client(); - const auto PMONITOR = output ? CWLOutputResource::fromResource(output)->monitor.lock() : nullptr; + const auto PMONITOR = output ? CWLOutputResource::fromResource(output)->m_monitor.lock() : nullptr; auto SURF = CWLSurfaceResource::fromResource(surface); if UNLIKELY (!SURF) { @@ -228,7 +228,7 @@ void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id return; } - if UNLIKELY (SURF->role->role() != SURFACE_ROLE_UNASSIGNED) { + if UNLIKELY (SURF->m_role->role() != SURFACE_ROLE_UNASSIGNED) { pMgr->error(-1, "Surface already has a different role"); return; } @@ -246,7 +246,7 @@ void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id return; } - SURF->role = makeShared(RESOURCE); + SURF->m_role = makeShared(RESOURCE); g_pCompositor->m_layers.emplace_back(CLayerSurface::create(RESOURCE)); LOGM(LOG, "New wlr_layer_surface {:x}", (uintptr_t)RESOURCE.get()); diff --git a/src/protocols/OutputPower.cpp b/src/protocols/OutputPower.cpp index 55ea0376..37f932bb 100644 --- a/src/protocols/OutputPower.cpp +++ b/src/protocols/OutputPower.cpp @@ -68,7 +68,7 @@ void COutputPowerProtocol::onGetOutputPower(CZwlrOutputPowerManagerV1* pMgr, uin } const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vOutputPowers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), OUTPUT->monitor.lock())).get(); + const auto RESOURCE = m_vOutputPowers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), OUTPUT->m_monitor.lock())).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index c97759d8..38df694c 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -22,7 +22,7 @@ CPointerConstraint::CPointerConstraint(SP resource_, SPregion); + region.set(CWLRegionResource::fromResource(region_)->m_region); resource_->setSetRegion([this](CZwpLockedPointerV1* p, wl_resource* region) { onSetRegion(region); }); resource_->setSetCursorPositionHint([this](CZwpLockedPointerV1* p, wl_fixed_t x, wl_fixed_t y) { @@ -61,7 +61,7 @@ CPointerConstraint::CPointerConstraint(SP resource_, SPregion); + region.set(CWLRegionResource::fromResource(region_)->m_region); resource_->setSetRegion([this](CZwpConfinedPointerV1* p, wl_resource* region) { onSetRegion(region); }); @@ -151,7 +151,7 @@ void CPointerConstraint::onSetRegion(wl_resource* wlRegion) { return; } - const auto REGION = region.set(CWLRegionResource::fromResource(wlRegion)->region); + const auto REGION = region.set(CWLRegionResource::fromResource(wlRegion)->m_region); region.set(REGION); positionHint = region.closestPoint(positionHint); diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 28523fde..4539a463 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -22,7 +22,7 @@ CScreencopyFrame::CScreencopyFrame(SP resource_, int32_t return; overlayCursor = !!overlay_cursor; - pMonitor = CWLOutputResource::fromResource(output)->monitor; + pMonitor = CWLOutputResource::fromResource(output)->m_monitor; if (!pMonitor) { LOGM(ERR, "Client requested sharing of a monitor that doesnt exist"); diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index 40c73a7b..0eccb543 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -23,8 +23,8 @@ CSessionLockSurface::CSessionLockSurface(SP resource_, resource->setAckConfigure([this](CExtSessionLockSurfaceV1* r, uint32_t serial) { ackdConfigure = true; }); - listeners.surfaceCommit = pSurface->events.commit.registerListener([this](std::any d) { - if (!pSurface->current.texture) { + listeners.surfaceCommit = pSurface->m_events.commit.registerListener([this](std::any d) { + if (!pSurface->m_current.texture) { LOGM(ERR, "SessionLock attached a null buffer"); resource->error(EXT_SESSION_LOCK_SURFACE_V1_ERROR_NULL_BUFFER, "Null buffer attached"); return; @@ -45,7 +45,7 @@ CSessionLockSurface::CSessionLockSurface(SP resource_, committed = true; }); - listeners.surfaceDestroy = pSurface->events.destroy.registerListener([this](std::any d) { + listeners.surfaceDestroy = pSurface->m_events.destroy.registerListener([this](std::any d) { LOGM(WARN, "SessionLockSurface object remains but surface is being destroyed???"); pSurface->unmap(); listeners.surfaceCommit.reset(); @@ -64,7 +64,7 @@ CSessionLockSurface::CSessionLockSurface(SP resource_, } CSessionLockSurface::~CSessionLockSurface() { - if (pSurface && pSurface->mapped) + if (pSurface && pSurface->m_mapped) pSurface->unmap(); listeners.surfaceCommit.reset(); listeners.surfaceDestroy.reset(); @@ -189,7 +189,7 @@ void CSessionLockProtocol::onGetLockSurface(CExtSessionLockV1* lock, uint32_t id LOGM(LOG, "New sessionLockSurface with id {}", id); auto PSURFACE = CWLSurfaceResource::fromResource(surface); - auto PMONITOR = CWLOutputResource::fromResource(output)->monitor.lock(); + auto PMONITOR = CWLOutputResource::fromResource(output)->m_monitor.lock(); SP sessionLock; for (auto const& l : m_vLocks) { diff --git a/src/protocols/Viewporter.cpp b/src/protocols/Viewporter.cpp index 674b8373..0b82603f 100644 --- a/src/protocols/Viewporter.cpp +++ b/src/protocols/Viewporter.cpp @@ -15,10 +15,10 @@ CViewportResource::CViewportResource(SP resource_, SPpending.updated.viewport = true; + surface->m_pending.updated.viewport = true; if (x == -1 && y == -1) { - surface->pending.viewport.hasDestination = false; + surface->m_pending.viewport.hasDestination = false; return; } @@ -27,8 +27,8 @@ CViewportResource::CViewportResource(SP resource_, SPpending.viewport.hasDestination = true; - surface->pending.viewport.destination = {x, y}; + surface->m_pending.viewport.hasDestination = true; + surface->m_pending.viewport.destination = {x, y}; }); resource->setSetSource([this](CWpViewport* r, wl_fixed_t fx, wl_fixed_t fy, wl_fixed_t fw, wl_fixed_t fh) { @@ -37,12 +37,12 @@ CViewportResource::CViewportResource(SP resource_, SPpending.updated.viewport = true; + surface->m_pending.updated.viewport = true; double x = wl_fixed_to_double(fx), y = wl_fixed_to_double(fy), w = wl_fixed_to_double(fw), h = wl_fixed_to_double(fh); if (x == -1 && y == -1 && w == -1 && h == -1) { - surface->pending.viewport.hasSource = false; + surface->m_pending.viewport.hasSource = false; return; } @@ -51,20 +51,20 @@ CViewportResource::CViewportResource(SP resource_, SPpending.viewport.hasSource = true; - surface->pending.viewport.source = {x, y, w, h}; + surface->m_pending.viewport.hasSource = true; + surface->m_pending.viewport.source = {x, y, w, h}; }); - listeners.surfacePrecommit = surface->events.precommit.registerListener([this](std::any d) { - if (!surface || !surface->pending.buffer) + listeners.surfacePrecommit = surface->m_events.precommit.registerListener([this](std::any d) { + if (!surface || !surface->m_pending.buffer) return; - if (surface->pending.viewport.hasSource) { - auto& src = surface->pending.viewport.source; + if (surface->m_pending.viewport.hasSource) { + auto& src = surface->m_pending.viewport.source; - if (src.w + src.x > surface->pending.bufferSize.x || src.h + src.y > surface->pending.bufferSize.y) { + if (src.w + src.x > surface->m_pending.bufferSize.x || src.h + src.y > surface->m_pending.bufferSize.y) { resource->error(WP_VIEWPORT_ERROR_BAD_VALUE, "Box doesn't fit"); - surface->pending.rejected = true; + surface->m_pending.rejected = true; return; } } @@ -75,8 +75,8 @@ CViewportResource::~CViewportResource() { if (!surface) return; - surface->pending.viewport.hasDestination = false; - surface->pending.viewport.hasSource = false; + surface->m_pending.viewport.hasDestination = false; + surface->m_pending.viewport.hasSource = false; } bool CViewportResource::good() { diff --git a/src/protocols/VirtualPointer.cpp b/src/protocols/VirtualPointer.cpp index 8dc4bab6..ce64e1e5 100644 --- a/src/protocols/VirtualPointer.cpp +++ b/src/protocols/VirtualPointer.cpp @@ -121,7 +121,7 @@ void CVirtualPointerProtocol::bindManager(wl_client* client, void* data, uint32_ return; } - this->onCreatePointer(pMgr, seat, id, RES->monitor); + this->onCreatePointer(pMgr, seat, id, RES->m_monitor); } else this->onCreatePointer(pMgr, seat, id, {}); }); diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index 81c71447..92aaefc9 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -42,7 +42,7 @@ CXDGOutputProtocol::CXDGOutputProtocol(const wl_interface* iface, const int& ver void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32_t id, wl_resource* outputResource) { const auto OUTPUT = CWLOutputResource::fromResource(outputResource); - const auto PMONITOR = OUTPUT->monitor.lock(); + const auto PMONITOR = OUTPUT->m_monitor.lock(); const auto CLIENT = mgr->client(); CXDGOutput* pXDGOutput = m_vXDGOutputs.emplace_back(makeUnique(makeShared(CLIENT, mgr->version(), id), PMONITOR)).get(); @@ -52,7 +52,7 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32 #endif pXDGOutput->client = CLIENT; - pXDGOutput->outputProto = OUTPUT->owner; + pXDGOutput->outputProto = OUTPUT->m_owner; if UNLIKELY (!pXDGOutput->resource->resource()) { m_vXDGOutputs.pop_back(); diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index a82ba17e..6f58ef64 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -195,7 +195,7 @@ CXDGToplevelResource::CXDGToplevelResource(SP resource_, SPsetSetFullscreen([this](CXdgToplevel* r, wl_resource* output) { if (output) - if (const auto PM = CWLOutputResource::fromResource(output)->monitor; PM) + if (const auto PM = CWLOutputResource::fromResource(output)->m_monitor; PM) state.requestsFullscreenMonitor = PM->m_id; state.requestsFullscreen = true; @@ -372,7 +372,7 @@ CXDGSurfaceResource::CXDGSurfaceResource(SP resource_, SPdestroyResource(this); }); - listeners.surfaceDestroy = surface->events.destroy.registerListener([this](std::any d) { + listeners.surfaceDestroy = surface->m_events.destroy.registerListener([this](std::any d) { LOGM(WARN, "wl_surface destroyed before its xdg_surface role object"); listeners.surfaceDestroy.reset(); listeners.surfaceCommit.reset(); @@ -385,17 +385,17 @@ CXDGSurfaceResource::CXDGSurfaceResource(SP resource_, SPevents.commit.registerListener([this](std::any d) { + listeners.surfaceCommit = surface->m_events.commit.registerListener([this](std::any d) { current = pending; if (toplevel) toplevel->current = toplevel->pending; - if UNLIKELY (initialCommit && surface->pending.buffer) { + if UNLIKELY (initialCommit && surface->m_pending.buffer) { resource->error(-1, "Buffer attached before initial commit"); return; } - if (surface->current.texture && !mapped) { + if (surface->m_current.texture && !mapped) { // this forces apps to not draw CSD. if (toplevel) toplevel->setMaximized(true); @@ -406,7 +406,7 @@ CXDGSurfaceResource::CXDGSurfaceResource(SP resource_, SPcurrent.texture && mapped) { + if (!surface->m_current.texture && mapped) { mapped = false; events.unmap.emit(); surface->unmap(); @@ -723,7 +723,7 @@ CXDGWMBase::CXDGWMBase(SP resource_) : resource(resource_) { return; } - if UNLIKELY (SURF->role->role() != SURFACE_ROLE_UNASSIGNED) { + if UNLIKELY (SURF->m_role->role() != SURFACE_ROLE_UNASSIGNED) { r->error(-1, "Surface already has a different role"); return; } @@ -738,7 +738,7 @@ CXDGWMBase::CXDGWMBase(SP resource_) : resource(resource_) { RESOURCE->self = RESOURCE; RESOURCE->surface = SURF; - SURF->role = makeShared(RESOURCE); + SURF->m_role = makeShared(RESOURCE); surfaces.emplace_back(RESOURCE); diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index 8231ec22..182c2a6d 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -88,7 +88,7 @@ CXXColorManager::CXXColorManager(SP resource_) : resource(res return; } - if (SURF->colorManagement) { + if (SURF->m_colorManagement) { r->error(XX_COLOR_MANAGER_V4_ERROR_SURFACE_EXISTS, "CM Surface already exists"); return; } @@ -195,7 +195,7 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPclient(); - if (!surface->colorManagement.valid()) { + if (!surface->m_colorManagement.valid()) { const auto RESOURCE = PROTO::colorManagement->m_vSurfaces.emplace_back(makeShared(surface_)); if UNLIKELY (!RESOURCE) { resource->noMemory(); @@ -205,12 +205,12 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPself = RESOURCE; - surface->colorManagement = RESOURCE; + surface->m_colorManagement = RESOURCE; resource->setOnDestroy([this](CXxColorManagementSurfaceV4* r) { LOGM(TRACE, "Destroy wp cm and xx cm for surface {}", (uintptr_t)surface); if (surface.valid()) - PROTO::colorManagement->destroyResource(surface->colorManagement.get()); + PROTO::colorManagement->destroyResource(surface->m_colorManagement.get()); PROTO::xxColorManagement->destroyResource(this); }); } else @@ -245,16 +245,16 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPcolorManagement->m_imageDescription = imageDescription->get()->settings; - surface->colorManagement->setHasImageDescription(true); + surface->m_colorManagement->m_imageDescription = imageDescription->get()->settings; + surface->m_colorManagement->setHasImageDescription(true); } else LOGM(ERR, "Set image description for invalid surface"); }); resource->setUnsetImageDescription([this](CXxColorManagementSurfaceV4* r) { LOGM(TRACE, "Unset image description for surface={}", (uintptr_t)r); if (surface.valid()) { - surface->colorManagement->m_imageDescription = SImageDescription{}; - surface->colorManagement->setHasImageDescription(false); + surface->m_colorManagement->m_imageDescription = SImageDescription{}; + surface->m_colorManagement->setHasImageDescription(false); } else LOGM(ERR, "Unset image description for invalid surface"); }); diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index b58ece97..df1916ef 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -24,129 +24,129 @@ class CDefaultSurfaceRole : public ISurfaceRole { } }; -CWLCallbackResource::CWLCallbackResource(SP resource_) : resource(resource_) { +CWLCallbackResource::CWLCallbackResource(SP resource_) : m_resource(resource_) { ; } bool CWLCallbackResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLCallbackResource::send(const Time::steady_tp& now) { - resource->sendDone(Time::millis(now)); + m_resource->sendDone(Time::millis(now)); } -CWLRegionResource::CWLRegionResource(SP resource_) : resource(resource_) { +CWLRegionResource::CWLRegionResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CWlRegion* r) { PROTO::compositor->destroyResource(this); }); - resource->setOnDestroy([this](CWlRegion* r) { PROTO::compositor->destroyResource(this); }); + m_resource->setDestroy([this](CWlRegion* r) { PROTO::compositor->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlRegion* r) { PROTO::compositor->destroyResource(this); }); - resource->setAdd([this](CWlRegion* r, int32_t x, int32_t y, int32_t w, int32_t h) { region.add(CBox{x, y, w, h}); }); - resource->setSubtract([this](CWlRegion* r, int32_t x, int32_t y, int32_t w, int32_t h) { region.subtract(CBox{x, y, w, h}); }); + m_resource->setAdd([this](CWlRegion* r, int32_t x, int32_t y, int32_t w, int32_t h) { m_region.add(CBox{x, y, w, h}); }); + m_resource->setSubtract([this](CWlRegion* r, int32_t x, int32_t y, int32_t w, int32_t h) { m_region.subtract(CBox{x, y, w, h}); }); } bool CWLRegionResource::good() { - return resource->resource(); + return m_resource->resource(); } SP CWLRegionResource::fromResource(wl_resource* res) { auto data = (CWLRegionResource*)(((CWlRegion*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } -CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(resource_) { +CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setData(this); + m_resource->setData(this); - role = makeShared(); + m_role = makeShared(); - resource->setDestroy([this](CWlSurface* r) { destroy(); }); - resource->setOnDestroy([this](CWlSurface* r) { destroy(); }); + m_resource->setDestroy([this](CWlSurface* r) { destroy(); }); + m_resource->setOnDestroy([this](CWlSurface* r) { destroy(); }); - resource->setAttach([this](CWlSurface* r, wl_resource* buffer, int32_t x, int32_t y) { - pending.updated.buffer = true; - pending.updated.offset = true; + m_resource->setAttach([this](CWlSurface* r, wl_resource* buffer, int32_t x, int32_t y) { + m_pending.updated.buffer = true; + m_pending.updated.offset = true; - pending.offset = {x, y}; + m_pending.offset = {x, y}; - if (pending.buffer) - pending.buffer.drop(); + if (m_pending.buffer) + m_pending.buffer.drop(); auto buf = buffer ? CWLBufferResource::fromResource(buffer) : nullptr; if (buf && buf->buffer) { - pending.buffer = CHLBufferReference(buf->buffer.lock()); - pending.texture = buf->buffer->texture; - pending.size = buf->buffer->size; - pending.bufferSize = buf->buffer->size; + m_pending.buffer = CHLBufferReference(buf->buffer.lock()); + m_pending.texture = buf->buffer->texture; + m_pending.size = buf->buffer->size; + m_pending.bufferSize = buf->buffer->size; } else { - pending.buffer = {}; - pending.texture.reset(); - pending.size = Vector2D{}; - pending.bufferSize = Vector2D{}; + m_pending.buffer = {}; + m_pending.texture.reset(); + m_pending.size = Vector2D{}; + m_pending.bufferSize = Vector2D{}; } - if (pending.bufferSize != current.bufferSize) { - pending.updated.damage = true; - pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + if (m_pending.bufferSize != m_current.bufferSize) { + m_pending.updated.damage = true; + m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; } }); - resource->setCommit([this](CWlSurface* r) { - if (pending.buffer) - pending.bufferDamage.intersect(CBox{{}, pending.bufferSize}); + m_resource->setCommit([this](CWlSurface* r) { + if (m_pending.buffer) + m_pending.bufferDamage.intersect(CBox{{}, m_pending.bufferSize}); - if (!pending.buffer) - pending.size = {}; - else if (pending.viewport.hasDestination) - pending.size = pending.viewport.destination; - else if (pending.viewport.hasSource) - pending.size = pending.viewport.source.size(); + if (!m_pending.buffer) + m_pending.size = {}; + else if (m_pending.viewport.hasDestination) + m_pending.size = m_pending.viewport.destination; + else if (m_pending.viewport.hasSource) + m_pending.size = m_pending.viewport.source.size(); else { - Vector2D tfs = pending.transform % 2 == 1 ? Vector2D{pending.bufferSize.y, pending.bufferSize.x} : pending.bufferSize; - pending.size = tfs / pending.scale; + Vector2D tfs = m_pending.transform % 2 == 1 ? Vector2D{m_pending.bufferSize.y, m_pending.bufferSize.x} : m_pending.bufferSize; + m_pending.size = tfs / m_pending.scale; } - pending.damage.intersect(CBox{{}, pending.size}); + m_pending.damage.intersect(CBox{{}, m_pending.size}); - events.precommit.emit(); - if (pending.rejected) { - pending.rejected = false; + m_events.precommit.emit(); + if (m_pending.rejected) { + m_pending.rejected = false; dropPendingBuffer(); return; } - if ((!pending.updated.buffer) || // no new buffer attached - (!pending.buffer && !pending.texture) // null buffer attached + if ((!m_pending.updated.buffer) || // no new buffer attached + (!m_pending.buffer && !m_pending.texture) // null buffer attached ) { - commitState(pending); - pending.reset(); + commitState(m_pending); + m_pending.reset(); return; } // save state while we wait for buffer to become ready to read - const auto& state = pendingStates.emplace(makeUnique(pending)); - pending.reset(); + const auto& state = m_pendingStates.emplace(makeUnique(m_pending)); + m_pending.reset(); - auto whenReadable = [this, surf = self, state = WP(pendingStates.back())] { + auto whenReadable = [this, surf = m_self, state = WP(m_pendingStates.back())] { if (!surf || state.expired()) return; - while (!pendingStates.empty() && pendingStates.front() != state) { - commitState(*pendingStates.front()); - pendingStates.pop(); + while (!m_pendingStates.empty() && m_pendingStates.front() != state) { + commitState(*m_pendingStates.front()); + m_pendingStates.pop(); } - commitState(*pendingStates.front()); - pendingStates.pop(); + commitState(*m_pendingStates.front()); + m_pendingStates.pop(); }; if (state->updated.acquire) { @@ -169,106 +169,106 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : resource(reso } }); - resource->setDamage([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { - pending.updated.damage = true; - pending.damage.add(CBox{x, y, w, h}); + m_resource->setDamage([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { + m_pending.updated.damage = true; + m_pending.damage.add(CBox{x, y, w, h}); }); - resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { - pending.updated.damage = true; - pending.bufferDamage.add(CBox{x, y, w, h}); + m_resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { + m_pending.updated.damage = true; + m_pending.bufferDamage.add(CBox{x, y, w, h}); }); - resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { - if (scale == pending.scale) + m_resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { + if (scale == m_pending.scale) return; - pending.updated.scale = true; - pending.updated.damage = true; + m_pending.updated.scale = true; + m_pending.updated.damage = true; - pending.scale = scale; - pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.scale = scale; + m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); - resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { - if (tr == pending.transform) + m_resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { + if (tr == m_pending.transform) return; - pending.updated.transform = true; - pending.updated.damage = true; + m_pending.updated.transform = true; + m_pending.updated.damage = true; - pending.transform = (wl_output_transform)tr; - pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.transform = (wl_output_transform)tr; + m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; }); - resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { - pending.updated.input = true; + m_resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { + m_pending.updated.input = true; if (!region) { - pending.input = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.input = CBox{{}, {INT32_MAX, INT32_MAX}}; return; } - auto RG = CWLRegionResource::fromResource(region); - pending.input = RG->region; + auto RG = CWLRegionResource::fromResource(region); + m_pending.input = RG->m_region; }); - resource->setSetOpaqueRegion([this](CWlSurface* r, wl_resource* region) { - pending.updated.opaque = true; + m_resource->setSetOpaqueRegion([this](CWlSurface* r, wl_resource* region) { + m_pending.updated.opaque = true; if (!region) { - pending.opaque = CBox{{}, {}}; + m_pending.opaque = CBox{{}, {}}; return; } - auto RG = CWLRegionResource::fromResource(region); - pending.opaque = RG->region; + auto RG = CWLRegionResource::fromResource(region); + m_pending.opaque = RG->m_region; }); - resource->setFrame([this](CWlSurface* r, uint32_t id) { callbacks.emplace_back(makeShared(makeShared(pClient, 1, id))); }); + m_resource->setFrame([this](CWlSurface* r, uint32_t id) { m_callbacks.emplace_back(makeShared(makeShared(m_client, 1, id))); }); - resource->setOffset([this](CWlSurface* r, int32_t x, int32_t y) { - pending.updated.offset = true; - pending.offset = {x, y}; + m_resource->setOffset([this](CWlSurface* r, int32_t x, int32_t y) { + m_pending.updated.offset = true; + m_pending.offset = {x, y}; }); } CWLSurfaceResource::~CWLSurfaceResource() { - events.destroy.emit(); + m_events.destroy.emit(); } void CWLSurfaceResource::destroy() { - if (mapped) { - events.unmap.emit(); + if (m_mapped) { + m_events.unmap.emit(); unmap(); } - events.destroy.emit(); + m_events.destroy.emit(); releaseBuffers(false); PROTO::compositor->destroyResource(this); } void CWLSurfaceResource::dropPendingBuffer() { - pending.buffer = {}; + m_pending.buffer = {}; } void CWLSurfaceResource::dropCurrentBuffer() { - current.buffer = {}; + m_current.buffer = {}; } SP CWLSurfaceResource::fromResource(wl_resource* res) { auto data = (CWLSurfaceResource*)(((CWlSurface*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CWLSurfaceResource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CWLSurfaceResource::client() { - return pClient; + return m_client; } void CWLSurfaceResource::enter(PHLMONITOR monitor) { - if (std::find(enteredOutputs.begin(), enteredOutputs.end(), monitor) != enteredOutputs.end()) + if (std::find(m_enteredOutputs.begin(), m_enteredOutputs.end(), monitor) != m_enteredOutputs.end()) return; if UNLIKELY (!PROTO::outputs.contains(monitor->m_name)) { @@ -282,59 +282,59 @@ void CWLSurfaceResource::enter(PHLMONITOR monitor) { return; } - auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(pClient); + auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(m_client); if UNLIKELY (!output || !output->getResource() || !output->getResource()->resource()) { LOGM(ERR, "Cannot enter surface {:x} to {}, client hasn't bound the output", (uintptr_t)this, monitor->m_name); return; } - enteredOutputs.emplace_back(monitor); + m_enteredOutputs.emplace_back(monitor); - resource->sendEnter(output->getResource().get()); + m_resource->sendEnter(output->getResource().get()); } void CWLSurfaceResource::leave(PHLMONITOR monitor) { - if UNLIKELY (std::find(enteredOutputs.begin(), enteredOutputs.end(), monitor) == enteredOutputs.end()) + if UNLIKELY (std::find(m_enteredOutputs.begin(), m_enteredOutputs.end(), monitor) == m_enteredOutputs.end()) return; - auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(pClient); + auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(m_client); if UNLIKELY (!output) { LOGM(ERR, "Cannot leave surface {:x} from {}, client hasn't bound the output", (uintptr_t)this, monitor->m_name); return; } - std::erase(enteredOutputs, monitor); + std::erase(m_enteredOutputs, monitor); - resource->sendLeave(output->getResource().get()); + m_resource->sendLeave(output->getResource().get()); } void CWLSurfaceResource::sendPreferredTransform(wl_output_transform t) { - if (resource->version() < 6) + if (m_resource->version() < 6) return; - resource->sendPreferredBufferTransform(t); + m_resource->sendPreferredBufferTransform(t); } void CWLSurfaceResource::sendPreferredScale(int32_t scale) { - if (resource->version() < 6) + if (m_resource->version() < 6) return; - resource->sendPreferredBufferScale(scale); + m_resource->sendPreferredBufferScale(scale); } void CWLSurfaceResource::frame(const Time::steady_tp& now) { - if (callbacks.empty()) + if (m_callbacks.empty()) return; - for (auto const& c : callbacks) { + for (auto const& c : m_callbacks) { c->send(now); } - callbacks.clear(); + m_callbacks.clear(); } void CWLSurfaceResource::resetRole() { - role = makeShared(); + m_role = makeShared(); } void CWLSurfaceResource::bfHelper(std::vector> const& nodes, std::function, const Vector2D&, void*)> fn, void* data) { @@ -343,14 +343,14 @@ void CWLSurfaceResource::bfHelper(std::vector> const& nod // first, gather all nodes below for (auto const& n : nodes) { - std::erase_if(n->subsurfaces, [](const auto& e) { return e.expired(); }); + std::erase_if(n->m_subsurfaces, [](const auto& e) { return e.expired(); }); // subsurfaces is sorted lowest -> highest - for (auto const& c : n->subsurfaces) { - if (c->zIndex >= 0) + for (auto const& c : n->m_subsurfaces) { + if (c->m_zIndex >= 0) break; - if (c->surface.expired()) + if (c->m_surface.expired()) continue; - nodes2.push_back(c->surface.lock()); + nodes2.push_back(c->m_surface.lock()); } } @@ -361,8 +361,8 @@ void CWLSurfaceResource::bfHelper(std::vector> const& nod for (auto const& n : nodes) { Vector2D offset = {}; - if (n->role->role() == SURFACE_ROLE_SUBSURFACE) { - auto subsurface = ((CSubsurfaceRole*)n->role.get())->subsurface.lock(); + if (n->m_role->role() == SURFACE_ROLE_SUBSURFACE) { + auto subsurface = ((CSubsurfaceRole*)n->m_role.get())->m_subsurface.lock(); offset = subsurface->posRelativeToParent(); } @@ -370,12 +370,12 @@ void CWLSurfaceResource::bfHelper(std::vector> const& nod } for (auto const& n : nodes) { - for (auto const& c : n->subsurfaces) { - if (c->zIndex < 0) + for (auto const& c : n->m_subsurfaces) { + if (c->m_zIndex < 0) continue; - if (c->surface.expired()) + if (c->m_surface.expired()) continue; - nodes2.push_back(c->surface.lock()); + nodes2.push_back(c->m_surface.lock()); } } @@ -385,17 +385,17 @@ void CWLSurfaceResource::bfHelper(std::vector> const& nod void CWLSurfaceResource::breadthfirst(std::function, const Vector2D&, void*)> fn, void* data) { std::vector> surfs; - surfs.push_back(self.lock()); + surfs.push_back(m_self.lock()); bfHelper(surfs, fn, data); } SP CWLSurfaceResource::findFirstPreorderHelper(SP root, std::function)> fn) { if (fn(root)) return root; - for (auto const& sub : root->subsurfaces) { - if (sub.expired() || sub->surface.expired()) + for (auto const& sub : root->m_subsurfaces) { + if (sub.expired() || sub->m_surface.expired()) continue; - const auto found = findFirstPreorderHelper(sub->surface.lock(), fn); + const auto found = findFirstPreorderHelper(sub->m_surface.lock(), fn); if (found) return found; } @@ -403,7 +403,7 @@ SP CWLSurfaceResource::findFirstPreorderHelper(SP CWLSurfaceResource::findFirstPreorder(std::function)> fn) { - return findFirstPreorderHelper(self.lock(), fn); + return findFirstPreorderHelper(m_self.lock(), fn); } std::pair, Vector2D> CWLSurfaceResource::at(const Vector2D& localCoords, bool allowsInput) { @@ -412,11 +412,11 @@ std::pair, Vector2D> CWLSurfaceResource::at(const Vector2 for (auto const& [surf, pos] : surfs | std::views::reverse) { if (!allowsInput) { - const auto BOX = CBox{pos, surf->current.size}; + const auto BOX = CBox{pos, surf->m_current.size}; if (BOX.containsPoint(localCoords)) return {surf, localCoords - pos}; } else { - const auto REGION = surf->current.input.copy().intersect(CBox{{}, surf->current.size}).translate(pos); + const auto REGION = surf->m_current.input.copy().intersect(CBox{{}, surf->m_current.size}).translate(pos); if (REGION.containsPoint(localCoords)) return {surf, localCoords - pos}; } @@ -426,26 +426,26 @@ std::pair, Vector2D> CWLSurfaceResource::at(const Vector2 } uint32_t CWLSurfaceResource::id() { - return wl_resource_get_id(resource->resource()); + return wl_resource_get_id(m_resource->resource()); } void CWLSurfaceResource::map() { - if UNLIKELY (mapped) + if UNLIKELY (m_mapped) return; - mapped = true; + m_mapped = true; frame(Time::steadyNow()); - current.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; - pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_current.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; } void CWLSurfaceResource::unmap() { - if UNLIKELY (!mapped) + if UNLIKELY (!m_mapped) return; - mapped = false; + m_mapped = false; // release the buffers. // this is necessary for XWayland to function correctly, @@ -460,66 +460,66 @@ void CWLSurfaceResource::releaseBuffers(bool onlyCurrent) { } void CWLSurfaceResource::error(int code, const std::string& str) { - resource->error(code, str); + m_resource->error(code, str); } SP CWLSurfaceResource::getResource() { - return resource; + return m_resource; } CBox CWLSurfaceResource::extends() { - CRegion full = CBox{{}, current.size}; + CRegion full = CBox{{}, m_current.size}; breadthfirst( [](SP surf, const Vector2D& offset, void* d) { - if (surf->role->role() != SURFACE_ROLE_SUBSURFACE) + if (surf->m_role->role() != SURFACE_ROLE_SUBSURFACE) return; - ((CRegion*)d)->add(CBox{offset, surf->current.size}); + ((CRegion*)d)->add(CBox{offset, surf->m_current.size}); }, &full); return full.getExtents(); } void CWLSurfaceResource::commitState(SSurfaceState& state) { - auto lastTexture = current.texture; - current.updateFrom(state); + auto lastTexture = m_current.texture; + m_current.updateFrom(state); - if (current.buffer) { - if (current.buffer->isSynchronous()) - current.updateSynchronousTexture(lastTexture); + if (m_current.buffer) { + if (m_current.buffer->isSynchronous()) + m_current.updateSynchronousTexture(lastTexture); // if the surface is a cursor, update the shm buffer // TODO: don't update the entire texture - if (role->role() == SURFACE_ROLE_CURSOR) - updateCursorShm(current.accumulateBufferDamage()); + if (m_role->role() == SURFACE_ROLE_CURSOR) + updateCursorShm(m_current.accumulateBufferDamage()); } - if (current.texture) - current.texture->m_eTransform = wlTransformToHyprutils(current.transform); + if (m_current.texture) + m_current.texture->m_eTransform = wlTransformToHyprutils(m_current.transform); - if (role->role() == SURFACE_ROLE_SUBSURFACE) { - auto subsurface = ((CSubsurfaceRole*)role.get())->subsurface.lock(); - if (subsurface->sync) + if (m_role->role() == SURFACE_ROLE_SUBSURFACE) { + auto subsurface = ((CSubsurfaceRole*)m_role.get())->m_subsurface.lock(); + if (subsurface->m_sync) return; - events.commit.emit(); + m_events.commit.emit(); } else { // send commit to all synced surfaces in this tree. breadthfirst( [](SP surf, const Vector2D& offset, void* data) { - if (surf->role->role() == SURFACE_ROLE_SUBSURFACE) { - auto subsurface = ((CSubsurfaceRole*)surf->role.get())->subsurface.lock(); - if (!subsurface->sync) + if (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE) { + auto subsurface = ((CSubsurfaceRole*)surf->m_role.get())->m_subsurface.lock(); + if (!subsurface->m_sync) return; } - surf->events.commit.emit(); + surf->m_events.commit.emit(); }, nullptr); } // release the buffer if it's synchronous (SHM) as updateSynchronousTexture() has copied the buffer data to a GPU tex // if it doesn't have a role, we can't release it yet, in case it gets turned into a cursor. - if (current.buffer && current.buffer->isSynchronous() && role->role() != SURFACE_ROLE_UNASSIGNED) + if (m_current.buffer && m_current.buffer->isSynchronous() && m_role->role() != SURFACE_ROLE_UNASSIGNED) dropCurrentBuffer(); } @@ -527,12 +527,12 @@ void CWLSurfaceResource::updateCursorShm(CRegion damage) { if (damage.empty()) return; - auto buf = current.buffer ? current.buffer : SP{}; + auto buf = m_current.buffer ? m_current.buffer : SP{}; if UNLIKELY (!buf) return; - auto& shmData = CCursorSurfaceRole::cursorPixelData(self.lock()); + auto& shmData = CCursorSurfaceRole::cursorPixelData(m_self.lock()); auto shmAttrs = buf->shm(); if (!shmAttrs.success) { @@ -563,7 +563,7 @@ void CWLSurfaceResource::updateCursorShm(CRegion damage) { void CWLSurfaceResource::presentFeedback(const Time::steady_tp& when, PHLMONITOR pMonitor, bool discarded) { frame(when); - auto FEEDBACK = makeShared(self.lock()); + auto FEEDBACK = makeShared(m_self.lock()); FEEDBACK->attachMonitor(pMonitor); if (discarded) FEEDBACK->discarded(); @@ -572,45 +572,45 @@ void CWLSurfaceResource::presentFeedback(const Time::steady_tp& when, PHLMONITOR PROTO::presentation->queueData(FEEDBACK); } -CWLCompositorResource::CWLCompositorResource(SP resource_) : resource(resource_) { +CWLCompositorResource::CWLCompositorResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlCompositor* r) { PROTO::compositor->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlCompositor* r) { PROTO::compositor->destroyResource(this); }); - resource->setCreateSurface([](CWlCompositor* r, uint32_t id) { - const auto RESOURCE = PROTO::compositor->m_vSurfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + m_resource->setCreateSurface([](CWlCompositor* r, uint32_t id) { + const auto RESOURCE = PROTO::compositor->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::compositor->m_vSurfaces.pop_back(); + PROTO::compositor->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "New wl_surface with id {} at {:x}", id, (uintptr_t)RESOURCE.get()); - PROTO::compositor->events.newSurface.emit(RESOURCE); + PROTO::compositor->m_events.newSurface.emit(RESOURCE); }); - resource->setCreateRegion([](CWlCompositor* r, uint32_t id) { - const auto RESOURCE = PROTO::compositor->m_vRegions.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + m_resource->setCreateRegion([](CWlCompositor* r, uint32_t id) { + const auto RESOURCE = PROTO::compositor->m_regions.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::compositor->m_vRegions.pop_back(); + PROTO::compositor->m_regions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "New wl_region with id {} at {:x}", id, (uintptr_t)RESOURCE.get()); }); } bool CWLCompositorResource::good() { - return resource->resource(); + return m_resource->resource(); } CWLCompositorProtocol::CWLCompositorProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -618,29 +618,29 @@ CWLCompositorProtocol::CWLCompositorProtocol(const wl_interface* iface, const in } void CWLCompositorProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CWLCompositorProtocol::destroyResource(CWLCompositorResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CWLCompositorProtocol::destroyResource(CWLSurfaceResource* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } void CWLCompositorProtocol::destroyResource(CWLRegionResource* resource) { - std::erase_if(m_vRegions, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_regions, [&](const auto& other) { return other.get() == resource; }); } void CWLCompositorProtocol::forEachSurface(std::function)> fn) { - for (auto& surf : m_vSurfaces) { + for (auto& surf : m_surfaces) { fn(surf); } } diff --git a/src/protocols/core/Compositor.hpp b/src/protocols/core/Compositor.hpp index 7415b4f5..90fac35d 100644 --- a/src/protocols/core/Compositor.hpp +++ b/src/protocols/core/Compositor.hpp @@ -40,7 +40,7 @@ class CWLCallbackResource { void send(const Time::steady_tp& now); private: - SP resource; + SP m_resource; }; class CWLRegionResource { @@ -50,11 +50,11 @@ class CWLRegionResource { bool good(); - CRegion region; - WP self; + CRegion m_region; + WP m_self; private: - SP resource; + SP m_resource; }; class CWLSurfaceResource { @@ -86,22 +86,22 @@ class CWLSurfaceResource { CSignal unmap; CSignal newSubsurface; CSignal destroy; - } events; + } m_events; - SSurfaceState current, pending; - std::queue> pendingStates; + SSurfaceState m_current; + SSurfaceState m_pending; + std::queue> m_pendingStates; - std::vector> callbacks; - WP self; - WP hlSurface; - std::vector enteredOutputs; - bool mapped = false; - std::vector> subsurfaces; - SP role; - WP viewportResource; - WP syncobj; // may not be present - WP colorManagement; - WP contentType; + std::vector> m_callbacks; + WP m_self; + WP m_hlSurface; + std::vector m_enteredOutputs; + bool m_mapped = false; + std::vector> m_subsurfaces; + SP m_role; + WP m_syncobj; // may not be present + WP m_colorManagement; + WP m_contentType; void breadthfirst(std::function, const Vector2D&, void*)> fn, void* data); SP findFirstPreorder(std::function)> fn); @@ -113,8 +113,8 @@ class CWLSurfaceResource { std::pair, Vector2D> at(const Vector2D& localCoords, bool allowsInput = false); private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; void destroy(); void releaseBuffers(bool onlyCurrent = true); @@ -134,7 +134,7 @@ class CWLCompositorResource { bool good(); private: - SP resource; + SP m_resource; }; class CWLCompositorProtocol : public IWaylandProtocol { @@ -147,7 +147,7 @@ class CWLCompositorProtocol : public IWaylandProtocol { struct { CSignal newSurface; // SP - } events; + } m_events; private: void destroyResource(CWLCompositorResource* resource); @@ -155,9 +155,9 @@ class CWLCompositorProtocol : public IWaylandProtocol { void destroyResource(CWLRegionResource* resource); // - std::vector> m_vManagers; - std::vector> m_vSurfaces; - std::vector> m_vRegions; + std::vector> m_managers; + std::vector> m_surfaces; + std::vector> m_regions; friend class CWLSurfaceResource; friend class CWLCompositorResource; diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index fda46980..a54ae7e1 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -16,60 +16,60 @@ #include "../../xwayland/Dnd.hpp" using namespace Hyprutils::OS; -CWLDataOfferResource::CWLDataOfferResource(SP resource_, SP source_) : source(source_), resource(resource_) { +CWLDataOfferResource::CWLDataOfferResource(SP resource_, SP source_) : m_source(source_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWlDataOffer* r) { PROTO::data->destroyResource(this); }); - resource->setOnDestroy([this](CWlDataOffer* r) { PROTO::data->destroyResource(this); }); + m_resource->setDestroy([this](CWlDataOffer* r) { PROTO::data->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlDataOffer* r) { PROTO::data->destroyResource(this); }); - resource->setAccept([this](CWlDataOffer* r, uint32_t serial, const char* mime) { - if (!source) { + m_resource->setAccept([this](CWlDataOffer* r, uint32_t serial, const char* mime) { + if (!m_source) { LOGM(WARN, "Possible bug: Accept on an offer w/o a source"); return; } - if (dead) { + if (m_dead) { LOGM(WARN, "Possible bug: Accept on an offer that's dead"); return; } - LOGM(LOG, "Offer {:x} accepts data from source {:x} with mime {}", (uintptr_t)this, (uintptr_t)source.get(), mime ? mime : "null"); + LOGM(LOG, "Offer {:x} accepts data from source {:x} with mime {}", (uintptr_t)this, (uintptr_t)m_source.get(), mime ? mime : "null"); - source->accepted(mime ? mime : ""); - accepted = mime; + m_source->accepted(mime ? mime : ""); + m_accepted = mime; }); - resource->setReceive([this](CWlDataOffer* r, const char* mime, int fd) { + m_resource->setReceive([this](CWlDataOffer* r, const char* mime, int fd) { CFileDescriptor sendFd{fd}; - if (!source) { + if (!m_source) { LOGM(WARN, "Possible bug: Receive on an offer w/o a source"); return; } - if (dead) { + if (m_dead) { LOGM(WARN, "Possible bug: Receive on an offer that's dead"); return; } - LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)source.get()); + LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)m_source.get()); - if (!accepted) { + if (!m_accepted) { LOGM(WARN, "Offer was never accepted, sending accept first"); - source->accepted(mime ? mime : ""); + m_source->accepted(mime ? mime : ""); } - source->send(mime ? mime : "", std::move(sendFd)); + m_source->send(mime ? mime : "", std::move(sendFd)); - recvd = true; + m_recvd = true; // if (source->hasDnd()) // PROTO::data->completeDrag(); }); - resource->setFinish([this](CWlDataOffer* r) { - dead = true; - if (!source || !recvd || !accepted) + m_resource->setFinish([this](CWlDataOffer* r) { + m_dead = true; + if (!m_source || !m_recvd || !m_accepted) PROTO::data->abortDrag(); else PROTO::data->completeDrag(); @@ -77,37 +77,37 @@ CWLDataOfferResource::CWLDataOfferResource(SP resource_, SPhasDnd() || dead) + if (!m_source || !m_source->hasDnd() || m_dead) return; - source->sendDndFinished(); + m_source->sendDndFinished(); } bool CWLDataOfferResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLDataOfferResource::sendData() { - if (!source) + if (!m_source) return; - const auto SOURCEACTIONS = source->actions(); + const auto SOURCEACTIONS = m_source->actions(); - if (resource->version() >= 3 && SOURCEACTIONS > 0) { - resource->sendSourceActions(SOURCEACTIONS); + if (m_resource->version() >= 3 && SOURCEACTIONS > 0) { + m_resource->sendSourceActions(SOURCEACTIONS); if (SOURCEACTIONS & WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE) - resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE); + m_resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE); else if (SOURCEACTIONS & WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY) - resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY); + m_resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY); else { LOGM(ERR, "Client bug? dnd source has no action move or copy. Sending move, f this."); - resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE); + m_resource->sendAction(WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE); } } - for (auto const& m : source->mimes()) { + for (auto const& m : m_source->mimes()) { LOGM(LOG, " | offer {:x} supports mime {}", (uintptr_t)this, m); - resource->sendOffer(m.c_str()); + m_resource->sendOffer(m.c_str()); } } @@ -116,7 +116,7 @@ eDataSourceType CWLDataOfferResource::type() { } SP CWLDataOfferResource::getWayland() { - return self.lock(); + return m_self.lock(); } SP CWLDataOfferResource::getX11() { @@ -124,127 +124,127 @@ SP CWLDataOfferResource::getX11() { } SP CWLDataOfferResource::getSource() { - return source.lock(); + return m_source.lock(); } -CWLDataSourceResource::CWLDataSourceResource(SP resource_, SP device_) : device(device_), resource(resource_) { +CWLDataSourceResource::CWLDataSourceResource(SP resource_, SP device_) : m_device(device_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CWlDataSource* r) { + m_resource->setDestroy([this](CWlDataSource* r) { events.destroy.emit(); - PROTO::data->onDestroyDataSource(self); + PROTO::data->onDestroyDataSource(m_self); PROTO::data->destroyResource(this); }); - resource->setOnDestroy([this](CWlDataSource* r) { + m_resource->setOnDestroy([this](CWlDataSource* r) { events.destroy.emit(); - PROTO::data->onDestroyDataSource(self); + PROTO::data->onDestroyDataSource(m_self); PROTO::data->destroyResource(this); }); - resource->setOffer([this](CWlDataSource* r, const char* mime) { mimeTypes.emplace_back(mime); }); - resource->setSetActions([this](CWlDataSource* r, uint32_t a) { + m_resource->setOffer([this](CWlDataSource* r, const char* mime) { m_mimeTypes.emplace_back(mime); }); + m_resource->setSetActions([this](CWlDataSource* r, uint32_t a) { LOGM(LOG, "DataSource {:x} actions {}", (uintptr_t)this, a); - supportedActions = a; + m_supportedActions = a; }); } CWLDataSourceResource::~CWLDataSourceResource() { events.destroy.emit(); - PROTO::data->onDestroyDataSource(self); + PROTO::data->onDestroyDataSource(m_self); } SP CWLDataSourceResource::fromResource(wl_resource* res) { auto data = (CWLDataSourceResource*)(((CWlDataSource*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CWLDataSourceResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLDataSourceResource::accepted(const std::string& mime) { if (mime.empty()) { - resource->sendTarget(nullptr); + m_resource->sendTarget(nullptr); return; } - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) { + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLDataSourceResource::sendAccepted with non-existent mime"); return; } - resource->sendTarget(mime.c_str()); + m_resource->sendTarget(mime.c_str()); } std::vector CWLDataSourceResource::mimes() { - return mimeTypes; + return m_mimeTypes; } void CWLDataSourceResource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) { + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLDataSourceResource::sendAskSend with non-existent mime"); return; } - resource->sendSend(mime.c_str(), fd.get()); + m_resource->sendSend(mime.c_str(), fd.get()); } void CWLDataSourceResource::cancelled() { - resource->sendCancelled(); + m_resource->sendCancelled(); } bool CWLDataSourceResource::hasDnd() { - return dnd; + return m_dnd; } bool CWLDataSourceResource::dndDone() { - return dndSuccess; + return m_dndSuccess; } void CWLDataSourceResource::error(uint32_t code, const std::string& msg) { - resource->error(code, msg); + m_resource->error(code, msg); } void CWLDataSourceResource::sendDndDropPerformed() { - if (resource->version() < 3) + if (m_resource->version() < 3) return; - resource->sendDndDropPerformed(); - dropped = true; + m_resource->sendDndDropPerformed(); + m_dropped = true; } void CWLDataSourceResource::sendDndFinished() { - if (resource->version() < 3) + if (m_resource->version() < 3) return; - resource->sendDndFinished(); + m_resource->sendDndFinished(); } void CWLDataSourceResource::sendDndAction(wl_data_device_manager_dnd_action a) { - if (resource->version() < 3) + if (m_resource->version() < 3) return; - resource->sendAction(a); + m_resource->sendAction(a); } uint32_t CWLDataSourceResource::actions() { - return supportedActions; + return m_supportedActions; } eDataSourceType CWLDataSourceResource::type() { return DATA_SOURCE_TYPE_WAYLAND; } -CWLDataDeviceResource::CWLDataDeviceResource(SP resource_) : resource(resource_) { +CWLDataDeviceResource::CWLDataDeviceResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CWlDataDevice* r) { PROTO::data->destroyResource(this); }); - resource->setOnDestroy([this](CWlDataDevice* r) { PROTO::data->destroyResource(this); }); + m_resource->setRelease([this](CWlDataDevice* r) { PROTO::data->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlDataDevice* r) { PROTO::data->destroyResource(this); }); - pClient = resource->client(); + m_client = m_resource->client(); - resource->setSetSelection([](CWlDataDevice* r, wl_resource* sourceR, uint32_t serial) { + m_resource->setSetSelection([](CWlDataDevice* r, wl_resource* sourceR, uint32_t serial) { auto source = sourceR ? CWLDataSourceResource::fromResource(sourceR) : CSharedPointer{}; if (!source) { LOGM(LOG, "Reset selection received"); @@ -252,7 +252,7 @@ CWLDataDeviceResource::CWLDataDeviceResource(SP resource_) : reso return; } - if (source && source->used) + if (source && source->m_used) LOGM(WARN, "setSelection on a used resource. By protocol, this is a violation, but firefox et al insist on doing this."); source->markUsed(); @@ -260,63 +260,63 @@ CWLDataDeviceResource::CWLDataDeviceResource(SP resource_) : reso g_pSeatManager->setCurrentSelection(source); }); - resource->setStartDrag([](CWlDataDevice* r, wl_resource* sourceR, wl_resource* origin, wl_resource* icon, uint32_t serial) { + m_resource->setStartDrag([](CWlDataDevice* r, wl_resource* sourceR, wl_resource* origin, wl_resource* icon, uint32_t serial) { auto source = CWLDataSourceResource::fromResource(sourceR); if (!source) { LOGM(ERR, "No source in drag"); return; } - if (source && source->used) + if (source && source->m_used) LOGM(WARN, "setSelection on a used resource. By protocol, this is a violation, but firefox et al insist on doing this."); source->markUsed(); - source->dnd = true; + source->m_dnd = true; PROTO::data->initiateDrag(source, icon ? CWLSurfaceResource::fromResource(icon) : nullptr, CWLSurfaceResource::fromResource(origin)); }); } bool CWLDataDeviceResource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CWLDataDeviceResource::client() { - return pClient; + return m_client; } void CWLDataDeviceResource::sendDataOffer(SP offer) { if (!offer) - resource->sendDataOfferRaw(nullptr); + m_resource->sendDataOfferRaw(nullptr); else if (const auto WL = offer->getWayland(); WL) - resource->sendDataOffer(WL->resource.get()); + m_resource->sendDataOffer(WL->m_resource.get()); //FIXME: X11 } void CWLDataDeviceResource::sendEnter(uint32_t serial, SP surf, const Vector2D& local, SP offer) { if (const auto WL = offer->getWayland(); WL) - resource->sendEnterRaw(serial, surf->getResource()->resource(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y), WL->resource->resource()); + m_resource->sendEnterRaw(serial, surf->getResource()->resource(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y), WL->m_resource->resource()); // FIXME: X11 } void CWLDataDeviceResource::sendLeave() { - resource->sendLeave(); + m_resource->sendLeave(); } void CWLDataDeviceResource::sendMotion(uint32_t timeMs, const Vector2D& local) { - resource->sendMotion(timeMs, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + m_resource->sendMotion(timeMs, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); } void CWLDataDeviceResource::sendDrop() { - resource->sendDrop(); + m_resource->sendDrop(); } void CWLDataDeviceResource::sendSelection(SP offer) { if (!offer) - resource->sendSelectionRaw(nullptr); + m_resource->sendSelectionRaw(nullptr); else if (const auto WL = offer->getWayland(); WL) - resource->sendSelection(WL->resource.get()); + m_resource->sendSelection(WL->m_resource.get()); } eDataSourceType CWLDataDeviceResource::type() { @@ -324,55 +324,55 @@ eDataSourceType CWLDataDeviceResource::type() { } SP CWLDataDeviceResource::getWayland() { - return self.lock(); + return m_self.lock(); } SP CWLDataDeviceResource::getX11() { return nullptr; } -CWLDataDeviceManagerResource::CWLDataDeviceManagerResource(SP resource_) : resource(resource_) { +CWLDataDeviceManagerResource::CWLDataDeviceManagerResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlDataDeviceManager* r) { PROTO::data->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlDataDeviceManager* r) { PROTO::data->destroyResource(this); }); - resource->setCreateDataSource([this](CWlDataDeviceManager* r, uint32_t id) { - std::erase_if(sources, [](const auto& e) { return e.expired(); }); + m_resource->setCreateDataSource([this](CWlDataDeviceManager* r, uint32_t id) { + std::erase_if(m_sources, [](const auto& e) { return e.expired(); }); - const auto RESOURCE = PROTO::data->m_vSources.emplace_back(makeShared(makeShared(r->client(), r->version(), id), device.lock())); + const auto RESOURCE = PROTO::data->m_sources.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_device.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::data->m_vSources.pop_back(); + PROTO::data->m_sources.pop_back(); return; } - if (!device) + if (!m_device) LOGM(WARN, "New data source before a device was created"); - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - sources.emplace_back(RESOURCE); + m_sources.emplace_back(RESOURCE); LOGM(LOG, "New data source bound at {:x}", (uintptr_t)RESOURCE.get()); }); - resource->setGetDataDevice([this](CWlDataDeviceManager* r, uint32_t id, wl_resource* seat) { - const auto RESOURCE = PROTO::data->m_vDevices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + m_resource->setGetDataDevice([this](CWlDataDeviceManager* r, uint32_t id, wl_resource* seat) { + const auto RESOURCE = PROTO::data->m_devices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::data->m_vDevices.pop_back(); + PROTO::data->m_devices.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - for (auto const& s : sources) { + for (auto const& s : m_sources) { if (!s) continue; - s->device = RESOURCE; + s->m_device = RESOURCE; } LOGM(LOG, "New data device bound at {:x}", (uintptr_t)RESOURCE.get()); @@ -380,22 +380,22 @@ CWLDataDeviceManagerResource::CWLDataDeviceManagerResource(SPresource(); + return m_resource->resource(); } CWLDataDeviceProtocol::CWLDataDeviceProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { g_pEventLoopManager->doLater([this]() { - listeners.onKeyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); }); - listeners.onDndPointerFocusChange = g_pSeatManager->m_events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); }); + m_listeners.onKeyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); }); + m_listeners.onDndPointerFocusChange = g_pSeatManager->m_events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); }); }); } void CWLDataDeviceProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } @@ -403,19 +403,19 @@ void CWLDataDeviceProtocol::bindManager(wl_client* client, void* data, uint32_t } void CWLDataDeviceProtocol::destroyResource(CWLDataDeviceManagerResource* seat) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == seat; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == seat; }); } void CWLDataDeviceProtocol::destroyResource(CWLDataDeviceResource* resource) { - std::erase_if(m_vDevices, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_devices, [&](const auto& other) { return other.get() == resource; }); } void CWLDataDeviceProtocol::destroyResource(CWLDataSourceResource* resource) { - std::erase_if(m_vSources, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_sources, [&](const auto& other) { return other.get() == resource; }); } void CWLDataDeviceProtocol::destroyResource(CWLDataOfferResource* resource) { - std::erase_if(m_vOffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_offers, [&](const auto& other) { return other.get() == resource; }); } SP CWLDataDeviceProtocol::dataDeviceForClient(wl_client* c) { @@ -424,8 +424,8 @@ SP CWLDataDeviceProtocol::dataDeviceForClient(wl_client* c) { return g_pXWayland->pWM->getDataDevice(); #endif - auto it = std::find_if(m_vDevices.begin(), m_vDevices.end(), [c](const auto& e) { return e->client() == c; }); - if (it == m_vDevices.end()) + auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + if (it == m_devices.end()) return nullptr; return *it; } @@ -439,15 +439,15 @@ void CWLDataDeviceProtocol::sendSelectionToDevice(SP dev, SP offer; if (const auto WL = dev->getWayland(); WL) { - const auto OFFER = m_vOffers.emplace_back(makeShared(makeShared(WL->resource->client(), WL->resource->version(), 0), sel)); + const auto OFFER = m_offers.emplace_back(makeShared(makeShared(WL->m_resource->client(), WL->m_resource->version(), 0), sel)); if UNLIKELY (!OFFER->good()) { - WL->resource->noMemory(); - m_vOffers.pop_back(); + WL->m_resource->noMemory(); + m_offers.pop_back(); return; } - OFFER->source = sel; - OFFER->self = OFFER; - offer = OFFER; + OFFER->m_source = sel; + OFFER->m_self = OFFER; + offer = OFFER; } #ifndef NO_XWAYLAND else if (const auto X11 = dev->getX11(); X11) @@ -468,15 +468,15 @@ void CWLDataDeviceProtocol::sendSelectionToDevice(SP dev, SP source) { - if (dnd.currentSource == source) + if (m_dnd.currentSource == source) abortDrag(); } void CWLDataDeviceProtocol::setSelection(SP source) { - for (auto const& o : m_vOffers) { - if (o->source && o->source->hasDnd()) + for (auto const& o : m_offers) { + if (o->m_source && o->m_source->hasDnd()) continue; - o->dead = true; + o->m_dead = true; } if (!source) { @@ -527,20 +527,20 @@ void CWLDataDeviceProtocol::updateSelection() { } void CWLDataDeviceProtocol::onKeyboardFocus() { - for (auto const& o : m_vOffers) { - if (o->source && o->source->hasDnd()) + for (auto const& o : m_offers) { + if (o->m_source && o->m_source->hasDnd()) continue; - o->dead = true; + o->m_dead = true; } updateSelection(); } void CWLDataDeviceProtocol::onDndPointerFocus() { - for (auto const& o : m_vOffers) { - if (o->source && !o->source->hasDnd()) + for (auto const& o : m_offers) { + if (o->m_source && !o->m_source->hasDnd()) continue; - o->dead = true; + o->m_dead = true; } updateDrag(); @@ -548,37 +548,37 @@ void CWLDataDeviceProtocol::onDndPointerFocus() { void CWLDataDeviceProtocol::initiateDrag(WP currentSource, SP dragSurface, SP origin) { - if (dnd.currentSource) { + if (m_dnd.currentSource) { LOGM(WARN, "New drag started while old drag still active??"); abortDrag(); } g_pInputManager->setCursorImageUntilUnset("grabbing"); - dnd.overriddenCursor = true; + m_dnd.overriddenCursor = true; LOGM(LOG, "initiateDrag: source {:x}, surface: {:x}, origin: {:x}", (uintptr_t)currentSource.get(), (uintptr_t)dragSurface, (uintptr_t)origin); - currentSource->used = true; + currentSource->m_used = true; - dnd.currentSource = currentSource; - dnd.originSurface = origin; - dnd.dndSurface = dragSurface; + m_dnd.currentSource = currentSource; + m_dnd.originSurface = origin; + m_dnd.dndSurface = dragSurface; if (dragSurface) { - dnd.dndSurfaceDestroy = dragSurface->events.destroy.registerListener([this](std::any d) { abortDrag(); }); - dnd.dndSurfaceCommit = dragSurface->events.commit.registerListener([this](std::any d) { - if (dnd.dndSurface->current.texture && !dnd.dndSurface->mapped) { - dnd.dndSurface->map(); + m_dnd.dndSurfaceDestroy = dragSurface->m_events.destroy.registerListener([this](std::any d) { abortDrag(); }); + m_dnd.dndSurfaceCommit = dragSurface->m_events.commit.registerListener([this](std::any d) { + if (m_dnd.dndSurface->m_current.texture && !m_dnd.dndSurface->m_mapped) { + m_dnd.dndSurface->map(); return; } - if (dnd.dndSurface->current.texture <= 0 && dnd.dndSurface->mapped) { - dnd.dndSurface->unmap(); + if (m_dnd.dndSurface->m_current.texture <= 0 && m_dnd.dndSurface->m_mapped) { + m_dnd.dndSurface->unmap(); return; } }); } - dnd.mouseButton = g_pHookSystem->hookDynamic("mouseButton", [this](void* self, SCallbackInfo& info, std::any e) { + m_dnd.mouseButton = g_pHookSystem->hookDynamic("mouseButton", [this](void* self, SCallbackInfo& info, std::any e) { auto E = std::any_cast(e); if (E.state == WL_POINTER_BUTTON_STATE_RELEASED) { LOGM(LOG, "Dropping drag on mouseUp"); @@ -586,14 +586,14 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource } }); - dnd.touchUp = g_pHookSystem->hookDynamic("touchUp", [this](void* self, SCallbackInfo& info, std::any e) { + m_dnd.touchUp = g_pHookSystem->hookDynamic("touchUp", [this](void* self, SCallbackInfo& info, std::any e) { LOGM(LOG, "Dropping drag on touchUp"); dropDrag(); }); - dnd.mouseMove = g_pHookSystem->hookDynamic("mouseMove", [this](void* self, SCallbackInfo& info, std::any e) { + m_dnd.mouseMove = g_pHookSystem->hookDynamic("mouseMove", [this](void* self, SCallbackInfo& info, std::any e) { auto V = std::any_cast(e); - if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { + if (m_dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock()); if (!surf) @@ -604,14 +604,14 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource if (!box.has_value()) return; - dnd.focusedDevice->sendMotion(Time::millis(Time::steadyNow()), V - box->pos()); + m_dnd.focusedDevice->sendMotion(Time::millis(Time::steadyNow()), V - box->pos()); LOGM(LOG, "Drag motion {}", V - box->pos()); } }); - dnd.touchMove = g_pHookSystem->hookDynamic("touchMove", [this](void* self, SCallbackInfo& info, std::any e) { + m_dnd.touchMove = g_pHookSystem->hookDynamic("touchMove", [this](void* self, SCallbackInfo& info, std::any e) { auto E = std::any_cast(e); - if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { + if (m_dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) { auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock()); if (!surf) @@ -622,7 +622,7 @@ void CWLDataDeviceProtocol::initiateDrag(WP currentSource if (!box.has_value()) return; - dnd.focusedDevice->sendMotion(E.timeMs, E.pos); + m_dnd.focusedDevice->sendMotion(E.timeMs, E.pos); LOGM(LOG, "Drag motion {}", E.pos); } }); @@ -642,34 +642,34 @@ void CWLDataDeviceProtocol::updateDrag() { if (!dndActive()) return; - if (dnd.focusedDevice) - dnd.focusedDevice->sendLeave(); + if (m_dnd.focusedDevice) + m_dnd.focusedDevice->sendLeave(); if (!g_pSeatManager->m_state.dndPointerFocus) return; - dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->m_state.dndPointerFocus->client()); + m_dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->m_state.dndPointerFocus->client()); - if (!dnd.focusedDevice) + if (!m_dnd.focusedDevice) return; SP offer; - if (const auto WL = dnd.focusedDevice->getWayland(); WL) { + if (const auto WL = m_dnd.focusedDevice->getWayland(); WL) { const auto OFFER = - m_vOffers.emplace_back(makeShared(makeShared(WL->resource->client(), WL->resource->version(), 0), dnd.currentSource.lock())); + m_offers.emplace_back(makeShared(makeShared(WL->m_resource->client(), WL->m_resource->version(), 0), m_dnd.currentSource.lock())); if (!OFFER->good()) { - WL->resource->noMemory(); - m_vOffers.pop_back(); + WL->m_resource->noMemory(); + m_offers.pop_back(); return; } - OFFER->source = dnd.currentSource; - OFFER->self = OFFER; - offer = OFFER; + OFFER->m_source = m_dnd.currentSource; + OFFER->m_self = OFFER; + offer = OFFER; } #ifndef NO_XWAYLAND - else if (const auto X11 = dnd.focusedDevice->getX11(); X11) - offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), dnd.currentSource.lock()); + else if (const auto X11 = m_dnd.focusedDevice->getX11(); X11) + offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), m_dnd.currentSource.lock()); #endif if (!offer) { @@ -678,28 +678,28 @@ void CWLDataDeviceProtocol::updateDrag() { } LOGM(LOG, "New {} dnd offer {:x} for data source {:x}", offer->type() == DATA_SOURCE_TYPE_WAYLAND ? "wayland" : "X11", (uintptr_t)offer.get(), - (uintptr_t)dnd.currentSource.get()); + (uintptr_t)m_dnd.currentSource.get()); - dnd.focusedDevice->sendDataOffer(offer); + m_dnd.focusedDevice->sendDataOffer(offer); if (const auto WL = offer->getWayland(); WL) WL->sendData(); - dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->m_state.dndPointerFocus.lock(), - g_pSeatManager->m_state.dndPointerFocus->current.size / 2.F, offer); + m_dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->m_state.dndPointerFocus.lock(), + g_pSeatManager->m_state.dndPointerFocus->m_current.size / 2.F, offer); } void CWLDataDeviceProtocol::cleanupDndState(bool resetDevice, bool resetSource, bool simulateInput) { - dnd.dndSurface.reset(); - dnd.dndSurfaceCommit.reset(); - dnd.dndSurfaceDestroy.reset(); - dnd.mouseButton.reset(); - dnd.mouseMove.reset(); - dnd.touchUp.reset(); - dnd.touchMove.reset(); + m_dnd.dndSurface.reset(); + m_dnd.dndSurfaceCommit.reset(); + m_dnd.dndSurfaceDestroy.reset(); + m_dnd.mouseButton.reset(); + m_dnd.mouseMove.reset(); + m_dnd.touchUp.reset(); + m_dnd.touchMove.reset(); if (resetDevice) - dnd.focusedDevice.reset(); + m_dnd.focusedDevice.reset(); if (resetSource) - dnd.currentSource.reset(); + m_dnd.currentSource.reset(); if (simulateInput) { g_pInputManager->simulateMouseMovement(); @@ -708,8 +708,8 @@ void CWLDataDeviceProtocol::cleanupDndState(bool resetDevice, bool resetSource, } void CWLDataDeviceProtocol::dropDrag() { - if (!dnd.focusedDevice || !dnd.currentSource) { - if (dnd.currentSource) + if (!m_dnd.focusedDevice || !m_dnd.currentSource) { + if (m_dnd.currentSource) abortDrag(); return; } @@ -719,40 +719,40 @@ void CWLDataDeviceProtocol::dropDrag() { return; } - dnd.focusedDevice->sendDrop(); + m_dnd.focusedDevice->sendDrop(); #ifndef NO_XWAYLAND - if (dnd.focusedDevice->getX11()) { - dnd.focusedDevice->sendLeave(); - if (dnd.overriddenCursor) + if (m_dnd.focusedDevice->getX11()) { + m_dnd.focusedDevice->sendLeave(); + if (m_dnd.overriddenCursor) g_pInputManager->unsetCursorImage(); - dnd.overriddenCursor = false; + m_dnd.overriddenCursor = false; cleanupDndState(true, true, true); return; } #endif - dnd.focusedDevice->sendLeave(); - if (dnd.overriddenCursor) + m_dnd.focusedDevice->sendLeave(); + if (m_dnd.overriddenCursor) g_pInputManager->unsetCursorImage(); - dnd.overriddenCursor = false; + m_dnd.overriddenCursor = false; cleanupDndState(false, false, false); } bool CWLDataDeviceProtocol::wasDragSuccessful() { - if (!dnd.currentSource) + if (!m_dnd.currentSource) return false; - for (auto const& o : m_vOffers) { - if (o->dead || o->source != dnd.currentSource) + for (auto const& o : m_offers) { + if (o->m_dead || o->m_source != m_dnd.currentSource) continue; - if (o->recvd || o->accepted) + if (o->m_recvd || o->m_accepted) return true; } #ifndef NO_XWAYLAND - if (dnd.focusedDevice->getX11()) + if (m_dnd.focusedDevice->getX11()) return true; #endif @@ -760,12 +760,12 @@ bool CWLDataDeviceProtocol::wasDragSuccessful() { } void CWLDataDeviceProtocol::completeDrag() { - if (!dnd.focusedDevice && !dnd.currentSource) + if (!m_dnd.focusedDevice && !m_dnd.currentSource) return; - if (dnd.currentSource) { - dnd.currentSource->sendDndDropPerformed(); - dnd.currentSource->sendDndFinished(); + if (m_dnd.currentSource) { + m_dnd.currentSource->sendDndDropPerformed(); + m_dnd.currentSource->sendDndFinished(); } cleanupDndState(true, true, true); @@ -774,56 +774,56 @@ void CWLDataDeviceProtocol::completeDrag() { void CWLDataDeviceProtocol::abortDrag() { cleanupDndState(false, false, false); - if (dnd.overriddenCursor) + if (m_dnd.overriddenCursor) g_pInputManager->unsetCursorImage(); - dnd.overriddenCursor = false; + m_dnd.overriddenCursor = false; - if (!dnd.focusedDevice && !dnd.currentSource) + if (!m_dnd.focusedDevice && !m_dnd.currentSource) return; - if (dnd.focusedDevice) { + if (m_dnd.focusedDevice) { #ifndef NO_XWAYLAND - if (auto x11Device = dnd.focusedDevice->getX11(); x11Device) + if (auto x11Device = m_dnd.focusedDevice->getX11(); x11Device) x11Device->forceCleanupDnd(); #endif - dnd.focusedDevice->sendLeave(); + m_dnd.focusedDevice->sendLeave(); } - if (dnd.currentSource) - dnd.currentSource->cancelled(); + if (m_dnd.currentSource) + m_dnd.currentSource->cancelled(); - dnd.focusedDevice.reset(); - dnd.currentSource.reset(); + m_dnd.focusedDevice.reset(); + m_dnd.currentSource.reset(); g_pInputManager->simulateMouseMovement(); g_pSeatManager->resendEnterEvents(); } void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, const Time::steady_tp& when) { - if (!dnd.dndSurface || !dnd.dndSurface->current.texture) + if (!m_dnd.dndSurface || !m_dnd.dndSurface->m_current.texture) return; const auto POS = g_pInputManager->getMouseCoordsInternal(); Vector2D surfacePos = POS; - surfacePos += dnd.dndSurface->current.offset; + surfacePos += m_dnd.dndSurface->m_current.offset; - CBox box = CBox{surfacePos, dnd.dndSurface->current.size}.translate(-pMonitor->m_position).scale(pMonitor->m_scale); + CBox box = CBox{surfacePos, m_dnd.dndSurface->m_current.size}.translate(-pMonitor->m_position).scale(pMonitor->m_scale); CTexPassElement::SRenderData data; - data.tex = dnd.dndSurface->current.texture; + data.tex = m_dnd.dndSurface->m_current.texture; data.box = box; g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); - CBox damageBox = CBox{surfacePos, dnd.dndSurface->current.size}.expand(5); + CBox damageBox = CBox{surfacePos, m_dnd.dndSurface->m_current.size}.expand(5); g_pHyprRenderer->damageBox(damageBox); - dnd.dndSurface->frame(when); + m_dnd.dndSurface->frame(when); } bool CWLDataDeviceProtocol::dndActive() { - return dnd.currentSource; + return m_dnd.currentSource; } void CWLDataDeviceProtocol::abortDndIfPresent() { diff --git a/src/protocols/core/DataDevice.hpp b/src/protocols/core/DataDevice.hpp index 0c53111b..d54927d2 100644 --- a/src/protocols/core/DataDevice.hpp +++ b/src/protocols/core/DataDevice.hpp @@ -40,17 +40,15 @@ class CWLDataOfferResource : public IDataOffer { virtual SP getX11(); virtual SP getSource(); - WP source; - WP self; + WP m_source; + WP m_self; - bool dead = false; - bool accepted = false; - bool recvd = false; - - uint32_t actions = 0; + bool m_dead = false; + bool m_accepted = false; + bool m_recvd = false; private: - SP resource; + SP m_resource; friend class CWLDataDeviceResource; }; @@ -76,19 +74,19 @@ class CWLDataSourceResource : public IDataSource { virtual void sendDndDropPerformed(); virtual void sendDndAction(wl_data_device_manager_dnd_action a); - bool used = false; - bool dnd = false; - bool dndSuccess = false; - bool dropped = false; + bool m_used = false; + bool m_dnd = false; + bool m_dndSuccess = false; + bool m_dropped = false; - WP device; - WP self; + WP m_device; + WP m_self; - std::vector mimeTypes; - uint32_t supportedActions = 0; + std::vector m_mimeTypes; + uint32_t m_supportedActions = 0; private: - SP resource; + SP m_resource; friend class CWLDataDeviceProtocol; }; @@ -110,11 +108,11 @@ class CWLDataDeviceResource : public IDataDevice { virtual void sendSelection(SP offer); virtual eDataSourceType type(); - WP self; + WP m_self; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; friend class CWLDataDeviceProtocol; }; @@ -125,11 +123,11 @@ class CWLDataDeviceManagerResource { bool good(); - WP device; - std::vector> sources; + WP m_device; + std::vector> m_sources; private: - SP resource; + SP m_resource; }; class CWLDataDeviceProtocol : public IWaylandProtocol { @@ -154,10 +152,10 @@ class CWLDataDeviceProtocol : public IWaylandProtocol { void destroyResource(CWLDataOfferResource* resource); // - std::vector> m_vManagers; - std::vector> m_vDevices; - std::vector> m_vSources; - std::vector> m_vOffers; + std::vector> m_managers; + std::vector> m_devices; + std::vector> m_sources; + std::vector> m_offers; // @@ -182,7 +180,7 @@ class CWLDataDeviceProtocol : public IWaylandProtocol { SP mouseButton; SP touchUp; SP touchMove; - } dnd; + } m_dnd; void abortDrag(); void initiateDrag(WP currentSource, SP dragSurface, SP origin); @@ -204,7 +202,7 @@ class CWLDataDeviceProtocol : public IWaylandProtocol { struct { CHyprSignalListener onKeyboardFocusChange; CHyprSignalListener onDndPointerFocusChange; - } listeners; + } m_listeners; }; namespace PROTO { diff --git a/src/protocols/core/Output.cpp b/src/protocols/core/Output.cpp index dfb89ba7..5db2f678 100644 --- a/src/protocols/core/Output.cpp +++ b/src/protocols/core/Output.cpp @@ -3,29 +3,29 @@ #include "../../Compositor.hpp" #include "../../helpers/Monitor.hpp" -CWLOutputResource::CWLOutputResource(SP resource_, PHLMONITOR pMonitor) : monitor(pMonitor), resource(resource_) { +CWLOutputResource::CWLOutputResource(SP resource_, PHLMONITOR pMonitor) : m_monitor(pMonitor), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - pClient = resource->client(); + m_client = m_resource->client(); - if (!monitor) + if (!m_monitor) return; - resource->setOnDestroy([this](CWlOutput* r) { - if (monitor && PROTO::outputs.contains(monitor->m_name)) - PROTO::outputs.at(monitor->m_name)->destroyResource(this); + m_resource->setOnDestroy([this](CWlOutput* r) { + if (m_monitor && PROTO::outputs.contains(m_monitor->m_name)) + PROTO::outputs.at(m_monitor->m_name)->destroyResource(this); }); - resource->setRelease([this](CWlOutput* r) { - if (monitor && PROTO::outputs.contains(monitor->m_name)) - PROTO::outputs.at(monitor->m_name)->destroyResource(this); + m_resource->setRelease([this](CWlOutput* r) { + if (m_monitor && PROTO::outputs.contains(m_monitor->m_name)) + PROTO::outputs.at(m_monitor->m_name)->destroyResource(this); }); - if (resource->version() >= 4) { - resource->sendName(monitor->m_name.c_str()); - resource->sendDescription(monitor->m_description.c_str()); + if (m_resource->version() >= 4) { + m_resource->sendName(m_monitor->m_name.c_str()); + m_resource->sendDescription(m_monitor->m_description.c_str()); } updateState(); @@ -52,72 +52,72 @@ CWLOutputResource::CWLOutputResource(SP resource_, PHLMONITOR pMonito SP CWLOutputResource::fromResource(wl_resource* res) { auto data = (CWLOutputResource*)(((CWlOutput*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CWLOutputResource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CWLOutputResource::client() { - return pClient; + return m_client; } SP CWLOutputResource::getResource() { - return resource; + return m_resource; } void CWLOutputResource::updateState() { - if (!monitor || (owner && owner->defunct)) + if (!m_monitor || (m_owner && m_owner->m_defunct)) return; - if (resource->version() >= 2) - resource->sendScale(std::ceil(monitor->m_scale)); + if (m_resource->version() >= 2) + m_resource->sendScale(std::ceil(m_monitor->m_scale)); - resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT), monitor->m_pixelSize.x, monitor->m_pixelSize.y, monitor->m_refreshRate * 1000.0); + m_resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT), m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y, m_monitor->m_refreshRate * 1000.0); - resource->sendGeometry(0, 0, monitor->m_output->physicalSize.x, monitor->m_output->physicalSize.y, (wl_output_subpixel)monitor->m_output->subpixel, - monitor->m_output->make.c_str(), monitor->m_output->model.c_str(), monitor->m_transform); + m_resource->sendGeometry(0, 0, m_monitor->m_output->physicalSize.x, m_monitor->m_output->physicalSize.y, (wl_output_subpixel)m_monitor->m_output->subpixel, + m_monitor->m_output->make.c_str(), m_monitor->m_output->model.c_str(), m_monitor->m_transform); - if (resource->version() >= 2) - resource->sendDone(); + if (m_resource->version() >= 2) + m_resource->sendDone(); } CWLOutputProtocol::CWLOutputProtocol(const wl_interface* iface, const int& ver, const std::string& name, PHLMONITOR pMonitor) : - IWaylandProtocol(iface, ver, name), monitor(pMonitor), szName(pMonitor->m_name) { + IWaylandProtocol(iface, ver, name), m_monitor(pMonitor), m_name(pMonitor->m_name) { - listeners.modeChanged = monitor->m_events.modeChanged.registerListener([this](std::any d) { - for (auto const& o : m_vOutputs) { + m_listeners.modeChanged = m_monitor->m_events.modeChanged.registerListener([this](std::any d) { + for (auto const& o : m_outputs) { o->updateState(); } }); } void CWLOutputProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - if UNLIKELY (defunct) + if UNLIKELY (m_defunct) Debug::log(WARN, "[wl_output] Binding a wl_output that's inert?? Possible client bug."); - const auto RESOURCE = m_vOutputs.emplace_back(makeShared(makeShared(client, ver, id), monitor.lock())); + const auto RESOURCE = m_outputs.emplace_back(makeShared(makeShared(client, ver, id), m_monitor.lock())); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vOutputs.pop_back(); + m_outputs.pop_back(); return; } - RESOURCE->self = RESOURCE; - RESOURCE->owner = self; + RESOURCE->m_self = RESOURCE; + RESOURCE->m_owner = m_self; } void CWLOutputProtocol::destroyResource(CWLOutputResource* resource) { - std::erase_if(m_vOutputs, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_outputs, [&](const auto& other) { return other.get() == resource; }); - if (m_vOutputs.empty() && defunct) - PROTO::outputs.erase(szName); + if (m_outputs.empty() && m_defunct) + PROTO::outputs.erase(m_name); } SP CWLOutputProtocol::outputResourceFrom(wl_client* client) { - for (auto const& r : m_vOutputs) { + for (auto const& r : m_outputs) { if (r->client() != client) continue; @@ -128,22 +128,22 @@ SP CWLOutputProtocol::outputResourceFrom(wl_client* client) { } void CWLOutputProtocol::remove() { - if UNLIKELY (defunct) + if UNLIKELY (m_defunct) return; - defunct = true; + m_defunct = true; removeGlobal(); } bool CWLOutputProtocol::isDefunct() { - return defunct; + return m_defunct; } void CWLOutputProtocol::sendDone() { - if UNLIKELY (defunct) + if UNLIKELY (m_defunct) return; - for (auto const& r : m_vOutputs) { - r->resource->sendDone(); + for (auto const& r : m_outputs) { + r->m_resource->sendDone(); } } diff --git a/src/protocols/core/Output.hpp b/src/protocols/core/Output.hpp index 8ade5178..9f14289e 100644 --- a/src/protocols/core/Output.hpp +++ b/src/protocols/core/Output.hpp @@ -19,13 +19,13 @@ class CWLOutputResource { SP getResource(); void updateState(); - PHLMONITORREF monitor; - WP owner; - WP self; + PHLMONITORREF m_monitor; + WP m_owner; + WP m_self; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; friend class CWLOutputProtocol; }; @@ -39,8 +39,8 @@ class CWLOutputProtocol : public IWaylandProtocol { SP outputResourceFrom(wl_client* client); void sendDone(); - PHLMONITORREF monitor; - WP self; + PHLMONITORREF m_monitor; + WP m_self; // will mark the protocol for removal, will be removed when no. of bound outputs is 0 (or when overwritten by a new global) void remove(); @@ -50,13 +50,13 @@ class CWLOutputProtocol : public IWaylandProtocol { void destroyResource(CWLOutputResource* resource); // - std::vector> m_vOutputs; - bool defunct = false; - std::string szName = ""; + std::vector> m_outputs; + bool m_defunct = false; + std::string m_name = ""; struct { CHyprSignalListener modeChanged; - } listeners; + } m_listeners; friend class CWLOutputResource; }; diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index 6dbed8fd..bc224043 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -10,292 +10,292 @@ #include -CWLTouchResource::CWLTouchResource(SP resource_, SP owner_) : owner(owner_), resource(resource_) { +CWLTouchResource::CWLTouchResource(SP resource_, SP owner_) : m_owner(owner_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CWlTouch* r) { PROTO::seat->destroyResource(this); }); - resource->setOnDestroy([this](CWlTouch* r) { PROTO::seat->destroyResource(this); }); + m_resource->setRelease([this](CWlTouch* r) { PROTO::seat->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlTouch* r) { PROTO::seat->destroyResource(this); }); } bool CWLTouchResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLTouchResource::sendDown(SP surface, uint32_t timeMs, int32_t id, const Vector2D& local) { - if (!owner || !surface || !surface->getResource()->resource()) + if (!m_owner || !surface || !surface->getResource()->resource()) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - ASSERT(surface->client() == owner->client()); + ASSERT(surface->client() == m_owner->client()); - currentSurface = surface; - listeners.destroySurface = surface->events.destroy.registerListener([this, timeMs, id](std::any d) { sendUp(timeMs + 10 /* hack */, id); }); + m_currentSurface = surface; + m_listeners.destroySurface = surface->m_events.destroy.registerListener([this, timeMs, id](std::any d) { sendUp(timeMs + 10 /* hack */, id); }); - resource->sendDown(g_pSeatManager->nextSerial(owner.lock()), timeMs, surface->getResource().get(), id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + m_resource->sendDown(g_pSeatManager->nextSerial(m_owner.lock()), timeMs, surface->getResource().get(), id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); - fingers++; + m_fingers++; } void CWLTouchResource::sendUp(uint32_t timeMs, int32_t id) { - if (!owner) + if (!m_owner) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendUp(g_pSeatManager->nextSerial(owner.lock()), timeMs, id); - fingers--; - if (fingers <= 0) { - currentSurface.reset(); - listeners.destroySurface.reset(); - fingers = 0; + m_resource->sendUp(g_pSeatManager->nextSerial(m_owner.lock()), timeMs, id); + m_fingers--; + if (m_fingers <= 0) { + m_currentSurface.reset(); + m_listeners.destroySurface.reset(); + m_fingers = 0; } } void CWLTouchResource::sendMotion(uint32_t timeMs, int32_t id, const Vector2D& local) { - if (!owner) + if (!m_owner) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendMotion(timeMs, id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + m_resource->sendMotion(timeMs, id, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); } void CWLTouchResource::sendFrame() { - if (!owner) + if (!m_owner) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendFrame(); + m_resource->sendFrame(); } void CWLTouchResource::sendCancel() { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendCancel(); + m_resource->sendCancel(); } void CWLTouchResource::sendShape(int32_t id, const Vector2D& shape) { - if (!owner || !currentSurface || resource->version() < 6) + if (!m_owner || !m_currentSurface || m_resource->version() < 6) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendShape(id, wl_fixed_from_double(shape.x), wl_fixed_from_double(shape.y)); + m_resource->sendShape(id, wl_fixed_from_double(shape.x), wl_fixed_from_double(shape.y)); } void CWLTouchResource::sendOrientation(int32_t id, double angle) { - if (!owner || !currentSurface || resource->version() < 6) + if (!m_owner || !m_currentSurface || m_resource->version() < 6) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH)) return; - resource->sendOrientation(id, wl_fixed_from_double(angle)); + m_resource->sendOrientation(id, wl_fixed_from_double(angle)); } -CWLPointerResource::CWLPointerResource(SP resource_, SP owner_) : owner(owner_), resource(resource_) { +CWLPointerResource::CWLPointerResource(SP resource_, SP owner_) : m_owner(owner_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CWlPointer* r) { PROTO::seat->destroyResource(this); }); - resource->setOnDestroy([this](CWlPointer* r) { PROTO::seat->destroyResource(this); }); + m_resource->setRelease([this](CWlPointer* r) { PROTO::seat->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlPointer* r) { PROTO::seat->destroyResource(this); }); - resource->setSetCursor([this](CWlPointer* r, uint32_t serial, wl_resource* surf, int32_t hotX, int32_t hotY) { - if (!owner) { + m_resource->setSetCursor([this](CWlPointer* r, uint32_t serial, wl_resource* surf, int32_t hotX, int32_t hotY) { + if (!m_owner) { LOGM(ERR, "Client bug: setCursor when seatClient is already dead"); return; } auto surfResource = surf ? CWLSurfaceResource::fromResource(surf) : nullptr; - if (surfResource && surfResource->role->role() != SURFACE_ROLE_CURSOR && surfResource->role->role() != SURFACE_ROLE_UNASSIGNED) { + if (surfResource && surfResource->m_role->role() != SURFACE_ROLE_CURSOR && surfResource->m_role->role() != SURFACE_ROLE_UNASSIGNED) { r->error(-1, "Cursor surface already has a different role"); return; } - if (surfResource && surfResource->role->role() != SURFACE_ROLE_CURSOR) { - surfResource->role = makeShared(); + if (surfResource && surfResource->m_role->role() != SURFACE_ROLE_CURSOR) { + surfResource->m_role = makeShared(); surfResource->updateCursorShm(); } - g_pSeatManager->onSetCursor(owner.lock(), serial, surfResource, {hotX, hotY}); + g_pSeatManager->onSetCursor(m_owner.lock(), serial, surfResource, {hotX, hotY}); }); - if (g_pSeatManager->m_state.pointerFocus && g_pSeatManager->m_state.pointerFocus->client() == resource->client()) + if (g_pSeatManager->m_state.pointerFocus && g_pSeatManager->m_state.pointerFocus->client() == m_resource->client()) sendEnter(g_pSeatManager->m_state.pointerFocus.lock(), {-1, -1} /* Coords don't really matter that much, they will be updated next move */); } int CWLPointerResource::version() { - return resource->version(); + return m_resource->version(); } bool CWLPointerResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLPointerResource::sendEnter(SP surface, const Vector2D& local) { - if (!owner || currentSurface == surface || !surface->getResource()->resource()) + if (!m_owner || m_currentSurface == surface || !surface->getResource()->resource()) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - if (currentSurface) { + if (m_currentSurface) { LOGM(WARN, "requested CWLPointerResource::sendEnter without sendLeave first."); sendLeave(); } - ASSERT(surface->client() == owner->client()); + ASSERT(surface->client() == m_owner->client()); - currentSurface = surface; - listeners.destroySurface = surface->events.destroy.registerListener([this](std::any d) { sendLeave(); }); + m_currentSurface = surface; + m_listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { sendLeave(); }); - resource->sendEnter(g_pSeatManager->nextSerial(owner.lock()), surface->getResource().get(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + m_resource->sendEnter(g_pSeatManager->nextSerial(m_owner.lock()), surface->getResource().get(), wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); } void CWLPointerResource::sendLeave() { - if (!owner || !currentSurface || !currentSurface->getResource()->resource()) + if (!m_owner || !m_currentSurface || !m_currentSurface->getResource()->resource()) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; // release all buttons unless we have a dnd going on in which case // the events shall be lost. if (!PROTO::data->dndActive()) { - for (auto const& b : pressedButtons) { + for (auto const& b : m_pressedButtons) { sendButton(Time::millis(Time::steadyNow()), b, WL_POINTER_BUTTON_STATE_RELEASED); } } - pressedButtons.clear(); + m_pressedButtons.clear(); - resource->sendLeave(g_pSeatManager->nextSerial(owner.lock()), currentSurface->getResource().get()); - currentSurface.reset(); - listeners.destroySurface.reset(); + m_resource->sendLeave(g_pSeatManager->nextSerial(m_owner.lock()), m_currentSurface->getResource().get()); + m_currentSurface.reset(); + m_listeners.destroySurface.reset(); } void CWLPointerResource::sendMotion(uint32_t timeMs, const Vector2D& local) { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendMotion(timeMs, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); + m_resource->sendMotion(timeMs, wl_fixed_from_double(local.x), wl_fixed_from_double(local.y)); } void CWLPointerResource::sendButton(uint32_t timeMs, uint32_t button, wl_pointer_button_state state) { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - if (state == WL_POINTER_BUTTON_STATE_RELEASED && std::find(pressedButtons.begin(), pressedButtons.end(), button) == pressedButtons.end()) { + if (state == WL_POINTER_BUTTON_STATE_RELEASED && std::find(m_pressedButtons.begin(), m_pressedButtons.end(), button) == m_pressedButtons.end()) { LOGM(ERR, "sendButton release on a non-pressed button"); return; - } else if (state == WL_POINTER_BUTTON_STATE_PRESSED && std::find(pressedButtons.begin(), pressedButtons.end(), button) != pressedButtons.end()) { + } else if (state == WL_POINTER_BUTTON_STATE_PRESSED && std::find(m_pressedButtons.begin(), m_pressedButtons.end(), button) != m_pressedButtons.end()) { LOGM(ERR, "sendButton press on a non-pressed button"); return; } if (state == WL_POINTER_BUTTON_STATE_RELEASED) - std::erase(pressedButtons, button); + std::erase(m_pressedButtons, button); else if (state == WL_POINTER_BUTTON_STATE_PRESSED) - pressedButtons.emplace_back(button); + m_pressedButtons.emplace_back(button); - resource->sendButton(g_pSeatManager->nextSerial(owner.lock()), timeMs, button, state); + m_resource->sendButton(g_pSeatManager->nextSerial(m_owner.lock()), timeMs, button, state); } void CWLPointerResource::sendAxis(uint32_t timeMs, wl_pointer_axis axis, double value) { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxis(timeMs, axis, wl_fixed_from_double(value)); + m_resource->sendAxis(timeMs, axis, wl_fixed_from_double(value)); } void CWLPointerResource::sendFrame() { - if (!owner || resource->version() < 5) + if (!m_owner || m_resource->version() < 5) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendFrame(); + m_resource->sendFrame(); } void CWLPointerResource::sendAxisSource(wl_pointer_axis_source source) { - if (!owner || !currentSurface || resource->version() < 5) + if (!m_owner || !m_currentSurface || m_resource->version() < 5) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxisSource(source); + m_resource->sendAxisSource(source); } void CWLPointerResource::sendAxisStop(uint32_t timeMs, wl_pointer_axis axis) { - if (!owner || !currentSurface || resource->version() < 5) + if (!m_owner || !m_currentSurface || m_resource->version() < 5) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxisStop(timeMs, axis); + m_resource->sendAxisStop(timeMs, axis); } void CWLPointerResource::sendAxisDiscrete(wl_pointer_axis axis, int32_t discrete) { - if (!owner || !currentSurface || resource->version() < 5) + if (!m_owner || !m_currentSurface || m_resource->version() < 5) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxisDiscrete(axis, discrete); + m_resource->sendAxisDiscrete(axis, discrete); } void CWLPointerResource::sendAxisValue120(wl_pointer_axis axis, int32_t value120) { - if (!owner || !currentSurface || resource->version() < 8) + if (!m_owner || !m_currentSurface || m_resource->version() < 8) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxisValue120(axis, value120); + m_resource->sendAxisValue120(axis, value120); } void CWLPointerResource::sendAxisRelativeDirection(wl_pointer_axis axis, wl_pointer_axis_relative_direction direction) { - if (!owner || !currentSurface || resource->version() < 9) + if (!m_owner || !m_currentSurface || m_resource->version() < 9) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - resource->sendAxisRelativeDirection(axis, direction); + m_resource->sendAxisRelativeDirection(axis, direction); } -CWLKeyboardResource::CWLKeyboardResource(SP resource_, SP owner_) : owner(owner_), resource(resource_) { +CWLKeyboardResource::CWLKeyboardResource(SP resource_, SP owner_) : m_owner(owner_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); - resource->setOnDestroy([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); + m_resource->setRelease([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); }); if (!g_pSeatManager->m_keyboard) { LOGM(ERR, "No keyboard on bound wl_keyboard??"); @@ -305,160 +305,160 @@ CWLKeyboardResource::CWLKeyboardResource(SP resource_, SPm_keyboard.lock()); repeatInfo(g_pSeatManager->m_keyboard->m_repeatRate, g_pSeatManager->m_keyboard->m_repeatDelay); - if (g_pSeatManager->m_state.keyboardFocus && g_pSeatManager->m_state.keyboardFocus->client() == resource->client()) + if (g_pSeatManager->m_state.keyboardFocus && g_pSeatManager->m_state.keyboardFocus->client() == m_resource->client()) sendEnter(g_pSeatManager->m_state.keyboardFocus.lock()); } bool CWLKeyboardResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLKeyboardResource::sendKeymap(SP keyboard) { if (!keyboard) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; std::string_view keymap = keyboard->m_xkbKeymapString; Hyprutils::OS::CFileDescriptor& fd = keyboard->m_xkbKeymapFD; uint32_t size = keyboard->m_xkbKeymapString.length() + 1; - if (keymap == lastKeymap) + if (keymap == m_lastKeymap) return; - lastKeymap = keymap; + m_lastKeymap = keymap; const wl_keyboard_keymap_format format = keyboard ? WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1 : WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP; - resource->sendKeymap(format, fd.get(), size); + m_resource->sendKeymap(format, fd.get(), size); } void CWLKeyboardResource::sendEnter(SP surface) { - if (!owner || currentSurface == surface || !surface->getResource()->resource()) + if (!m_owner || m_currentSurface == surface || !surface->getResource()->resource()) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - if (currentSurface) { + if (m_currentSurface) { LOGM(WARN, "requested CWLKeyboardResource::sendEnter without sendLeave first."); sendLeave(); } - ASSERT(surface->client() == owner->client()); + ASSERT(surface->client() == m_owner->client()); - currentSurface = surface; - listeners.destroySurface = surface->events.destroy.registerListener([this](std::any d) { sendLeave(); }); + m_currentSurface = surface; + m_listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { sendLeave(); }); wl_array arr; wl_array_init(&arr); - resource->sendEnter(g_pSeatManager->nextSerial(owner.lock()), surface->getResource().get(), &arr); + m_resource->sendEnter(g_pSeatManager->nextSerial(m_owner.lock()), surface->getResource().get(), &arr); wl_array_release(&arr); } void CWLKeyboardResource::sendLeave() { - if (!owner || !currentSurface || !currentSurface->getResource()->resource()) + if (!m_owner || !m_currentSurface || !m_currentSurface->getResource()->resource()) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - resource->sendLeave(g_pSeatManager->nextSerial(owner.lock()), currentSurface->getResource().get()); - currentSurface.reset(); - listeners.destroySurface.reset(); + m_resource->sendLeave(g_pSeatManager->nextSerial(m_owner.lock()), m_currentSurface->getResource().get()); + m_currentSurface.reset(); + m_listeners.destroySurface.reset(); } void CWLKeyboardResource::sendKey(uint32_t timeMs, uint32_t key, wl_keyboard_key_state state) { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - resource->sendKey(g_pSeatManager->nextSerial(owner.lock()), timeMs, key, state); + m_resource->sendKey(g_pSeatManager->nextSerial(m_owner.lock()), timeMs, key, state); } void CWLKeyboardResource::sendMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - if (!owner || !currentSurface) + if (!m_owner || !m_currentSurface) return; - if (!(PROTO::seat->currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - resource->sendModifiers(g_pSeatManager->nextSerial(owner.lock()), depressed, latched, locked, group); + m_resource->sendModifiers(g_pSeatManager->nextSerial(m_owner.lock()), depressed, latched, locked, group); } void CWLKeyboardResource::repeatInfo(uint32_t rate, uint32_t delayMs) { - if (!owner || resource->version() < 4 || (rate == lastRate && delayMs == lastDelayMs)) + if (!m_owner || m_resource->version() < 4 || (rate == m_lastRate && delayMs == m_lastDelayMs)) return; - lastRate = rate; - lastDelayMs = delayMs; + m_lastRate = rate; + m_lastDelayMs = delayMs; - resource->sendRepeatInfo(rate, delayMs); + m_resource->sendRepeatInfo(rate, delayMs); } -CWLSeatResource::CWLSeatResource(SP resource_) : resource(resource_) { +CWLSeatResource::CWLSeatResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlSeat* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CWlSeat* r) { + m_events.destroy.emit(); PROTO::seat->destroyResource(this); }); - resource->setRelease([this](CWlSeat* r) { - events.destroy.emit(); + m_resource->setRelease([this](CWlSeat* r) { + m_events.destroy.emit(); PROTO::seat->destroyResource(this); }); - pClient = resource->client(); + m_client = m_resource->client(); - resource->setGetKeyboard([this](CWlSeat* r, uint32_t id) { - const auto RESOURCE = PROTO::seat->m_vKeyboards.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + m_resource->setGetKeyboard([this](CWlSeat* r, uint32_t id) { + const auto RESOURCE = PROTO::seat->m_keyboards.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::seat->m_vKeyboards.pop_back(); + PROTO::seat->m_keyboards.pop_back(); return; } - keyboards.emplace_back(RESOURCE); + m_keyboards.emplace_back(RESOURCE); }); - resource->setGetPointer([this](CWlSeat* r, uint32_t id) { - const auto RESOURCE = PROTO::seat->m_vPointers.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + m_resource->setGetPointer([this](CWlSeat* r, uint32_t id) { + const auto RESOURCE = PROTO::seat->m_pointers.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::seat->m_vPointers.pop_back(); + PROTO::seat->m_pointers.pop_back(); return; } - pointers.emplace_back(RESOURCE); + m_pointers.emplace_back(RESOURCE); }); - resource->setGetTouch([this](CWlSeat* r, uint32_t id) { - const auto RESOURCE = PROTO::seat->m_vTouches.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + m_resource->setGetTouch([this](CWlSeat* r, uint32_t id) { + const auto RESOURCE = PROTO::seat->m_touches.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::seat->m_vTouches.pop_back(); + PROTO::seat->m_touches.pop_back(); return; } - touches.emplace_back(RESOURCE); + m_touches.emplace_back(RESOURCE); }); - if (resource->version() >= 2) - resource->sendName(HL_SEAT_NAME); + if (m_resource->version() >= 2) + m_resource->sendName(HL_SEAT_NAME); - sendCapabilities(PROTO::seat->currentCaps); + sendCapabilities(PROTO::seat->m_currentCaps); } CWLSeatResource::~CWLSeatResource() { - events.destroy.emit(); + m_events.destroy.emit(); } void CWLSeatResource::sendCapabilities(uint32_t caps) { @@ -470,15 +470,15 @@ void CWLSeatResource::sendCapabilities(uint32_t caps) { if (caps & eHIDCapabilityType::HID_INPUT_CAPABILITY_TOUCH) wlCaps |= WL_SEAT_CAPABILITY_TOUCH; - resource->sendCapabilities((wl_seat_capability)wlCaps); + m_resource->sendCapabilities((wl_seat_capability)wlCaps); } bool CWLSeatResource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CWLSeatResource::client() { - return pClient; + return m_client; } CWLSeatProtocol::CWLSeatProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -486,68 +486,68 @@ CWLSeatProtocol::CWLSeatProtocol(const wl_interface* iface, const int& ver, cons } void CWLSeatProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vSeatResources.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_seatResources.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vSeatResources.pop_back(); + m_seatResources.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "New seat resource bound at {:x}", (uintptr_t)RESOURCE.get()); - events.newSeatResource.emit(RESOURCE); + m_events.newSeatResource.emit(RESOURCE); } void CWLSeatProtocol::destroyResource(CWLSeatResource* seat) { - std::erase_if(m_vSeatResources, [&](const auto& other) { return other.get() == seat; }); + std::erase_if(m_seatResources, [&](const auto& other) { return other.get() == seat; }); } void CWLSeatProtocol::destroyResource(CWLKeyboardResource* resource) { - std::erase_if(m_vKeyboards, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_keyboards, [&](const auto& other) { return other.get() == resource; }); } void CWLSeatProtocol::destroyResource(CWLPointerResource* resource) { - std::erase_if(m_vPointers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_pointers, [&](const auto& other) { return other.get() == resource; }); } void CWLSeatProtocol::destroyResource(CWLTouchResource* resource) { - std::erase_if(m_vTouches, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_touches, [&](const auto& other) { return other.get() == resource; }); } void CWLSeatProtocol::updateCapabilities(uint32_t caps) { - if (caps == currentCaps) + if (caps == m_currentCaps) return; - currentCaps = caps; + m_currentCaps = caps; - for (auto const& s : m_vSeatResources) { + for (auto const& s : m_seatResources) { s->sendCapabilities(caps); } } void CWLSeatProtocol::updateKeymap() { - if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - for (auto const& k : m_vKeyboards) { + for (auto const& k : m_keyboards) { k->sendKeymap(g_pSeatManager->m_keyboard.lock()); } } void CWLSeatProtocol::updateRepeatInfo(uint32_t rate, uint32_t delayMs) { - if (!(currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) + if (!(m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_KEYBOARD)) return; - for (auto const& k : m_vKeyboards) { + for (auto const& k : m_keyboards) { k->repeatInfo(rate, delayMs); } } SP CWLSeatProtocol::seatResourceForClient(wl_client* client) { - for (auto const& r : m_vSeatResources) { + for (auto const& r : m_seatResources) { if (r->client() == client) return r; } @@ -556,8 +556,8 @@ SP CWLSeatProtocol::seatResourceForClient(wl_client* client) { } std::vector& CCursorSurfaceRole::cursorPixelData(SP surface) { - RASSERT(surface->role->role() == SURFACE_ROLE_CURSOR, "cursorPixelData called on a non-cursor surface"); + RASSERT(surface->m_role->role() == SURFACE_ROLE_CURSOR, "cursorPixelData called on a non-cursor surface"); - auto role = (CCursorSurfaceRole*)surface->role.get(); - return role->cursorShmPixelData; + auto role = (CCursorSurfaceRole*)surface->m_role.get(); + return role->m_cursorShmPixelData; } diff --git a/src/protocols/core/Seat.hpp b/src/protocols/core/Seat.hpp index a4889379..35839385 100644 --- a/src/protocols/core/Seat.hpp +++ b/src/protocols/core/Seat.hpp @@ -38,7 +38,7 @@ class CCursorSurfaceRole : public ISurfaceRole { static std::vector& cursorPixelData(SP surface); private: - std::vector cursorShmPixelData; + std::vector m_cursorShmPixelData; }; class CWLTouchResource { @@ -54,17 +54,17 @@ class CWLTouchResource { void sendShape(int32_t id, const Vector2D& shape); void sendOrientation(int32_t id, double angle); - WP owner; + WP m_owner; private: - SP resource; - WP currentSurface; + SP m_resource; + WP m_currentSurface; - int fingers = 0; + int m_fingers = 0; struct { CHyprSignalListener destroySurface; - } listeners; + } m_listeners; }; class CWLPointerResource { @@ -85,17 +85,17 @@ class CWLPointerResource { void sendAxisValue120(wl_pointer_axis axis, int32_t value120); void sendAxisRelativeDirection(wl_pointer_axis axis, wl_pointer_axis_relative_direction direction); - WP owner; + WP m_owner; private: - SP resource; - WP currentSurface; + SP m_resource; + WP m_currentSurface; - std::vector pressedButtons; + std::vector m_pressedButtons; struct { CHyprSignalListener destroySurface; - } listeners; + } m_listeners; }; class CWLKeyboardResource { @@ -110,19 +110,19 @@ class CWLKeyboardResource { void sendMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group); void repeatInfo(uint32_t rate, uint32_t delayMs); - WP owner; + WP m_owner; private: - SP resource; - WP currentSurface; + SP m_resource; + WP m_currentSurface; struct { CHyprSignalListener destroySurface; - } listeners; + } m_listeners; - std::string lastKeymap = ""; - uint32_t lastRate = 0; - uint32_t lastDelayMs = 0; + std::string m_lastKeymap = ""; + uint32_t m_lastRate = 0; + uint32_t m_lastDelayMs = 0; }; class CWLSeatResource { @@ -135,19 +135,19 @@ class CWLSeatResource { bool good(); wl_client* client(); - std::vector> pointers; - std::vector> keyboards; - std::vector> touches; + std::vector> m_pointers; + std::vector> m_keyboards; + std::vector> m_touches; - WP self; + WP m_self; struct { CSignal destroy; - } events; + } m_events; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; }; class CWLSeatProtocol : public IWaylandProtocol { @@ -158,7 +158,7 @@ class CWLSeatProtocol : public IWaylandProtocol { struct { CSignal newSeatResource; // SP - } events; + } m_events; private: void updateCapabilities(uint32_t caps); // in IHID caps @@ -171,15 +171,15 @@ class CWLSeatProtocol : public IWaylandProtocol { void destroyResource(CWLPointerResource* resource); // - std::vector> m_vSeatResources; - std::vector> m_vKeyboards; - std::vector> m_vTouches; - std::vector> m_vPointers; + std::vector> m_seatResources; + std::vector> m_keyboards; + std::vector> m_touches; + std::vector> m_pointers; SP seatResourceForClient(wl_client* client); // - uint32_t currentCaps = 0; + uint32_t m_currentCaps = 0; friend class CWLSeatResource; friend class CWLKeyboardResource; diff --git a/src/protocols/core/Shm.cpp b/src/protocols/core/Shm.cpp index 420b4a3f..6ebfa64f 100644 --- a/src/protocols/core/Shm.cpp +++ b/src/protocols/core/Shm.cpp @@ -10,22 +10,22 @@ using namespace Hyprutils::OS; CWLSHMBuffer::CWLSHMBuffer(SP pool_, uint32_t id, int32_t offset_, const Vector2D& size_, int32_t stride_, uint32_t fmt_) { - if UNLIKELY (!pool_->pool->data) + if UNLIKELY (!pool_->m_pool->m_data) return; g_pHyprRenderer->makeEGLCurrent(); - size = size_; - pool = pool_->pool; - stride = stride_; - fmt = fmt_; - offset = offset_; - opaque = NFormatUtils::isFormatOpaque(NFormatUtils::shmToDRM(fmt_)); + size = size_; + m_pool = pool_->m_pool; + m_stride = stride_; + m_fmt = fmt_; + m_offset = offset_; + opaque = NFormatUtils::isFormatOpaque(NFormatUtils::shmToDRM(fmt_)); - resource = CWLBufferResource::create(makeShared(pool_->resource->client(), 1, id)); + resource = CWLBufferResource::create(makeShared(pool_->m_resource->client(), 1, id)); - listeners.bufferResourceDestroy = events.destroy.registerListener([this](std::any d) { - listeners.bufferResourceDestroy.reset(); + m_listeners.bufferResourceDestroy = events.destroy.registerListener([this](std::any d) { + m_listeners.bufferResourceDestroy.reset(); PROTO::shm->destroyResource(this); }); } @@ -50,16 +50,16 @@ bool CWLSHMBuffer::isSynchronous() { Aquamarine::SSHMAttrs CWLSHMBuffer::shm() { Aquamarine::SSHMAttrs attrs; attrs.success = true; - attrs.fd = pool->fd.get(); - attrs.format = NFormatUtils::shmToDRM(fmt); + attrs.fd = m_pool->m_fd.get(); + attrs.format = NFormatUtils::shmToDRM(m_fmt); attrs.size = size; - attrs.stride = stride; - attrs.offset = offset; + attrs.stride = m_stride; + attrs.offset = m_offset; return attrs; } std::tuple CWLSHMBuffer::beginDataPtr(uint32_t flags) { - return {(uint8_t*)pool->data + offset, fmt, stride * size.y}; + return {(uint8_t*)m_pool->m_data + m_offset, m_fmt, m_stride * size.y}; } void CWLSHMBuffer::endDataPtr() { @@ -74,24 +74,24 @@ void CWLSHMBuffer::update(const CRegion& damage) { ; } -CSHMPool::CSHMPool(CFileDescriptor fd_, size_t size_) : fd(std::move(fd_)), size(size_), data(mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd.get(), 0)) { +CSHMPool::CSHMPool(CFileDescriptor fd_, size_t size_) : m_fd(std::move(fd_)), m_size(size_), m_data(mmap(nullptr, m_size, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd.get(), 0)) { ; } CSHMPool::~CSHMPool() { - munmap(data, size); + munmap(m_data, m_size); } void CSHMPool::resize(size_t size_) { - LOGM(LOG, "Resizing a SHM pool from {} to {}", size, size_); + LOGM(LOG, "Resizing a SHM pool from {} to {}", m_size, size_); - if (data) - munmap(data, size); - size = size_; - data = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd.get(), 0); + if (m_data) + munmap(m_data, m_size); + m_size = size_; + m_data = mmap(nullptr, m_size, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd.get(), 0); - if UNLIKELY (data == MAP_FAILED) - LOGM(ERR, "Couldn't mmap {} bytes from fd {} of shm client", size, fd.get()); + if UNLIKELY (m_data == MAP_FAILED) + LOGM(ERR, "Couldn't mmap {} bytes from fd {} of shm client", m_size, m_fd.get()); } static int shmIsSizeValid(CFileDescriptor& fd, size_t size) { @@ -104,7 +104,7 @@ static int shmIsSizeValid(CFileDescriptor& fd, size_t size) { return (size_t)st.st_size >= size; } -CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor fd_, size_t size_) : resource(resource_) { +CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor fd_, size_t size_) : m_resource(resource_) { if UNLIKELY (!good()) return; @@ -113,31 +113,31 @@ CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor return; } - pool = makeShared(std::move(fd_), size_); + m_pool = makeShared(std::move(fd_), size_); - resource->setDestroy([this](CWlShmPool* r) { PROTO::shm->destroyResource(this); }); - resource->setOnDestroy([this](CWlShmPool* r) { PROTO::shm->destroyResource(this); }); + m_resource->setDestroy([this](CWlShmPool* r) { PROTO::shm->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlShmPool* r) { PROTO::shm->destroyResource(this); }); - resource->setResize([this](CWlShmPool* r, int32_t size_) { - if UNLIKELY (size_ < (int32_t)pool->size) { + m_resource->setResize([this](CWlShmPool* r, int32_t size_) { + if UNLIKELY (size_ < (int32_t)m_pool->m_size) { r->error(-1, "Shrinking a shm pool is illegal"); return; } - if UNLIKELY (!shmIsSizeValid(pool->fd, size_)) { + if UNLIKELY (!shmIsSizeValid(m_pool->m_fd, size_)) { r->error(-1, "The size of the file is not big enough for the shm pool"); return; } - pool->resize(size_); + m_pool->resize(size_); }); - resource->setCreateBuffer([this](CWlShmPool* r, uint32_t id, int32_t offset, int32_t w, int32_t h, int32_t stride, uint32_t fmt) { - if UNLIKELY (!pool || !pool->data) { + m_resource->setCreateBuffer([this](CWlShmPool* r, uint32_t id, int32_t offset, int32_t w, int32_t h, int32_t stride, uint32_t fmt) { + if UNLIKELY (!m_pool || !m_pool->m_data) { r->error(-1, "The provided shm pool failed to allocate properly"); return; } - if UNLIKELY (std::find(PROTO::shm->shmFormats.begin(), PROTO::shm->shmFormats.end(), fmt) == PROTO::shm->shmFormats.end()) { + if UNLIKELY (std::find(PROTO::shm->m_shmFormats.begin(), PROTO::shm->m_shmFormats.end(), fmt) == PROTO::shm->m_shmFormats.end()) { r->error(WL_SHM_ERROR_INVALID_FORMAT, "Format invalid"); return; } @@ -147,11 +147,11 @@ CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor return; } - const auto RESOURCE = PROTO::shm->m_vBuffers.emplace_back(makeShared(self.lock(), id, offset, Vector2D{w, h}, stride, fmt)); + const auto RESOURCE = PROTO::shm->m_buffers.emplace_back(makeShared(m_self.lock(), id, offset, Vector2D{w, h}, stride, fmt)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::shm->m_vBuffers.pop_back(); + PROTO::shm->m_buffers.pop_back(); return; } @@ -159,41 +159,41 @@ CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor RESOURCE->resource->buffer = RESOURCE; }); - if UNLIKELY (pool->data == MAP_FAILED) - resource->error(WL_SHM_ERROR_INVALID_FD, "Couldn't mmap from fd"); + if UNLIKELY (m_pool->m_data == MAP_FAILED) + m_resource->error(WL_SHM_ERROR_INVALID_FD, "Couldn't mmap from fd"); } bool CWLSHMPoolResource::good() { - return resource->resource(); + return m_resource->resource(); } -CWLSHMResource::CWLSHMResource(SP resource_) : resource(resource_) { +CWLSHMResource::CWLSHMResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlShm* r) { PROTO::shm->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlShm* r) { PROTO::shm->destroyResource(this); }); - resource->setCreatePool([](CWlShm* r, uint32_t id, int32_t fd, int32_t size) { + m_resource->setCreatePool([](CWlShm* r, uint32_t id, int32_t fd, int32_t size) { CFileDescriptor poolFd{fd}; - const auto RESOURCE = PROTO::shm->m_vPools.emplace_back(makeShared(makeShared(r->client(), r->version(), id), std::move(poolFd), size)); + const auto RESOURCE = PROTO::shm->m_pools.emplace_back(makeShared(makeShared(r->client(), r->version(), id), std::move(poolFd), size)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::shm->m_vPools.pop_back(); + PROTO::shm->m_pools.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); // send a few supported formats. No need for any other I think? - for (auto const& s : PROTO::shm->shmFormats) { - resource->sendFormat((wl_shm_format)s); + for (auto const& s : PROTO::shm->m_shmFormats) { + m_resource->sendFormat((wl_shm_format)s); } } bool CWLSHMResource::good() { - return resource->resource(); + return m_resource->resource(); } CWLSHMProtocol::CWLSHMProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -201,36 +201,36 @@ CWLSHMProtocol::CWLSHMProtocol(const wl_interface* iface, const int& ver, const } void CWLSHMProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - if (shmFormats.empty()) { - shmFormats.push_back(WL_SHM_FORMAT_ARGB8888); - shmFormats.push_back(WL_SHM_FORMAT_XRGB8888); + if (m_shmFormats.empty()) { + m_shmFormats.push_back(WL_SHM_FORMAT_ARGB8888); + m_shmFormats.push_back(WL_SHM_FORMAT_XRGB8888); static const std::array supportedShmFourccFormats = { DRM_FORMAT_XBGR8888, DRM_FORMAT_ABGR8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_ARGB2101010, DRM_FORMAT_XBGR2101010, DRM_FORMAT_ABGR2101010, }; for (auto const& fmt : supportedShmFourccFormats) { - shmFormats.push_back(fmt); + m_shmFormats.push_back(fmt); } } - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CWLSHMProtocol::destroyResource(CWLSHMResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CWLSHMProtocol::destroyResource(CWLSHMPoolResource* resource) { - std::erase_if(m_vPools, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_pools, [&](const auto& other) { return other.get() == resource; }); } void CWLSHMProtocol::destroyResource(CWLSHMBuffer* resource) { - std::erase_if(m_vBuffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_buffers, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/core/Shm.hpp b/src/protocols/core/Shm.hpp index 61b26f12..e504146d 100644 --- a/src/protocols/core/Shm.hpp +++ b/src/protocols/core/Shm.hpp @@ -23,9 +23,9 @@ class CSHMPool { CSHMPool(Hyprutils::OS::CFileDescriptor fd, size_t size); ~CSHMPool(); - Hyprutils::OS::CFileDescriptor fd; - size_t size = 0; - void* data = nullptr; + Hyprutils::OS::CFileDescriptor m_fd; + size_t m_size = 0; + void* m_data = nullptr; void resize(size_t size); }; @@ -45,14 +45,15 @@ class CWLSHMBuffer : public IHLBuffer { bool good(); - int32_t offset = 0, stride = 0; - uint32_t fmt = 0; - SP pool; + int32_t m_offset = 0; + int32_t m_stride = 0; + uint32_t m_fmt = 0; + SP m_pool; private: struct { CHyprSignalListener bufferResourceDestroy; - } listeners; + } m_listeners; }; class CWLSHMPoolResource { @@ -61,12 +62,12 @@ class CWLSHMPoolResource { bool good(); - SP pool; + SP m_pool; - WP self; + WP m_self; private: - SP resource; + SP m_resource; friend class CWLSHMBuffer; }; @@ -78,7 +79,7 @@ class CWLSHMResource { bool good(); private: - SP resource; + SP m_resource; }; class CWLSHMProtocol : public IWaylandProtocol { @@ -93,12 +94,12 @@ class CWLSHMProtocol : public IWaylandProtocol { void destroyResource(CWLSHMBuffer* resource); // - std::vector> m_vManagers; - std::vector> m_vPools; - std::vector> m_vBuffers; + std::vector> m_managers; + std::vector> m_pools; + std::vector> m_buffers; // - std::vector shmFormats; + std::vector m_shmFormats; friend class CWLSHMResource; friend class CWLSHMPoolResource; diff --git a/src/protocols/core/Subcompositor.cpp b/src/protocols/core/Subcompositor.cpp index 82f4aedb..4111b5dc 100644 --- a/src/protocols/core/Subcompositor.cpp +++ b/src/protocols/core/Subcompositor.cpp @@ -3,154 +3,154 @@ #include CWLSubsurfaceResource::CWLSubsurfaceResource(SP resource_, SP surface_, SP parent_) : - surface(surface_), parent(parent_), resource(resource_) { + m_surface(surface_), m_parent(parent_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlSubsurface* r) { destroy(); }); - resource->setDestroy([this](CWlSubsurface* r) { destroy(); }); + m_resource->setOnDestroy([this](CWlSubsurface* r) { destroy(); }); + m_resource->setDestroy([this](CWlSubsurface* r) { destroy(); }); - resource->setSetPosition([this](CWlSubsurface* r, int32_t x, int32_t y) { position = {x, y}; }); + m_resource->setSetPosition([this](CWlSubsurface* r, int32_t x, int32_t y) { m_position = {x, y}; }); - resource->setSetDesync([this](CWlSubsurface* r) { sync = false; }); - resource->setSetSync([this](CWlSubsurface* r) { sync = true; }); + m_resource->setSetDesync([this](CWlSubsurface* r) { m_sync = false; }); + m_resource->setSetSync([this](CWlSubsurface* r) { m_sync = true; }); - resource->setPlaceAbove([this](CWlSubsurface* r, wl_resource* surf) { + m_resource->setPlaceAbove([this](CWlSubsurface* r, wl_resource* surf) { auto SURF = CWLSurfaceResource::fromResource(surf); - if (!parent) + if (!m_parent) return; auto pushAboveIndex = [this](int idx) -> void { - for (auto const& c : parent->subsurfaces) { - if (c->zIndex >= idx) - c->zIndex++; + for (auto const& c : m_parent->m_subsurfaces) { + if (c->m_zIndex >= idx) + c->m_zIndex++; } }; - std::erase_if(parent->subsurfaces, [this](const auto& e) { return e == self || !e; }); + std::erase_if(m_parent->m_subsurfaces, [this](const auto& e) { return e == m_self || !e; }); - auto it = std::find(parent->subsurfaces.begin(), parent->subsurfaces.end(), SURF); + auto it = std::find(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), SURF); - if (it == parent->subsurfaces.end()) { + if (it == m_parent->m_subsurfaces.end()) { LOGM(ERR, "Invalid surface reference in placeAbove, likely parent"); pushAboveIndex(1); - parent->subsurfaces.emplace_back(self); - zIndex = 1; + m_parent->m_subsurfaces.emplace_back(m_self); + m_zIndex = 1; } else { - pushAboveIndex((*it)->zIndex); - zIndex = (*it)->zIndex; - parent->subsurfaces.emplace_back(self); + pushAboveIndex((*it)->m_zIndex); + m_zIndex = (*it)->m_zIndex; + m_parent->m_subsurfaces.emplace_back(m_self); } - std::sort(parent->subsurfaces.begin(), parent->subsurfaces.end(), [](const auto& a, const auto& b) { return a->zIndex < b->zIndex; }); + std::sort(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); }); - resource->setPlaceBelow([this](CWlSubsurface* r, wl_resource* surf) { + m_resource->setPlaceBelow([this](CWlSubsurface* r, wl_resource* surf) { auto SURF = CWLSurfaceResource::fromResource(surf); - if (!parent) + if (!m_parent) return; auto pushBelowIndex = [this](int idx) -> void { - for (auto const& c : parent->subsurfaces) { - if (c->zIndex <= idx) - c->zIndex--; + for (auto const& c : m_parent->m_subsurfaces) { + if (c->m_zIndex <= idx) + c->m_zIndex--; } }; - std::erase_if(parent->subsurfaces, [this](const auto& e) { return e == self || !e; }); + std::erase_if(m_parent->m_subsurfaces, [this](const auto& e) { return e == m_self || !e; }); - auto it = std::find(parent->subsurfaces.begin(), parent->subsurfaces.end(), SURF); + auto it = std::find(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), SURF); - if (it == parent->subsurfaces.end()) { + if (it == m_parent->m_subsurfaces.end()) { LOGM(ERR, "Invalid surface reference in placeBelow, likely parent"); pushBelowIndex(-1); - parent->subsurfaces.emplace_back(self); - zIndex = -1; + m_parent->m_subsurfaces.emplace_back(m_self); + m_zIndex = -1; } else { - pushBelowIndex((*it)->zIndex); - zIndex = (*it)->zIndex; - parent->subsurfaces.emplace_back(self); + pushBelowIndex((*it)->m_zIndex); + m_zIndex = (*it)->m_zIndex; + m_parent->m_subsurfaces.emplace_back(m_self); } - std::sort(parent->subsurfaces.begin(), parent->subsurfaces.end(), [](const auto& a, const auto& b) { return a->zIndex < b->zIndex; }); + std::sort(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); }); - listeners.commitSurface = surface->events.commit.registerListener([this](std::any d) { - if (surface->current.texture && !surface->mapped) { - surface->map(); - surface->events.map.emit(); + m_listeners.commitSurface = m_surface->m_events.commit.registerListener([this](std::any d) { + if (m_surface->m_current.texture && !m_surface->m_mapped) { + m_surface->map(); + m_surface->m_events.map.emit(); return; } - if (!surface->current.texture && surface->mapped) { - surface->events.unmap.emit(); - surface->unmap(); + if (!m_surface->m_current.texture && m_surface->m_mapped) { + m_surface->m_events.unmap.emit(); + m_surface->unmap(); return; } }); } CWLSubsurfaceResource::~CWLSubsurfaceResource() { - events.destroy.emit(); - if (surface) - surface->resetRole(); + m_events.destroy.emit(); + if (m_surface) + m_surface->resetRole(); } void CWLSubsurfaceResource::destroy() { - if (surface && surface->mapped) { - surface->events.unmap.emit(); - surface->unmap(); + if (m_surface && m_surface->m_mapped) { + m_surface->m_events.unmap.emit(); + m_surface->unmap(); } - events.destroy.emit(); + m_events.destroy.emit(); PROTO::subcompositor->destroyResource(this); } Vector2D CWLSubsurfaceResource::posRelativeToParent() { - Vector2D pos = position; - SP surf = parent.lock(); + Vector2D pos = m_position; + SP surf = m_parent.lock(); // some apps might create cycles, which I believe _technically_ are not a protocol error // in some cases, notably firefox likes to do that, so we keep track of what // surfaces we've visited and if we hit a surface we've visited we bail out. std::vector> surfacesVisited; - while (surf->role->role() == SURFACE_ROLE_SUBSURFACE && + while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && std::find_if(surfacesVisited.begin(), surfacesVisited.end(), [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { surfacesVisited.emplace_back(surf); - auto subsurface = ((CSubsurfaceRole*)parent->role.get())->subsurface.lock(); - pos += subsurface->position; - surf = subsurface->parent.lock(); + auto subsurface = ((CSubsurfaceRole*)m_parent->m_role.get())->m_subsurface.lock(); + pos += subsurface->m_position; + surf = subsurface->m_parent.lock(); } return pos; } bool CWLSubsurfaceResource::good() { - return resource->resource(); + return m_resource->resource(); } SP CWLSubsurfaceResource::t1Parent() { - SP surf = parent.lock(); + SP surf = m_parent.lock(); std::vector> surfacesVisited; - while (surf->role->role() == SURFACE_ROLE_SUBSURFACE && + while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && std::find_if(surfacesVisited.begin(), surfacesVisited.end(), [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { surfacesVisited.emplace_back(surf); - auto subsurface = ((CSubsurfaceRole*)parent->role.get())->subsurface.lock(); - surf = subsurface->parent.lock(); + auto subsurface = ((CSubsurfaceRole*)m_parent->m_role.get())->m_subsurface.lock(); + surf = subsurface->m_parent.lock(); } return surf; } -CWLSubcompositorResource::CWLSubcompositorResource(SP resource_) : resource(resource_) { +CWLSubcompositorResource::CWLSubcompositorResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlSubcompositor* r) { PROTO::subcompositor->destroyResource(this); }); - resource->setDestroy([this](CWlSubcompositor* r) { PROTO::subcompositor->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlSubcompositor* r) { PROTO::subcompositor->destroyResource(this); }); + m_resource->setDestroy([this](CWlSubcompositor* r) { PROTO::subcompositor->destroyResource(this); }); - resource->setGetSubsurface([](CWlSubcompositor* r, uint32_t id, wl_resource* surface, wl_resource* parent) { + m_resource->setGetSubsurface([](CWlSubcompositor* r, uint32_t id, wl_resource* surface, wl_resource* parent) { auto SURF = CWLSurfaceResource::fromResource(surface); auto PARENT = CWLSurfaceResource::fromResource(parent); @@ -159,15 +159,15 @@ CWLSubcompositorResource::CWLSubcompositorResource(SP resource return; } - if UNLIKELY (SURF->role->role() != SURFACE_ROLE_UNASSIGNED) { + if UNLIKELY (SURF->m_role->role() != SURFACE_ROLE_UNASSIGNED) { r->error(-1, "Surface already has a different role"); return; } SP t1Parent = nullptr; - if (PARENT->role->role() == SURFACE_ROLE_SUBSURFACE) { - auto subsurface = ((CSubsurfaceRole*)PARENT->role.get())->subsurface.lock(); + if (PARENT->m_role->role() == SURFACE_ROLE_SUBSURFACE) { + auto subsurface = ((CSubsurfaceRole*)PARENT->m_role.get())->m_subsurface.lock(); t1Parent = subsurface->t1Parent(); } else t1Parent = PARENT; @@ -178,26 +178,26 @@ CWLSubcompositorResource::CWLSubcompositorResource(SP resource } const auto RESOURCE = - PROTO::subcompositor->m_vSurfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF, PARENT)); + PROTO::subcompositor->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF, PARENT)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::subcompositor->m_vSurfaces.pop_back(); + PROTO::subcompositor->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; - SURF->role = makeShared(RESOURCE); - PARENT->subsurfaces.emplace_back(RESOURCE); + RESOURCE->m_self = RESOURCE; + SURF->m_role = makeShared(RESOURCE); + PARENT->m_subsurfaces.emplace_back(RESOURCE); LOGM(LOG, "New wl_subsurface with id {} at {:x}", id, (uintptr_t)RESOURCE.get()); - PARENT->events.newSubsurface.emit(RESOURCE); + PARENT->m_events.newSubsurface.emit(RESOURCE); }); } bool CWLSubcompositorResource::good() { - return resource->resource(); + return m_resource->resource(); } CWLSubcompositorProtocol::CWLSubcompositorProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -205,23 +205,23 @@ CWLSubcompositorProtocol::CWLSubcompositorProtocol(const wl_interface* iface, co } void CWLSubcompositorProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CWLSubcompositorProtocol::destroyResource(CWLSubcompositorResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CWLSubcompositorProtocol::destroyResource(CWLSubsurfaceResource* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } -CSubsurfaceRole::CSubsurfaceRole(SP sub) : subsurface(sub) { +CSubsurfaceRole::CSubsurfaceRole(SP sub) : m_subsurface(sub) { ; } diff --git a/src/protocols/core/Subcompositor.hpp b/src/protocols/core/Subcompositor.hpp index dc713044..cf7913ec 100644 --- a/src/protocols/core/Subcompositor.hpp +++ b/src/protocols/core/Subcompositor.hpp @@ -25,7 +25,7 @@ class CSubsurfaceRole : public ISurfaceRole { return SURFACE_ROLE_SUBSURFACE; } - WP subsurface; + WP m_subsurface; }; class CWLSubsurfaceResource { @@ -37,28 +37,28 @@ class CWLSubsurfaceResource { bool good(); SP t1Parent(); - bool sync = false; - Vector2D position; + bool m_sync = false; + Vector2D m_position; - WP surface; - WP parent; + WP m_surface; + WP m_parent; - WP self; + WP m_self; - int zIndex = 1; // by default, it's above + int m_zIndex = 1; // by default, it's above struct { CSignal destroy; - } events; + } m_events; private: - SP resource; + SP m_resource; void destroy(); struct { CHyprSignalListener commitSurface; - } listeners; + } m_listeners; }; class CWLSubcompositorResource { @@ -68,7 +68,7 @@ class CWLSubcompositorResource { bool good(); private: - SP resource; + SP m_resource; }; class CWLSubcompositorProtocol : public IWaylandProtocol { @@ -82,8 +82,8 @@ class CWLSubcompositorProtocol : public IWaylandProtocol { void destroyResource(CWLSubsurfaceResource* resource); // - std::vector> m_vManagers; - std::vector> m_vSurfaces; + std::vector> m_managers; + std::vector> m_surfaces; friend class CWLSubcompositorResource; friend class CWLSubsurfaceResource; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 31fd7b0a..c213f860 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1568,7 +1568,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } const auto imageDescription = - m_RenderData.surface.valid() && m_RenderData.surface->colorManagement.valid() ? m_RenderData.surface->colorManagement->imageDescription() : SImageDescription{}; + m_RenderData.surface.valid() && m_RenderData.surface->m_colorManagement.valid() ? m_RenderData.surface->m_colorManagement->imageDescription() : SImageDescription{}; const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ || (imageDescription == m_RenderData.pMonitor->m_imageDescription) /* Source and target have the same image description */ @@ -2088,9 +2088,9 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { CRegion inverseOpaque; - pixman_box32_t surfbox = {0, 0, PSURFACE->current.size.x, PSURFACE->current.size.y}; - CRegion opaqueRegion{PSURFACE->current.opaque}; - inverseOpaque.set(opaqueRegion).invert(&surfbox).intersect(0, 0, PSURFACE->current.size.x, PSURFACE->current.size.y); + pixman_box32_t surfbox = {0, 0, PSURFACE->m_current.size.x, PSURFACE->m_current.size.y}; + CRegion opaqueRegion{PSURFACE->m_current.opaque}; + inverseOpaque.set(opaqueRegion).invert(&surfbox).intersect(0, 0, PSURFACE->m_current.size.x, PSURFACE->m_current.size.y); if (inverseOpaque.empty()) return false; @@ -2224,11 +2224,11 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f // amazing hack: the surface has an opaque region! CRegion inverseOpaque; - if (a >= 1.f && std::round(pSurface->current.size.x * m_RenderData.pMonitor->m_scale) == box.w && - std::round(pSurface->current.size.y * m_RenderData.pMonitor->m_scale) == box.h) { - pixman_box32_t surfbox = {0, 0, pSurface->current.size.x * pSurface->current.scale, pSurface->current.size.y * pSurface->current.scale}; - inverseOpaque = pSurface->current.opaque; - inverseOpaque.invert(&surfbox).intersect(0, 0, pSurface->current.size.x * pSurface->current.scale, pSurface->current.size.y * pSurface->current.scale); + if (a >= 1.f && std::round(pSurface->m_current.size.x * m_RenderData.pMonitor->m_scale) == box.w && + std::round(pSurface->m_current.size.y * m_RenderData.pMonitor->m_scale) == box.h) { + pixman_box32_t surfbox = {0, 0, pSurface->m_current.size.x * pSurface->m_current.scale, pSurface->m_current.size.y * pSurface->m_current.scale}; + inverseOpaque = pSurface->m_current.opaque; + inverseOpaque.invert(&surfbox).intersect(0, 0, pSurface->m_current.size.x * pSurface->m_current.scale, pSurface->m_current.size.y * pSurface->m_current.scale); if (inverseOpaque.empty()) { renderTexture(tex, box, a, round, roundingPower, false, true); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 15c52ba9..1b861f7a 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -589,7 +589,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T pWindow->m_wlSurface->resource()->breadthfirst( [this, &renderdata, &pWindow](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; - renderdata.texture = s->current.texture; + renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pWindow->m_wlSurface->resource(); m_sRenderPass.add(makeShared(renderdata)); @@ -657,7 +657,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T popup->m_wlSurface->resource()->breadthfirst( [this, &renderdata](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; - renderdata.texture = s->current.texture; + renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = false; m_sRenderPass.add(makeShared(renderdata)); @@ -739,7 +739,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s pLayer->m_surface->resource()->breadthfirst( [this, &renderdata, &pLayer](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; - renderdata.texture = s->current.texture; + renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pLayer->m_surface->resource(); m_sRenderPass.add(makeShared(renderdata)); @@ -760,7 +760,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s Vector2D pos = popup->coordsRelativeToParent(); renderdata.localPos = pos; - renderdata.texture = popup->m_wlSurface->resource()->current.texture; + renderdata.texture = popup->m_wlSurface->resource()->m_current.texture; renderdata.surface = popup->m_wlSurface->resource(); renderdata.mainSurface = false; m_sRenderPass.add(makeShared(renderdata)); @@ -779,8 +779,8 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, con renderdata.surface = SURF; renderdata.decorate = false; - renderdata.w = SURF->current.size.x; - renderdata.h = SURF->current.size.y; + renderdata.w = SURF->m_current.size.x; + renderdata.h = SURF->m_current.size.y; static auto PBLUR = CConfigValue("decoration:blur:enabled"); static auto PBLURIMES = CConfigValue("decoration:blur:input_methods"); @@ -795,7 +795,7 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, con SURF->breadthfirst( [this, &renderdata, &SURF](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; - renderdata.texture = s->current.texture; + renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == SURF; m_sRenderPass.add(makeShared(renderdata)); @@ -816,7 +816,7 @@ void CHyprRenderer::renderSessionLockSurface(WP pSurface, P renderdata.surface->breadthfirst( [this, &renderdata, &pSurface](SP s, const Vector2D& offset, void* data) { renderdata.localPos = offset; - renderdata.texture = s->current.texture; + renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pSurface->surface->surface(); m_sRenderPass.add(makeShared(renderdata)); @@ -1053,10 +1053,10 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPcurrent.viewport.hasSource) { + if (pSurface->m_current.viewport.hasSource) { // we stretch it to dest. if no dest, to 1,1 - Vector2D const& bufferSize = pSurface->current.bufferSize; - auto const& bufferSource = pSurface->current.viewport.source; + Vector2D const& bufferSize = pSurface->m_current.bufferSize; + auto const& bufferSource = pSurface->m_current.viewport.source; // calculate UV for the basic src_box. Assume dest == size. Scale to dest later uvTL = Vector2D(bufferSource.x / bufferSize.x, bufferSource.y / bufferSize.y); @@ -1071,8 +1071,8 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPcurrent.bufferSize; - const Vector2D MISALIGNMENT = pSurface->current.bufferSize - projSize; + const Vector2D PIXELASUV = Vector2D{1, 1} / pSurface->m_current.bufferSize; + const Vector2D MISALIGNMENT = pSurface->m_current.bufferSize - projSize; if (MISALIGNMENT != Vector2D{}) uvBR -= MISALIGNMENT * PIXELASUV; } @@ -1083,9 +1083,10 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_scale); - const bool SCALE_UNAWARE = MONITOR_WL_SCALE != pSurface->current.scale && !pSurface->current.viewport.hasDestination; + const bool SCALE_UNAWARE = MONITOR_WL_SCALE != pSurface->m_current.scale && !pSurface->m_current.viewport.hasDestination; const auto EXPECTED_SIZE = - ((pSurface->current.viewport.hasDestination ? pSurface->current.viewport.destination : pSurface->current.bufferSize / pSurface->current.scale) * pMonitor->m_scale) + ((pSurface->m_current.viewport.hasDestination ? pSurface->m_current.viewport.destination : pSurface->m_current.bufferSize / pSurface->m_current.scale) * + pMonitor->m_scale) .round(); if (!SCALE_UNAWARE && (EXPECTED_SIZE.x < projSize.x || EXPECTED_SIZE.y < projSize.y)) { // this will not work with shm AFAIK, idk why. @@ -1111,10 +1112,10 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SP projSizeUnscaled.x || geom.height > projSizeUnscaled.y) { - const auto XPERC = (double)geom.x / (double)pSurface->current.size.x; - const auto YPERC = (double)geom.y / (double)pSurface->current.size.y; - const auto WPERC = (double)(geom.x + geom.width) / (double)pSurface->current.size.x; - const auto HPERC = (double)(geom.y + geom.height) / (double)pSurface->current.size.y; + const auto XPERC = (double)geom.x / (double)pSurface->m_current.size.x; + const auto YPERC = (double)geom.y / (double)pSurface->m_current.size.y; + const auto WPERC = (double)(geom.x + geom.width) / (double)pSurface->m_current.size.x; + const auto HPERC = (double)(geom.y + geom.height) / (double)pSurface->m_current.size.y; const auto TOADDTL = Vector2D(XPERC * (uvBR.x - uvTL.x), YPERC * (uvBR.y - uvTL.y)); uvBR = uvBR - Vector2D((1.0 - WPERC) * (uvBR.x - uvTL.x), (1.0 - HPERC) * (uvBR.y - uvTL.y)); @@ -1501,18 +1502,18 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { const auto WINDOW = pMonitor->m_activeWorkspace->getFullscreenWindow(); const auto ROOT_SURF = WINDOW->m_wlSurface->resource(); const auto SURF = - ROOT_SURF->findFirstPreorder([ROOT_SURF](SP surf) { return surf->colorManagement.valid() && surf->extends() == ROOT_SURF->extends(); }); + ROOT_SURF->findFirstPreorder([ROOT_SURF](SP surf) { return surf->m_colorManagement.valid() && surf->extends() == ROOT_SURF->extends(); }); wantHDR = PHDR && *PPASS == 2; // we have a surface with image description and it's allowed by wantHDR - if (SURF && SURF->colorManagement.valid() && SURF->colorManagement->hasImageDescription() && - (!wantHDR || SURF->colorManagement->imageDescription().transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) { - bool needsHdrMetadataUpdate = SURF->colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != WINDOW; - if (SURF->colorManagement->needsHdrMetadataUpdate()) - SURF->colorManagement->setHDRMetadata(createHDRMetadata(SURF->colorManagement->imageDescription(), pMonitor->m_output->parsedEDID)); + if (SURF && SURF->m_colorManagement.valid() && SURF->m_colorManagement->hasImageDescription() && + (!wantHDR || SURF->m_colorManagement->imageDescription().transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) { + bool needsHdrMetadataUpdate = SURF->m_colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != WINDOW; + if (SURF->m_colorManagement->needsHdrMetadataUpdate()) + SURF->m_colorManagement->setHDRMetadata(createHDRMetadata(SURF->m_colorManagement->imageDescription(), pMonitor->m_output->parsedEDID)); if (needsHdrMetadataUpdate) - pMonitor->m_output->state->setHDRMetadata(SURF->colorManagement->hdrMetadata()); + pMonitor->m_output->state->setHDRMetadata(SURF->m_colorManagement->hdrMetadata()); hdrIsHandled = true; } diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 8897be33..925a30b4 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -244,13 +244,13 @@ void CRenderPass::renderDebugData() { renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); if (g_pSeatManager->m_state.pointerFocus) { - if (g_pSeatManager->m_state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->m_state.pointerFocus->current.size}).getExtents().size() != - g_pSeatManager->m_state.pointerFocus->current.size) { + if (g_pSeatManager->m_state.pointerFocus->m_current.input.intersect(CBox{{}, g_pSeatManager->m_state.pointerFocus->m_current.size}).getExtents().size() != + g_pSeatManager->m_state.pointerFocus->m_current.size) { auto hlSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock()); if (hlSurface) { auto BOX = hlSurface->getSurfaceBoxGlobal(); if (BOX) { - auto region = g_pSeatManager->m_state.pointerFocus->current.input.copy() + auto region = g_pSeatManager->m_state.pointerFocus->m_current.input.copy() .scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale) .translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->m_position); g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.8F, 0.8F, 0.2F, 0.4F}, region); diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index 3813e714..ade9277c 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -72,12 +72,12 @@ void CSurfacePassElement::draw(const CRegion& damage) { return; } - const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->m_scale) != data.pMonitor->m_scale /* Fractional */ && data.surface->current.scale == 1 /* fs protocol */ && - windowBox.size() != data.surface->current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, data.surface->current.bufferSize.x, 3) && - DELTALESSTHAN(windowBox.height, data.surface->current.bufferSize.y, 3) /* off by one-or-two */ && + const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->m_scale) != data.pMonitor->m_scale /* Fractional */ && data.surface->m_current.scale == 1 /* fs protocol */ && + windowBox.size() != data.surface->m_current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, data.surface->m_current.bufferSize.x, 3) && + DELTALESSTHAN(windowBox.height, data.surface->m_current.bufferSize.y, 3) /* off by one-or-two */ && (!data.pWindow || (!data.pWindow->m_realSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; - if (data.surface->colorManagement.valid()) + if (data.surface->m_colorManagement.valid()) Debug::log(TRACE, "FIXME: rendering surface with color management enabled, should apply necessary transformations"); g_pHyprRenderer->calculateUVForSurface(data.pWindow, data.surface, data.pMonitor->m_self.lock(), data.mainSurface, windowBox.size(), PROJSIZEUNSCALED, MISALIGNEDFSV1); @@ -131,8 +131,8 @@ void CSurfacePassElement::draw(const CRegion& damage) { // add async (dmabuf) buffers to usedBuffers so we can handle release later // sync (shm) buffers will be released in commitState, so no need to track them here - if (data.surface->current.buffer && !data.surface->current.buffer->isSynchronous()) - g_pHyprRenderer->usedAsyncBuffers.emplace_back(data.surface->current.buffer); + if (data.surface->m_current.buffer && !data.surface->m_current.buffer->isSynchronous()) + g_pHyprRenderer->usedAsyncBuffers.emplace_back(data.surface->m_current.buffer); g_pHyprOpenGL->blend(true); } @@ -167,8 +167,8 @@ CBox CSurfacePassElement::getTexBox() { } } else { // here we clamp to 2, these might be some tiny specks - windowBox = {(int)outputX + data.pos.x + data.localPos.x, (int)outputY + data.pos.y + data.localPos.y, std::max((float)data.surface->current.size.x, 2.F), - std::max((float)data.surface->current.size.y, 2.F)}; + windowBox = {(int)outputX + data.pos.x + data.localPos.x, (int)outputY + data.pos.y + data.localPos.y, std::max((float)data.surface->m_current.size.x, 2.F), + std::max((float)data.surface->m_current.size.y, 2.F)}; if (data.pWindow && data.pWindow->m_realSize->isBeingAnimated() && data.surface && !data.mainSurface && data.squishOversized /* subsurface */) { // adjust subsurfaces to the window windowBox.width = (windowBox.width / data.pWindow->m_reportedSize.x) * data.pWindow->m_realSize->value().x; @@ -226,8 +226,8 @@ CRegion CSurfacePassElement::opaqueRegion() { if (ALPHA < 1.F) return {}; - if (data.surface && data.surface->current.size == Vector2D{data.w, data.h}) { - CRegion opaqueSurf = data.surface->current.opaque.copy().intersect(CBox{{}, {data.w, data.h}}); + if (data.surface && data.surface->m_current.size == Vector2D{data.w, data.h}) { + CRegion opaqueSurf = data.surface->m_current.opaque.copy().intersect(CBox{{}, {data.w, data.h}}); const auto texBox = getTexBox(); opaqueSurf.scale(texBox.size() / Vector2D{data.w, data.h}); return opaqueSurf.translate(data.pos + data.localPos - data.pMonitor->m_position).expand(-data.rounding); @@ -241,7 +241,7 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { if (!PSURFACE) return {}; - const auto& bufferSize = data.surface->current.bufferSize; + const auto& bufferSize = data.surface->m_current.bufferSize; auto visibleRegion = PSURFACE->m_visibleRegion.copy(); if (visibleRegion.empty()) diff --git a/src/xwayland/XSurface.cpp b/src/xwayland/XSurface.cpp index 1ef1c673..89c65473 100644 --- a/src/xwayland/XSurface.cpp +++ b/src/xwayland/XSurface.cpp @@ -52,7 +52,7 @@ void CXWaylandSurface::ensureListeners() { listeners.destroySurface.reset(); listeners.commitSurface.reset(); } else if (!connected && surface) { - listeners.destroySurface = surface->events.destroy.registerListener([this](std::any d) { + listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { if (mapped) unmap(); @@ -62,13 +62,13 @@ void CXWaylandSurface::ensureListeners() { events.resourceChange.emit(); }); - listeners.commitSurface = surface->events.commit.registerListener([this](std::any d) { - if (surface->current.texture && !mapped) { + listeners.commitSurface = surface->m_events.commit.registerListener([this](std::any d) { + if (surface->m_current.texture && !mapped) { map(); return; } - if (!surface->current.texture && mapped) { + if (!surface->m_current.texture && mapped) { unmap(); return; } @@ -132,7 +132,7 @@ void CXWaylandSurface::considerMap() { return; } - if (surface->current.texture) { + if (surface->m_current.texture) { Debug::log(LOG, "XWayland surface: considerMap, sure, we have a buffer"); map(); return; diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 1c0e8ff4..6a0b1c84 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -957,7 +957,7 @@ CXWM::CXWM() : connection(g_pXWayland->pServer->xwmFDs[0].get()) { setActiveWindow(XCB_WINDOW_NONE); initSelection(); - listeners.newWLSurface = PROTO::compositor->events.newSurface.registerListener([this](std::any d) { onNewSurface(std::any_cast>(d)); }); + listeners.newWLSurface = PROTO::compositor->m_events.newSurface.registerListener([this](std::any d) { onNewSurface(std::any_cast>(d)); }); listeners.newXShellSurface = PROTO::xwaylandShell->events.newSurface.registerListener([this](std::any d) { onNewResource(std::any_cast>(d)); }); createWMWindow(); From 2d6ca96e07d1c1d1edc7694d93405ed800e6f7a6 Mon Sep 17 00:00:00 2001 From: davc0n Date: Sat, 3 May 2025 16:06:24 +0200 Subject: [PATCH 0146/1077] plugins: refactor class member vars (#10257) --- src/debug/CrashReporter.cpp | 6 +-- src/debug/HyprCtl.cpp | 8 ++-- src/plugins/HookSystem.cpp | 76 +++++++++++++++--------------- src/plugins/HookSystem.hpp | 23 +++++---- src/plugins/PluginAPI.cpp | 24 +++++----- src/plugins/PluginSystem.cpp | 90 ++++++++++++++++++------------------ src/plugins/PluginSystem.hpp | 30 ++++++------ 7 files changed, 128 insertions(+), 129 deletions(-) diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index b0693245..e220b0ac 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -130,11 +130,11 @@ void NCrashReporter::createAndSaveCrash(int sig) { for (size_t i = 0; i < count; i++) { auto p = plugins[i]; finalCrashReport += '\t'; - finalCrashReport += p->name; + finalCrashReport += p->m_name; finalCrashReport += " ("; - finalCrashReport += p->author; + finalCrashReport += p->m_author; finalCrashReport += ") "; - finalCrashReport += p->version; + finalCrashReport += p->m_version; finalCrashReport += '\n'; } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 68362008..87546279 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1052,7 +1052,7 @@ std::string systemInfoRequest(eHyprCtlOutputFormat format, std::string request) result += "plugins:\n"; if (g_pPluginSystem) { for (auto const& pl : g_pPluginSystem->getAllPlugins()) { - result += std::format(" {} by {} ver {}\n", pl->name, pl->author, pl->version); + result += std::format(" {} by {} ver {}\n", pl->m_name, pl->m_author, pl->m_version); } } else result += "\tunknown: not runtime\n"; @@ -1548,7 +1548,7 @@ static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string reque "version": "{}", "description": "{}" }},)#", - escapeJSONStrings(p->name), escapeJSONStrings(p->author), (uintptr_t)p->m_pHandle, escapeJSONStrings(p->version), escapeJSONStrings(p->description)); + escapeJSONStrings(p->m_name), escapeJSONStrings(p->m_author), (uintptr_t)p->m_handle, escapeJSONStrings(p->m_version), escapeJSONStrings(p->m_description)); } trimTrailingComma(result); result += "]"; @@ -1557,8 +1557,8 @@ static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string reque return "no plugins loaded"; for (auto const& p : PLUGINS) { - result += - std::format("\nPlugin {} by {}:\n\tHandle: {:x}\n\tVersion: {}\n\tDescription: {}\n", p->name, p->author, (uintptr_t)p->m_pHandle, p->version, p->description); + result += std::format("\nPlugin {} by {}:\n\tHandle: {:x}\n\tVersion: {}\n\tDescription: {}\n", p->m_name, p->m_author, (uintptr_t)p->m_handle, p->m_version, + p->m_description); } } diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp index 9fa61561..8bb660e6 100644 --- a/src/plugins/HookSystem.cpp +++ b/src/plugins/HookSystem.cpp @@ -14,12 +14,12 @@ #include #include -CFunctionHook::CFunctionHook(HANDLE owner, void* source, void* destination) : m_pSource(source), m_pDestination(destination), m_pOwner(owner) { +CFunctionHook::CFunctionHook(HANDLE owner, void* source, void* destination) : m_source(source), m_destination(destination), m_owner(owner) { ; } CFunctionHook::~CFunctionHook() { - if (m_bActive) + if (m_active) unhook(); } @@ -70,7 +70,7 @@ CFunctionHook::SAssembly CFunctionHook::fixInstructionProbeRIPCalls(const SInstr SAssembly returns; // analyze the code and fix what we know how to. - uint64_t currentAddress = (uint64_t)m_pSource; + uint64_t currentAddress = (uint64_t)m_source; // actually newline + 1 size_t lastAsmNewline = 0; // needle for destination binary @@ -106,7 +106,7 @@ CFunctionHook::SAssembly CFunctionHook::fixInstructionProbeRIPCalls(const SInstr if (ADDREND == std::string::npos || ADDRSTART == std::string::npos) return {}; - const uint64_t PREDICTEDRIP = (uint64_t)m_pTrampolineAddr + currentDestinationOffset + len; + const uint64_t PREDICTEDRIP = (uint64_t)m_trampolineAddr + currentDestinationOffset + len; const int32_t NEWRIPOFFSET = DESTINATION - PREDICTEDRIP; size_t ripOffset = 0; @@ -157,12 +157,12 @@ bool CFunctionHook::hook() { // alloc trampoline const auto MAX_TRAMPOLINE_SIZE = HOOK_TRAMPOLINE_MAX_SIZE; // we will never need more. - m_pTrampolineAddr = (void*)g_pFunctionHookSystem->getAddressForTrampo(); + m_trampolineAddr = (void*)g_pFunctionHookSystem->getAddressForTrampo(); // probe instructions to be trampolin'd SInstructionProbe probe; try { - probe = probeMinimumJumpSize(m_pSource, sizeof(ABSOLUTE_JMP_ADDRESS) + sizeof(PUSH_RAX) + sizeof(POP_RAX)); + probe = probeMinimumJumpSize(m_source, sizeof(ABSOLUTE_JMP_ADDRESS) + sizeof(PUSH_RAX) + sizeof(POP_RAX)); } catch (std::exception& e) { return false; } const auto PROBEFIXEDASM = fixInstructionProbeRIPCalls(probe); @@ -182,42 +182,42 @@ bool CFunctionHook::hook() { return false; } - m_pOriginalBytes = malloc(ORIGSIZE); - memcpy(m_pOriginalBytes, m_pSource, ORIGSIZE); + m_originalBytes = malloc(ORIGSIZE); + memcpy(m_originalBytes, m_source, ORIGSIZE); // populate trampoline - memcpy(m_pTrampolineAddr, PROBEFIXEDASM.bytes.data(), HOOKSIZE); // first, original but fixed func bytes - memcpy((uint8_t*)m_pTrampolineAddr + HOOKSIZE, PUSH_RAX, sizeof(PUSH_RAX)); // then, pushq %rax - memcpy((uint8_t*)m_pTrampolineAddr + HOOKSIZE + sizeof(PUSH_RAX), ABSOLUTE_JMP_ADDRESS, sizeof(ABSOLUTE_JMP_ADDRESS)); // then, jump to source + memcpy(m_trampolineAddr, PROBEFIXEDASM.bytes.data(), HOOKSIZE); // first, original but fixed func bytes + memcpy((uint8_t*)m_trampolineAddr + HOOKSIZE, PUSH_RAX, sizeof(PUSH_RAX)); // then, pushq %rax + memcpy((uint8_t*)m_trampolineAddr + HOOKSIZE + sizeof(PUSH_RAX), ABSOLUTE_JMP_ADDRESS, sizeof(ABSOLUTE_JMP_ADDRESS)); // then, jump to source // fixup trampoline addr - *(uint64_t*)((uint8_t*)m_pTrampolineAddr + TRAMPOLINE_SIZE - sizeof(ABSOLUTE_JMP_ADDRESS) + ABSOLUTE_JMP_ADDRESS_OFFSET) = - (uint64_t)((uint8_t*)m_pSource + sizeof(ABSOLUTE_JMP_ADDRESS)); + *(uint64_t*)((uint8_t*)m_trampolineAddr + TRAMPOLINE_SIZE - sizeof(ABSOLUTE_JMP_ADDRESS) + ABSOLUTE_JMP_ADDRESS_OFFSET) = + (uint64_t)((uint8_t*)m_source + sizeof(ABSOLUTE_JMP_ADDRESS)); // make jump to hk const auto PAGESIZE_VAR = sysconf(_SC_PAGE_SIZE); - const uint8_t* PROTSTART = (uint8_t*)m_pSource - ((uint64_t)m_pSource % PAGESIZE_VAR); - const size_t PROTLEN = std::ceil((float)(ORIGSIZE + ((uint64_t)m_pSource - (uint64_t)PROTSTART)) / (float)PAGESIZE_VAR) * PAGESIZE_VAR; + const uint8_t* PROTSTART = (uint8_t*)m_source - ((uint64_t)m_source % PAGESIZE_VAR); + const size_t PROTLEN = std::ceil((float)(ORIGSIZE + ((uint64_t)m_source - (uint64_t)PROTSTART)) / (float)PAGESIZE_VAR) * PAGESIZE_VAR; mprotect((uint8_t*)PROTSTART, PROTLEN, PROT_READ | PROT_WRITE | PROT_EXEC); - memcpy((uint8_t*)m_pSource, ABSOLUTE_JMP_ADDRESS, sizeof(ABSOLUTE_JMP_ADDRESS)); + memcpy((uint8_t*)m_source, ABSOLUTE_JMP_ADDRESS, sizeof(ABSOLUTE_JMP_ADDRESS)); // make popq %rax and NOP all remaining - memcpy((uint8_t*)m_pSource + sizeof(ABSOLUTE_JMP_ADDRESS), POP_RAX, sizeof(POP_RAX)); + memcpy((uint8_t*)m_source + sizeof(ABSOLUTE_JMP_ADDRESS), POP_RAX, sizeof(POP_RAX)); size_t currentOp = sizeof(ABSOLUTE_JMP_ADDRESS) + sizeof(POP_RAX); - memset((uint8_t*)m_pSource + currentOp, NOP, ORIGSIZE - currentOp); + memset((uint8_t*)m_source + currentOp, NOP, ORIGSIZE - currentOp); // fixup jump addr - *(uint64_t*)((uint8_t*)m_pSource + ABSOLUTE_JMP_ADDRESS_OFFSET) = (uint64_t)(m_pDestination); + *(uint64_t*)((uint8_t*)m_source + ABSOLUTE_JMP_ADDRESS_OFFSET) = (uint64_t)(m_destination); // revert mprot mprotect((uint8_t*)PROTSTART, PROTLEN, PROT_READ | PROT_EXEC); // set original addr to trampo addr - m_pOriginal = m_pTrampolineAddr; + m_original = m_trampolineAddr; - m_bActive = true; - m_iHookLen = ORIGSIZE; - m_iTrampoLen = TRAMPOLINE_SIZE; + m_active = true; + m_hookLen = ORIGSIZE; + m_trampoLen = TRAMPOLINE_SIZE; return true; } @@ -228,41 +228,41 @@ bool CFunctionHook::unhook() { return false; #endif - if (!m_bActive) + if (!m_active) return false; // allow write to src - mprotect((uint8_t*)m_pSource - ((uint64_t)m_pSource) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE | PROT_EXEC); + mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE | PROT_EXEC); // write back original bytes - memcpy(m_pSource, m_pOriginalBytes, m_iHookLen); + memcpy(m_source, m_originalBytes, m_hookLen); // revert mprot - mprotect((uint8_t*)m_pSource - ((uint64_t)m_pSource) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_EXEC); + mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_EXEC); // reset vars - m_bActive = false; - m_iHookLen = 0; - m_iTrampoLen = 0; - m_pTrampolineAddr = nullptr; // no unmapping, it's managed by the HookSystem - m_pOriginalBytes = nullptr; + m_active = false; + m_hookLen = 0; + m_trampoLen = 0; + m_trampolineAddr = nullptr; // no unmapping, it's managed by the HookSystem + m_originalBytes = nullptr; - free(m_pOriginalBytes); + free(m_originalBytes); return true; } CFunctionHook* CHookSystem::initHook(HANDLE owner, void* source, void* destination) { - return m_vHooks.emplace_back(makeUnique(owner, source, destination)).get(); + return m_hooks.emplace_back(makeUnique(owner, source, destination)).get(); } bool CHookSystem::removeHook(CFunctionHook* hook) { - std::erase_if(m_vHooks, [&](const auto& other) { return other.get() == hook; }); + std::erase_if(m_hooks, [&](const auto& other) { return other.get() == hook; }); return true; // todo: make false if not found } void CHookSystem::removeAllHooksFrom(HANDLE handle) { - std::erase_if(m_vHooks, [&](const auto& other) { return other->m_pOwner == handle; }); + std::erase_if(m_hooks, [&](const auto& other) { return other->m_owner == handle; }); } static uintptr_t seekNewPageAddr() { @@ -334,7 +334,7 @@ uint64_t CHookSystem::getAddressForTrampo() { // Nobody will hook 100k times, and even if, that's only 6.4 MB. Nothing. SAllocatedPage* page = nullptr; - for (auto& p : pages) { + for (auto& p : m_pages) { if (p.used + HOOK_TRAMPOLINE_MAX_SIZE > p.len) continue; @@ -343,7 +343,7 @@ uint64_t CHookSystem::getAddressForTrampo() { } if (!page) - page = &pages.emplace_back(); + page = &m_pages.emplace_back(); if (!page->addr) { // allocate it diff --git a/src/plugins/HookSystem.hpp b/src/plugins/HookSystem.hpp index 93ca4ff5..801d950e 100644 --- a/src/plugins/HookSystem.hpp +++ b/src/plugins/HookSystem.hpp @@ -20,19 +20,18 @@ class CFunctionHook { CFunctionHook& operator=(const CFunctionHook&) = delete; CFunctionHook& operator=(CFunctionHook&&) = delete; - void* m_pOriginal = nullptr; + void* m_original = nullptr; private: - void* m_pSource = nullptr; - void* m_pFunctionAddr = nullptr; - void* m_pTrampolineAddr = nullptr; - void* m_pDestination = nullptr; - size_t m_iHookLen = 0; - size_t m_iTrampoLen = 0; - HANDLE m_pOwner = nullptr; - bool m_bActive = false; + void* m_source = nullptr; + void* m_trampolineAddr = nullptr; + void* m_destination = nullptr; + size_t m_hookLen = 0; + size_t m_trampoLen = 0; + HANDLE m_owner = nullptr; + bool m_active = false; - void* m_pOriginalBytes = nullptr; + void* m_originalBytes = nullptr; struct SInstructionProbe { size_t len = 0; @@ -60,7 +59,7 @@ class CHookSystem { void removeAllHooksFrom(HANDLE handle); private: - std::vector> m_vHooks; + std::vector> m_hooks; uint64_t getAddressForTrampo(); @@ -70,7 +69,7 @@ class CHookSystem { uint64_t used = 0; }; - std::vector pages; + std::vector m_pages; friend class CFunctionHook; }; diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index 96effde6..f0d01ea8 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -27,7 +27,7 @@ APICALL SP HyprlandAPI::registerCallbackDynamic(HANDLE handle, return nullptr; auto PFN = g_pHookSystem->hookDynamic(event, fn, handle); - PLUGIN->registeredCallbacks.emplace_back(std::make_pair<>(event, WP(PFN))); + PLUGIN->m_registeredCallbacks.emplace_back(std::make_pair<>(event, WP(PFN))); return PFN; } @@ -38,7 +38,7 @@ APICALL bool HyprlandAPI::unregisterCallback(HANDLE handle, SP return false; g_pHookSystem->unhook(fn); - std::erase_if(PLUGIN->registeredCallbacks, [&](const auto& other) { return other.second.lock() == fn; }); + std::erase_if(PLUGIN->m_registeredCallbacks, [&](const auto& other) { return other.second.lock() == fn; }); return true; } @@ -56,7 +56,7 @@ APICALL bool HyprlandAPI::addLayout(HANDLE handle, const std::string& name, IHyp if (!PLUGIN) return false; - PLUGIN->registeredLayouts.push_back(layout); + PLUGIN->m_registeredLayouts.push_back(layout); return g_pLayoutManager->addLayout(name, layout); } @@ -67,7 +67,7 @@ APICALL bool HyprlandAPI::removeLayout(HANDLE handle, IHyprLayout* layout) { if (!PLUGIN) return false; - std::erase(PLUGIN->registeredLayouts, layout); + std::erase(PLUGIN->m_registeredLayouts, layout); return g_pLayoutManager->removeLayout(layout); } @@ -115,7 +115,7 @@ APICALL bool HyprlandAPI::addWindowDecoration(HANDLE handle, PHLWINDOW pWindow, if (!validMapped(pWindow)) return false; - PLUGIN->registeredDecorations.push_back(pDecoration.get()); + PLUGIN->m_registeredDecorations.push_back(pDecoration.get()); pWindow->addWindowDeco(std::move(pDecoration)); @@ -145,7 +145,7 @@ APICALL bool HyprlandAPI::removeWindowDecoration(HANDLE handle, IHyprWindowDecor APICALL bool HyprlandAPI::addConfigValue(HANDLE handle, const std::string& name, const Hyprlang::CConfigValue& value) { auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle); - if (!g_pPluginSystem->m_bAllowConfigVars) + if (!g_pPluginSystem->m_allowConfigVars) return false; if (!PLUGIN) @@ -161,7 +161,7 @@ APICALL bool HyprlandAPI::addConfigValue(HANDLE handle, const std::string& name, APICALL bool HyprlandAPI::addConfigKeyword(HANDLE handle, const std::string& name, Hyprlang::PCONFIGHANDLERFUNC fn, Hyprlang::SHandlerOptions opts) { auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle); - if (!g_pPluginSystem->m_bAllowConfigVars) + if (!g_pPluginSystem->m_allowConfigVars) return false; if (!PLUGIN) @@ -198,7 +198,7 @@ APICALL bool HyprlandAPI::addDispatcher(HANDLE handle, const std::string& name, if (!PLUGIN) return false; - PLUGIN->registeredDispatchers.push_back(name); + PLUGIN->m_registeredDispatchers.push_back(name); g_pKeybindManager->m_dispatchers[name] = [handler](std::string arg1) -> SDispatchResult { handler(arg1); @@ -214,7 +214,7 @@ APICALL bool HyprlandAPI::addDispatcherV2(HANDLE handle, const std::string& name if (!PLUGIN) return false; - PLUGIN->registeredDispatchers.push_back(name); + PLUGIN->m_registeredDispatchers.push_back(name); g_pKeybindManager->m_dispatchers[name] = handler; @@ -228,7 +228,7 @@ APICALL bool HyprlandAPI::removeDispatcher(HANDLE handle, const std::string& nam return false; std::erase_if(g_pKeybindManager->m_dispatchers, [&](const auto& other) { return other.first == name; }); - std::erase_if(PLUGIN->registeredDispatchers, [&](const auto& other) { return other == name; }); + std::erase_if(PLUGIN->m_registeredDispatchers, [&](const auto& other) { return other == name; }); return true; } @@ -385,7 +385,7 @@ APICALL SP HyprlandAPI::registerHyprCtlCommand(HANDLE handle, S return nullptr; auto PTR = g_pHyprCtl->registerCommand(cmd); - PLUGIN->registeredHyprctlCommands.push_back(PTR); + PLUGIN->m_registeredHyprctlCommands.push_back(PTR); return PTR; } @@ -396,7 +396,7 @@ APICALL bool HyprlandAPI::unregisterHyprCtlCommand(HANDLE handle, SPregisteredHyprctlCommands, cmd); + std::erase(PLUGIN->m_registeredHyprctlCommands, cmd); g_pHyprCtl->unregisterCommand(cmd); return true; diff --git a/src/plugins/PluginSystem.cpp b/src/plugins/PluginSystem.cpp index 2bed8dbd..5c7cf10d 100644 --- a/src/plugins/PluginSystem.cpp +++ b/src/plugins/PluginSystem.cpp @@ -74,20 +74,20 @@ std::expected CPluginSystem::loadPluginInternal(const std return std::unexpected("Cannot load a plugin twice!"); } - auto* const PLUGIN = m_vLoadedPlugins.emplace_back(makeUnique()).get(); + auto* const PLUGIN = m_loadedPlugins.emplace_back(makeUnique()).get(); - PLUGIN->path = path; + PLUGIN->m_path = path; HANDLE MODULE = dlopen(path.c_str(), RTLD_LAZY); if (!MODULE) { std::string strerr = dlerror(); Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded: {}", path, strerr); - m_vLoadedPlugins.pop_back(); + m_loadedPlugins.pop_back(); return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, strerr)); } - PLUGIN->m_pHandle = MODULE; + PLUGIN->m_handle = MODULE; PPLUGIN_API_VERSION_FUNC apiVerFunc = (PPLUGIN_API_VERSION_FUNC)dlsym(MODULE, PLUGIN_API_VERSION_FUNC_STR); PPLUGIN_INIT_FUNC initFunc = (PPLUGIN_INIT_FUNC)dlsym(MODULE, PLUGIN_INIT_FUNC_STR); @@ -95,7 +95,7 @@ std::expected CPluginSystem::loadPluginInternal(const std if (!apiVerFunc || !initFunc) { Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded. (No apiver/init func)", path); dlclose(MODULE); - m_vLoadedPlugins.pop_back(); + m_loadedPlugins.pop_back(); return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, "missing apiver/init func")); } @@ -104,33 +104,33 @@ std::expected CPluginSystem::loadPluginInternal(const std if (PLUGINAPIVER != HYPRLAND_API_VERSION) { Debug::log(ERR, " [PluginSystem] Plugin {} could not be loaded. (API version mismatch)", path); dlclose(MODULE); - m_vLoadedPlugins.pop_back(); + m_loadedPlugins.pop_back(); return std::unexpected(std::format("Plugin {} could not be loaded: {}", path, "API version mismatch")); } PLUGIN_DESCRIPTION_INFO PLUGINDATA; try { - if (!setjmp(m_jbPluginFaultJumpBuf)) { - m_bAllowConfigVars = true; - PLUGINDATA = initFunc(MODULE); + if (!setjmp(m_pluginFaultJumpBuf)) { + m_allowConfigVars = true; + PLUGINDATA = initFunc(MODULE); } else { // this module crashed. throw std::runtime_error("received a fatal signal"); } } catch (std::exception& e) { - m_bAllowConfigVars = false; + m_allowConfigVars = false; Debug::log(ERR, " [PluginSystem] Plugin {} (Handle {:x}) crashed in init. Unloading.", path, (uintptr_t)MODULE); unloadPlugin(PLUGIN, true); // Plugin could've already hooked/done something return std::unexpected(std::format("Plugin {} could not be loaded: plugin crashed/threw in main: {}", path, e.what())); } - m_bAllowConfigVars = false; + m_allowConfigVars = false; - PLUGIN->author = PLUGINDATA.author; - PLUGIN->description = PLUGINDATA.description; - PLUGIN->version = PLUGINDATA.version; - PLUGIN->name = PLUGINDATA.name; + PLUGIN->m_author = PLUGINDATA.author; + PLUGIN->m_description = PLUGINDATA.description; + PLUGIN->m_version = PLUGINDATA.version; + PLUGIN->m_name = PLUGINDATA.name; g_pEventLoopManager->doLater([] { g_pConfigManager->reload(); }); @@ -145,42 +145,42 @@ void CPluginSystem::unloadPlugin(const CPlugin* plugin, bool eject) { return; if (!eject) { - PPLUGIN_EXIT_FUNC exitFunc = (PPLUGIN_EXIT_FUNC)dlsym(plugin->m_pHandle, PLUGIN_EXIT_FUNC_STR); + PPLUGIN_EXIT_FUNC exitFunc = (PPLUGIN_EXIT_FUNC)dlsym(plugin->m_handle, PLUGIN_EXIT_FUNC_STR); if (exitFunc) exitFunc(); } - for (auto const& [k, v] : plugin->registeredCallbacks) { + for (auto const& [k, v] : plugin->m_registeredCallbacks) { if (const auto SHP = v.lock()) g_pHookSystem->unhook(SHP); } - const auto ls = plugin->registeredLayouts; + const auto ls = plugin->m_registeredLayouts; for (auto const& l : ls) g_pLayoutManager->removeLayout(l); - g_pFunctionHookSystem->removeAllHooksFrom(plugin->m_pHandle); + g_pFunctionHookSystem->removeAllHooksFrom(plugin->m_handle); - const auto rd = plugin->registeredDecorations; + const auto rd = plugin->m_registeredDecorations; for (auto const& d : rd) - HyprlandAPI::removeWindowDecoration(plugin->m_pHandle, d); + HyprlandAPI::removeWindowDecoration(plugin->m_handle, d); - const auto rdi = plugin->registeredDispatchers; + const auto rdi = plugin->m_registeredDispatchers; for (auto const& d : rdi) - HyprlandAPI::removeDispatcher(plugin->m_pHandle, d); + HyprlandAPI::removeDispatcher(plugin->m_handle, d); - const auto rhc = plugin->registeredHyprctlCommands; + const auto rhc = plugin->m_registeredHyprctlCommands; for (auto const& c : rhc) - HyprlandAPI::unregisterHyprCtlCommand(plugin->m_pHandle, c); + HyprlandAPI::unregisterHyprCtlCommand(plugin->m_handle, c); - g_pConfigManager->removePluginConfig(plugin->m_pHandle); + g_pConfigManager->removePluginConfig(plugin->m_handle); // save these two for dlclose and a log, // as erase_if will kill the pointer - const auto PLNAME = plugin->name; - const auto PLHANDLE = plugin->m_pHandle; + const auto PLNAME = plugin->m_name; + const auto PLHANDLE = plugin->m_handle; - std::erase_if(m_vLoadedPlugins, [&](const auto& other) { return other->m_pHandle == PLHANDLE; }); + std::erase_if(m_loadedPlugins, [&](const auto& other) { return other->m_handle == PLHANDLE; }); dlclose(PLHANDLE); @@ -191,24 +191,24 @@ void CPluginSystem::unloadPlugin(const CPlugin* plugin, bool eject) { } void CPluginSystem::unloadAllPlugins() { - for (auto const& p : m_vLoadedPlugins | std::views::reverse) + for (auto const& p : m_loadedPlugins | std::views::reverse) unloadPlugin(p.get(), false); // Unload remaining plugins gracefully } void CPluginSystem::updateConfigPlugins(const std::vector& plugins, bool& changed) { // unload all plugins that are no longer present - for (auto const& p : m_vLoadedPlugins | std::views::reverse) { - if (!p->m_bLoadedWithConfig || std::ranges::find(plugins, p->path) != plugins.end()) + for (auto const& p : m_loadedPlugins | std::views::reverse) { + if (!p->m_loadedWithConfig || std::ranges::find(plugins, p->m_path) != plugins.end()) continue; - Debug::log(LOG, "Unloading plugin {} which is no longer present in config", p->path); + Debug::log(LOG, "Unloading plugin {} which is no longer present in config", p->m_path); unloadPlugin(p.get(), false); changed = true; } // load all new plugins for (auto const& path : plugins) { - if (std::ranges::find_if(m_vLoadedPlugins, [&](const auto& other) { return other->path == path; }) != m_vLoadedPlugins.end()) + if (std::ranges::find_if(m_loadedPlugins, [&](const auto& other) { return other->m_path == path; }) != m_loadedPlugins.end()) continue; Debug::log(LOG, "Loading plugin {} which is now present in config", path); @@ -223,7 +223,7 @@ void CPluginSystem::updateConfigPlugins(const std::vector& plugins, return; } - result->result()->m_bLoadedWithConfig = true; + result->result()->m_loadedWithConfig = true; Debug::log(LOG, "CPluginSystem::updateConfigPlugins: loaded {}", path); }); @@ -231,8 +231,8 @@ void CPluginSystem::updateConfigPlugins(const std::vector& plugins, } CPlugin* CPluginSystem::getPluginByPath(const std::string& path) { - for (auto const& p : m_vLoadedPlugins) { - if (p->path == path) + for (auto const& p : m_loadedPlugins) { + if (p->m_path == path) return p.get(); } @@ -240,8 +240,8 @@ CPlugin* CPluginSystem::getPluginByPath(const std::string& path) { } CPlugin* CPluginSystem::getPluginByHandle(HANDLE handle) { - for (auto const& p : m_vLoadedPlugins) { - if (p->m_pHandle == handle) + for (auto const& p : m_loadedPlugins) { + if (p->m_handle == handle) return p.get(); } @@ -249,18 +249,18 @@ CPlugin* CPluginSystem::getPluginByHandle(HANDLE handle) { } std::vector CPluginSystem::getAllPlugins() { - std::vector results(m_vLoadedPlugins.size()); - for (size_t i = 0; i < m_vLoadedPlugins.size(); ++i) - results[i] = m_vLoadedPlugins[i].get(); + std::vector results(m_loadedPlugins.size()); + for (size_t i = 0; i < m_loadedPlugins.size(); ++i) + results[i] = m_loadedPlugins[i].get(); return results; } size_t CPluginSystem::pluginCount() { - return m_vLoadedPlugins.size(); + return m_loadedPlugins.size(); } void CPluginSystem::sigGetPlugins(CPlugin** data, size_t len) { - for (size_t i = 0; i < std::min(m_vLoadedPlugins.size(), len); i++) { - data[i] = m_vLoadedPlugins[i].get(); + for (size_t i = 0; i < std::min(m_loadedPlugins.size(), len); i++) { + data[i] = m_loadedPlugins[i].get(); } } diff --git a/src/plugins/PluginSystem.hpp b/src/plugins/PluginSystem.hpp index ba1dafc0..bbde2740 100644 --- a/src/plugins/PluginSystem.hpp +++ b/src/plugins/PluginSystem.hpp @@ -10,22 +10,22 @@ class IHyprWindowDecoration; class CPlugin { public: - std::string name = ""; - std::string description = ""; - std::string author = ""; - std::string version = ""; + std::string m_name = ""; + std::string m_description = ""; + std::string m_author = ""; + std::string m_version = ""; - std::string path = ""; + std::string m_path = ""; - bool m_bLoadedWithConfig = false; + bool m_loadedWithConfig = false; - HANDLE m_pHandle = nullptr; + HANDLE m_handle = nullptr; - std::vector registeredLayouts; - std::vector registeredDecorations; - std::vector>> registeredCallbacks; - std::vector registeredDispatchers; - std::vector> registeredHyprctlCommands; + std::vector m_registeredLayouts; + std::vector m_registeredDecorations; + std::vector>> m_registeredCallbacks; + std::vector m_registeredDispatchers; + std::vector> m_registeredHyprctlCommands; }; class CPluginSystem { @@ -42,12 +42,12 @@ class CPluginSystem { size_t pluginCount(); void sigGetPlugins(CPlugin** data, size_t len); - bool m_bAllowConfigVars = false; + bool m_allowConfigVars = false; private: - std::vector> m_vLoadedPlugins; + std::vector> m_loadedPlugins; - jmp_buf m_jbPluginFaultJumpBuf; + jmp_buf m_pluginFaultJumpBuf; std::expected loadPluginInternal(const std::string& path); }; From cdf5736f1a5e6cc1c3bb8fd50501ab17189725ea Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Sat, 3 May 2025 16:07:02 +0200 Subject: [PATCH 0147/1077] layerrules: fix abovelock interactivity for touch input (#10253) --- src/managers/input/InputManager.cpp | 6 ++++++ src/managers/input/Touch.cpp | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index c48ca908..f2954c84 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -270,6 +270,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { foundSurface = foundLockSurface; } + if (refocus) { + m_foundLSToFocus = pFoundLayerSurface; + m_foundWindowToFocus = pFoundWindow; + m_foundSurfaceToFocus = foundSurface; + } + g_pSeatManager->setPointerFocus(foundSurface, surfaceCoords); g_pSeatManager->sendPointerMotion(time, surfaceCoords); diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 83447593..4a67d2f2 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -61,7 +61,8 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { } } - if (g_pSessionLockManager->isSessionLocked()) { + // could have abovelock surface, thus only use lock if no ls found + if (g_pSessionLockManager->isSessionLocked() && m_foundLSToFocus.expired()) { m_touchData.touchFocusLockSurface = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); if (!m_touchData.touchFocusLockSurface) Debug::log(WARN, "The session is locked but can't find a lock surface"); From 3465efcdc1d15402ca23e7ce609905c5814fb9ee Mon Sep 17 00:00:00 2001 From: Honkazel <169346573+Honkazel@users.noreply.github.com> Date: Sat, 3 May 2025 21:54:15 +0500 Subject: [PATCH 0148/1077] internal: Use vecnotinrect instead of !vecinrect (#10262) * monitor: use vecnotinrect * inputmanager: vecnotinrect * clang format --- src/helpers/Monitor.cpp | 6 +++--- src/managers/input/InputManager.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 043cd5cc..c8bafa88 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1239,12 +1239,12 @@ void CMonitor::setSpecialWorkspace(const PHLWORKSPACE& pWorkspace) { w->setAnimationsToMove(); const auto MIDDLE = w->middle(); - if (w->m_isFloating && !VECINRECT(MIDDLE, m_position.x, m_position.y, m_position.x + m_size.x, m_position.y + m_size.y) && !w->isX11OverrideRedirect()) { + if (w->m_isFloating && VECNOTINRECT(MIDDLE, m_position.x, m_position.y, m_position.x + m_size.x, m_position.y + m_size.y) && !w->isX11OverrideRedirect()) { // if it's floating and the middle isnt on the current mon, move it to the center const auto PMONFROMMIDDLE = g_pCompositor->getMonitorFromVector(MIDDLE); Vector2D pos = w->m_realPosition->goal(); - if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->m_position.x, PMONFROMMIDDLE->m_position.y, PMONFROMMIDDLE->m_position.x + PMONFROMMIDDLE->m_size.x, - PMONFROMMIDDLE->m_position.y + PMONFROMMIDDLE->m_size.y)) { + if (VECNOTINRECT(MIDDLE, PMONFROMMIDDLE->m_position.x, PMONFROMMIDDLE->m_position.y, PMONFROMMIDDLE->m_position.x + PMONFROMMIDDLE->m_size.x, + PMONFROMMIDDLE->m_position.y + PMONFROMMIDDLE->m_size.y)) { // not on any monitor, center pos = middle() / 2.f - w->m_realSize->goal() / 2.f; } else diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index f2954c84..90c43988 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -522,7 +522,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (pFoundWindow && foundSurface == pFoundWindow->m_wlSurface->resource() && !m_cursorImageOverridden) { const auto BOX = pFoundWindow->getWindowMainSurfaceBox(); - if (!VECINRECT(mouseCoords, BOX.x, BOX.y, BOX.x + BOX.width, BOX.y + BOX.height)) + if (VECNOTINRECT(mouseCoords, BOX.x, BOX.y, BOX.x + BOX.width, BOX.y + BOX.height)) setCursorImageOverride("left_ptr"); else restoreCursorIconToApp(); From 46ac115bd19ee3aff5c816033de0b1d55a74e33f Mon Sep 17 00:00:00 2001 From: davc0n Date: Sat, 3 May 2025 18:54:50 +0200 Subject: [PATCH 0149/1077] protocols: refactor class member vars (types) (#10261) --- src/helpers/Monitor.cpp | 6 +-- src/managers/SeatManager.cpp | 4 +- src/protocols/DataDeviceWlr.cpp | 6 +-- src/protocols/LinuxDMABUF.cpp | 12 ++--- src/protocols/MesaDRM.cpp | 12 ++--- src/protocols/PrimarySelection.cpp | 6 +-- src/protocols/Screencopy.cpp | 10 ++--- src/protocols/SinglePixel.cpp | 16 +++---- src/protocols/ToplevelExport.cpp | 10 ++--- src/protocols/core/Compositor.cpp | 12 ++--- src/protocols/core/DataDevice.cpp | 6 +-- src/protocols/core/Shm.cpp | 10 ++--- src/protocols/types/Buffer.cpp | 72 +++++++++++++++--------------- src/protocols/types/Buffer.hpp | 14 +++--- src/protocols/types/DMABuffer.cpp | 46 +++++++++---------- src/protocols/types/DMABuffer.hpp | 6 +-- src/protocols/types/DataDevice.cpp | 4 +- src/protocols/types/DataDevice.hpp | 4 +- src/protocols/types/WLBuffer.cpp | 28 ++++++------ src/protocols/types/WLBuffer.hpp | 6 +-- src/render/Renderer.cpp | 4 +- 21 files changed, 147 insertions(+), 147 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index c8bafa88..5b76e390 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1379,9 +1379,9 @@ bool CMonitor::attemptDirectScanout() { if (!params.success || !PSURFACE->m_current.texture->m_pEglImage /* dmabuf */) return false; - Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->m_current.buffer.buffer.get()); + Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->m_current.buffer.m_buffer.get()); - auto PBUFFER = PSURFACE->m_current.buffer.buffer; + auto PBUFFER = PSURFACE->m_current.buffer.m_buffer; if (PBUFFER == m_output->state->state().buffer) { PSURFACE->presentFeedback(Time::steadyNow(), m_self.lock()); @@ -1447,7 +1447,7 @@ bool CMonitor::attemptDirectScanout() { m_scanoutNeedsCursorUpdate = false; - if (!PBUFFER->lockedByBackend || PBUFFER->hlEvents.backendRelease) + if (!PBUFFER->lockedByBackend || PBUFFER->m_hlEvents.backendRelease) return true; // lock buffer while DRM/KMS is using it, then release it when page flip happens since DRM/KMS should be done by then diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index f910598d..419e8bf4 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -559,7 +559,7 @@ void CSeatManager::setCurrentSelection(SP source) { m_selection.currentSelection = source; if (source) { - m_selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); }); + m_selection.destroySelection = source->m_events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); }); PROTO::data->setSelection(source); PROTO::dataWlr->setSelection(source, false); } @@ -584,7 +584,7 @@ void CSeatManager::setCurrentPrimarySelection(SP source) { m_selection.currentPrimarySelection = source; if (source) { - m_selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); }); + m_selection.destroyPrimarySelection = source->m_events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); }); PROTO::primarySelection->setSelection(source); PROTO::dataWlr->setSelection(source, true); } diff --git a/src/protocols/DataDeviceWlr.cpp b/src/protocols/DataDeviceWlr.cpp index 680840da..a79e71af 100644 --- a/src/protocols/DataDeviceWlr.cpp +++ b/src/protocols/DataDeviceWlr.cpp @@ -49,11 +49,11 @@ CWLRDataSource::CWLRDataSource(SP resource_, SPsetData(this); resource->setDestroy([this](CZwlrDataControlSourceV1* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::dataWlr->destroyResource(this); }); resource->setOnDestroy([this](CZwlrDataControlSourceV1* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::dataWlr->destroyResource(this); }); @@ -61,7 +61,7 @@ CWLRDataSource::CWLRDataSource(SP resource_, SP CWLRDataSource::fromResource(wl_resource* res) { diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index 2a067bf7..189a2555 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -99,20 +99,20 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec CLinuxDMABuffer::CLinuxDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs attrs) { buffer = makeShared(id, client, attrs); - buffer->resource->buffer = buffer; + buffer->m_resource->m_buffer = buffer; listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { listeners.bufferResourceDestroy.reset(); PROTO::linuxDma->destroyResource(this); }); - if (!buffer->success) + if (!buffer->m_success) LOGM(ERR, "Possibly compositor bug: buffer failed to create"); } CLinuxDMABuffer::~CLinuxDMABuffer() { - if (buffer && buffer->resource) - buffer->resource->sendRelease(); + if (buffer && buffer->m_resource) + buffer->m_resource->sendRelease(); buffer.reset(); listeners.bufferResourceDestroy.reset(); @@ -219,14 +219,14 @@ void CLinuxDMABUFParamsResource::create(uint32_t id) { auto buf = PROTO::linuxDma->m_vBuffers.emplace_back(makeShared(id, resource->client(), *attrs)); - if UNLIKELY (!buf->good() || !buf->buffer->success) { + if UNLIKELY (!buf->good() || !buf->buffer->m_success) { resource->sendFailed(); PROTO::linuxDma->m_vBuffers.pop_back(); return; } if (!id) - resource->sendCreated(PROTO::linuxDma->m_vBuffers.back()->buffer->resource->getResource()); + resource->sendCreated(PROTO::linuxDma->m_vBuffers.back()->buffer->m_resource->getResource()); createdBuffer = buf; } diff --git a/src/protocols/MesaDRM.cpp b/src/protocols/MesaDRM.cpp index 41c34d89..be5a02cd 100644 --- a/src/protocols/MesaDRM.cpp +++ b/src/protocols/MesaDRM.cpp @@ -11,21 +11,21 @@ CMesaDRMBufferResource::CMesaDRMBufferResource(uint32_t id, wl_client* client, A LOGM(LOG, " | plane {}: mod {} fd {} stride {} offset {}", i, attrs_.modifier, attrs_.fds[i], attrs_.strides[i], attrs_.offsets[i]); } - buffer = makeShared(id, client, attrs_); - buffer->resource->buffer = buffer; + buffer = makeShared(id, client, attrs_); + buffer->m_resource->m_buffer = buffer; listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { listeners.bufferResourceDestroy.reset(); PROTO::mesaDRM->destroyResource(this); }); - if (!buffer->success) + if (!buffer->m_success) LOGM(ERR, "Possibly compositor bug: buffer failed to create"); } CMesaDRMBufferResource::~CMesaDRMBufferResource() { - if (buffer && buffer->resource) - buffer->resource->sendRelease(); + if (buffer && buffer->m_resource) + buffer->m_resource->sendRelease(); buffer.reset(); listeners.bufferResourceDestroy.reset(); } @@ -94,7 +94,7 @@ CMesaDRMResource::CMesaDRMResource(SP resource_) : resource(resource_) { } // append instance so that buffer knows its owner - RESOURCE->buffer->resource->buffer = RESOURCE->buffer; + RESOURCE->buffer->m_resource->m_buffer = RESOURCE->buffer; }); resource->sendDevice(PROTO::mesaDRM->nodeName.c_str()); diff --git a/src/protocols/PrimarySelection.cpp b/src/protocols/PrimarySelection.cpp index 2cd610ec..d6eb5165 100644 --- a/src/protocols/PrimarySelection.cpp +++ b/src/protocols/PrimarySelection.cpp @@ -50,11 +50,11 @@ CPrimarySelectionSource::CPrimarySelectionSource(SPsetData(this); resource->setDestroy([this](CZwpPrimarySelectionSourceV1* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::primarySelection->destroyResource(this); }); resource->setOnDestroy([this](CZwpPrimarySelectionSourceV1* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::primarySelection->destroyResource(this); }); @@ -62,7 +62,7 @@ CPrimarySelectionSource::CPrimarySelectionSource(SP CPrimarySelectionSource::fromResource(wl_resource* res) { diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 4539a463..391d13e7 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -100,7 +100,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - if UNLIKELY (PBUFFER->buffer->size != box.size()) { + if UNLIKELY (PBUFFER->m_buffer->size != box.size()) { LOGM(ERR, "Invalid dimensions in {:x}", (uintptr_t)this); resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); PROTO::screencopy->destroyResource(this); @@ -114,7 +114,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - if (auto attrs = PBUFFER->buffer->dmabuf(); attrs.success) { + if (auto attrs = PBUFFER->m_buffer->dmabuf(); attrs.success) { bufferDMA = true; if (attrs.format != dmabufFormat) { @@ -123,7 +123,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ PROTO::screencopy->destroyResource(this); return; } - } else if (auto attrs = PBUFFER->buffer->shm(); attrs.success) { + } else if (auto attrs = PBUFFER->m_buffer->shm(); attrs.success) { if (attrs.format != shmFormat) { LOGM(ERR, "Invalid buffer shm format in {:x}", (uintptr_t)pFrame); resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); @@ -142,7 +142,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - buffer = CHLBufferReference(PBUFFER->buffer.lock()); + buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); PROTO::screencopy->m_vFramesAwaitingWrite.emplace_back(self); @@ -193,7 +193,7 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; - if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer, nullptr, true)) { + if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.m_buffer, nullptr, true)) { LOGM(ERR, "Can't copy: failed to begin rendering to dma frame"); callback(false); return; diff --git a/src/protocols/SinglePixel.cpp b/src/protocols/SinglePixel.cpp index c383dbb3..1104ab42 100644 --- a/src/protocols/SinglePixel.cpp +++ b/src/protocols/SinglePixel.cpp @@ -10,13 +10,13 @@ CSinglePixelBuffer::CSinglePixelBuffer(uint32_t id, wl_client* client, CHyprColo g_pHyprRenderer->makeEGLCurrent(); - opaque = col_.a >= 1.F; + m_opaque = col_.a >= 1.F; - texture = makeShared(DRM_FORMAT_ARGB8888, (uint8_t*)&color, 4, Vector2D{1, 1}); + m_texture = makeShared(DRM_FORMAT_ARGB8888, (uint8_t*)&color, 4, Vector2D{1, 1}); - resource = CWLBufferResource::create(makeShared(client, 1, id)); + m_resource = CWLBufferResource::create(makeShared(client, 1, id)); - success = texture->m_iTexID; + success = m_texture->m_iTexID; size = {1, 1}; @@ -25,8 +25,8 @@ CSinglePixelBuffer::CSinglePixelBuffer(uint32_t id, wl_client* client, CHyprColo } CSinglePixelBuffer::~CSinglePixelBuffer() { - if (resource) - resource->sendRelease(); + if (m_resource) + m_resource->sendRelease(); } Aquamarine::eBufferCapability CSinglePixelBuffer::caps() { @@ -58,7 +58,7 @@ void CSinglePixelBuffer::endDataPtr() { } bool CSinglePixelBuffer::good() { - return resource->good(); + return m_resource->good(); } CSinglePixelBufferResource::CSinglePixelBufferResource(uint32_t id, wl_client* client, CHyprColor color) { @@ -67,7 +67,7 @@ CSinglePixelBufferResource::CSinglePixelBufferResource(uint32_t id, wl_client* c if UNLIKELY (!buffer->good()) return; - buffer->resource->buffer = buffer; + buffer->m_resource->m_buffer = buffer; listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { listeners.bufferResourceDestroy.reset(); diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 57fc415e..fd5d0b27 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -155,7 +155,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - if UNLIKELY (PBUFFER->buffer->size != box.size()) { + if UNLIKELY (PBUFFER->m_buffer->size != box.size()) { resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); PROTO::toplevelExport->destroyResource(this); return; @@ -167,7 +167,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - if (auto attrs = PBUFFER->buffer->dmabuf(); attrs.success) { + if (auto attrs = PBUFFER->m_buffer->dmabuf(); attrs.success) { bufferDMA = true; if (attrs.format != dmabufFormat) { @@ -175,7 +175,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou PROTO::toplevelExport->destroyResource(this); return; } - } else if (auto attrs = PBUFFER->buffer->shm(); attrs.success) { + } else if (auto attrs = PBUFFER->m_buffer->shm(); attrs.success) { if (attrs.format != shmFormat) { resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); PROTO::toplevelExport->destroyResource(this); @@ -191,7 +191,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - buffer = CHLBufferReference(PBUFFER->buffer.lock()); + buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); m_ignoreDamage = ignoreDamage; @@ -340,7 +340,7 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } - if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.buffer)) + if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.m_buffer)) return false; g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index df1916ef..e6390dbf 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -82,11 +82,11 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re auto buf = buffer ? CWLBufferResource::fromResource(buffer) : nullptr; - if (buf && buf->buffer) { - m_pending.buffer = CHLBufferReference(buf->buffer.lock()); - m_pending.texture = buf->buffer->texture; - m_pending.size = buf->buffer->size; - m_pending.bufferSize = buf->buffer->size; + if (buf && buf->m_buffer) { + m_pending.buffer = CHLBufferReference(buf->m_buffer.lock()); + m_pending.texture = buf->m_buffer->m_texture; + m_pending.size = buf->m_buffer->size; + m_pending.bufferSize = buf->m_buffer->size; } else { m_pending.buffer = {}; m_pending.texture.reset(); @@ -157,7 +157,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re whenReadable(); } else if (state->buffer->type() == Aquamarine::BUFFER_TYPE_DMABUF && state->buffer->dmabuf().success) { // async buffer and is dmabuf, then we can wait on implicit fences - auto syncFd = dynamic_cast(state->buffer.buffer.get())->exportSyncFile(); + auto syncFd = dynamic_cast(state->buffer.m_buffer.get())->exportSyncFile(); if (syncFd.isValid()) g_pEventLoopManager->doOnReadable(std::move(syncFd), whenReadable); diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index a54ae7e1..63523cd9 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -134,12 +134,12 @@ CWLDataSourceResource::CWLDataSourceResource(SP resource_, SPsetData(this); m_resource->setDestroy([this](CWlDataSource* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::data->onDestroyDataSource(m_self); PROTO::data->destroyResource(this); }); m_resource->setOnDestroy([this](CWlDataSource* r) { - events.destroy.emit(); + m_events.destroy.emit(); PROTO::data->onDestroyDataSource(m_self); PROTO::data->destroyResource(this); }); @@ -152,7 +152,7 @@ CWLDataSourceResource::CWLDataSourceResource(SP resource_, SPonDestroyDataSource(m_self); } diff --git a/src/protocols/core/Shm.cpp b/src/protocols/core/Shm.cpp index 6ebfa64f..228884b9 100644 --- a/src/protocols/core/Shm.cpp +++ b/src/protocols/core/Shm.cpp @@ -20,9 +20,9 @@ CWLSHMBuffer::CWLSHMBuffer(SP pool_, uint32_t id, int32_t of m_stride = stride_; m_fmt = fmt_; m_offset = offset_; - opaque = NFormatUtils::isFormatOpaque(NFormatUtils::shmToDRM(fmt_)); + m_opaque = NFormatUtils::isFormatOpaque(NFormatUtils::shmToDRM(fmt_)); - resource = CWLBufferResource::create(makeShared(pool_->m_resource->client(), 1, id)); + m_resource = CWLBufferResource::create(makeShared(pool_->m_resource->client(), 1, id)); m_listeners.bufferResourceDestroy = events.destroy.registerListener([this](std::any d) { m_listeners.bufferResourceDestroy.reset(); @@ -31,8 +31,8 @@ CWLSHMBuffer::CWLSHMBuffer(SP pool_, uint32_t id, int32_t of } CWLSHMBuffer::~CWLSHMBuffer() { - if (resource) - resource->sendRelease(); + if (m_resource) + m_resource->sendRelease(); } Aquamarine::eBufferCapability CWLSHMBuffer::caps() { @@ -156,7 +156,7 @@ CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor } // append instance so that buffer knows its owner - RESOURCE->resource->buffer = RESOURCE; + RESOURCE->m_resource->m_buffer = RESOURCE; }); if UNLIKELY (m_pool->m_data == MAP_FAILED) diff --git a/src/protocols/types/Buffer.cpp b/src/protocols/types/Buffer.cpp index 73155c29..179a1b0e 100644 --- a/src/protocols/types/Buffer.cpp +++ b/src/protocols/types/Buffer.cpp @@ -1,104 +1,104 @@ #include "Buffer.hpp" IHLBuffer::~IHLBuffer() { - if (locked() && resource) + if (locked() && m_resource) sendRelease(); } void IHLBuffer::sendRelease() { - resource->sendRelease(); - syncReleasers.clear(); + m_resource->sendRelease(); + m_syncReleasers.clear(); } void IHLBuffer::lock() { - nLocks++; + m_locks++; } void IHLBuffer::unlock() { - nLocks--; + m_locks--; - ASSERT(nLocks >= 0); + ASSERT(m_locks >= 0); - if (nLocks == 0) + if (m_locks == 0) sendRelease(); } bool IHLBuffer::locked() { - return nLocks > 0; + return m_locks > 0; } void IHLBuffer::onBackendRelease(const std::function& fn) { - if (hlEvents.backendRelease) { - hlEvents.backendRelease->emit(nullptr); + if (m_hlEvents.backendRelease) { + m_hlEvents.backendRelease->emit(nullptr); Debug::log(LOG, "backendRelease emitted early"); } - hlEvents.backendRelease = events.backendRelease.registerListener([this, fn](std::any) { + m_hlEvents.backendRelease = events.backendRelease.registerListener([this, fn](std::any) { fn(); - hlEvents.backendRelease.reset(); + m_hlEvents.backendRelease.reset(); }); } void IHLBuffer::addReleasePoint(CDRMSyncPointState& point) { ASSERT(locked()); if (point) - syncReleasers.emplace_back(point.createSyncRelease()); + m_syncReleasers.emplace_back(point.createSyncRelease()); } -CHLBufferReference::CHLBufferReference() : buffer(nullptr) { +CHLBufferReference::CHLBufferReference() : m_buffer(nullptr) { ; } -CHLBufferReference::CHLBufferReference(const CHLBufferReference& other) : buffer(other.buffer) { - if (buffer) - buffer->lock(); +CHLBufferReference::CHLBufferReference(const CHLBufferReference& other) : m_buffer(other.m_buffer) { + if (m_buffer) + m_buffer->lock(); } -CHLBufferReference::CHLBufferReference(SP buffer_) : buffer(buffer_) { - if (buffer) - buffer->lock(); +CHLBufferReference::CHLBufferReference(SP buffer_) : m_buffer(buffer_) { + if (m_buffer) + m_buffer->lock(); } CHLBufferReference::~CHLBufferReference() { - if (buffer) - buffer->unlock(); + if (m_buffer) + m_buffer->unlock(); } CHLBufferReference& CHLBufferReference::operator=(const CHLBufferReference& other) { - if (other.buffer) - other.buffer->lock(); - if (buffer) - buffer->unlock(); - buffer = other.buffer; + if (other.m_buffer) + other.m_buffer->lock(); + if (m_buffer) + m_buffer->unlock(); + m_buffer = other.m_buffer; return *this; } bool CHLBufferReference::operator==(const CHLBufferReference& other) const { - return buffer == other.buffer; + return m_buffer == other.m_buffer; } bool CHLBufferReference::operator==(const SP& other) const { - return buffer == other; + return m_buffer == other; } bool CHLBufferReference::operator==(const SP& other) const { - return buffer == other; + return m_buffer == other; } SP CHLBufferReference::operator->() const { - return buffer; + return m_buffer; } CHLBufferReference::operator bool() const { - return buffer; + return m_buffer; } void CHLBufferReference::drop() { - if (!buffer) + if (!m_buffer) return; - buffer->nLocks--; - ASSERT(buffer->nLocks >= 0); + m_buffer->m_locks--; + ASSERT(m_buffer->m_locks >= 0); - buffer = nullptr; + m_buffer = nullptr; } diff --git a/src/protocols/types/Buffer.hpp b/src/protocols/types/Buffer.hpp index e4821ac0..692cb97c 100644 --- a/src/protocols/types/Buffer.hpp +++ b/src/protocols/types/Buffer.hpp @@ -26,18 +26,18 @@ class IHLBuffer : public Aquamarine::IBuffer { void onBackendRelease(const std::function& fn); void addReleasePoint(CDRMSyncPointState& point); - SP texture; - bool opaque = false; - SP resource; - std::vector> syncReleasers; + SP m_texture; + bool m_opaque = false; + SP m_resource; + std::vector> m_syncReleasers; struct { CHyprSignalListener backendRelease; CHyprSignalListener backendRelease2; // for explicit ds - } hlEvents; + } m_hlEvents; private: - int nLocks = 0; + int m_locks = 0; friend class CHLBufferReference; }; @@ -60,5 +60,5 @@ class CHLBufferReference { // unlock and drop the buffer without sending release void drop(); - SP buffer; + SP m_buffer; }; diff --git a/src/protocols/types/DMABuffer.cpp b/src/protocols/types/DMABuffer.cpp index d08925ff..d8e41959 100644 --- a/src/protocols/types/DMABuffer.cpp +++ b/src/protocols/types/DMABuffer.cpp @@ -12,40 +12,40 @@ using namespace Hyprutils::OS; -CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs const& attrs_) : attrs(attrs_) { +CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs const& attrs_) : m_attrs(attrs_) { g_pHyprRenderer->makeEGLCurrent(); - listeners.resourceDestroy = events.destroy.registerListener([this](std::any d) { + m_listeners.resourceDestroy = events.destroy.registerListener([this](std::any d) { closeFDs(); - listeners.resourceDestroy.reset(); + m_listeners.resourceDestroy.reset(); }); - size = attrs.size; - resource = CWLBufferResource::create(makeShared(client, 1, id)); + size = m_attrs.size; + m_resource = CWLBufferResource::create(makeShared(client, 1, id)); - auto eglImage = g_pHyprOpenGL->createEGLImage(attrs); + auto eglImage = g_pHyprOpenGL->createEGLImage(m_attrs); if UNLIKELY (!eglImage) { Debug::log(ERR, "CDMABuffer: failed to import EGLImage, retrying as implicit"); - attrs.modifier = DRM_FORMAT_MOD_INVALID; - eglImage = g_pHyprOpenGL->createEGLImage(attrs); + m_attrs.modifier = DRM_FORMAT_MOD_INVALID; + eglImage = g_pHyprOpenGL->createEGLImage(m_attrs); if UNLIKELY (!eglImage) { Debug::log(ERR, "CDMABuffer: failed to import EGLImage"); return; } } - texture = makeShared(attrs, eglImage); // texture takes ownership of the eglImage - opaque = NFormatUtils::isFormatOpaque(attrs.format); - success = texture->m_iTexID; + m_texture = makeShared(m_attrs, eglImage); // texture takes ownership of the eglImage + m_opaque = NFormatUtils::isFormatOpaque(m_attrs.format); + m_success = m_texture->m_iTexID; - if UNLIKELY (!success) + if UNLIKELY (!m_success) Debug::log(ERR, "Failed to create a dmabuf: texture is null"); } CDMABuffer::~CDMABuffer() { - if (resource) - resource->sendRelease(); + if (m_resource) + m_resource->sendRelease(); closeFDs(); } @@ -67,7 +67,7 @@ bool CDMABuffer::isSynchronous() { } Aquamarine::SDMABUFAttrs CDMABuffer::dmabuf() { - return attrs; + return m_attrs; } std::tuple CDMABuffer::beginDataPtr(uint32_t flags) { @@ -80,17 +80,17 @@ void CDMABuffer::endDataPtr() { } bool CDMABuffer::good() { - return success; + return m_success; } void CDMABuffer::closeFDs() { - for (int i = 0; i < attrs.planes; ++i) { - if (attrs.fds[i] == -1) + for (int i = 0; i < m_attrs.planes; ++i) { + if (m_attrs.fds[i] == -1) continue; - close(attrs.fds[i]); - attrs.fds[i] = -1; + close(m_attrs.fds[i]); + m_attrs.fds[i] = -1; } - attrs.planes = 0; + m_attrs.planes = 0; } static int doIoctl(int fd, unsigned long request, void* arg) { @@ -111,8 +111,8 @@ CFileDescriptor CDMABuffer::exportSyncFile() { #if !defined(__linux__) return {}; #else - std::vector syncFds(attrs.fds.size()); - for (const auto& fd : attrs.fds) { + std::vector syncFds(m_attrs.fds.size()); + for (const auto& fd : m_attrs.fds) { if (fd == -1) continue; diff --git a/src/protocols/types/DMABuffer.hpp b/src/protocols/types/DMABuffer.hpp index 5ebf7581..19f2ddf7 100644 --- a/src/protocols/types/DMABuffer.hpp +++ b/src/protocols/types/DMABuffer.hpp @@ -19,12 +19,12 @@ class CDMABuffer : public IHLBuffer { void closeFDs(); Hyprutils::OS::CFileDescriptor exportSyncFile(); - bool success = false; + bool m_success = false; private: - Aquamarine::SDMABUFAttrs attrs; + Aquamarine::SDMABUFAttrs m_attrs; struct { CHyprSignalListener resourceDestroy; - } listeners; + } m_listeners; }; diff --git a/src/protocols/types/DataDevice.cpp b/src/protocols/types/DataDevice.cpp index fef11b64..8c94b5b1 100644 --- a/src/protocols/types/DataDevice.cpp +++ b/src/protocols/types/DataDevice.cpp @@ -9,11 +9,11 @@ bool IDataSource::dndDone() { } bool IDataSource::used() { - return wasUsed; + return m_wasUsed; } void IDataSource::markUsed() { - wasUsed = true; + m_wasUsed = true; } eDataSourceType IDataSource::type() { diff --git a/src/protocols/types/DataDevice.hpp b/src/protocols/types/DataDevice.hpp index cbb4b271..857d818d 100644 --- a/src/protocols/types/DataDevice.hpp +++ b/src/protocols/types/DataDevice.hpp @@ -42,10 +42,10 @@ class IDataSource { struct { CSignal destroy; - } events; + } m_events; private: - bool wasUsed = false; + bool m_wasUsed = false; }; class IDataOffer { diff --git a/src/protocols/types/WLBuffer.cpp b/src/protocols/types/WLBuffer.cpp index f2b81c00..8e2f2b5f 100644 --- a/src/protocols/types/WLBuffer.cpp +++ b/src/protocols/types/WLBuffer.cpp @@ -5,43 +5,43 @@ #include "../../helpers/sync/SyncTimeline.hpp" #include -CWLBufferResource::CWLBufferResource(WP resource_) : resource(resource_.lock()) { +CWLBufferResource::CWLBufferResource(WP resource_) : m_resource(resource_.lock()) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlBuffer* r) { - if (buffer.expired()) + m_resource->setOnDestroy([this](CWlBuffer* r) { + if (m_buffer.expired()) return; - buffer->events.destroy.emit(); + m_buffer->events.destroy.emit(); }); - resource->setDestroy([this](CWlBuffer* r) { - if (buffer.expired()) + m_resource->setDestroy([this](CWlBuffer* r) { + if (m_buffer.expired()) return; - buffer->events.destroy.emit(); + m_buffer->events.destroy.emit(); }); - resource->setData(this); + m_resource->setData(this); } bool CWLBufferResource::good() { - return resource->resource(); + return m_resource->resource(); } void CWLBufferResource::sendRelease() { - resource->sendRelease(); + m_resource->sendRelease(); } wl_resource* CWLBufferResource::getResource() { - return resource->resource(); + return m_resource->resource(); } SP CWLBufferResource::fromResource(wl_resource* res) { auto data = (CWLBufferResource*)(((CWlBuffer*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } SP CWLBufferResource::create(WP resource) { - auto p = SP(new CWLBufferResource(resource)); - p->self = p; + auto p = SP(new CWLBufferResource(resource)); + p->m_self = p; return p; } diff --git a/src/protocols/types/WLBuffer.hpp b/src/protocols/types/WLBuffer.hpp index c7e21d4c..2e823c5e 100644 --- a/src/protocols/types/WLBuffer.hpp +++ b/src/protocols/types/WLBuffer.hpp @@ -18,14 +18,14 @@ class CWLBufferResource { void sendRelease(); wl_resource* getResource(); - WP buffer; + WP m_buffer; - WP self; + WP m_self; private: CWLBufferResource(WP resource_); - SP resource; + SP m_resource; friend class IHLBuffer; }; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 1b861f7a..cddc8c95 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2290,13 +2290,13 @@ void CHyprRenderer::endRender(const std::function& renderingDoneCallback UP eglSync = CEGLSync::create(); if (eglSync && eglSync->isValid()) { for (auto const& buf : usedAsyncBuffers) { - for (const auto& releaser : buf->syncReleasers) { + for (const auto& releaser : buf->m_syncReleasers) { releaser->addSyncFileFd(eglSync->fd()); } } // release buffer refs with release points now, since syncReleaser handles actual buffer release based on EGLSync - std::erase_if(usedAsyncBuffers, [](const auto& buf) { return !buf->syncReleasers.empty(); }); + std::erase_if(usedAsyncBuffers, [](const auto& buf) { return !buf->m_syncReleasers.empty(); }); // release buffer refs without release points when EGLSync sync_file/fence is signalled g_pEventLoopManager->doOnReadable(eglSync->fd().duplicate(), [renderingDoneCallback, prevbfs = std::move(usedAsyncBuffers)]() mutable { From adbae0f74d951e06c575bad3c81a944027dfe413 Mon Sep 17 00:00:00 2001 From: davc0n Date: Sun, 4 May 2025 00:13:29 +0200 Subject: [PATCH 0150/1077] protocols: refactor class member vars (a-m) (#10265) --- src/Compositor.cpp | 10 +- src/config/ConfigManager.cpp | 6 +- src/desktop/LayerSurface.cpp | 78 +++---- src/desktop/Popup.cpp | 2 +- src/desktop/WLSurface.cpp | 2 +- src/desktop/Window.cpp | 4 +- src/events/Windows.cpp | 2 +- src/managers/input/IdleInhibitor.cpp | 10 +- src/managers/input/InputManager.cpp | 10 +- src/managers/input/InputMethodPopup.cpp | 10 +- src/managers/input/InputMethodRelay.cpp | 8 +- src/managers/input/TextInput.cpp | 34 +-- src/protocols/AlphaModifier.cpp | 56 ++--- src/protocols/AlphaModifier.hpp | 12 +- src/protocols/CTMControl.cpp | 62 ++--- src/protocols/CTMControl.hpp | 12 +- src/protocols/ColorManagement.cpp | 295 ++++++++++++------------ src/protocols/ColorManagement.hpp | 56 ++--- src/protocols/ContentType.cpp | 24 +- src/protocols/ContentType.hpp | 12 +- src/protocols/CursorShape.cpp | 10 +- src/protocols/CursorShape.hpp | 6 +- src/protocols/DRMLease.cpp | 202 ++++++++-------- src/protocols/DRMLease.hpp | 56 +++-- src/protocols/DRMSyncobj.cpp | 136 +++++------ src/protocols/DRMSyncobj.hpp | 26 +-- src/protocols/DataDeviceWlr.cpp | 146 ++++++------ src/protocols/DataDeviceWlr.hpp | 34 +-- src/protocols/FocusGrab.cpp | 94 ++++---- src/protocols/FocusGrab.hpp | 16 +- src/protocols/ForeignToplevel.cpp | 90 ++++---- src/protocols/ForeignToplevel.hpp | 16 +- src/protocols/ForeignToplevelWlr.cpp | 170 +++++++------- src/protocols/ForeignToplevelWlr.hpp | 20 +- src/protocols/FractionalScale.cpp | 26 +-- src/protocols/FractionalScale.hpp | 6 +- src/protocols/FrogColorManagement.cpp | 114 ++++----- src/protocols/FrogColorManagement.hpp | 16 +- src/protocols/GammaControl.cpp | 122 +++++----- src/protocols/GammaControl.hpp | 16 +- src/protocols/GlobalShortcuts.cpp | 42 ++-- src/protocols/GlobalShortcuts.hpp | 6 +- src/protocols/HyprlandSurface.cpp | 68 +++--- src/protocols/HyprlandSurface.hpp | 14 +- src/protocols/IdleInhibit.cpp | 34 +-- src/protocols/IdleInhibit.hpp | 24 +- src/protocols/IdleNotify.cpp | 48 ++-- src/protocols/IdleNotify.hpp | 14 +- src/protocols/InputMethodV2.cpp | 219 +++++++++--------- src/protocols/InputMethodV2.hpp | 45 ++-- src/protocols/LayerShell.cpp | 152 ++++++------ src/protocols/LayerShell.hpp | 31 +-- src/protocols/LinuxDMABUF.cpp | 280 +++++++++++----------- src/protocols/LinuxDMABUF.hpp | 42 ++-- src/protocols/MesaDRM.cpp | 61 ++--- src/protocols/MesaDRM.hpp | 12 +- src/protocols/XXColorManagement.cpp | 6 +- src/render/Renderer.cpp | 2 +- 58 files changed, 1566 insertions(+), 1561 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index fcb67873..8495a328 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1268,7 +1268,7 @@ void CCompositor::focusSurface(SP pSurface, PHLWINDOW pWindo SP CCompositor::vectorToLayerPopupSurface(const Vector2D& pos, PHLMONITOR monitor, Vector2D* sCoords, PHLLS* ppLayerSurfaceFound) { for (auto const& lsl : monitor->m_layerSurfaceLayers | std::views::reverse) { for (auto const& ls : lsl | std::views::reverse) { - if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->mapped) || ls->m_alpha->value() == 0.f) + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->m_mapped) || ls->m_alpha->value() == 0.f) continue; auto SURFACEAT = ls->m_popupHead->at(pos, true); @@ -1288,11 +1288,11 @@ SP CCompositor::vectorToLayerSurface(const Vector2D& pos, st bool aboveLockscreen) { for (auto const& ls : *layerSurfaces | std::views::reverse) { - if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->surface->m_mapped) || ls->m_alpha->value() == 0.f || + if (!ls->m_mapped || ls->m_fadingOut || !ls->m_layerSurface || (ls->m_layerSurface && !ls->m_layerSurface->m_surface->m_mapped) || ls->m_alpha->value() == 0.f || (aboveLockscreen && (!ls->m_aboveLockscreen || !ls->m_aboveLockscreenInteractable))) continue; - auto [surf, local] = ls->m_layerSurface->surface->at(pos - ls->m_geometry.pos(), true); + auto [surf, local] = ls->m_layerSurface->m_surface->at(pos - ls->m_geometry.pos(), true); if (surf) { if (surf->m_current.input.empty()) @@ -2554,13 +2554,13 @@ PHLLS CCompositor::getLayerSurfaceFromSurface(SP pSurface) { std::pair, bool> result = {pSurface, false}; for (auto const& ls : m_layers) { - if (ls->m_layerSurface && ls->m_layerSurface->surface == pSurface) + if (ls->m_layerSurface && ls->m_layerSurface->m_surface == pSurface) return ls; if (!ls->m_layerSurface || !ls->m_mapped) continue; - ls->m_layerSurface->surface->breadthfirst( + ls->m_layerSurface->m_surface->breadthfirst( [&result](SP surf, const Vector2D& offset, void* data) { if (surf == result.first) { result.second = true; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 4d3b67c5..08024e80 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1536,15 +1536,15 @@ std::vector> CConfigManager::getMatchingRules(PHLLS pLS) { if (lr->m_targetNamespace.starts_with("address:0x")) { if (std::format("address:0x{:x}", (uintptr_t)pLS.get()) != lr->m_targetNamespace) continue; - } else if (!lr->m_targetNamespaceRegex.passes(pLS->m_layerSurface->layerNamespace)) + } else if (!lr->m_targetNamespaceRegex.passes(pLS->m_layerSurface->m_layerNamespace)) continue; // hit returns.emplace_back(lr); } - if (shouldBlurLS(pLS->m_layerSurface->layerNamespace)) - returns.emplace_back(makeShared(pLS->m_layerSurface->layerNamespace, "blur")); + if (shouldBlurLS(pLS->m_layerSurface->m_layerNamespace)) + returns.emplace_back(makeShared(pLS->m_layerSurface->m_layerNamespace, "blur")); return returns; } diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 9818c093..61cca488 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -15,9 +15,9 @@ PHLLS CLayerSurface::create(SP resource) { PHLLS pLS = SP(new CLayerSurface(resource)); - auto pMonitor = resource->monitor.empty() ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromName(resource->monitor); + auto pMonitor = resource->m_monitor.empty() ? g_pCompositor->m_lastMonitor.lock() : g_pCompositor->getMonitorFromName(resource->m_monitor); - pLS->m_surface->assign(resource->surface.lock(), pLS); + pLS->m_surface->assign(resource->m_surface.lock(), pLS); if (!pMonitor) { Debug::log(ERR, "New LS has no monitor??"); @@ -29,12 +29,12 @@ PHLLS CLayerSurface::create(SP resource) { pLS->m_self = pLS; - pLS->m_namespace = resource->layerNamespace; + pLS->m_namespace = resource->m_layerNamespace; - pLS->m_layer = resource->current.layer; + pLS->m_layer = resource->m_current.layer; pLS->m_popupHead = CPopup::create(pLS); pLS->m_monitor = pMonitor; - pMonitor->m_layerSurfaceLayers[resource->current.layer].emplace_back(pLS); + pMonitor->m_layerSurfaceLayers[resource->m_current.layer].emplace_back(pLS); pLS->m_forceBlur = g_pConfigManager->shouldBlurLS(pLS->m_namespace); @@ -46,7 +46,7 @@ PHLLS CLayerSurface::create(SP resource) { pLS->m_alpha->setValueAndWarp(0.f); - Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->m_layer, pMonitor->m_name); + Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->m_layerNamespace, (int)pLS->m_layer, pMonitor->m_name); return pLS; } @@ -59,10 +59,10 @@ void CLayerSurface::registerCallbacks() { } CLayerSurface::CLayerSurface(SP resource_) : m_layerSurface(resource_) { - m_listeners.commit = m_layerSurface->events.commit.registerListener([this](std::any d) { onCommit(); }); - m_listeners.map = m_layerSurface->events.map.registerListener([this](std::any d) { onMap(); }); - m_listeners.unmap = m_layerSurface->events.unmap.registerListener([this](std::any d) { onUnmap(); }); - m_listeners.destroy = m_layerSurface->events.destroy.registerListener([this](std::any d) { onDestroy(); }); + m_listeners.commit = m_layerSurface->m_events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.map = m_layerSurface->m_events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmap = m_layerSurface->m_events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.destroy = m_layerSurface->m_events.destroy.registerListener([this](std::any d) { onDestroy(); }); m_surface = CWLSurface::create(); } @@ -133,9 +133,9 @@ void CLayerSurface::onMap() { Debug::log(LOG, "LayerSurface {:x} mapped", (uintptr_t)m_layerSurface.get()); m_mapped = true; - m_interactivity = m_layerSurface->current.interactivity; + m_interactivity = m_layerSurface->m_current.interactivity; - m_layerSurface->surface->map(); + m_layerSurface->m_surface->map(); // this layer might be re-mapped. m_fadingOut = false; @@ -155,13 +155,13 @@ void CLayerSurface::onMap() { m_surface->resource()->enter(PMONITOR->m_self.lock()); - const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; + const bool ISEXCLUSIVE = m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (ISEXCLUSIVE) g_pInputManager->m_exclusiveLSes.push_back(m_self); const bool GRABSFOCUS = ISEXCLUSIVE || - (m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && + (m_layerSurface->m_current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE && // don't focus if constrained (g_pSeatManager->m_mouse.expired() || !g_pInputManager->isConstrained())); @@ -196,7 +196,7 @@ void CLayerSurface::onMap() { void CLayerSurface::onUnmap() { Debug::log(LOG, "LayerSurface {:x} unmapped", (uintptr_t)m_layerSurface.get()); - g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->layerNamespace}); + g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->m_layerNamespace}); EMIT_HOOK_EVENT("closeLayer", m_self.lock()); std::erase_if(g_pInputManager->m_exclusiveLSes, [this](const auto& other) { return !other || other == m_self; }); @@ -207,8 +207,8 @@ void CLayerSurface::onUnmap() { g_pCompositor->addToFadingOutSafe(m_self.lock()); m_mapped = false; - if (m_layerSurface && m_layerSurface->surface) - m_layerSurface->surface->unmap(); + if (m_layerSurface && m_layerSurface->m_surface) + m_layerSurface->m_surface->unmap(); startAnimation(false); return; @@ -224,8 +224,8 @@ void CLayerSurface::onUnmap() { startAnimation(false); m_mapped = false; - if (m_layerSurface && m_layerSurface->surface) - m_layerSurface->surface->unmap(); + if (m_layerSurface && m_layerSurface->m_surface) + m_layerSurface->m_surface->unmap(); g_pCompositor->addToFadingOutSafe(m_self.lock()); @@ -247,8 +247,8 @@ void CLayerSurface::onUnmap() { CBox geomFixed = {m_geometry.x + PMONITOR->m_position.x, m_geometry.y + PMONITOR->m_position.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - geomFixed = {m_geometry.x + (int)PMONITOR->m_position.x, m_geometry.y + (int)PMONITOR->m_position.y, (int)m_layerSurface->surface->m_current.size.x, - (int)m_layerSurface->surface->m_current.size.y}; + geomFixed = {m_geometry.x + (int)PMONITOR->m_position.x, m_geometry.y + (int)PMONITOR->m_position.y, (int)m_layerSurface->m_surface->m_current.size.x, + (int)m_layerSurface->m_surface->m_current.size.y}; g_pHyprRenderer->damageBox(geomFixed); g_pInputManager->simulateMouseMovement(); @@ -262,7 +262,7 @@ void CLayerSurface::onCommit() { if (!m_mapped) { // we're re-mapping if this is the case - if (m_layerSurface->surface && !m_layerSurface->surface->m_current.texture) { + if (m_layerSurface->m_surface && !m_layerSurface->m_surface->m_current.texture) { m_fadingOut = false; m_geometry = {}; g_pHyprRenderer->arrangeLayersForMonitor(monitorID()); @@ -282,20 +282,20 @@ void CLayerSurface::onCommit() { CBox geomFixed = {m_geometry.x, m_geometry.y, m_geometry.width, m_geometry.height}; g_pHyprRenderer->damageBox(geomFixed); - if (m_layerSurface->current.committed != 0) { - if (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_LAYER) { + if (m_layerSurface->m_current.committed != 0) { + if (m_layerSurface->m_current.committed & CLayerShellResource::eCommittedState::STATE_LAYER) { for (auto it = PMONITOR->m_layerSurfaceLayers[m_layer].begin(); it != PMONITOR->m_layerSurfaceLayers[m_layer].end(); it++) { if (*it == m_self) { - if (m_layerSurface->current.layer == m_layer) + if (m_layerSurface->m_current.layer == m_layer) break; - PMONITOR->m_layerSurfaceLayers[m_layerSurface->current.layer].emplace_back(*it); + PMONITOR->m_layerSurfaceLayers[m_layerSurface->m_current.layer].emplace_back(*it); PMONITOR->m_layerSurfaceLayers[m_layer].erase(it); break; } } - m_layer = m_layerSurface->current.layer; + m_layer = m_layerSurface->m_current.layer; if (m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND || m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM) g_pHyprOpenGL->markBlurDirtyForMonitor(PMONITOR); // so that blur is recalc'd @@ -308,12 +308,12 @@ void CLayerSurface::onCommit() { m_position = Vector2D(m_geometry.x, m_geometry.y); // update geom if it changed - if (m_layerSurface->surface->m_current.scale == 1 && PMONITOR->m_scale != 1.f && m_layerSurface->surface->m_current.viewport.hasDestination) { + if (m_layerSurface->m_surface->m_current.scale == 1 && PMONITOR->m_scale != 1.f && m_layerSurface->m_surface->m_current.viewport.hasDestination) { // fractional scaling. Dirty hack. - m_geometry = {m_geometry.pos(), m_layerSurface->surface->m_current.viewport.destination}; + m_geometry = {m_geometry.pos(), m_layerSurface->m_surface->m_current.viewport.destination}; } else { // this is because some apps like e.g. rofi-lbonn can't fucking use the protocol correctly. - m_geometry = {m_geometry.pos(), m_layerSurface->surface->m_current.size}; + m_geometry = {m_geometry.pos(), m_layerSurface->m_surface->m_current.size}; } } @@ -330,9 +330,9 @@ void CLayerSurface::onCommit() { m_realSize->setValueAndWarp(m_geometry.size()); } - if (m_mapped && (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) { + if (m_mapped && (m_layerSurface->m_current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) { bool WASLASTFOCUS = false; - m_layerSurface->surface->breadthfirst( + m_layerSurface->m_surface->breadthfirst( [&WASLASTFOCUS](SP surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->m_state.keyboardFocus == surf; }, nullptr); if (!WASLASTFOCUS && m_popupHead) { @@ -343,7 +343,7 @@ void CLayerSurface::onCommit() { nullptr); } const bool WASEXCLUSIVE = m_interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; - const bool ISEXCLUSIVE = m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; + const bool ISEXCLUSIVE = m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE; if (!WASEXCLUSIVE && ISEXCLUSIVE) g_pInputManager->m_exclusiveLSes.push_back(m_self); @@ -351,12 +351,12 @@ void CLayerSurface::onCommit() { std::erase_if(g_pInputManager->m_exclusiveLSes, [this](const auto& other) { return !other.lock() || other.lock() == m_self.lock(); }); // if the surface was focused and interactive but now isn't, refocus - if (WASLASTFOCUS && m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) { + if (WASLASTFOCUS && m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) { // moveMouseUnified won't focus non interactive layers but it won't unfocus them either, // so unfocus the surface here. g_pCompositor->focusSurface(nullptr); g_pInputManager->refocusLastWindow(m_monitor.lock()); - } else if (WASLASTFOCUS && WASEXCLUSIVE && m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) { + } else if (WASLASTFOCUS && WASEXCLUSIVE && m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) { g_pInputManager->simulateMouseMovement(); } else if (!WASEXCLUSIVE && ISEXCLUSIVE) { // if now exclusive and not previously @@ -370,7 +370,7 @@ void CLayerSurface::onCommit() { } } - m_interactivity = m_layerSurface->current.interactivity; + m_interactivity = m_layerSurface->m_current.interactivity; g_pHyprRenderer->damageSurface(m_surface->resource(), m_position.x, m_position.y); @@ -600,11 +600,11 @@ MONITORID CLayerSurface::monitorID() { pid_t CLayerSurface::getPID() { pid_t PID = -1; - if (!m_layerSurface || !m_layerSurface->surface || !m_layerSurface->surface->getResource() || !m_layerSurface->surface->getResource()->resource() || - !m_layerSurface->surface->getResource()->resource()->client) + if (!m_layerSurface || !m_layerSurface->m_surface || !m_layerSurface->m_surface->getResource() || !m_layerSurface->m_surface->getResource()->resource() || + !m_layerSurface->m_surface->getResource()->resource()->client) return -1; - wl_client_get_credentials(m_layerSurface->surface->getResource()->resource()->client, &PID, nullptr, nullptr); + wl_client_get_credentials(m_layerSurface->m_surface->getResource()->resource()->client, &PID, nullptr, nullptr); return PID; } diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index 86928faf..e43aa865 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -57,7 +57,7 @@ void CPopup::initAllSignals() { m_listeners.newPopup = m_windowOwner->m_xdgSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); else if (!m_layerOwner.expired()) m_listeners.newPopup = - m_layerOwner->m_layerSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + m_layerOwner->m_layerSurface->m_events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); else ASSERT(false); diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index 6666ea52..853f14c0 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -230,6 +230,6 @@ bool CWLSurface::keyboardFocusable() const { if (m_windowOwner || m_popupOwner || m_subsurfaceOwner) return true; if (m_layerOwner && m_layerOwner->m_layerSurface) - return m_layerOwner->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; + return m_layerOwner->m_layerSurface->m_current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE; return false; } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 4686ecb1..05d5363e 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1775,7 +1775,7 @@ NContentType::eContentType CWindow::getContentType() { if (!m_wlSurface || !m_wlSurface->resource() || !m_wlSurface->resource()->m_contentType.valid()) return CONTENT_TYPE_NONE; - return m_wlSurface->resource()->m_contentType->value; + return m_wlSurface->resource()->m_contentType->m_value; } void CWindow::setContentType(NContentType::eContentType contentType) { @@ -1784,7 +1784,7 @@ void CWindow::setContentType(NContentType::eContentType contentType) { // else disallow content type change if proto is used? Debug::log(INFO, "ContentType for window {}", (int)contentType); - m_wlSurface->resource()->m_contentType->value = contentType; + m_wlSurface->resource()->m_contentType->m_value = contentType; } void CWindow::deactivateGroupMembers() { diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 87429874..910220e1 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -593,7 +593,7 @@ void Events::listener_mapWindow(void* owner, void* data) { // check LS focus grab const auto PFORCEFOCUS = g_pCompositor->getForceFocus(); const auto PLSFROMFOCUS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - if (PLSFROMFOCUS && PLSFROMFOCUS->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) + if (PLSFROMFOCUS && PLSFROMFOCUS->m_layerSurface->m_current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) PWINDOW->m_noInitialFocus = true; if (PWINDOW->m_workspace->m_hasFullscreenWindow && !requestedInternalFSMode.has_value() && !requestedClientFSMode.has_value() && !PWINDOW->m_isFloating) { diff --git a/src/managers/input/IdleInhibitor.cpp b/src/managers/input/IdleInhibitor.cpp index e3712ce7..258b35dc 100644 --- a/src/managers/input/IdleInhibitor.cpp +++ b/src/managers/input/IdleInhibitor.cpp @@ -8,14 +8,14 @@ void CInputManager::newIdleInhibitor(std::any inhibitor) { const auto PINHIBIT = m_idleInhibitors.emplace_back(makeUnique()).get(); PINHIBIT->inhibitor = std::any_cast>(inhibitor); - Debug::log(LOG, "New idle inhibitor registered for surface {:x}", (uintptr_t)PINHIBIT->inhibitor->surface.get()); + Debug::log(LOG, "New idle inhibitor registered for surface {:x}", (uintptr_t)PINHIBIT->inhibitor->m_surface.get()); - PINHIBIT->inhibitor->listeners.destroy = PINHIBIT->inhibitor->resource->events.destroy.registerListener([this, PINHIBIT](std::any data) { + PINHIBIT->inhibitor->m_listeners.destroy = PINHIBIT->inhibitor->m_resource->m_events.destroy.registerListener([this, PINHIBIT](std::any data) { std::erase_if(m_idleInhibitors, [PINHIBIT](const auto& other) { return other.get() == PINHIBIT; }); recheckIdleInhibitorStatus(); }); - auto WLSurface = CWLSurface::fromResource(PINHIBIT->inhibitor->surface.lock()); + auto WLSurface = CWLSurface::fromResource(PINHIBIT->inhibitor->m_surface.lock()); if (!WLSurface) { Debug::log(LOG, "Inhibitor has no HL Surface attached to it, likely meaning it's a non-desktop element. Assuming it's visible."); @@ -38,7 +38,7 @@ void CInputManager::recheckIdleInhibitorStatus() { return; } - auto WLSurface = CWLSurface::fromResource(ii->inhibitor->surface.lock()); + auto WLSurface = CWLSurface::fromResource(ii->inhibitor->m_surface.lock()); if (!WLSurface) continue; @@ -80,7 +80,7 @@ bool CInputManager::isWindowInhibiting(const PHLWINDOW& w, bool onlyHl) { bool isInhibiting = false; w->m_wlSurface->resource()->breadthfirst( [&ii](SP surf, const Vector2D& pos, void* data) { - if (ii->inhibitor->surface != surf) + if (ii->inhibitor->m_surface != surf) return; auto WLSurface = CWLSurface::fromResource(surf); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 90c43988..b3805ca2 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -42,7 +42,7 @@ #include CInputManager::CInputManager() { - m_listeners.setCursorShape = PROTO::cursorShape->events.setShape.registerListener([this](std::any data) { + m_listeners.setCursorShape = PROTO::cursorShape->m_events.setShape.registerListener([this](std::any data) { if (!cursorImageUnlocked()) return; @@ -65,7 +65,7 @@ CInputManager::CInputManager() { g_pHyprRenderer->setCursorFromName(m_cursorSurfaceInfo.name); }); - m_listeners.newIdleInhibitor = PROTO::idleInhibit->events.newIdleInhibitor.registerListener([this](std::any data) { this->newIdleInhibitor(data); }); + m_listeners.newIdleInhibitor = PROTO::idleInhibit->m_events.newIdleInhibitor.registerListener([this](std::any data) { this->newIdleInhibitor(data); }); m_listeners.newVirtualKeyboard = PROTO::virtualKeyboard->events.newKeyboard.registerListener([this](std::any data) { this->newVirtualKeyboard(std::any_cast>(data)); updateCapabilities(); @@ -504,7 +504,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (!refocus && g_pCompositor->m_lastFocus) { const auto PLS = g_pCompositor->getLayerSurfaceFromSurface(g_pCompositor->m_lastFocus.lock()); - if (PLS && PLS->m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) + if (PLS && PLS->m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE) allowKeyboardRefocus = false; } @@ -589,8 +589,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { unsetCursorImage(); } - if (pFoundLayerSurface && (pFoundLayerSurface->m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) && FOLLOWMOUSE != 3 && - (allowKeyboardRefocus || pFoundLayerSurface->m_layerSurface->current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE)) { + if (pFoundLayerSurface && (pFoundLayerSurface->m_layerSurface->m_current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE) && FOLLOWMOUSE != 3 && + (allowKeyboardRefocus || pFoundLayerSurface->m_layerSurface->m_current.interactivity == ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE)) { g_pCompositor->focusSurface(foundSurface); } diff --git a/src/managers/input/InputMethodPopup.cpp b/src/managers/input/InputMethodPopup.cpp index ac526c7b..98131168 100644 --- a/src/managers/input/InputMethodPopup.cpp +++ b/src/managers/input/InputMethodPopup.cpp @@ -8,10 +8,10 @@ #include "../../render/Renderer.hpp" CInputPopup::CInputPopup(SP popup_) : m_popup(popup_) { - m_listeners.commit = popup_->events.commit.registerListener([this](std::any d) { onCommit(); }); - m_listeners.map = popup_->events.map.registerListener([this](std::any d) { onMap(); }); - m_listeners.unmap = popup_->events.unmap.registerListener([this](std::any d) { onUnmap(); }); - m_listeners.destroy = popup_->events.destroy.registerListener([this](std::any d) { onDestroy(); }); + m_listeners.commit = popup_->m_events.commit.registerListener([this](std::any d) { onCommit(); }); + m_listeners.map = popup_->m_events.map.registerListener([this](std::any d) { onMap(); }); + m_listeners.unmap = popup_->m_events.unmap.registerListener([this](std::any d) { onUnmap(); }); + m_listeners.destroy = popup_->m_events.destroy.registerListener([this](std::any d) { onDestroy(); }); m_surface = CWLSurface::create(); m_surface->assign(popup_->surface()); } @@ -77,7 +77,7 @@ void CInputPopup::damageSurface() { } void CInputPopup::updateBox() { - if (!m_popup->mapped) + if (!m_popup->m_mapped) return; const auto OWNER = queryOwner(); diff --git a/src/managers/input/InputMethodRelay.cpp b/src/managers/input/InputMethodRelay.cpp index bafa9002..050734a8 100644 --- a/src/managers/input/InputMethodRelay.cpp +++ b/src/managers/input/InputMethodRelay.cpp @@ -13,7 +13,7 @@ CInputMethodRelay::CInputMethodRelay() { m_listeners.newTIV3 = PROTO::textInputV3->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); m_listeners.newTIV1 = PROTO::textInputV1->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); - m_listeners.newIME = PROTO::ime->events.newIME.registerListener([this](std::any ime) { onNewIME(std::any_cast>(ime)); }); + m_listeners.newIME = PROTO::ime->m_events.newIME.registerListener([this](std::any ime) { onNewIME(std::any_cast>(ime)); }); } void CInputMethodRelay::onNewIME(SP pIME) { @@ -27,7 +27,7 @@ void CInputMethodRelay::onNewIME(SP pIME) { m_inputMethod = pIME; - m_listeners.commitIME = pIME->events.onCommit.registerListener([this](std::any d) { + m_listeners.commitIME = pIME->m_events.onCommit.registerListener([this](std::any d) { const auto PTI = getFocusedTextInput(); if (!PTI) { @@ -38,7 +38,7 @@ void CInputMethodRelay::onNewIME(SP pIME) { PTI->updateIMEState(m_inputMethod.lock()); }); - m_listeners.destroyIME = pIME->events.destroy.registerListener([this](std::any d) { + m_listeners.destroyIME = pIME->m_events.destroy.registerListener([this](std::any d) { const auto PTI = getFocusedTextInput(); Debug::log(LOG, "IME Destroy"); @@ -49,7 +49,7 @@ void CInputMethodRelay::onNewIME(SP pIME) { m_inputMethod.reset(); }); - m_listeners.newPopup = pIME->events.newPopup.registerListener([this](std::any d) { + m_listeners.newPopup = pIME->m_events.newPopup.registerListener([this](std::any d) { m_inputMethodPopups.emplace_back(makeUnique(std::any_cast>(d))); Debug::log(LOG, "New input popup"); diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index a629cd18..c563f4de 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -266,38 +266,38 @@ void CTextInput::updateIMEState(SP ime) { if (isV3()) { const auto INPUT = m_v3Input.lock(); - if (ime->current.preeditString.committed) - INPUT->preeditString(ime->current.preeditString.string, ime->current.preeditString.begin, ime->current.preeditString.end); + if (ime->m_current.preeditString.committed) + INPUT->preeditString(ime->m_current.preeditString.string, ime->m_current.preeditString.begin, ime->m_current.preeditString.end); - if (ime->current.committedString.committed) - INPUT->commitString(ime->current.committedString.string); + if (ime->m_current.committedString.committed) + INPUT->commitString(ime->m_current.committedString.string); - if (ime->current.deleteSurrounding.committed) - INPUT->deleteSurroundingText(ime->current.deleteSurrounding.before, ime->current.deleteSurrounding.after); + if (ime->m_current.deleteSurrounding.committed) + INPUT->deleteSurroundingText(ime->m_current.deleteSurrounding.before, ime->m_current.deleteSurrounding.after); INPUT->sendDone(); } else { const auto INPUT = m_v1Input.lock(); - if (ime->current.preeditString.committed) { - INPUT->preeditCursor(ime->current.preeditString.begin); - INPUT->preeditStyling(0, std::string(ime->current.preeditString.string).length(), ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); - INPUT->preeditString(m_v1Input->serial, ime->current.preeditString.string.c_str(), ""); + if (ime->m_current.preeditString.committed) { + INPUT->preeditCursor(ime->m_current.preeditString.begin); + INPUT->preeditStyling(0, std::string(ime->m_current.preeditString.string).length(), ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); + INPUT->preeditString(m_v1Input->serial, ime->m_current.preeditString.string.c_str(), ""); } else { INPUT->preeditCursor(0); INPUT->preeditStyling(0, 0, ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); INPUT->preeditString(m_v1Input->serial, "", ""); } - if (ime->current.committedString.committed) - INPUT->commitString(m_v1Input->serial, ime->current.committedString.string.c_str()); + if (ime->m_current.committedString.committed) + INPUT->commitString(m_v1Input->serial, ime->m_current.committedString.string.c_str()); - if (ime->current.deleteSurrounding.committed) { - INPUT->deleteSurroundingText(std::string(ime->current.preeditString.string).length() - ime->current.deleteSurrounding.before, - ime->current.deleteSurrounding.after + ime->current.deleteSurrounding.before); + if (ime->m_current.deleteSurrounding.committed) { + INPUT->deleteSurroundingText(std::string(ime->m_current.preeditString.string).length() - ime->m_current.deleteSurrounding.before, + ime->m_current.deleteSurrounding.after + ime->m_current.deleteSurrounding.before); - if (ime->current.preeditString.committed) - INPUT->commitString(m_v1Input->serial, ime->current.preeditString.string.c_str()); + if (ime->m_current.preeditString.committed) + INPUT->commitString(m_v1Input->serial, ime->m_current.preeditString.string.c_str()); } } } diff --git a/src/protocols/AlphaModifier.cpp b/src/protocols/AlphaModifier.cpp index 87c46765..e2408397 100644 --- a/src/protocols/AlphaModifier.cpp +++ b/src/protocols/AlphaModifier.cpp @@ -4,58 +4,58 @@ #include "alpha-modifier-v1.hpp" #include "core/Compositor.hpp" -CAlphaModifier::CAlphaModifier(SP resource, SP surface) : m_pSurface(surface) { +CAlphaModifier::CAlphaModifier(SP resource, SP surface) : m_surface(surface) { setResource(std::move(resource)); } bool CAlphaModifier::good() { - return m_pResource->resource(); + return m_resource->resource(); } void CAlphaModifier::setResource(SP resource) { - m_pResource = std::move(resource); + m_resource = std::move(resource); - if UNLIKELY (!m_pResource->resource()) + if UNLIKELY (!m_resource->resource()) return; - m_pResource->setDestroy([this](CWpAlphaModifierSurfaceV1* resource) { destroy(); }); - m_pResource->setOnDestroy([this](CWpAlphaModifierSurfaceV1* resource) { destroy(); }); + m_resource->setDestroy([this](CWpAlphaModifierSurfaceV1* resource) { destroy(); }); + m_resource->setOnDestroy([this](CWpAlphaModifierSurfaceV1* resource) { destroy(); }); - m_pResource->setSetMultiplier([this](CWpAlphaModifierSurfaceV1* resource, uint32_t alpha) { - if (!m_pSurface) { - m_pResource->error(WP_ALPHA_MODIFIER_SURFACE_V1_ERROR_NO_SURFACE, "set_multiplier called for destroyed wl_surface"); + m_resource->setSetMultiplier([this](CWpAlphaModifierSurfaceV1* resource, uint32_t alpha) { + if (!m_surface) { + m_resource->error(WP_ALPHA_MODIFIER_SURFACE_V1_ERROR_NO_SURFACE, "set_multiplier called for destroyed wl_surface"); return; } - m_fAlpha = alpha / (float)UINT32_MAX; + m_alpha = alpha / (float)UINT32_MAX; }); - listeners.surfaceCommitted = m_pSurface->m_events.commit.registerListener([this](std::any data) { - auto surface = CWLSurface::fromResource(m_pSurface.lock()); + m_listeners.surfaceCommitted = m_surface->m_events.commit.registerListener([this](std::any data) { + auto surface = CWLSurface::fromResource(m_surface.lock()); - if (surface && surface->m_alphaModifier != m_fAlpha) { - surface->m_alphaModifier = m_fAlpha; + if (surface && surface->m_alphaModifier != m_alpha) { + surface->m_alphaModifier = m_alpha; auto box = surface->getSurfaceBoxGlobal(); if (box.has_value()) g_pHyprRenderer->damageBox(*box); - if (!m_pResource) + if (!m_resource) PROTO::alphaModifier->destroyAlphaModifier(this); } }); - listeners.surfaceDestroyed = m_pSurface->m_events.destroy.registerListener([this](std::any data) { - if (!m_pResource) + m_listeners.surfaceDestroyed = m_surface->m_events.destroy.registerListener([this](std::any data) { + if (!m_resource) PROTO::alphaModifier->destroyAlphaModifier(this); }); } void CAlphaModifier::destroy() { - m_pResource.reset(); - m_fAlpha = 1.F; + m_resource.reset(); + m_alpha = 1.F; - if (!m_pSurface) + if (!m_surface) PROTO::alphaModifier->destroyAlphaModifier(this); } @@ -64,7 +64,7 @@ CAlphaModifierProtocol::CAlphaModifierProtocol(const wl_interface* iface, const } void CAlphaModifierProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CWpAlphaModifierV1* manager) { destroyManager(manager); }); RESOURCE->setDestroy([this](CWpAlphaModifierV1* manager) { destroyManager(manager); }); @@ -72,19 +72,19 @@ void CAlphaModifierProtocol::bindManager(wl_client* client, void* data, uint32_t } void CAlphaModifierProtocol::destroyManager(CWpAlphaModifierV1* manager) { - std::erase_if(m_vManagers, [&](const auto& p) { return p.get() == manager; }); + std::erase_if(m_managers, [&](const auto& p) { return p.get() == manager; }); } void CAlphaModifierProtocol::destroyAlphaModifier(CAlphaModifier* modifier) { - std::erase_if(m_mAlphaModifiers, [&](const auto& entry) { return entry.second.get() == modifier; }); + std::erase_if(m_alphaModifiers, [&](const auto& entry) { return entry.second.get() == modifier; }); } void CAlphaModifierProtocol::getSurface(CWpAlphaModifierV1* manager, uint32_t id, SP surface) { CAlphaModifier* alphaModifier = nullptr; - auto iter = std::find_if(m_mAlphaModifiers.begin(), m_mAlphaModifiers.end(), [&](const auto& entry) { return entry.second->m_pSurface == surface; }); + auto iter = std::find_if(m_alphaModifiers.begin(), m_alphaModifiers.end(), [&](const auto& entry) { return entry.second->m_surface == surface; }); - if (iter != m_mAlphaModifiers.end()) { - if (iter->second->m_pResource) { + if (iter != m_alphaModifiers.end()) { + if (iter->second->m_resource) { LOGM(ERR, "AlphaModifier already present for surface {:x}", (uintptr_t)surface.get()); manager->error(WP_ALPHA_MODIFIER_V1_ERROR_ALREADY_CONSTRUCTED, "AlphaModifier already present"); return; @@ -93,12 +93,12 @@ void CAlphaModifierProtocol::getSurface(CWpAlphaModifierV1* manager, uint32_t id alphaModifier = iter->second.get(); } } else { - alphaModifier = m_mAlphaModifiers.emplace(surface, makeUnique(makeShared(manager->client(), manager->version(), id), surface)) + alphaModifier = m_alphaModifiers.emplace(surface, makeUnique(makeShared(manager->client(), manager->version(), id), surface)) .first->second.get(); } if UNLIKELY (!alphaModifier->good()) { manager->noMemory(); - m_mAlphaModifiers.erase(surface); + m_alphaModifiers.erase(surface); } } diff --git a/src/protocols/AlphaModifier.hpp b/src/protocols/AlphaModifier.hpp index 9a7873ae..99bfc2fb 100644 --- a/src/protocols/AlphaModifier.hpp +++ b/src/protocols/AlphaModifier.hpp @@ -17,16 +17,16 @@ class CAlphaModifier { void setResource(SP resource); private: - SP m_pResource; - WP m_pSurface; - float m_fAlpha = 1.0; + SP m_resource; + WP m_surface; + float m_alpha = 1.0; void destroy(); struct { CHyprSignalListener surfaceCommitted; CHyprSignalListener surfaceDestroyed; - } listeners; + } m_listeners; friend class CAlphaModifierProtocol; }; @@ -43,8 +43,8 @@ class CAlphaModifierProtocol : public IWaylandProtocol { void getSurface(CWpAlphaModifierV1* manager, uint32_t id, SP surface); // - std::vector> m_vManagers; - std::unordered_map, UP> m_mAlphaModifiers; + std::vector> m_managers; + std::unordered_map, UP> m_alphaModifiers; friend class CAlphaModifier; }; diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp index c848fab8..315941d3 100644 --- a/src/protocols/CTMControl.cpp +++ b/src/protocols/CTMControl.cpp @@ -8,16 +8,16 @@ #include "../helpers/Monitor.hpp" #include "../helpers/MiscFunctions.hpp" -CHyprlandCTMControlResource::CHyprlandCTMControlResource(SP resource_) : resource(resource_) { +CHyprlandCTMControlResource::CHyprlandCTMControlResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CHyprlandCtmControlManagerV1* pMgr) { PROTO::ctm->destroyResource(this); }); - resource->setOnDestroy([this](CHyprlandCtmControlManagerV1* pMgr) { PROTO::ctm->destroyResource(this); }); + m_resource->setDestroy([this](CHyprlandCtmControlManagerV1* pMgr) { PROTO::ctm->destroyResource(this); }); + m_resource->setOnDestroy([this](CHyprlandCtmControlManagerV1* pMgr) { PROTO::ctm->destroyResource(this); }); - resource->setSetCtmForOutput([this](CHyprlandCtmControlManagerV1* r, wl_resource* output, wl_fixed_t mat0, wl_fixed_t mat1, wl_fixed_t mat2, wl_fixed_t mat3, wl_fixed_t mat4, - wl_fixed_t mat5, wl_fixed_t mat6, wl_fixed_t mat7, wl_fixed_t mat8) { - if (blocked) + m_resource->setSetCtmForOutput([this](CHyprlandCtmControlManagerV1* r, wl_resource* output, wl_fixed_t mat0, wl_fixed_t mat1, wl_fixed_t mat2, wl_fixed_t mat3, wl_fixed_t mat4, + wl_fixed_t mat5, wl_fixed_t mat6, wl_fixed_t mat7, wl_fixed_t mat8) { + if (m_blocked) return; const auto OUTPUTRESOURCE = CWLOutputResource::fromResource(output); @@ -35,42 +35,42 @@ CHyprlandCTMControlResource::CHyprlandCTMControlResource(SPerror(HYPRLAND_CTM_CONTROL_MANAGER_V1_ERROR_INVALID_MATRIX, "a matrix component was < 0"); + m_resource->error(HYPRLAND_CTM_CONTROL_MANAGER_V1_ERROR_INVALID_MATRIX, "a matrix component was < 0"); return; } } - ctms[PMONITOR->m_name] = MAT; + m_ctms[PMONITOR->m_name] = MAT; - LOGM(LOG, "CTM set for output {}: {}", PMONITOR->m_name, ctms.at(PMONITOR->m_name).toString()); + LOGM(LOG, "CTM set for output {}: {}", PMONITOR->m_name, m_ctms.at(PMONITOR->m_name).toString()); }); - resource->setCommit([this](CHyprlandCtmControlManagerV1* r) { - if (blocked) + m_resource->setCommit([this](CHyprlandCtmControlManagerV1* r) { + if (m_blocked) return; LOGM(LOG, "Committing ctms to outputs"); for (auto& m : g_pCompositor->m_monitors) { - if (!ctms.contains(m->m_name)) { + if (!m_ctms.contains(m->m_name)) { PROTO::ctm->setCTM(m, Mat3x3::identity()); continue; } - PROTO::ctm->setCTM(m, ctms.at(m->m_name)); + PROTO::ctm->setCTM(m, m_ctms.at(m->m_name)); } }); } void CHyprlandCTMControlResource::block() { - blocked = true; + m_blocked = true; - if (resource->version() >= 2) - resource->sendBlocked(); + if (m_resource->version() >= 2) + m_resource->sendBlocked(); } CHyprlandCTMControlResource::~CHyprlandCTMControlResource() { - if (blocked) + if (m_blocked) return; for (auto& m : g_pCompositor->m_monitors) { @@ -79,7 +79,7 @@ CHyprlandCTMControlResource::~CHyprlandCTMControlResource() { } bool CHyprlandCTMControlResource::good() { - return resource->resource(); + return m_resource->resource(); } CHyprlandCTMControlProtocol::CHyprlandCTMControlProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -87,24 +87,24 @@ CHyprlandCTMControlProtocol::CHyprlandCTMControlProtocol(const wl_interface* ifa } void CHyprlandCTMControlProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } - if (m_pManager) + if (m_manager) RESOURCE->block(); else - m_pManager = RESOURCE; + m_manager = RESOURCE; LOGM(LOG, "New CTM Manager at 0x{:x}", (uintptr_t)RESOURCE.get()); } void CHyprlandCTMControlProtocol::destroyResource(CHyprlandCTMControlResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } bool CHyprlandCTMControlProtocol::isCTMAnimationEnabled() { @@ -129,12 +129,12 @@ void CHyprlandCTMControlProtocol::setCTM(PHLMONITOR monitor, const Mat3x3& ctm) return; } - std::erase_if(m_mCTMDatas, [](const auto& el) { return !el.first; }); + std::erase_if(m_ctmDatas, [](const auto& el) { return !el.first; }); - if (!m_mCTMDatas.contains(monitor)) - m_mCTMDatas[monitor] = makeUnique(); + if (!m_ctmDatas.contains(monitor)) + m_ctmDatas[monitor] = makeUnique(); - auto& data = m_mCTMDatas.at(monitor); + auto& data = m_ctmDatas.at(monitor); data->ctmFrom = data->ctmTo; data->ctmTo = ctm; @@ -145,9 +145,9 @@ void CHyprlandCTMControlProtocol::setCTM(PHLMONITOR monitor, const Mat3x3& ctm) monitor->setCTM(data->ctmFrom); data->progress->setUpdateCallback([monitor = PHLMONITORREF{monitor}, this](auto) { - if (!monitor || !m_mCTMDatas.contains(monitor)) + if (!monitor || !m_ctmDatas.contains(monitor)) return; - auto& data = m_mCTMDatas.at(monitor); + auto& data = m_ctmDatas.at(monitor); const auto from = data->ctmFrom.getMatrix(); const auto to = data->ctmTo.getMatrix(); const auto PROGRESS = data->progress->getPercent(); @@ -163,12 +163,12 @@ void CHyprlandCTMControlProtocol::setCTM(PHLMONITOR monitor, const Mat3x3& ctm) }); data->progress->setCallbackOnEnd([monitor = PHLMONITORREF{monitor}, this](auto) { - if (!monitor || !m_mCTMDatas.contains(monitor)) { + if (!monitor || !m_ctmDatas.contains(monitor)) { if (monitor) monitor->setCTM(Mat3x3::identity()); return; } - auto& data = m_mCTMDatas.at(monitor); + auto& data = m_ctmDatas.at(monitor); monitor->setCTM(data->ctmTo); }); } diff --git a/src/protocols/CTMControl.hpp b/src/protocols/CTMControl.hpp index eb54a3aa..0f2faca8 100644 --- a/src/protocols/CTMControl.hpp +++ b/src/protocols/CTMControl.hpp @@ -19,10 +19,10 @@ class CHyprlandCTMControlResource { void block(); private: - SP resource; + SP m_resource; - std::unordered_map ctms; - bool blocked = false; + std::unordered_map m_ctms; + bool m_blocked = false; }; class CHyprlandCTMControlProtocol : public IWaylandProtocol { @@ -38,8 +38,8 @@ class CHyprlandCTMControlProtocol : public IWaylandProtocol { bool isCTMAnimationEnabled(); // - std::vector> m_vManagers; - WP m_pManager; + std::vector> m_managers; + WP m_manager; // struct SCTMData { @@ -47,7 +47,7 @@ class CHyprlandCTMControlProtocol : public IWaylandProtocol { Mat3x3 ctmFrom = Mat3x3::identity(), ctmTo = Mat3x3::identity(); PHLANIMVAR progress; }; - std::map> m_mCTMDatas; + std::map> m_ctmDatas; friend class CHyprlandCTMControlResource; }; diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 5810b414..5ace1f7e 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -82,15 +82,15 @@ CColorManager::CColorManager(SP resource) : m_resource(resour } const auto RESOURCE = - PROTO::colorManagement->m_vOutputs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), PMONITOR)); + PROTO::colorManagement->m_outputs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), PMONITOR)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vOutputs.pop_back(); + PROTO::colorManagement->m_outputs.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); m_resource->setGetSurface([](CWpColorManagerV1* r, uint32_t id, wl_resource* surface) { LOGM(TRACE, "Get surface for id={}, surface={}", id, (uintptr_t)surface); @@ -108,14 +108,14 @@ CColorManager::CColorManager(SP resource) : m_resource(resour } const auto RESOURCE = - PROTO::colorManagement->m_vSurfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF)); + PROTO::colorManagement->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vSurfaces.pop_back(); + PROTO::colorManagement->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; SURF->m_colorManagement = RESOURCE; }); @@ -129,16 +129,16 @@ CColorManager::CColorManager(SP resource) : m_resource(resour return; } - const auto RESOURCE = PROTO::colorManagement->m_vFeedbackSurfaces.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_feedbackSurfaces.emplace_back( makeShared(makeShared(r->client(), r->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vFeedbackSurfaces.pop_back(); + PROTO::colorManagement->m_feedbackSurfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); m_resource->setCreateIccCreator([](CWpColorManagerV1* r, uint32_t id) { LOGM(WARN, "New ICC creator for id={} (unsupported)", id); @@ -148,29 +148,29 @@ CColorManager::CColorManager(SP resource) : m_resource(resour } const auto RESOURCE = - PROTO::colorManagement->m_vIccCreators.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + PROTO::colorManagement->m_iccCreators.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vIccCreators.pop_back(); + PROTO::colorManagement->m_iccCreators.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); m_resource->setCreateParametricCreator([](CWpColorManagerV1* r, uint32_t id) { LOGM(TRACE, "New parametric creator for id={}", id); - const auto RESOURCE = PROTO::colorManagement->m_vParametricCreators.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_parametricCreators.emplace_back( makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vParametricCreators.pop_back(); + PROTO::colorManagement->m_parametricCreators.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); m_resource->setCreateWindowsScrgb([](CWpColorManagerV1* r, uint32_t id) { LOGM(WARN, "New Windows scRGB description id={} (unsupported)", id); @@ -179,23 +179,23 @@ CColorManager::CColorManager(SP resource) : m_resource(resour return; } - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), false)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; - RESOURCE->settings.windowsScRGB = true; - RESOURCE->settings.primariesNamed = NColorManagement::CM_PRIMARIES_SRGB; - RESOURCE->settings.primariesNameSet = true; - RESOURCE->settings.primaries = NColorPrimaries::BT709; - RESOURCE->settings.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_EXT_LINEAR; - RESOURCE->settings.luminances.reference = 203; - RESOURCE->resource()->sendReady(RESOURCE->settings.updateId()); + RESOURCE->m_self = RESOURCE; + RESOURCE->m_settings.windowsScRGB = true; + RESOURCE->m_settings.primariesNamed = NColorManagement::CM_PRIMARIES_SRGB; + RESOURCE->m_settings.primariesNameSet = true; + RESOURCE->m_settings.primaries = NColorPrimaries::BT709; + RESOURCE->m_settings.transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_EXT_LINEAR; + RESOURCE->m_settings.luminances.reference = 203; + RESOURCE->resource()->sendReady(RESOURCE->m_settings.updateId()); }); m_resource->setOnDestroy([this](CWpColorManagerV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -211,7 +211,7 @@ CColorManagementOutput::CColorManagementOutput(SP re if UNLIKELY (!good()) return; - pClient = m_resource->client(); + m_client = m_resource->client(); m_resource->setDestroy([this](CWpColorManagementOutputV1* r) { PROTO::colorManagement->destroyResource(this); }); m_resource->setOnDestroy([this](CWpColorManagementOutputV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -219,24 +219,24 @@ CColorManagementOutput::CColorManagementOutput(SP re m_resource->setGetImageDescription([this](CWpColorManagementOutputV1* r, uint32_t id) { LOGM(TRACE, "Get image description for output={}, id={}", (uintptr_t)r, id); - if (imageDescription.valid()) - PROTO::colorManagement->destroyResource(imageDescription.get()); + if (m_imageDescription.valid()) + PROTO::colorManagement->destroyResource(m_imageDescription.get()); - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), true)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; if (!m_monitor.valid()) RESOURCE->m_resource->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_NO_OUTPUT, "No output"); else { - RESOURCE->settings = m_monitor->m_imageDescription; - RESOURCE->m_resource->sendReady(RESOURCE->settings.updateId()); + RESOURCE->m_settings = m_monitor->m_imageDescription; + RESOURCE->m_resource->sendReady(RESOURCE->m_settings.updateId()); } }); } @@ -246,25 +246,25 @@ bool CColorManagementOutput::good() { } wl_client* CColorManagementOutput::client() { - return pClient; + return m_client; } -CColorManagementSurface::CColorManagementSurface(SP surface_) : surface(surface_) { +CColorManagementSurface::CColorManagementSurface(SP surface_) : m_surface(surface_) { // only for frog cm untill wayland cm is adopted } -CColorManagementSurface::CColorManagementSurface(SP resource, SP surface_) : surface(surface_), m_resource(resource) { +CColorManagementSurface::CColorManagementSurface(SP resource, SP surface_) : m_surface(surface_), m_resource(resource) { if UNLIKELY (!good()) return; - pClient = m_resource->client(); + m_client = m_resource->client(); m_resource->setDestroy([this](CWpColorManagementSurfaceV1* r) { - LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)surface); + LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)m_surface); PROTO::colorManagement->destroyResource(this); }); m_resource->setOnDestroy([this](CWpColorManagementSurfaceV1* r) { - LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)surface); + LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)m_surface); PROTO::colorManagement->destroyResource(this); }); @@ -281,15 +281,15 @@ CColorManagementSurface::CColorManagementSurface(SP return; } - const auto imageDescription = std::find_if(PROTO::colorManagement->m_vImageDescriptions.begin(), PROTO::colorManagement->m_vImageDescriptions.end(), + const auto imageDescription = std::find_if(PROTO::colorManagement->m_imageDescriptions.begin(), PROTO::colorManagement->m_imageDescriptions.end(), [&](const auto& other) { return other->resource()->resource() == image_description; }); - if (imageDescription == PROTO::colorManagement->m_vImageDescriptions.end()) { + if (imageDescription == PROTO::colorManagement->m_imageDescriptions.end()) { r->error(WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_IMAGE_DESCRIPTION, "Image description not found"); return; } setHasImageDescription(true); - m_imageDescription = imageDescription->get()->settings; + m_imageDescription = imageDescription->get()->m_settings; }); m_resource->setUnsetImageDescription([this](CWpColorManagementSurfaceV1* r) { LOGM(TRACE, "Unset image description for surface={}", (uintptr_t)r); @@ -303,7 +303,7 @@ bool CColorManagementSurface::good() { } wl_client* CColorManagementSurface::client() { - return pClient; + return m_client; } const SImageDescription& CColorManagementSurface::imageDescription() { @@ -340,20 +340,20 @@ bool CColorManagementSurface::needsHdrMetadataUpdate() { } CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SP resource, SP surface_) : - surface(surface_), m_resource(resource) { + m_surface(surface_), m_resource(resource) { if UNLIKELY (!good()) return; - pClient = m_resource->client(); + m_client = m_resource->client(); m_resource->setDestroy([this](CWpColorManagementSurfaceFeedbackV1* r) { - LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)surface); + LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)m_surface); if (m_currentPreferred.valid()) PROTO::colorManagement->destroyResource(m_currentPreferred.get()); PROTO::colorManagement->destroyResource(this); }); m_resource->setOnDestroy([this](CWpColorManagementSurfaceFeedbackV1* r) { - LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)surface); + LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)m_surface); if (m_currentPreferred.valid()) PROTO::colorManagement->destroyResource(m_currentPreferred.get()); PROTO::colorManagement->destroyResource(this); @@ -365,20 +365,20 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SPdestroyResource(m_currentPreferred.get()); - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), true)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; m_currentPreferred = RESOURCE; - m_currentPreferred->settings = g_pCompositor->getPreferredImageDescription(); - RESOURCE->resource()->sendReady(m_currentPreferred->settings.updateId()); + m_currentPreferred->m_settings = g_pCompositor->getPreferredImageDescription(); + RESOURCE->resource()->sendReady(m_currentPreferred->m_settings.updateId()); }); m_resource->setGetPreferredParametric([this](CWpColorManagementSurfaceFeedbackV1* r, uint32_t id) { @@ -392,26 +392,26 @@ CColorManagementFeedbackSurface::CColorManagementFeedbackSurface(SPdestroyResource(m_currentPreferred.get()); - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), true)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; m_currentPreferred = RESOURCE; - m_currentPreferred->settings = g_pCompositor->getPreferredImageDescription(); - if (!PROTO::colorManagement->m_debug && m_currentPreferred->settings.icc.fd) { + m_currentPreferred->m_settings = g_pCompositor->getPreferredImageDescription(); + if (!PROTO::colorManagement->m_debug && m_currentPreferred->m_settings.icc.fd) { LOGM(ERR, "FIXME: parse icc profile"); r->error(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "ICC profiles are not supported"); return; } - RESOURCE->resource()->sendReady(m_currentPreferred->settings.updateId()); + RESOURCE->resource()->sendReady(m_currentPreferred->m_settings.updateId()); }); } @@ -420,14 +420,14 @@ bool CColorManagementFeedbackSurface::good() { } wl_client* CColorManagementFeedbackSurface::client() { - return pClient; + return m_client; } CColorManagementIccCreator::CColorManagementIccCreator(SP resource) : m_resource(resource) { if UNLIKELY (!good()) return; // - pClient = m_resource->client(); + m_client = m_resource->client(); m_resource->setOnDestroy([this](CWpImageDescriptionCreatorIccV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -435,39 +435,39 @@ CColorManagementIccCreator::CColorManagementIccCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INCOMPLETE_SET, "Missing required settings"); return; } - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), false)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } - LOGM(ERR, "FIXME: Parse icc file {}({},{}) for id {}", settings.icc.fd, settings.icc.offset, settings.icc.length, id); + LOGM(ERR, "FIXME: Parse icc file {}({},{}) for id {}", m_settings.icc.fd, m_settings.icc.offset, m_settings.icc.length, id); // FIXME actually check support - if (settings.icc.fd < 0 || !settings.icc.length) { + if (m_settings.icc.fd < 0 || !m_settings.icc.length) { RESOURCE->resource()->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_UNSUPPORTED, "unsupported"); return; } - RESOURCE->self = RESOURCE; - RESOURCE->settings = settings; - RESOURCE->resource()->sendReady(settings.updateId()); + RESOURCE->m_self = RESOURCE; + RESOURCE->m_settings = m_settings; + RESOURCE->resource()->sendReady(m_settings.updateId()); PROTO::colorManagement->destroyResource(this); }); m_resource->setSetIccFile([this](CWpImageDescriptionCreatorIccV1* r, int fd, uint32_t offset, uint32_t length) { - settings.icc.fd = fd; - settings.icc.offset = offset; - settings.icc.length = length; + m_settings.icc.fd = fd; + m_settings.icc.offset = offset; + m_settings.icc.length = length; }); } @@ -476,14 +476,14 @@ bool CColorManagementIccCreator::good() { } wl_client* CColorManagementIccCreator::client() { - return pClient; + return m_client; } CColorManagementParametricCreator::CColorManagementParametricCreator(SP resource) : m_resource(resource) { if UNLIKELY (!good()) return; // - pClient = m_resource->client(); + m_client = m_resource->client(); m_resource->setOnDestroy([this](CWpImageDescriptionCreatorParamsV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -491,35 +491,35 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INCOMPLETE_SET, "Missing required settings"); return; } - const auto RESOURCE = PROTO::colorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::colorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), false)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::colorManagement->m_vImageDescriptions.pop_back(); + PROTO::colorManagement->m_imageDescriptions.pop_back(); return; } // FIXME actually check support - if (!valuesSet) { + if (!m_valuesSet) { RESOURCE->resource()->sendFailed(WP_IMAGE_DESCRIPTION_V1_CAUSE_UNSUPPORTED, "unsupported"); return; } - RESOURCE->self = RESOURCE; - RESOURCE->settings = settings; - RESOURCE->resource()->sendReady(settings.updateId()); + RESOURCE->m_self = RESOURCE; + RESOURCE->m_settings = m_settings; + RESOURCE->resource()->sendReady(m_settings.updateId()); PROTO::colorManagement->destroyResource(this); }); m_resource->setSetTfNamed([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t tf) { LOGM(TRACE, "Set image description transfer function to {}", tf); - if (valuesSet & PC_TF) { + if (m_valuesSet & PC_TF) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Transfer function already set"); return; } @@ -534,12 +534,12 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_TF, "Unsupported transfer function"); return; } - settings.transferFunction = convertTransferFunction((wpColorManagerV1TransferFunction)tf); - valuesSet |= PC_TF; + m_settings.transferFunction = convertTransferFunction((wpColorManagerV1TransferFunction)tf); + m_valuesSet |= PC_TF; }); m_resource->setSetTfPower([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t eexp) { LOGM(TRACE, "Set image description tf power to {}", eexp); - if (valuesSet & PC_TF_POWER) { + if (m_valuesSet & PC_TF_POWER) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Transfer function power already set"); return; } @@ -547,16 +547,16 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "TF power is not supported"); return; } - settings.transferFunctionPower = eexp / 10000.0f; - if (settings.transferFunctionPower < 1.0 || settings.transferFunctionPower > 10.0) { + m_settings.transferFunctionPower = eexp / 10000.0f; + if (m_settings.transferFunctionPower < 1.0 || m_settings.transferFunctionPower > 10.0) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_TF, "Power should be between 1.0 and 10.0"); return; } - valuesSet |= PC_TF_POWER; + m_valuesSet |= PC_TF_POWER; }); m_resource->setSetPrimariesNamed([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t primaries) { LOGM(TRACE, "Set image description primaries by name {}", primaries); - if (valuesSet & PC_PRIMARIES) { + if (m_valuesSet & PC_PRIMARIES) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Primaries already set"); return; } @@ -578,15 +578,15 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPsetSetPrimaries( [this](CWpImageDescriptionCreatorParamsV1* r, int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y, int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y) { LOGM(TRACE, "Set image description primaries by values r:{},{} g:{},{} b:{},{} w:{},{}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y); - if (valuesSet & PC_PRIMARIES) { + if (m_valuesSet & PC_PRIMARIES) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Primaries already set"); return; } @@ -594,17 +594,17 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "Custom primaries aren't supported"); return; } - settings.primariesNameSet = false; - settings.primaries = SPCPRimaries{.red = {.x = r_x / 1000000.0f, .y = r_y / 1000000.0f}, - .green = {.x = g_x / 1000000.0f, .y = g_y / 1000000.0f}, - .blue = {.x = b_x / 1000000.0f, .y = b_y / 1000000.0f}, - .white = {.x = w_x / 1000000.0f, .y = w_y / 1000000.0f}}; - valuesSet |= PC_PRIMARIES; + m_settings.primariesNameSet = false; + m_settings.primaries = SPCPRimaries{.red = {.x = r_x / 1000000.0f, .y = r_y / 1000000.0f}, + .green = {.x = g_x / 1000000.0f, .y = g_y / 1000000.0f}, + .blue = {.x = b_x / 1000000.0f, .y = b_y / 1000000.0f}, + .white = {.x = w_x / 1000000.0f, .y = w_y / 1000000.0f}}; + m_valuesSet |= PC_PRIMARIES; }); m_resource->setSetLuminances([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t min_lum, uint32_t max_lum, uint32_t reference_lum) { auto min = min_lum / 10000.0f; LOGM(TRACE, "Set image description luminances to {} - {} ({})", min, max_lum, reference_lum); - if (valuesSet & PC_LUMINANCES) { + if (m_valuesSet & PC_LUMINANCES) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Luminances already set"); return; } @@ -612,13 +612,13 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_LUMINANCE, "Invalid luminances"); return; } - settings.luminances = SImageDescription::SPCLuminances{.min = min, .max = max_lum, .reference = reference_lum}; - valuesSet |= PC_LUMINANCES; + m_settings.luminances = SImageDescription::SPCLuminances{.min = min, .max = max_lum, .reference = reference_lum}; + m_valuesSet |= PC_LUMINANCES; }); m_resource->setSetMasteringDisplayPrimaries( [this](CWpImageDescriptionCreatorParamsV1* r, int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y, int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y) { LOGM(TRACE, "Set image description mastering primaries by values r:{},{} g:{},{} b:{},{} w:{},{}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y); - if (valuesSet & PC_MASTERING_PRIMARIES) { + if (m_valuesSet & PC_MASTERING_PRIMARIES) { r->error(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Mastering primaries already set"); return; } @@ -626,11 +626,11 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "Mastering primaries are not supported"); return; } - settings.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 1000000.0f, .y = r_y / 1000000.0f}, - .green = {.x = g_x / 1000000.0f, .y = g_y / 1000000.0f}, - .blue = {.x = b_x / 1000000.0f, .y = b_y / 1000000.0f}, - .white = {.x = w_x / 1000000.0f, .y = w_y / 1000000.0f}}; - valuesSet |= PC_MASTERING_PRIMARIES; + m_settings.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 1000000.0f, .y = r_y / 1000000.0f}, + .green = {.x = g_x / 1000000.0f, .y = g_y / 1000000.0f}, + .blue = {.x = b_x / 1000000.0f, .y = b_y / 1000000.0f}, + .white = {.x = w_x / 1000000.0f, .y = w_y / 1000000.0f}}; + m_valuesSet |= PC_MASTERING_PRIMARIES; // FIXME: // If a compositor additionally supports target color volume exceeding the primary color volume, it must advertise wp_color_manager_v1.feature.extended_target_volume. @@ -652,8 +652,8 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE, "Mastering luminances are not supported"); return; } - settings.masteringLuminances = SImageDescription::SPCMasteringLuminances{.min = min, .max = max_lum}; - valuesSet |= PC_MASTERING_LUMINANCES; + m_settings.masteringLuminances = SImageDescription::SPCMasteringLuminances{.min = min, .max = max_lum}; + m_valuesSet |= PC_MASTERING_LUMINANCES; }); m_resource->setSetMaxCll([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t max_cll) { LOGM(TRACE, "Set image description max content light level to {}", max_cll); @@ -661,8 +661,8 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Max CLL already set"); // return; // } - settings.maxCLL = max_cll; - valuesSet |= PC_CLL; + m_settings.maxCLL = max_cll; + m_valuesSet |= PC_CLL; }); m_resource->setSetMaxFall([this](CWpImageDescriptionCreatorParamsV1* r, uint32_t max_fall) { LOGM(TRACE, "Set image description max frame-average light level to {}", max_fall); @@ -670,8 +670,8 @@ CColorManagementParametricCreator::CColorManagementParametricCreator(SPerror(WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET, "Max FALL already set"); // return; // } - settings.maxFALL = max_fall; - valuesSet |= PC_FALL; + m_settings.maxFALL = max_fall; + m_valuesSet |= PC_FALL; }); } @@ -680,7 +680,7 @@ bool CColorManagementParametricCreator::good() { } wl_client* CColorManagementParametricCreator::client() { - return pClient; + return m_client; } CColorManagementImageDescription::CColorManagementImageDescription(SP resource, bool allowGetInformation) : @@ -688,7 +688,7 @@ CColorManagementImageDescription::CColorManagementImageDescription(SPclient(); + m_client = m_resource->client(); m_resource->setDestroy([this](CWpImageDescriptionV1* r) { PROTO::colorManagement->destroyResource(this); }); m_resource->setOnDestroy([this](CWpImageDescriptionV1* r) { PROTO::colorManagement->destroyResource(this); }); @@ -700,7 +700,7 @@ CColorManagementImageDescription::CColorManagementImageDescription(SP(makeShared(r->client(), r->version(), id), settings); + auto RESOURCE = makeShared(makeShared(r->client(), r->version(), id), m_settings); if UNLIKELY (!RESOURCE->good()) r->noMemory(); @@ -715,7 +715,7 @@ bool CColorManagementImageDescription::good() { } wl_client* CColorManagementImageDescription::client() { - return pClient; + return m_client; } SP CColorManagementImageDescription::resource() { @@ -723,33 +723,34 @@ SP CColorManagementImageDescription::resource() { } CColorManagementImageDescriptionInfo::CColorManagementImageDescriptionInfo(SP resource, const SImageDescription& settings_) : - m_resource(resource), settings(settings_) { + m_resource(resource), m_settings(settings_) { if UNLIKELY (!good()) return; - pClient = m_resource->client(); + m_client = m_resource->client(); const auto toProto = [](float value) { return int32_t(std::round(value * 10000)); }; - if (settings.icc.fd >= 0) - m_resource->sendIccFile(settings.icc.fd, settings.icc.length); + if (m_settings.icc.fd >= 0) + m_resource->sendIccFile(m_settings.icc.fd, m_settings.icc.length); // send preferred client paramateres - m_resource->sendPrimaries(toProto(settings.primaries.red.x), toProto(settings.primaries.red.y), toProto(settings.primaries.green.x), toProto(settings.primaries.green.y), - toProto(settings.primaries.blue.x), toProto(settings.primaries.blue.y), toProto(settings.primaries.white.x), toProto(settings.primaries.white.y)); - if (settings.primariesNameSet) - m_resource->sendPrimariesNamed(settings.primariesNamed); - m_resource->sendTfPower(std::round(settings.transferFunctionPower * 10000)); - m_resource->sendTfNamed(settings.transferFunction); - m_resource->sendLuminances(std::round(settings.luminances.min * 10000), settings.luminances.max, settings.luminances.reference); + m_resource->sendPrimaries(toProto(m_settings.primaries.red.x), toProto(m_settings.primaries.red.y), toProto(m_settings.primaries.green.x), + toProto(m_settings.primaries.green.y), toProto(m_settings.primaries.blue.x), toProto(m_settings.primaries.blue.y), + toProto(m_settings.primaries.white.x), toProto(m_settings.primaries.white.y)); + if (m_settings.primariesNameSet) + m_resource->sendPrimariesNamed(m_settings.primariesNamed); + m_resource->sendTfPower(std::round(m_settings.transferFunctionPower * 10000)); + m_resource->sendTfNamed(m_settings.transferFunction); + m_resource->sendLuminances(std::round(m_settings.luminances.min * 10000), m_settings.luminances.max, m_settings.luminances.reference); // send expexted display paramateres - m_resource->sendTargetPrimaries(toProto(settings.masteringPrimaries.red.x), toProto(settings.masteringPrimaries.red.y), toProto(settings.masteringPrimaries.green.x), - toProto(settings.masteringPrimaries.green.y), toProto(settings.masteringPrimaries.blue.x), toProto(settings.masteringPrimaries.blue.y), - toProto(settings.masteringPrimaries.white.x), toProto(settings.masteringPrimaries.white.y)); - m_resource->sendTargetLuminance(std::round(settings.masteringLuminances.min * 10000), settings.masteringLuminances.max); - m_resource->sendTargetMaxCll(settings.maxCLL); - m_resource->sendTargetMaxFall(settings.maxFALL); + m_resource->sendTargetPrimaries(toProto(m_settings.masteringPrimaries.red.x), toProto(m_settings.masteringPrimaries.red.y), toProto(m_settings.masteringPrimaries.green.x), + toProto(m_settings.masteringPrimaries.green.y), toProto(m_settings.masteringPrimaries.blue.x), toProto(m_settings.masteringPrimaries.blue.y), + toProto(m_settings.masteringPrimaries.white.x), toProto(m_settings.masteringPrimaries.white.y)); + m_resource->sendTargetLuminance(std::round(m_settings.masteringLuminances.min * 10000), m_settings.masteringLuminances.max); + m_resource->sendTargetMaxCll(m_settings.maxCLL); + m_resource->sendTargetMaxFall(m_settings.maxFALL); m_resource->sendDone(); } @@ -759,7 +760,7 @@ bool CColorManagementImageDescriptionInfo::good() { } wl_client* CColorManagementImageDescriptionInfo::client() { - return pClient; + return m_client; } CColorManagementProtocol::CColorManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name, bool debug) : @@ -768,11 +769,11 @@ CColorManagementProtocol::CColorManagementProtocol(const wl_interface* iface, co } void CColorManagementProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } @@ -780,42 +781,42 @@ void CColorManagementProtocol::bindManager(wl_client* client, void* data, uint32 } void CColorManagementProtocol::onImagePreferredChanged(uint32_t preferredId) { - for (auto const& feedback : m_vFeedbackSurfaces) { + for (auto const& feedback : m_feedbackSurfaces) { feedback->m_resource->sendPreferredChanged(preferredId); } } void CColorManagementProtocol::onMonitorImageDescriptionChanged(WP monitor) { - for (auto const& output : m_vOutputs) { + for (auto const& output : m_outputs) { if (output->m_monitor == monitor) output->m_resource->sendImageDescriptionChanged(); } } void CColorManagementProtocol::destroyResource(CColorManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementOutput* resource) { - std::erase_if(m_vOutputs, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_outputs, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementSurface* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementFeedbackSurface* resource) { - std::erase_if(m_vFeedbackSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_feedbackSurfaces, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementIccCreator* resource) { - std::erase_if(m_vIccCreators, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_iccCreators, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementParametricCreator* resource) { - std::erase_if(m_vParametricCreators, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_parametricCreators, [&](const auto& other) { return other.get() == resource; }); } void CColorManagementProtocol::destroyResource(CColorManagementImageDescription* resource) { - std::erase_if(m_vImageDescriptions, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_imageDescriptions, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/ColorManagement.hpp b/src/protocols/ColorManagement.hpp index 5a94920d..fc3a8d54 100644 --- a/src/protocols/ColorManagement.hpp +++ b/src/protocols/ColorManagement.hpp @@ -31,12 +31,12 @@ class CColorManagementOutput { bool good(); wl_client* client(); - WP self; - WP imageDescription; + WP m_self; + WP m_imageDescription; private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; WP m_monitor; friend class CColorManagementProtocol; @@ -51,8 +51,8 @@ class CColorManagementSurface { bool good(); wl_client* client(); - WP self; - WP surface; + WP m_self; + WP m_surface; const NColorManagement::SImageDescription& imageDescription(); bool hasImageDescription(); @@ -63,7 +63,7 @@ class CColorManagementSurface { private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; NColorManagement::SImageDescription m_imageDescription; NColorManagement::SImageDescription m_lastImageDescription; bool m_hasImageDescription = false; @@ -81,12 +81,12 @@ class CColorManagementFeedbackSurface { bool good(); wl_client* client(); - WP self; - WP surface; + WP m_self; + WP m_surface; private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; WP m_currentPreferred; @@ -100,13 +100,13 @@ class CColorManagementIccCreator { bool good(); wl_client* client(); - WP self; + WP m_self; - NColorManagement::SImageDescription settings; + NColorManagement::SImageDescription m_settings; private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; }; class CColorManagementParametricCreator { @@ -116,9 +116,9 @@ class CColorManagementParametricCreator { bool good(); wl_client* client(); - WP self; + WP m_self; - NColorManagement::SImageDescription settings; + NColorManagement::SImageDescription m_settings; private: enum eValuesSet : uint32_t { // NOLINT @@ -133,8 +133,8 @@ class CColorManagementParametricCreator { }; SP m_resource; - wl_client* pClient = nullptr; - uint32_t valuesSet = 0; // enum eValuesSet + wl_client* m_client = nullptr; + uint32_t m_valuesSet = 0; // enum eValuesSet }; class CColorManagementImageDescription { @@ -145,13 +145,13 @@ class CColorManagementImageDescription { wl_client* client(); SP resource(); - WP self; + WP m_self; - NColorManagement::SImageDescription settings; + NColorManagement::SImageDescription m_settings; private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; bool m_allowGetInformation = false; friend class CColorManagementOutput; @@ -166,8 +166,8 @@ class CColorManagementImageDescriptionInfo { private: SP m_resource; - wl_client* pClient = nullptr; - NColorManagement::SImageDescription settings; + wl_client* m_client = nullptr; + NColorManagement::SImageDescription m_settings; }; class CColorManagementProtocol : public IWaylandProtocol { @@ -188,13 +188,13 @@ class CColorManagementProtocol : public IWaylandProtocol { void destroyResource(CColorManagementParametricCreator* resource); void destroyResource(CColorManagementImageDescription* resource); - std::vector> m_vManagers; - std::vector> m_vOutputs; - std::vector> m_vSurfaces; - std::vector> m_vFeedbackSurfaces; - std::vector> m_vIccCreators; - std::vector> m_vParametricCreators; - std::vector> m_vImageDescriptions; + std::vector> m_managers; + std::vector> m_outputs; + std::vector> m_surfaces; + std::vector> m_feedbackSurfaces; + std::vector> m_iccCreators; + std::vector> m_parametricCreators; + std::vector> m_imageDescriptions; bool m_debug = false; friend class CColorManager; diff --git a/src/protocols/ContentType.cpp b/src/protocols/ContentType.cpp index 8ea212f1..218c7aeb 100644 --- a/src/protocols/ContentType.cpp +++ b/src/protocols/ContentType.cpp @@ -24,14 +24,14 @@ CContentTypeManager::CContentTypeManager(SP resource) : return; } - const auto RESOURCE = PROTO::contentType->m_vContentTypes.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + const auto RESOURCE = PROTO::contentType->m_contentTypes.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::contentType->m_vContentTypes.pop_back(); + PROTO::contentType->m_contentTypes.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; SURF->m_contentType = RESOURCE; }); @@ -42,19 +42,19 @@ bool CContentTypeManager::good() { } CContentType::CContentType(WP surface) { - destroy = surface->m_events.destroy.registerListener([this](std::any d) { PROTO::contentType->destroyResource(this); }); + m_destroy = surface->m_events.destroy.registerListener([this](std::any d) { PROTO::contentType->destroyResource(this); }); } CContentType::CContentType(SP resource) : m_resource(resource) { if UNLIKELY (!good()) return; - m_pClient = resource->client(); + m_client = resource->client(); resource->setDestroy([this](CWpContentTypeV1* r) { PROTO::contentType->destroyResource(this); }); resource->setOnDestroy([this](CWpContentTypeV1* r) { PROTO::contentType->destroyResource(this); }); - resource->setSetContentType([this](CWpContentTypeV1* r, wpContentTypeV1Type type) { value = NContentType::fromWP(type); }); + resource->setSetContentType([this](CWpContentTypeV1* r, wpContentTypeV1Type type) { m_value = NContentType::fromWP(type); }); } bool CContentType::good() { @@ -62,7 +62,7 @@ bool CContentType::good() { } wl_client* CContentType::client() { - return m_pClient; + return m_client; } CContentTypeProtocol::CContentTypeProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -70,11 +70,11 @@ CContentTypeProtocol::CContentTypeProtocol(const wl_interface* iface, const int& } void CContentTypeProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } @@ -83,13 +83,13 @@ SP CContentTypeProtocol::getContentType(WP sur if (surface->m_contentType.valid()) return surface->m_contentType.lock(); - return m_vContentTypes.emplace_back(makeShared(surface)); + return m_contentTypes.emplace_back(makeShared(surface)); } void CContentTypeProtocol::destroyResource(CContentTypeManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CContentTypeProtocol::destroyResource(CContentType* resource) { - std::erase_if(m_vContentTypes, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_contentTypes, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/ContentType.hpp b/src/protocols/ContentType.hpp index 4c0c445f..4fc9bee5 100644 --- a/src/protocols/ContentType.hpp +++ b/src/protocols/ContentType.hpp @@ -22,15 +22,15 @@ class CContentType { bool good(); wl_client* client(); - NContentType::eContentType value = NContentType::CONTENT_TYPE_NONE; + NContentType::eContentType m_value = NContentType::CONTENT_TYPE_NONE; - WP self; + WP m_self; private: SP m_resource; - wl_client* m_pClient = nullptr; + wl_client* m_client = nullptr; - CHyprSignalListener destroy; + CHyprSignalListener m_destroy; friend class CContentTypeProtocol; }; @@ -47,8 +47,8 @@ class CContentTypeProtocol : public IWaylandProtocol { void destroyResource(CContentTypeManager* resource); void destroyResource(CContentType* resource); - std::vector> m_vManagers; - std::vector> m_vContentTypes; + std::vector> m_managers; + std::vector> m_contentTypes; friend class CContentTypeManager; friend class CContentType; diff --git a/src/protocols/CursorShape.cpp b/src/protocols/CursorShape.cpp index d38d5a8c..26f79a86 100644 --- a/src/protocols/CursorShape.cpp +++ b/src/protocols/CursorShape.cpp @@ -7,15 +7,15 @@ CCursorShapeProtocol::CCursorShapeProtocol(const wl_interface* iface, const int& } void CCursorShapeProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [res](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [res](const auto& other) { return other->resource() == res; }); } void CCursorShapeProtocol::onDeviceResourceDestroy(wl_resource* res) { - std::erase_if(m_vDevices, [res](const auto& other) { return other->resource() == res; }); + std::erase_if(m_devices, [res](const auto& other) { return other->resource() == res; }); } void CCursorShapeProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CWpCursorShapeManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpCursorShapeManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -33,7 +33,7 @@ void CCursorShapeProtocol::onGetTabletToolV2(CWpCursorShapeManagerV1* pMgr, uint void CCursorShapeProtocol::createCursorShapeDevice(CWpCursorShapeManagerV1* pMgr, uint32_t id, wl_resource* resource) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vDevices.emplace_back(makeShared(CLIENT, pMgr->version(), id)); + const auto RESOURCE = m_devices.emplace_back(makeShared(CLIENT, pMgr->version(), id)); RESOURCE->setOnDestroy([this](CWpCursorShapeDeviceV1* p) { this->onDeviceResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpCursorShapeDeviceV1* p) { this->onDeviceResourceDestroy(p->resource()); }); @@ -51,5 +51,5 @@ void CCursorShapeProtocol::onSetShape(CWpCursorShapeDeviceV1* pMgr, uint32_t ser event.shape = shape; event.shapeName = CURSOR_SHAPE_NAMES.at(shape); - events.setShape.emit(event); + m_events.setShape.emit(event); } \ No newline at end of file diff --git a/src/protocols/CursorShape.hpp b/src/protocols/CursorShape.hpp index 37b7e6c8..d7ae75c1 100644 --- a/src/protocols/CursorShape.hpp +++ b/src/protocols/CursorShape.hpp @@ -19,7 +19,7 @@ class CCursorShapeProtocol : public IWaylandProtocol { struct { CSignal setShape; - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -32,8 +32,8 @@ class CCursorShapeProtocol : public IWaylandProtocol { void createCursorShapeDevice(CWpCursorShapeManagerV1* pMgr, uint32_t id, wl_resource* resource); // - std::vector> m_vDevices; - std::vector> m_vManagers; + std::vector> m_devices; + std::vector> m_managers; }; namespace PROTO { diff --git a/src/protocols/DRMLease.cpp b/src/protocols/DRMLease.cpp index 80c34d23..c4b5a84a 100644 --- a/src/protocols/DRMLease.cpp +++ b/src/protocols/DRMLease.cpp @@ -6,20 +6,20 @@ #include using namespace Hyprutils::OS; -CDRMLeaseResource::CDRMLeaseResource(SP resource_, SP request) : resource(resource_) { +CDRMLeaseResource::CDRMLeaseResource(SP resource_, SP request) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpDrmLeaseV1* r) { PROTO::lease->destroyResource(this); }); - resource->setDestroy([this](CWpDrmLeaseV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpDrmLeaseV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setDestroy([this](CWpDrmLeaseV1* r) { PROTO::lease->destroyResource(this); }); - parent = request->parent; - requested = request->requested; + m_parent = request->m_parent; + m_requested = request->m_requested; - for (auto const& m : requested) { - if (!m->monitor || m->monitor->m_isBeingLeased) { - LOGM(ERR, "Rejecting lease: no monitor or monitor is being leased for {}", (m->monitor ? m->monitor->m_name : "null")); - resource->sendFinished(); + for (auto const& m : m_requested) { + if (!m->m_monitor || m->m_monitor->m_isBeingLeased) { + LOGM(ERR, "Rejecting lease: no monitor or monitor is being leased for {}", (m->m_monitor ? m->m_monitor->m_name : "null")); + m_resource->sendFinished(); return; } } @@ -28,97 +28,97 @@ CDRMLeaseResource::CDRMLeaseResource(SP resource_, SPmonitor->m_name); + for (auto const& o : m_requested) { + roll += std::format("{} ", o->m_monitor->m_name); } return roll; }()); std::vector> outputs; // reserve to avoid reallocations - outputs.reserve(requested.size()); + outputs.reserve(m_requested.size()); - for (auto const& m : requested) { - outputs.emplace_back(m->monitor->m_output); + for (auto const& m : m_requested) { + outputs.emplace_back(m->m_monitor->m_output); } auto aqlease = Aquamarine::CDRMLease::create(outputs); if (!aqlease) { LOGM(ERR, "Rejecting lease: backend failed to alloc a lease"); - resource->sendFinished(); + m_resource->sendFinished(); return; } - lease = aqlease; + m_lease = aqlease; - for (auto const& m : requested) { - m->monitor->m_isBeingLeased = true; + for (auto const& m : m_requested) { + m->m_monitor->m_isBeingLeased = true; } - listeners.destroyLease = lease->events.destroy.registerListener([this](std::any d) { - for (auto const& m : requested) { - if (m && m->monitor) - m->monitor->m_isBeingLeased = false; + m_listeners.destroyLease = m_lease->events.destroy.registerListener([this](std::any d) { + for (auto const& m : m_requested) { + if (m && m->m_monitor) + m->m_monitor->m_isBeingLeased = false; } - resource->sendFinished(); - LOGM(LOG, "Revoking lease for fd {}", lease->leaseFD); + m_resource->sendFinished(); + LOGM(LOG, "Revoking lease for fd {}", m_lease->leaseFD); }); - LOGM(LOG, "Granting lease, sending fd {}", lease->leaseFD); + LOGM(LOG, "Granting lease, sending fd {}", m_lease->leaseFD); - resource->sendLeaseFd(lease->leaseFD); + m_resource->sendLeaseFd(m_lease->leaseFD); - close(lease->leaseFD); + close(m_lease->leaseFD); } bool CDRMLeaseResource::good() { - return resource->resource(); + return m_resource->resource(); } CDRMLeaseResource::~CDRMLeaseResource() { // destroy in this order to ensure listener gets called - lease.reset(); - listeners.destroyLease.reset(); + m_lease.reset(); + m_listeners.destroyLease.reset(); } -CDRMLeaseRequestResource::CDRMLeaseRequestResource(SP resource_) : resource(resource_) { +CDRMLeaseRequestResource::CDRMLeaseRequestResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpDrmLeaseRequestV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpDrmLeaseRequestV1* r) { PROTO::lease->destroyResource(this); }); - resource->setRequestConnector([this](CWpDrmLeaseRequestV1* r, wl_resource* conn) { + m_resource->setRequestConnector([this](CWpDrmLeaseRequestV1* r, wl_resource* conn) { if (!conn) { - resource->error(-1, "Null connector"); + m_resource->error(-1, "Null connector"); return; } auto CONNECTOR = CDRMLeaseConnectorResource::fromResource(conn); - if (std::find(requested.begin(), requested.end(), CONNECTOR) != requested.end()) { - resource->error(WP_DRM_LEASE_REQUEST_V1_ERROR_DUPLICATE_CONNECTOR, "Connector already requested"); + if (std::find(m_requested.begin(), m_requested.end(), CONNECTOR) != m_requested.end()) { + m_resource->error(WP_DRM_LEASE_REQUEST_V1_ERROR_DUPLICATE_CONNECTOR, "Connector already requested"); return; } // TODO: when (if) we add multi, make sure this is from the correct device. - requested.emplace_back(CONNECTOR); + m_requested.emplace_back(CONNECTOR); }); - resource->setSubmit([this](CWpDrmLeaseRequestV1* r, uint32_t id) { - if (requested.empty()) { - resource->error(WP_DRM_LEASE_REQUEST_V1_ERROR_EMPTY_LEASE, "No connectors added"); + m_resource->setSubmit([this](CWpDrmLeaseRequestV1* r, uint32_t id) { + if (m_requested.empty()) { + m_resource->error(WP_DRM_LEASE_REQUEST_V1_ERROR_EMPTY_LEASE, "No connectors added"); return; } - auto RESOURCE = makeShared(makeShared(resource->client(), resource->version(), id), self.lock()); + auto RESOURCE = makeShared(makeShared(m_resource->client(), m_resource->version(), id), m_self.lock()); if UNLIKELY (!RESOURCE) { - resource->noMemory(); + m_resource->noMemory(); return; } - PROTO::lease->m_vLeases.emplace_back(RESOURCE); + PROTO::lease->m_leases.emplace_back(RESOURCE); // per protcol, after submit, this is dead. PROTO::lease->destroyResource(this); @@ -126,111 +126,111 @@ CDRMLeaseRequestResource::CDRMLeaseRequestResource(SP reso } bool CDRMLeaseRequestResource::good() { - return resource->resource(); + return m_resource->resource(); } SP CDRMLeaseConnectorResource::fromResource(wl_resource* res) { auto data = (CDRMLeaseConnectorResource*)(((CWpDrmLeaseConnectorV1*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } -CDRMLeaseConnectorResource::CDRMLeaseConnectorResource(SP resource_, PHLMONITOR monitor_) : monitor(monitor_), resource(resource_) { +CDRMLeaseConnectorResource::CDRMLeaseConnectorResource(SP resource_, PHLMONITOR monitor_) : m_monitor(monitor_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpDrmLeaseConnectorV1* r) { PROTO::lease->destroyResource(this); }); - resource->setDestroy([this](CWpDrmLeaseConnectorV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpDrmLeaseConnectorV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setDestroy([this](CWpDrmLeaseConnectorV1* r) { PROTO::lease->destroyResource(this); }); - resource->setData(this); + m_resource->setData(this); - listeners.destroyMonitor = monitor->m_events.destroy.registerListener([this](std::any d) { - resource->sendWithdrawn(); - dead = true; + m_listeners.destroyMonitor = m_monitor->m_events.destroy.registerListener([this](std::any d) { + m_resource->sendWithdrawn(); + m_dead = true; }); } bool CDRMLeaseConnectorResource::good() { - return resource->resource(); + return m_resource->resource(); } void CDRMLeaseConnectorResource::sendData() { - resource->sendName(monitor->m_name.c_str()); - resource->sendDescription(monitor->m_description.c_str()); + m_resource->sendName(m_monitor->m_name.c_str()); + m_resource->sendDescription(m_monitor->m_description.c_str()); - auto AQDRMOutput = (Aquamarine::CDRMOutput*)monitor->m_output.get(); - resource->sendConnectorId(AQDRMOutput->getConnectorID()); + auto AQDRMOutput = (Aquamarine::CDRMOutput*)m_monitor->m_output.get(); + m_resource->sendConnectorId(AQDRMOutput->getConnectorID()); - resource->sendDone(); + m_resource->sendDone(); } -CDRMLeaseDeviceResource::CDRMLeaseDeviceResource(SP resource_) : resource(resource_) { +CDRMLeaseDeviceResource::CDRMLeaseDeviceResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpDrmLeaseDeviceV1* r) { PROTO::lease->destroyResource(this); }); - resource->setRelease([this](CWpDrmLeaseDeviceV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpDrmLeaseDeviceV1* r) { PROTO::lease->destroyResource(this); }); + m_resource->setRelease([this](CWpDrmLeaseDeviceV1* r) { PROTO::lease->destroyResource(this); }); - resource->setCreateLeaseRequest([this](CWpDrmLeaseDeviceV1* r, uint32_t id) { - auto RESOURCE = makeShared(makeShared(resource->client(), resource->version(), id)); + m_resource->setCreateLeaseRequest([this](CWpDrmLeaseDeviceV1* r, uint32_t id) { + auto RESOURCE = makeShared(makeShared(m_resource->client(), m_resource->version(), id)); if UNLIKELY (!RESOURCE) { - resource->noMemory(); + m_resource->noMemory(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - PROTO::lease->m_vRequests.emplace_back(RESOURCE); + PROTO::lease->m_requests.emplace_back(RESOURCE); LOGM(LOG, "New lease request {}", id); - RESOURCE->parent = self; + RESOURCE->m_parent = m_self; }); - CFileDescriptor fd{((Aquamarine::CDRMBackend*)PROTO::lease->primaryDevice->backend.get())->getNonMasterFD()}; + CFileDescriptor fd{((Aquamarine::CDRMBackend*)PROTO::lease->m_primaryDevice->m_backend.get())->getNonMasterFD()}; if (!fd.isValid()) { LOGM(ERR, "Failed to dup fd in lease"); return; } LOGM(LOG, "Sending DRMFD {} to new lease device", fd.get()); - resource->sendDrmFd(fd.get()); + m_resource->sendDrmFd(fd.get()); - for (auto const& m : PROTO::lease->primaryDevice->offeredOutputs) { + for (auto const& m : PROTO::lease->m_primaryDevice->m_offeredOutputs) { if (m) sendConnector(m.lock()); } - resource->sendDone(); + m_resource->sendDone(); } bool CDRMLeaseDeviceResource::good() { - return resource->resource(); + return m_resource->resource(); } void CDRMLeaseDeviceResource::sendConnector(PHLMONITOR monitor) { - if (std::find_if(connectorsSent.begin(), connectorsSent.end(), [monitor](const auto& e) { return e && !e->dead && e->monitor == monitor; }) != connectorsSent.end()) + if (std::find_if(m_connectorsSent.begin(), m_connectorsSent.end(), [monitor](const auto& e) { return e && !e->m_dead && e->m_monitor == monitor; }) != m_connectorsSent.end()) return; - auto RESOURCE = makeShared(makeShared(resource->client(), resource->version(), 0), monitor); + auto RESOURCE = makeShared(makeShared(m_resource->client(), m_resource->version(), 0), monitor); if UNLIKELY (!RESOURCE) { - resource->noMemory(); + m_resource->noMemory(); return; } - RESOURCE->parent = self; - RESOURCE->self = RESOURCE; + RESOURCE->m_parent = m_self; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "Sending new connector {}", monitor->m_name); - connectorsSent.emplace_back(RESOURCE); - PROTO::lease->m_vConnectors.emplace_back(RESOURCE); + m_connectorsSent.emplace_back(RESOURCE); + PROTO::lease->m_connectors.emplace_back(RESOURCE); - resource->sendConnector(RESOURCE->resource.get()); + m_resource->sendConnector(RESOURCE->m_resource.get()); RESOURCE->sendData(); } -CDRMLeaseDevice::CDRMLeaseDevice(SP drmBackend) : backend(drmBackend) { +CDRMLeaseDevice::CDRMLeaseDevice(SP drmBackend) : m_backend(drmBackend) { auto drm = (Aquamarine::CDRMBackend*)drmBackend.get(); CFileDescriptor fd{drm->getNonMasterFD()}; @@ -240,8 +240,8 @@ CDRMLeaseDevice::CDRMLeaseDevice(SP drmBackend) : backe return; } - success = true; - name = drm->gpuName; + m_success = true; + m_name = drm->gpuName; } CDRMLeaseProtocol::CDRMLeaseProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -251,64 +251,64 @@ CDRMLeaseProtocol::CDRMLeaseProtocol(const wl_interface* iface, const int& ver, auto drm = ((Aquamarine::CDRMBackend*)b.get())->self.lock(); - primaryDevice = makeShared(drm); + m_primaryDevice = makeShared(drm); - if (primaryDevice->success) + if (m_primaryDevice->m_success) break; } - if (!primaryDevice || !primaryDevice->success) + if (!m_primaryDevice || !m_primaryDevice->m_success) g_pEventLoopManager->doLater([]() { PROTO::lease.reset(); }); } void CDRMLeaseProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; } void CDRMLeaseProtocol::destroyResource(CDRMLeaseDeviceResource* resource) { - std::erase_if(m_vManagers, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_managers, [resource](const auto& e) { return e.get() == resource; }); } void CDRMLeaseProtocol::destroyResource(CDRMLeaseConnectorResource* resource) { - for (const auto& m : m_vManagers) { - std::erase_if(m->connectorsSent, [resource](const auto& e) { return e.expired() || e->dead || e.get() == resource; }); + for (const auto& m : m_managers) { + std::erase_if(m->m_connectorsSent, [resource](const auto& e) { return e.expired() || e->m_dead || e.get() == resource; }); } - std::erase_if(m_vConnectors, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_connectors, [resource](const auto& e) { return e.get() == resource; }); } void CDRMLeaseProtocol::destroyResource(CDRMLeaseRequestResource* resource) { - std::erase_if(m_vRequests, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_requests, [resource](const auto& e) { return e.get() == resource; }); } void CDRMLeaseProtocol::destroyResource(CDRMLeaseResource* resource) { - std::erase_if(m_vLeases, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_leases, [resource](const auto& e) { return e.get() == resource; }); } void CDRMLeaseProtocol::offer(PHLMONITOR monitor) { - std::erase_if(primaryDevice->offeredOutputs, [](const auto& e) { return e.expired(); }); - if (std::find(primaryDevice->offeredOutputs.begin(), primaryDevice->offeredOutputs.end(), monitor) != primaryDevice->offeredOutputs.end()) + std::erase_if(m_primaryDevice->m_offeredOutputs, [](const auto& e) { return e.expired(); }); + if (std::find(m_primaryDevice->m_offeredOutputs.begin(), m_primaryDevice->m_offeredOutputs.end(), monitor) != m_primaryDevice->m_offeredOutputs.end()) return; if (monitor->m_output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) return; - if (monitor->m_output->getBackend() != primaryDevice->backend) { + if (monitor->m_output->getBackend() != m_primaryDevice->m_backend) { LOGM(ERR, "Monitor {} cannot be leased: primaryDevice lease is for a different device", monitor->m_name); return; } - primaryDevice->offeredOutputs.emplace_back(monitor); + m_primaryDevice->m_offeredOutputs.emplace_back(monitor); - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->sendConnector(monitor); - m->resource->sendDone(); + m->m_resource->sendDone(); } } diff --git a/src/protocols/DRMLease.hpp b/src/protocols/DRMLease.hpp index c7849149..5ea1c4e2 100644 --- a/src/protocols/DRMLease.hpp +++ b/src/protocols/DRMLease.hpp @@ -26,18 +26,16 @@ class CDRMLeaseResource { bool good(); - WP parent; - std::vector> requested; - SP lease; - - int leaseFD = -1; + WP m_parent; + std::vector> m_requested; + SP m_lease; struct { CHyprSignalListener destroyLease; - } listeners; + } m_listeners; private: - SP resource; + SP m_resource; }; class CDRMLeaseRequestResource { @@ -46,12 +44,12 @@ class CDRMLeaseRequestResource { bool good(); - WP parent; - WP self; - std::vector> requested; + WP m_parent; + WP m_self; + std::vector> m_requested; private: - SP resource; + SP m_resource; }; class CDRMLeaseConnectorResource { @@ -62,17 +60,17 @@ class CDRMLeaseConnectorResource { bool good(); void sendData(); - WP self; - WP parent; - PHLMONITORREF monitor; - bool dead = false; + WP m_self; + WP m_parent; + PHLMONITORREF m_monitor; + bool m_dead = false; private: - SP resource; + SP m_resource; struct { CHyprSignalListener destroyMonitor; - } listeners; + } m_listeners; friend class CDRMLeaseDeviceResource; }; @@ -84,12 +82,12 @@ class CDRMLeaseDeviceResource { bool good(); void sendConnector(PHLMONITOR monitor); - std::vector> connectorsSent; + std::vector> m_connectorsSent; - WP self; + WP m_self; private: - SP resource; + SP m_resource; friend class CDRMLeaseProtocol; }; @@ -98,11 +96,11 @@ class CDRMLeaseDevice { public: CDRMLeaseDevice(SP drmBackend); - std::string name = ""; - bool success = false; - SP backend; + std::string m_name = ""; + bool m_success = false; + SP m_backend; - std::vector offeredOutputs; + std::vector m_offeredOutputs; }; class CDRMLeaseProtocol : public IWaylandProtocol { @@ -120,12 +118,12 @@ class CDRMLeaseProtocol : public IWaylandProtocol { void destroyResource(CDRMLeaseResource* resource); // - std::vector> m_vManagers; - std::vector> m_vConnectors; - std::vector> m_vRequests; - std::vector> m_vLeases; + std::vector> m_managers; + std::vector> m_connectors; + std::vector> m_requests; + std::vector> m_leases; - SP primaryDevice; + SP m_primaryDevice; friend class CDRMLeaseDeviceResource; friend class CDRMLeaseConnectorResource; diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp index 2da2340a..611f7cb2 100644 --- a/src/protocols/DRMSyncobj.cpp +++ b/src/protocols/DRMSyncobj.cpp @@ -45,95 +45,96 @@ void CDRMSyncPointState::signal() { } CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UP&& resource_, SP surface_) : - surface(surface_), resource(std::move(resource_)) { + m_surface(surface_), m_resource(std::move(resource_)) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setOnDestroy([this](CWpLinuxDrmSyncobjSurfaceV1* r) { PROTO::sync->destroyResource(this); }); - resource->setDestroy([this](CWpLinuxDrmSyncobjSurfaceV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpLinuxDrmSyncobjSurfaceV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setDestroy([this](CWpLinuxDrmSyncobjSurfaceV1* r) { PROTO::sync->destroyResource(this); }); - resource->setSetAcquirePoint([this](CWpLinuxDrmSyncobjSurfaceV1* r, wl_resource* timeline_, uint32_t hi, uint32_t lo) { - if (!surface) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_SURFACE, "Surface is gone"); + m_resource->setSetAcquirePoint([this](CWpLinuxDrmSyncobjSurfaceV1* r, wl_resource* timeline_, uint32_t hi, uint32_t lo) { + if (!m_surface) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_SURFACE, "Surface is gone"); return; } - auto timeline = CDRMSyncobjTimelineResource::fromResource(timeline_); - pendingAcquire = {timeline->timeline, ((uint64_t)hi << 32) | (uint64_t)lo}; + auto timeline = CDRMSyncobjTimelineResource::fromResource(timeline_); + m_pendingAcquire = {timeline->m_timeline, ((uint64_t)hi << 32) | (uint64_t)lo}; }); - resource->setSetReleasePoint([this](CWpLinuxDrmSyncobjSurfaceV1* r, wl_resource* timeline_, uint32_t hi, uint32_t lo) { - if (!surface) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_SURFACE, "Surface is gone"); + m_resource->setSetReleasePoint([this](CWpLinuxDrmSyncobjSurfaceV1* r, wl_resource* timeline_, uint32_t hi, uint32_t lo) { + if (!m_surface) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_SURFACE, "Surface is gone"); return; } - auto timeline = CDRMSyncobjTimelineResource::fromResource(timeline_); - pendingRelease = {timeline->timeline, ((uint64_t)hi << 32) | (uint64_t)lo}; + auto timeline = CDRMSyncobjTimelineResource::fromResource(timeline_); + m_pendingRelease = {timeline->m_timeline, ((uint64_t)hi << 32) | (uint64_t)lo}; }); - listeners.surfacePrecommit = surface->m_events.precommit.registerListener([this](std::any d) { - if (!surface->m_pending.updated.buffer || !surface->m_pending.buffer) { - if (pendingAcquire.timeline() || pendingRelease.timeline()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_BUFFER, "Missing buffer"); - surface->m_pending.rejected = true; + m_listeners.surfacePrecommit = m_surface->m_events.precommit.registerListener([this](std::any d) { + if (!m_surface->m_pending.updated.buffer || !m_surface->m_pending.buffer) { + if (m_pendingAcquire.timeline() || m_pendingRelease.timeline()) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_BUFFER, "Missing buffer"); + m_surface->m_pending.rejected = true; } return; } - if (!pendingAcquire.timeline()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline"); - surface->m_pending.rejected = true; + if (!m_pendingAcquire.timeline()) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_ACQUIRE_POINT, "Missing acquire timeline"); + m_surface->m_pending.rejected = true; return; } - if (!pendingRelease.timeline()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline"); - surface->m_pending.rejected = true; + if (!m_pendingRelease.timeline()) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_NO_RELEASE_POINT, "Missing release timeline"); + m_surface->m_pending.rejected = true; return; } - if (pendingAcquire.timeline() == pendingRelease.timeline() && pendingAcquire.point() >= pendingRelease.point()) { - resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_CONFLICTING_POINTS, "Acquire and release points are on the same timeline, and acquire >= release"); - surface->m_pending.rejected = true; + if (m_pendingAcquire.timeline() == m_pendingRelease.timeline() && m_pendingAcquire.point() >= m_pendingRelease.point()) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_CONFLICTING_POINTS, "Acquire and release points are on the same timeline, and acquire >= release"); + m_surface->m_pending.rejected = true; return; } - surface->m_pending.updated.acquire = true; - surface->m_pending.acquire = pendingAcquire; - pendingAcquire = {}; + m_surface->m_pending.updated.acquire = true; + m_surface->m_pending.acquire = m_pendingAcquire; + m_pendingAcquire = {}; - surface->m_pending.buffer->addReleasePoint(pendingRelease); - pendingRelease = {}; + m_surface->m_pending.buffer->addReleasePoint(m_pendingRelease); + m_pendingRelease = {}; }); } bool CDRMSyncobjSurfaceResource::good() { - return resource->resource(); + return m_resource->resource(); } -CDRMSyncobjTimelineResource::CDRMSyncobjTimelineResource(UP&& resource_, CFileDescriptor&& fd_) : fd(std::move(fd_)), resource(std::move(resource_)) { +CDRMSyncobjTimelineResource::CDRMSyncobjTimelineResource(UP&& resource_, CFileDescriptor&& fd_) : + m_fd(std::move(fd_)), m_resource(std::move(resource_)) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setOnDestroy([this](CWpLinuxDrmSyncobjTimelineV1* r) { PROTO::sync->destroyResource(this); }); - resource->setDestroy([this](CWpLinuxDrmSyncobjTimelineV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpLinuxDrmSyncobjTimelineV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setDestroy([this](CWpLinuxDrmSyncobjTimelineV1* r) { PROTO::sync->destroyResource(this); }); - timeline = CSyncTimeline::create(PROTO::sync->drmFD, std::move(fd)); + m_timeline = CSyncTimeline::create(PROTO::sync->m_drmFD, std::move(m_fd)); - if (!timeline) { - resource->error(WP_LINUX_DRM_SYNCOBJ_MANAGER_V1_ERROR_INVALID_TIMELINE, "Timeline failed importing"); + if (!m_timeline) { + m_resource->error(WP_LINUX_DRM_SYNCOBJ_MANAGER_V1_ERROR_INVALID_TIMELINE, "Timeline failed importing"); return; } } WP CDRMSyncobjTimelineResource::fromResource(wl_resource* res) { - for (const auto& r : PROTO::sync->m_vTimelines) { - if (r && r->resource && r->resource->resource() == res) + for (const auto& r : PROTO::sync->m_timelines) { + if (r && r->m_resource && r->m_resource->resource() == res) return r; } @@ -141,38 +142,38 @@ WP CDRMSyncobjTimelineResource::fromResource(wl_res } bool CDRMSyncobjTimelineResource::good() { - return resource->resource(); + return m_resource->resource(); } -CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UP&& resource_) : resource(std::move(resource_)) { +CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UP&& resource_) : m_resource(std::move(resource_)) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpLinuxDrmSyncobjManagerV1* r) { PROTO::sync->destroyResource(this); }); - resource->setDestroy([this](CWpLinuxDrmSyncobjManagerV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpLinuxDrmSyncobjManagerV1* r) { PROTO::sync->destroyResource(this); }); + m_resource->setDestroy([this](CWpLinuxDrmSyncobjManagerV1* r) { PROTO::sync->destroyResource(this); }); - resource->setGetSurface([this](CWpLinuxDrmSyncobjManagerV1* r, uint32_t id, wl_resource* surf) { + m_resource->setGetSurface([this](CWpLinuxDrmSyncobjManagerV1* r, uint32_t id, wl_resource* surf) { if UNLIKELY (!surf) { - resource->error(-1, "Invalid surface"); + m_resource->error(-1, "Invalid surface"); return; } auto SURF = CWLSurfaceResource::fromResource(surf); if UNLIKELY (!SURF) { - resource->error(-1, "Invalid surface (2)"); + m_resource->error(-1, "Invalid surface (2)"); return; } if UNLIKELY (SURF->m_syncobj) { - resource->error(WP_LINUX_DRM_SYNCOBJ_MANAGER_V1_ERROR_SURFACE_EXISTS, "Surface already has a syncobj attached"); + m_resource->error(WP_LINUX_DRM_SYNCOBJ_MANAGER_V1_ERROR_SURFACE_EXISTS, "Surface already has a syncobj attached"); return; } - const auto& RESOURCE = PROTO::sync->m_vSurfaces.emplace_back( - makeUnique(makeUnique(resource->client(), resource->version(), id), SURF)); + const auto& RESOURCE = PROTO::sync->m_surfaces.emplace_back( + makeUnique(makeUnique(m_resource->client(), m_resource->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::sync->m_vSurfaces.pop_back(); + m_resource->noMemory(); + PROTO::sync->m_surfaces.pop_back(); return; } @@ -181,12 +182,12 @@ CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UPsetImportTimeline([this](CWpLinuxDrmSyncobjManagerV1* r, uint32_t id, int32_t fd) { - const auto& RESOURCE = PROTO::sync->m_vTimelines.emplace_back( - makeUnique(makeUnique(resource->client(), resource->version(), id), CFileDescriptor{fd})); + m_resource->setImportTimeline([this](CWpLinuxDrmSyncobjManagerV1* r, uint32_t id, int32_t fd) { + const auto& RESOURCE = PROTO::sync->m_timelines.emplace_back( + makeUnique(makeUnique(m_resource->client(), m_resource->version(), id), CFileDescriptor{fd})); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::sync->m_vTimelines.pop_back(); + m_resource->noMemory(); + PROTO::sync->m_timelines.pop_back(); return; } @@ -195,29 +196,30 @@ CDRMSyncobjManagerResource::CDRMSyncobjManagerResource(UPresource(); + return m_resource->resource(); } -CDRMSyncobjProtocol::CDRMSyncobjProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name), drmFD(g_pCompositor->m_drmFD) {} +CDRMSyncobjProtocol::CDRMSyncobjProtocol(const wl_interface* iface, const int& ver, const std::string& name) : + IWaylandProtocol(iface, ver, name), m_drmFD(g_pCompositor->m_drmFD) {} void CDRMSyncobjProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto& RESOURCE = m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id))); + const auto& RESOURCE = m_managers.emplace_back(makeUnique(makeUnique(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CDRMSyncobjProtocol::destroyResource(CDRMSyncobjManagerResource* resource) { - std::erase_if(m_vManagers, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_managers, [resource](const auto& e) { return e.get() == resource; }); } void CDRMSyncobjProtocol::destroyResource(CDRMSyncobjTimelineResource* resource) { - std::erase_if(m_vTimelines, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_timelines, [resource](const auto& e) { return e.get() == resource; }); } void CDRMSyncobjProtocol::destroyResource(CDRMSyncobjSurfaceResource* resource) { - std::erase_if(m_vSurfaces, [resource](const auto& e) { return e.get() == resource; }); + std::erase_if(m_surfaces, [resource](const auto& e) { return e.get() == resource; }); } diff --git a/src/protocols/DRMSyncobj.hpp b/src/protocols/DRMSyncobj.hpp index a724258b..ed15b199 100644 --- a/src/protocols/DRMSyncobj.hpp +++ b/src/protocols/DRMSyncobj.hpp @@ -43,15 +43,15 @@ class CDRMSyncobjSurfaceResource { bool good(); private: - WP surface; - UP resource; + WP m_surface; + UP m_resource; - CDRMSyncPointState pendingAcquire; - CDRMSyncPointState pendingRelease; + CDRMSyncPointState m_pendingAcquire; + CDRMSyncPointState m_pendingRelease; struct { CHyprSignalListener surfacePrecommit; - } listeners; + } m_listeners; }; class CDRMSyncobjTimelineResource { @@ -62,11 +62,11 @@ class CDRMSyncobjTimelineResource { bool good(); - Hyprutils::OS::CFileDescriptor fd; - SP timeline; + Hyprutils::OS::CFileDescriptor m_fd; + SP m_timeline; private: - UP resource; + UP m_resource; }; class CDRMSyncobjManagerResource { @@ -77,7 +77,7 @@ class CDRMSyncobjManagerResource { bool good(); private: - UP resource; + UP m_resource; }; class CDRMSyncobjProtocol : public IWaylandProtocol { @@ -93,12 +93,12 @@ class CDRMSyncobjProtocol : public IWaylandProtocol { void destroyResource(CDRMSyncobjSurfaceResource* resource); // - std::vector> m_vManagers; - std::vector> m_vTimelines; - std::vector> m_vSurfaces; + std::vector> m_managers; + std::vector> m_timelines; + std::vector> m_surfaces; // - int drmFD = -1; + int m_drmFD = -1; friend class CDRMSyncobjManagerResource; friend class CDRMSyncobjTimelineResource; diff --git a/src/protocols/DataDeviceWlr.cpp b/src/protocols/DataDeviceWlr.cpp index a79e71af..2e9c032b 100644 --- a/src/protocols/DataDeviceWlr.cpp +++ b/src/protocols/DataDeviceWlr.cpp @@ -4,60 +4,60 @@ #include "core/Seat.hpp" using namespace Hyprutils::OS; -CWLRDataOffer::CWLRDataOffer(SP resource_, SP source_) : source(source_), resource(resource_) { +CWLRDataOffer::CWLRDataOffer(SP resource_, SP source_) : m_source(source_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwlrDataControlOfferV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrDataControlOfferV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setDestroy([this](CZwlrDataControlOfferV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrDataControlOfferV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setReceive([this](CZwlrDataControlOfferV1* r, const char* mime, int32_t fd) { + m_resource->setReceive([this](CZwlrDataControlOfferV1* r, const char* mime, int32_t fd) { CFileDescriptor sendFd{fd}; - if (!source) { + if (!m_source) { LOGM(WARN, "Possible bug: Receive on an offer w/o a source"); return; } - if (dead) { + if (m_dead) { LOGM(WARN, "Possible bug: Receive on an offer that's dead"); return; } - LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)source.get()); + LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)m_source.get()); - source->send(mime, std::move(sendFd)); + m_source->send(mime, std::move(sendFd)); }); } bool CWLRDataOffer::good() { - return resource->resource(); + return m_resource->resource(); } void CWLRDataOffer::sendData() { - if UNLIKELY (!source) + if UNLIKELY (!m_source) return; - for (auto const& m : source->mimes()) { - resource->sendOffer(m.c_str()); + for (auto const& m : m_source->mimes()) { + m_resource->sendOffer(m.c_str()); } } -CWLRDataSource::CWLRDataSource(SP resource_, SP device_) : device(device_), resource(resource_) { +CWLRDataSource::CWLRDataSource(SP resource_, SP device_) : m_device(device_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CZwlrDataControlSourceV1* r) { + m_resource->setDestroy([this](CZwlrDataControlSourceV1* r) { m_events.destroy.emit(); PROTO::dataWlr->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrDataControlSourceV1* r) { + m_resource->setOnDestroy([this](CZwlrDataControlSourceV1* r) { m_events.destroy.emit(); PROTO::dataWlr->destroyResource(this); }); - resource->setOffer([this](CZwlrDataControlSourceV1* r, const char* mime) { mimeTypes.emplace_back(mime); }); + m_resource->setOffer([this](CZwlrDataControlSourceV1* r, const char* mime) { m_mimeTypes.emplace_back(mime); }); } CWLRDataSource::~CWLRDataSource() { @@ -66,51 +66,51 @@ CWLRDataSource::~CWLRDataSource() { SP CWLRDataSource::fromResource(wl_resource* res) { auto data = (CWLRDataSource*)(((CZwlrDataControlSourceV1*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CWLRDataSource::good() { - return resource->resource(); + return m_resource->resource(); } std::vector CWLRDataSource::mimes() { - return mimeTypes; + return m_mimeTypes; } void CWLRDataSource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) { + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLRDataSource::sendAskSend with non-existent mime"); return; } - resource->sendSend(mime.c_str(), fd.get()); + m_resource->sendSend(mime.c_str(), fd.get()); } void CWLRDataSource::accepted(const std::string& mime) { - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) LOGM(ERR, "Compositor/App bug: CWLRDataSource::sendAccepted with non-existent mime"); // wlr has no accepted } void CWLRDataSource::cancelled() { - resource->sendCancelled(); + m_resource->sendCancelled(); } void CWLRDataSource::error(uint32_t code, const std::string& msg) { - resource->error(code, msg); + m_resource->error(code, msg); } -CWLRDataDevice::CWLRDataDevice(SP resource_) : resource(resource_) { +CWLRDataDevice::CWLRDataDevice(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setDestroy([this](CZwlrDataControlDeviceV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrDataControlDeviceV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setDestroy([this](CZwlrDataControlDeviceV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrDataControlDeviceV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setSetSelection([](CZwlrDataControlDeviceV1* r, wl_resource* sourceR) { + m_resource->setSetSelection([](CZwlrDataControlDeviceV1* r, wl_resource* sourceR) { auto source = sourceR ? CWLRDataSource::fromResource(sourceR) : CSharedPointer{}; if (!source) { LOGM(LOG, "wlr reset selection received"); @@ -127,7 +127,7 @@ CWLRDataDevice::CWLRDataDevice(SP resource_) : resourc g_pSeatManager->setCurrentSelection(source); }); - resource->setSetPrimarySelection([](CZwlrDataControlDeviceV1* r, wl_resource* sourceR) { + m_resource->setSetPrimarySelection([](CZwlrDataControlDeviceV1* r, wl_resource* sourceR) { auto source = sourceR ? CWLRDataSource::fromResource(sourceR) : CSharedPointer{}; if (!source) { LOGM(LOG, "wlr reset primary selection received"); @@ -146,11 +146,11 @@ CWLRDataDevice::CWLRDataDevice(SP resource_) : resourc } bool CWLRDataDevice::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CWLRDataDevice::client() { - return pClient; + return m_client; } void CWLRDataDevice::sendInitialSelections() { @@ -159,40 +159,40 @@ void CWLRDataDevice::sendInitialSelections() { } void CWLRDataDevice::sendDataOffer(SP offer) { - resource->sendDataOffer(offer->resource.get()); + m_resource->sendDataOffer(offer->m_resource.get()); } void CWLRDataDevice::sendSelection(SP selection) { - resource->sendSelection(selection->resource.get()); + m_resource->sendSelection(selection->m_resource.get()); } void CWLRDataDevice::sendPrimarySelection(SP selection) { - resource->sendPrimarySelection(selection->resource.get()); + m_resource->sendPrimarySelection(selection->m_resource.get()); } -CWLRDataControlManagerResource::CWLRDataControlManagerResource(SP resource_) : resource(resource_) { +CWLRDataControlManagerResource::CWLRDataControlManagerResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwlrDataControlManagerV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrDataControlManagerV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setDestroy([this](CZwlrDataControlManagerV1* r) { PROTO::dataWlr->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrDataControlManagerV1* r) { PROTO::dataWlr->destroyResource(this); }); - resource->setGetDataDevice([this](CZwlrDataControlManagerV1* r, uint32_t id, wl_resource* seat) { - const auto RESOURCE = PROTO::dataWlr->m_vDevices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + m_resource->setGetDataDevice([this](CZwlrDataControlManagerV1* r, uint32_t id, wl_resource* seat) { + const auto RESOURCE = PROTO::dataWlr->m_devices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::dataWlr->m_vDevices.pop_back(); + PROTO::dataWlr->m_devices.pop_back(); return; } RESOURCE->self = RESOURCE; - device = RESOURCE; + m_device = RESOURCE; - for (auto const& s : sources) { + for (auto const& s : m_sources) { if (!s) continue; - s->device = RESOURCE; + s->m_device = RESOURCE; } RESOURCE->sendInitialSelections(); @@ -200,31 +200,31 @@ CWLRDataControlManagerResource::CWLRDataControlManagerResource(SPsetCreateDataSource([this](CZwlrDataControlManagerV1* r, uint32_t id) { - std::erase_if(sources, [](const auto& e) { return e.expired(); }); + m_resource->setCreateDataSource([this](CZwlrDataControlManagerV1* r, uint32_t id) { + std::erase_if(m_sources, [](const auto& e) { return e.expired(); }); const auto RESOURCE = - PROTO::dataWlr->m_vSources.emplace_back(makeShared(makeShared(r->client(), r->version(), id), device.lock())); + PROTO::dataWlr->m_sources.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_device.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::dataWlr->m_vSources.pop_back(); + PROTO::dataWlr->m_sources.pop_back(); return; } - if (!device) + if (!m_device) LOGM(WARN, "New data source before a device was created"); - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - sources.emplace_back(RESOURCE); + m_sources.emplace_back(RESOURCE); LOGM(LOG, "New wlr data source bound at {:x}", (uintptr_t)RESOURCE.get()); }); } bool CWLRDataControlManagerResource::good() { - return resource->resource(); + return m_resource->resource(); } CDataDeviceWLRProtocol::CDataDeviceWLRProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -232,11 +232,11 @@ CDataDeviceWLRProtocol::CDataDeviceWLRProtocol(const wl_interface* iface, const } void CDataDeviceWLRProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } @@ -244,39 +244,39 @@ void CDataDeviceWLRProtocol::bindManager(wl_client* client, void* data, uint32_t } void CDataDeviceWLRProtocol::destroyResource(CWLRDataControlManagerResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CDataDeviceWLRProtocol::destroyResource(CWLRDataSource* resource) { - std::erase_if(m_vSources, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_sources, [&](const auto& other) { return other.get() == resource; }); } void CDataDeviceWLRProtocol::destroyResource(CWLRDataDevice* resource) { - std::erase_if(m_vDevices, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_devices, [&](const auto& other) { return other.get() == resource; }); } void CDataDeviceWLRProtocol::destroyResource(CWLRDataOffer* resource) { - std::erase_if(m_vOffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_offers, [&](const auto& other) { return other.get() == resource; }); } void CDataDeviceWLRProtocol::sendSelectionToDevice(SP dev, SP sel, bool primary) { if (!sel) { if (primary) - dev->resource->sendPrimarySelectionRaw(nullptr); + dev->m_resource->sendPrimarySelectionRaw(nullptr); else - dev->resource->sendSelectionRaw(nullptr); + dev->m_resource->sendSelectionRaw(nullptr); return; } - const auto OFFER = m_vOffers.emplace_back(makeShared(makeShared(dev->resource->client(), dev->resource->version(), 0), sel)); + const auto OFFER = m_offers.emplace_back(makeShared(makeShared(dev->m_resource->client(), dev->m_resource->version(), 0), sel)); if (!OFFER->good()) { - dev->resource->noMemory(); - m_vOffers.pop_back(); + dev->m_resource->noMemory(); + m_offers.pop_back(); return; } - OFFER->primary = primary; + OFFER->m_primary = primary; LOGM(LOG, "New {}offer {:x} for data source {:x}", primary ? "primary " : " ", (uintptr_t)OFFER.get(), (uintptr_t)sel.get()); @@ -289,18 +289,18 @@ void CDataDeviceWLRProtocol::sendSelectionToDevice(SP dev, SP source, bool primary) { - for (auto const& o : m_vOffers) { - if (o->source && o->source->hasDnd()) + for (auto const& o : m_offers) { + if (o->m_source && o->m_source->hasDnd()) continue; - if (o->primary != primary) + if (o->m_primary != primary) continue; - o->dead = true; + o->m_dead = true; } if (!source) { LOGM(LOG, "resetting {}selection", primary ? "primary " : " "); - for (auto const& d : m_vDevices) { + for (auto const& d : m_devices) { sendSelectionToDevice(d, nullptr, primary); } @@ -309,14 +309,14 @@ void CDataDeviceWLRProtocol::setSelection(SP source, bool primary) LOGM(LOG, "New {}selection for data source {:x}", primary ? "primary" : "", (uintptr_t)source.get()); - for (auto const& d : m_vDevices) { + for (auto const& d : m_devices) { sendSelectionToDevice(d, source, primary); } } SP CDataDeviceWLRProtocol::dataDeviceForClient(wl_client* c) { - auto it = std::find_if(m_vDevices.begin(), m_vDevices.end(), [c](const auto& e) { return e->client() == c; }); - if (it == m_vDevices.end()) + auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + if (it == m_devices.end()) return nullptr; return *it; } diff --git a/src/protocols/DataDeviceWlr.hpp b/src/protocols/DataDeviceWlr.hpp index 7f14b320..00f704e9 100644 --- a/src/protocols/DataDeviceWlr.hpp +++ b/src/protocols/DataDeviceWlr.hpp @@ -19,13 +19,13 @@ class CWLRDataOffer { bool good(); void sendData(); - bool dead = false; - bool primary = false; + bool m_dead = false; + bool m_primary = false; - WP source; + WP m_source; private: - SP resource; + SP m_resource; friend class CWLRDataDevice; }; @@ -44,12 +44,12 @@ class CWLRDataSource : public IDataSource { virtual void cancelled(); virtual void error(uint32_t code, const std::string& msg); - std::vector mimeTypes; - WP self; - WP device; + std::vector m_mimeTypes; + WP m_self; + WP m_device; private: - SP resource; + SP m_resource; }; class CWLRDataDevice { @@ -67,8 +67,8 @@ class CWLRDataDevice { WP self; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; friend class CDataDeviceWLRProtocol; }; @@ -79,11 +79,11 @@ class CWLRDataControlManagerResource { bool good(); - WP device; - std::vector> sources; + WP m_device; + std::vector> m_sources; private: - SP resource; + SP m_resource; }; class CDataDeviceWLRProtocol : public IWaylandProtocol { @@ -99,10 +99,10 @@ class CDataDeviceWLRProtocol : public IWaylandProtocol { void destroyResource(CWLRDataOffer* resource); // - std::vector> m_vManagers; - std::vector> m_vSources; - std::vector> m_vDevices; - std::vector> m_vOffers; + std::vector> m_managers; + std::vector> m_sources; + std::vector> m_devices; + std::vector> m_offers; // void setSelection(SP source, bool primary); diff --git a/src/protocols/FocusGrab.cpp b/src/protocols/FocusGrab.cpp index 9751666d..9f054953 100644 --- a/src/protocols/FocusGrab.cpp +++ b/src/protocols/FocusGrab.cpp @@ -8,23 +8,23 @@ #include CFocusGrabSurfaceState::CFocusGrabSurfaceState(CFocusGrab* grab, SP surface) { - listeners.destroy = surface->m_events.destroy.registerListener([=](std::any d) { grab->eraseSurface(surface); }); + m_listeners.destroy = surface->m_events.destroy.registerListener([=](std::any d) { grab->eraseSurface(surface); }); } -CFocusGrab::CFocusGrab(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CFocusGrab::CFocusGrab(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - grab = makeShared(); - grab->m_keyboard = true; - grab->m_pointer = true; - grab->setCallback([this]() { finish(true); }); + m_grab = makeShared(); + m_grab->m_keyboard = true; + m_grab->m_pointer = true; + m_grab->setCallback([this]() { finish(true); }); - resource->setDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); }); - resource->setOnDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); }); - resource->setAddSurface([this](CHyprlandFocusGrabV1* pMgr, wl_resource* surface) { addSurface(CWLSurfaceResource::fromResource(surface)); }); - resource->setRemoveSurface([this](CHyprlandFocusGrabV1* pMgr, wl_resource* surface) { removeSurface(CWLSurfaceResource::fromResource(surface)); }); - resource->setCommit([this](CHyprlandFocusGrabV1* pMgr) { commit(); }); + m_resource->setDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); }); + m_resource->setOnDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); }); + m_resource->setAddSurface([this](CHyprlandFocusGrabV1* pMgr, wl_resource* surface) { addSurface(CWLSurfaceResource::fromResource(surface)); }); + m_resource->setRemoveSurface([this](CHyprlandFocusGrabV1* pMgr, wl_resource* surface) { removeSurface(CWLSurfaceResource::fromResource(surface)); }); + m_resource->setCommit([this](CHyprlandFocusGrabV1* pMgr) { commit(); }); } CFocusGrab::~CFocusGrab() { @@ -32,21 +32,21 @@ CFocusGrab::~CFocusGrab() { } bool CFocusGrab::good() { - return resource->resource(); + return m_resource->resource(); } bool CFocusGrab::isSurfaceComitted(SP surface) { - auto iter = std::find_if(m_mSurfaces.begin(), m_mSurfaces.end(), [surface](const auto& o) { return o.first == surface; }); - if (iter == m_mSurfaces.end()) + auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [surface](const auto& o) { return o.first == surface; }); + if (iter == m_surfaces.end()) return false; - return iter->second->state == CFocusGrabSurfaceState::Comitted; + return iter->second->m_state == CFocusGrabSurfaceState::Comitted; } void CFocusGrab::start() { - if (!m_bGrabActive) { - m_bGrabActive = true; - g_pSeatManager->setGrab(grab); + if (!m_grabActive) { + m_grabActive = true; + g_pSeatManager->setGrab(m_grab); } // Ensure new surfaces are focused if under the mouse when comitted. @@ -55,33 +55,33 @@ void CFocusGrab::start() { } void CFocusGrab::finish(bool sendCleared) { - if (m_bGrabActive) { - m_bGrabActive = false; + if (m_grabActive) { + m_grabActive = false; - if (g_pSeatManager->m_seatGrab == grab) + if (g_pSeatManager->m_seatGrab == m_grab) g_pSeatManager->setGrab(nullptr); - grab->clear(); - m_mSurfaces.clear(); + m_grab->clear(); + m_surfaces.clear(); if (sendCleared) - resource->sendCleared(); + m_resource->sendCleared(); } } void CFocusGrab::addSurface(SP surface) { - auto iter = std::find_if(m_mSurfaces.begin(), m_mSurfaces.end(), [surface](const auto& e) { return e.first == surface; }); - if (iter == m_mSurfaces.end()) - m_mSurfaces.emplace(surface, makeUnique(this, surface)); + auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [surface](const auto& e) { return e.first == surface; }); + if (iter == m_surfaces.end()) + m_surfaces.emplace(surface, makeUnique(this, surface)); } void CFocusGrab::removeSurface(SP surface) { - auto iter = m_mSurfaces.find(surface); - if (iter != m_mSurfaces.end()) { - if (iter->second->state == CFocusGrabSurfaceState::PendingAddition) - m_mSurfaces.erase(iter); + auto iter = m_surfaces.find(surface); + if (iter != m_surfaces.end()) { + if (iter->second->m_state == CFocusGrabSurfaceState::PendingAddition) + m_surfaces.erase(iter); else - iter->second->state = CFocusGrabSurfaceState::PendingRemoval; + iter->second->m_state = CFocusGrabSurfaceState::PendingRemoval; } } @@ -96,8 +96,8 @@ void CFocusGrab::refocusKeyboard() { return; SP surface = nullptr; - for (auto const& [surf, state] : m_mSurfaces) { - if (state->state == CFocusGrabSurfaceState::Comitted) { + for (auto const& [surf, state] : m_surfaces) { + if (state->m_state == CFocusGrabSurfaceState::Comitted) { surface = surf.lock(); break; } @@ -112,17 +112,17 @@ void CFocusGrab::refocusKeyboard() { void CFocusGrab::commit(bool removeOnly) { auto surfacesChanged = false; auto anyComitted = false; - for (auto iter = m_mSurfaces.begin(); iter != m_mSurfaces.end();) { - switch (iter->second->state) { + for (auto iter = m_surfaces.begin(); iter != m_surfaces.end();) { + switch (iter->second->m_state) { case CFocusGrabSurfaceState::PendingRemoval: - grab->remove(iter->first.lock()); - iter = m_mSurfaces.erase(iter); + m_grab->remove(iter->first.lock()); + iter = m_surfaces.erase(iter); surfacesChanged = true; continue; case CFocusGrabSurfaceState::PendingAddition: if (!removeOnly) { - iter->second->state = CFocusGrabSurfaceState::Comitted; - grab->add(iter->first.lock()); + iter->second->m_state = CFocusGrabSurfaceState::Comitted; + m_grab->add(iter->first.lock()); surfacesChanged = true; anyComitted = true; } @@ -146,7 +146,7 @@ CFocusGrabProtocol::CFocusGrabProtocol(const wl_interface* iface, const int& ver } void CFocusGrabProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CHyprlandFocusGrabManagerV1* p) { onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CHyprlandFocusGrabManagerV1* p) { onManagerResourceDestroy(p->resource()); }); @@ -154,19 +154,19 @@ void CFocusGrabProtocol::bindManager(wl_client* client, void* data, uint32_t ver } void CFocusGrabProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CFocusGrabProtocol::destroyGrab(CFocusGrab* grab) { - std::erase_if(m_vGrabs, [&](const auto& other) { return other.get() == grab; }); + std::erase_if(m_grabs, [&](const auto& other) { return other.get() == grab; }); } void CFocusGrabProtocol::onCreateGrab(CHyprlandFocusGrabManagerV1* pMgr, uint32_t id) { - m_vGrabs.push_back(makeUnique(makeShared(pMgr->client(), pMgr->version(), id))); - const auto RESOURCE = m_vGrabs.back().get(); + m_grabs.push_back(makeUnique(makeShared(pMgr->client(), pMgr->version(), id))); + const auto RESOURCE = m_grabs.back().get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vGrabs.pop_back(); + m_grabs.pop_back(); } } diff --git a/src/protocols/FocusGrab.hpp b/src/protocols/FocusGrab.hpp index 1445a24c..6fb27b86 100644 --- a/src/protocols/FocusGrab.hpp +++ b/src/protocols/FocusGrab.hpp @@ -21,12 +21,12 @@ class CFocusGrabSurfaceState { PendingAddition, PendingRemoval, Comitted, - } state = PendingAddition; + } m_state = PendingAddition; private: struct { CHyprSignalListener destroy; - } listeners; + } m_listeners; }; class CFocusGrab { @@ -47,11 +47,11 @@ class CFocusGrab { void refocusKeyboard(); void commit(bool removeOnly = false); - SP resource; - std::unordered_map, UP> m_mSurfaces; - SP grab; + SP m_resource; + std::unordered_map, UP> m_surfaces; + SP m_grab; - bool m_bGrabActive = false; + bool m_grabActive = false; friend class CFocusGrabSurfaceState; }; @@ -67,8 +67,8 @@ class CFocusGrabProtocol : public IWaylandProtocol { void destroyGrab(CFocusGrab* grab); void onCreateGrab(CHyprlandFocusGrabManagerV1* pMgr, uint32_t id); - std::vector> m_vManagers; - std::vector> m_vGrabs; + std::vector> m_managers; + std::vector> m_grabs; friend class CFocusGrab; }; diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index 843e8b94..e48f0722 100644 --- a/src/protocols/ForeignToplevel.cpp +++ b/src/protocols/ForeignToplevel.cpp @@ -2,34 +2,34 @@ #include "../Compositor.hpp" #include "../managers/HookSystemManager.hpp" -CForeignToplevelHandle::CForeignToplevelHandle(SP resource_, PHLWINDOW pWindow_) : resource(resource_), pWindow(pWindow_) { +CForeignToplevelHandle::CForeignToplevelHandle(SP resource_, PHLWINDOW pWindow_) : m_resource(resource_), m_window(pWindow_) { if UNLIKELY (!resource_->resource()) return; - resource->setData(this); + m_resource->setData(this); - resource->setOnDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); - resource->setDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); + m_resource->setOnDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); + m_resource->setDestroy([this](CExtForeignToplevelHandleV1* h) { PROTO::foreignToplevel->destroyHandle(this); }); } bool CForeignToplevelHandle::good() { - return resource->resource(); + return m_resource->resource(); } PHLWINDOW CForeignToplevelHandle::window() { - return pWindow.lock(); + return m_window.lock(); } -CForeignToplevelList::CForeignToplevelList(SP resource_) : resource(resource_) { +CForeignToplevelList::CForeignToplevelList(SP resource_) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; - resource->setOnDestroy([this](CExtForeignToplevelListV1* h) { PROTO::foreignToplevel->onManagerResourceDestroy(this); }); - resource->setDestroy([this](CExtForeignToplevelListV1* h) { PROTO::foreignToplevel->onManagerResourceDestroy(this); }); + m_resource->setOnDestroy([this](CExtForeignToplevelListV1* h) { PROTO::foreignToplevel->onManagerResourceDestroy(this); }); + m_resource->setDestroy([this](CExtForeignToplevelListV1* h) { PROTO::foreignToplevel->onManagerResourceDestroy(this); }); - resource->setStop([this](CExtForeignToplevelListV1* h) { - resource->sendFinished(); - finished = true; + m_resource->setStop([this](CExtForeignToplevelListV1* h) { + m_resource->sendFinished(); + m_finished = true; LOGM(LOG, "CForeignToplevelList: finished"); }); @@ -42,75 +42,75 @@ CForeignToplevelList::CForeignToplevelList(SP resourc } void CForeignToplevelList::onMap(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; - const auto NEWHANDLE = PROTO::foreignToplevel->m_vHandles.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), 0), pWindow)); + const auto NEWHANDLE = PROTO::foreignToplevel->m_handles.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), 0), pWindow)); if (!NEWHANDLE->good()) { LOGM(ERR, "Couldn't create a foreign handle"); - resource->noMemory(); - PROTO::foreignToplevel->m_vHandles.pop_back(); + m_resource->noMemory(); + PROTO::foreignToplevel->m_handles.pop_back(); return; } const auto IDENTIFIER = std::format("{:08x}->{:016x}", static_cast((uintptr_t)this & 0xFFFFFFFF), (uintptr_t)pWindow.get()); LOGM(LOG, "Newly mapped window gets an identifier of {}", IDENTIFIER); - resource->sendToplevel(NEWHANDLE->resource.get()); - NEWHANDLE->resource->sendIdentifier(IDENTIFIER.c_str()); - NEWHANDLE->resource->sendAppId(pWindow->m_initialClass.c_str()); - NEWHANDLE->resource->sendTitle(pWindow->m_initialTitle.c_str()); - NEWHANDLE->resource->sendDone(); + m_resource->sendToplevel(NEWHANDLE->m_resource.get()); + NEWHANDLE->m_resource->sendIdentifier(IDENTIFIER.c_str()); + NEWHANDLE->m_resource->sendAppId(pWindow->m_initialClass.c_str()); + NEWHANDLE->m_resource->sendTitle(pWindow->m_initialTitle.c_str()); + NEWHANDLE->m_resource->sendDone(); - handles.push_back(NEWHANDLE); + m_handles.push_back(NEWHANDLE); } SP CForeignToplevelList::handleForWindow(PHLWINDOW pWindow) { - std::erase_if(handles, [](const auto& wp) { return wp.expired(); }); - const auto IT = std::find_if(handles.begin(), handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); - return IT == handles.end() ? SP{} : IT->lock(); + std::erase_if(m_handles, [](const auto& wp) { return wp.expired(); }); + const auto IT = std::find_if(m_handles.begin(), m_handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); + return IT == m_handles.end() ? SP{} : IT->lock(); } void CForeignToplevelList::onTitle(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; - H->resource->sendTitle(pWindow->m_title.c_str()); - H->resource->sendDone(); + H->m_resource->sendTitle(pWindow->m_title.c_str()); + H->m_resource->sendDone(); } void CForeignToplevelList::onClass(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; - H->resource->sendAppId(pWindow->m_class.c_str()); - H->resource->sendDone(); + H->m_resource->sendAppId(pWindow->m_class.c_str()); + H->m_resource->sendDone(); } void CForeignToplevelList::onUnmap(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); if UNLIKELY (!H) return; - H->resource->sendClosed(); - H->closed = true; + H->m_resource->sendClosed(); + H->m_closed = true; } bool CForeignToplevelList::good() { - return resource->resource(); + return m_resource->resource(); } CForeignToplevelProtocol::CForeignToplevelProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -120,7 +120,7 @@ CForeignToplevelProtocol::CForeignToplevelProtocol(const wl_interface* iface, co if (!windowValidForForeign(window)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onMap(window); } }); @@ -131,7 +131,7 @@ CForeignToplevelProtocol::CForeignToplevelProtocol(const wl_interface* iface, co if (!windowValidForForeign(window)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onUnmap(window); } }); @@ -142,29 +142,29 @@ CForeignToplevelProtocol::CForeignToplevelProtocol(const wl_interface* iface, co if (!windowValidForForeign(window)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onTitle(window); } }); } void CForeignToplevelProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); if UNLIKELY (!RESOURCE->good()) { LOGM(ERR, "Couldn't create a foreign list"); wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CForeignToplevelProtocol::onManagerResourceDestroy(CForeignToplevelList* mgr) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == mgr; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == mgr; }); } void CForeignToplevelProtocol::destroyHandle(CForeignToplevelHandle* handle) { - std::erase_if(m_vHandles, [&](const auto& other) { return other.get() == handle; }); + std::erase_if(m_handles, [&](const auto& other) { return other.get() == handle; }); } bool CForeignToplevelProtocol::windowValidForForeign(PHLWINDOW pWindow) { diff --git a/src/protocols/ForeignToplevel.hpp b/src/protocols/ForeignToplevel.hpp index 2136748b..355117e7 100644 --- a/src/protocols/ForeignToplevel.hpp +++ b/src/protocols/ForeignToplevel.hpp @@ -14,9 +14,9 @@ class CForeignToplevelHandle { PHLWINDOW window(); private: - SP resource; - PHLWINDOWREF pWindow; - bool closed = false; + SP m_resource; + PHLWINDOWREF m_window; + bool m_closed = false; friend class CForeignToplevelList; friend class CForeignToplevelProtocol; @@ -34,12 +34,12 @@ class CForeignToplevelList { bool good(); private: - SP resource; - bool finished = false; + SP m_resource; + bool m_finished = false; SP handleForWindow(PHLWINDOW pWindow); - std::vector> handles; + std::vector> m_handles; }; class CForeignToplevelProtocol : public IWaylandProtocol { @@ -55,8 +55,8 @@ class CForeignToplevelProtocol : public IWaylandProtocol { bool windowValidForForeign(PHLWINDOW pWindow); // - std::vector> m_vManagers; - std::vector> m_vHandles; + std::vector> m_managers; + std::vector> m_handles; friend class CForeignToplevelList; friend class CForeignToplevelHandle; diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index 38ce60d2..8807c225 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -6,17 +6,17 @@ #include "../managers/HookSystemManager.hpp" #include "../managers/EventManager.hpp" -CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SP resource_, PHLWINDOW pWindow_) : resource(resource_), pWindow(pWindow_) { +CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SP resource_, PHLWINDOW pWindow_) : m_resource(resource_), m_window(pWindow_) { if UNLIKELY (!resource_->resource()) return; - resource->setData(this); + m_resource->setData(this); - resource->setOnDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); - resource->setDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); + m_resource->setOnDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); + m_resource->setDestroy([this](CZwlrForeignToplevelHandleV1* h) { PROTO::foreignToplevelWlr->destroyHandle(this); }); - resource->setActivate([this](CZwlrForeignToplevelHandleV1* p, wl_resource* seat) { - const auto PWINDOW = pWindow.lock(); + m_resource->setActivate([this](CZwlrForeignToplevelHandleV1* p, wl_resource* seat) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -26,8 +26,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPactivate(true); }); - resource->setSetFullscreen([this](CZwlrForeignToplevelHandleV1* p, wl_resource* output) { - const auto PWINDOW = pWindow.lock(); + m_resource->setSetFullscreen([this](CZwlrForeignToplevelHandleV1* p, wl_resource* output) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -57,8 +57,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPdamageWindow(PWINDOW); }); - resource->setUnsetFullscreen([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setUnsetFullscreen([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -69,8 +69,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPchangeWindowFullscreenModeClient(PWINDOW, FSMODE_FULLSCREEN, false); }); - resource->setSetMaximized([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setSetMaximized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -86,8 +86,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPchangeWindowFullscreenModeClient(PWINDOW, FSMODE_MAXIMIZED, true); }); - resource->setUnsetMaximized([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setUnsetMaximized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -98,8 +98,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPchangeWindowFullscreenModeClient(PWINDOW, FSMODE_MAXIMIZED, false); }); - resource->setSetMinimized([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setSetMinimized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -110,8 +110,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPpostEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},1", (uintptr_t)PWINDOW.get())}); }); - resource->setUnsetMinimized([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setUnsetMinimized([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -122,8 +122,8 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPpostEvent(SHyprIPCEvent{.event = "minimized", .data = std::format("{:x},0", (uintptr_t)PWINDOW.get())}); }); - resource->setClose([this](CZwlrForeignToplevelHandleV1* p) { - const auto PWINDOW = pWindow.lock(); + m_resource->setClose([this](CZwlrForeignToplevelHandleV1* p) { + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW) return; @@ -133,42 +133,42 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPresource(); + return m_resource->resource(); } PHLWINDOW CForeignToplevelHandleWlr::window() { - return pWindow.lock(); + return m_window.lock(); } wl_resource* CForeignToplevelHandleWlr::res() { - return resource->resource(); + return m_resource->resource(); } void CForeignToplevelHandleWlr::sendMonitor(PHLMONITOR pMonitor) { - if (lastMonitorID == pMonitor->m_id) + if (m_lastMonitorID == pMonitor->m_id) return; - const auto CLIENT = resource->client(); + const auto CLIENT = m_resource->client(); - if (const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(lastMonitorID); PLASTMONITOR && PROTO::outputs.contains(PLASTMONITOR->m_name)) { + if (const auto PLASTMONITOR = g_pCompositor->getMonitorFromID(m_lastMonitorID); PLASTMONITOR && PROTO::outputs.contains(PLASTMONITOR->m_name)) { const auto OLDRESOURCE = PROTO::outputs.at(PLASTMONITOR->m_name)->outputResourceFrom(CLIENT); if LIKELY (OLDRESOURCE) - resource->sendOutputLeave(OLDRESOURCE->getResource()->resource()); + m_resource->sendOutputLeave(OLDRESOURCE->getResource()->resource()); } if (PROTO::outputs.contains(pMonitor->m_name)) { const auto NEWRESOURCE = PROTO::outputs.at(pMonitor->m_name)->outputResourceFrom(CLIENT); if LIKELY (NEWRESOURCE) - resource->sendOutputEnter(NEWRESOURCE->getResource()->resource()); + m_resource->sendOutputEnter(NEWRESOURCE->getResource()->resource()); } - lastMonitorID = pMonitor->m_id; + m_lastMonitorID = pMonitor->m_id; } void CForeignToplevelHandleWlr::sendState() { - const auto PWINDOW = pWindow.lock(); + const auto PWINDOW = m_window.lock(); if UNLIKELY (!PWINDOW || !PWINDOW->m_workspace || !PWINDOW->m_isMapped) return; @@ -189,20 +189,20 @@ void CForeignToplevelHandleWlr::sendState() { *p = ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_MAXIMIZED; } - resource->sendState(&state); + m_resource->sendState(&state); wl_array_release(&state); } -CForeignToplevelWlrManager::CForeignToplevelWlrManager(SP resource_) : resource(resource_) { +CForeignToplevelWlrManager::CForeignToplevelWlrManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; - resource->setOnDestroy([this](CZwlrForeignToplevelManagerV1* h) { PROTO::foreignToplevelWlr->onManagerResourceDestroy(this); }); + m_resource->setOnDestroy([this](CZwlrForeignToplevelManagerV1* h) { PROTO::foreignToplevelWlr->onManagerResourceDestroy(this); }); - resource->setStop([this](CZwlrForeignToplevelManagerV1* h) { - resource->sendFinished(); - finished = true; + m_resource->setStop([this](CZwlrForeignToplevelManagerV1* h) { + m_resource->sendFinished(); + m_finished = true; LOGM(LOG, "CForeignToplevelWlrManager: finished"); PROTO::foreignToplevelWlr->onManagerResourceDestroy(this); }); @@ -214,84 +214,84 @@ CForeignToplevelWlrManager::CForeignToplevelWlrManager(SPm_lastWindow; + m_lastFocus = g_pCompositor->m_lastWindow; } void CForeignToplevelWlrManager::onMap(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; - const auto NEWHANDLE = PROTO::foreignToplevelWlr->m_vHandles.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), 0), pWindow)); + const auto NEWHANDLE = PROTO::foreignToplevelWlr->m_handles.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), 0), pWindow)); if UNLIKELY (!NEWHANDLE->good()) { LOGM(ERR, "Couldn't create a foreign handle"); - resource->noMemory(); - PROTO::foreignToplevelWlr->m_vHandles.pop_back(); + m_resource->noMemory(); + PROTO::foreignToplevelWlr->m_handles.pop_back(); return; } LOGM(LOG, "Newly mapped window {:016x}", (uintptr_t)pWindow.get()); - resource->sendToplevel(NEWHANDLE->resource.get()); - NEWHANDLE->resource->sendAppId(pWindow->m_class.c_str()); - NEWHANDLE->resource->sendTitle(pWindow->m_title.c_str()); + m_resource->sendToplevel(NEWHANDLE->m_resource.get()); + NEWHANDLE->m_resource->sendAppId(pWindow->m_class.c_str()); + NEWHANDLE->m_resource->sendTitle(pWindow->m_title.c_str()); if LIKELY (const auto PMONITOR = pWindow->m_monitor.lock(); PMONITOR) NEWHANDLE->sendMonitor(PMONITOR); NEWHANDLE->sendState(); - NEWHANDLE->resource->sendDone(); + NEWHANDLE->m_resource->sendDone(); - handles.push_back(NEWHANDLE); + m_handles.push_back(NEWHANDLE); } SP CForeignToplevelWlrManager::handleForWindow(PHLWINDOW pWindow) { - std::erase_if(handles, [](const auto& wp) { return wp.expired(); }); - const auto IT = std::find_if(handles.begin(), handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); - return IT == handles.end() ? SP{} : IT->lock(); + std::erase_if(m_handles, [](const auto& wp) { return wp.expired(); }); + const auto IT = std::find_if(m_handles.begin(), m_handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); + return IT == m_handles.end() ? SP{} : IT->lock(); } void CForeignToplevelWlrManager::onTitle(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; - H->resource->sendTitle(pWindow->m_title.c_str()); - H->resource->sendDone(); + H->m_resource->sendTitle(pWindow->m_title.c_str()); + H->m_resource->sendDone(); } void CForeignToplevelWlrManager::onClass(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; - H->resource->sendAppId(pWindow->m_class.c_str()); - H->resource->sendDone(); + H->m_resource->sendAppId(pWindow->m_class.c_str()); + H->m_resource->sendDone(); } void CForeignToplevelWlrManager::onUnmap(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); if UNLIKELY (!H) return; - H->resource->sendClosed(); - H->resource->sendDone(); - H->closed = true; + H->m_resource->sendClosed(); + H->m_resource->sendDone(); + H->m_closed = true; } void CForeignToplevelWlrManager::onMoveMonitor(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; const auto PMONITOR = pWindow->m_monitor.lock(); @@ -300,42 +300,42 @@ void CForeignToplevelWlrManager::onMoveMonitor(PHLWINDOW pWindow) { return; H->sendMonitor(PMONITOR); - H->resource->sendDone(); + H->m_resource->sendDone(); } void CForeignToplevelWlrManager::onFullscreen(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; H->sendState(); - H->resource->sendDone(); + H->m_resource->sendDone(); } void CForeignToplevelWlrManager::onNewFocus(PHLWINDOW pWindow) { - if UNLIKELY (finished) + if UNLIKELY (m_finished) return; - if LIKELY (const auto HOLD = handleForWindow(lastFocus.lock()); HOLD) { + if LIKELY (const auto HOLD = handleForWindow(m_lastFocus.lock()); HOLD) { HOLD->sendState(); - HOLD->resource->sendDone(); + HOLD->m_resource->sendDone(); } - lastFocus = pWindow; + m_lastFocus = pWindow; const auto H = handleForWindow(pWindow); - if UNLIKELY (!H || H->closed) + if UNLIKELY (!H || H->m_closed) return; H->sendState(); - H->resource->sendDone(); + H->m_resource->sendDone(); } bool CForeignToplevelWlrManager::good() { - return resource->resource(); + return m_resource->resource(); } CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -345,7 +345,7 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa if (!windowValidForForeign(PWINDOW)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onMap(PWINDOW); } }); @@ -356,7 +356,7 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa if (!windowValidForForeign(PWINDOW)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onUnmap(PWINDOW); } }); @@ -367,7 +367,7 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa if (!windowValidForForeign(PWINDOW)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onTitle(PWINDOW); } }); @@ -378,14 +378,14 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa if (PWINDOW && !windowValidForForeign(PWINDOW)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onNewFocus(PWINDOW); } }); static auto P4 = g_pHookSystem->hookDynamic("moveWindow", [this](void* self, SCallbackInfo& info, std::any data) { const auto PWINDOW = std::any_cast(std::any_cast>(data).at(0)); - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onMoveMonitor(PWINDOW); } }); @@ -396,29 +396,29 @@ CForeignToplevelWlrProtocol::CForeignToplevelWlrProtocol(const wl_interface* ifa if (!windowValidForForeign(PWINDOW)) return; - for (auto const& m : m_vManagers) { + for (auto const& m : m_managers) { m->onFullscreen(PWINDOW); } }); } void CForeignToplevelWlrProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); if UNLIKELY (!RESOURCE->good()) { LOGM(ERR, "Couldn't create a foreign list"); wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CForeignToplevelWlrProtocol::onManagerResourceDestroy(CForeignToplevelWlrManager* mgr) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == mgr; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == mgr; }); } void CForeignToplevelWlrProtocol::destroyHandle(CForeignToplevelHandleWlr* handle) { - std::erase_if(m_vHandles, [&](const auto& other) { return other.get() == handle; }); + std::erase_if(m_handles, [&](const auto& other) { return other.get() == handle; }); } PHLWINDOW CForeignToplevelWlrProtocol::windowFromHandleResource(wl_resource* res) { diff --git a/src/protocols/ForeignToplevelWlr.hpp b/src/protocols/ForeignToplevelWlr.hpp index d0479d98..c72344c1 100644 --- a/src/protocols/ForeignToplevelWlr.hpp +++ b/src/protocols/ForeignToplevelWlr.hpp @@ -16,10 +16,10 @@ class CForeignToplevelHandleWlr { wl_resource* res(); private: - SP resource; - PHLWINDOWREF pWindow; - bool closed = false; - MONITORID lastMonitorID = MONITOR_INVALID; + SP m_resource; + PHLWINDOWREF m_window; + bool m_closed = false; + MONITORID m_lastMonitorID = MONITOR_INVALID; void sendMonitor(PHLMONITOR pMonitor); void sendState(); @@ -42,13 +42,13 @@ class CForeignToplevelWlrManager { bool good(); private: - SP resource; - bool finished = false; - PHLWINDOWREF lastFocus; // READ-ONLY + SP m_resource; + bool m_finished = false; + PHLWINDOWREF m_lastFocus; // READ-ONLY SP handleForWindow(PHLWINDOW pWindow); - std::vector> handles; + std::vector> m_handles; }; class CForeignToplevelWlrProtocol : public IWaylandProtocol { @@ -65,8 +65,8 @@ class CForeignToplevelWlrProtocol : public IWaylandProtocol { bool windowValidForForeign(PHLWINDOW pWindow); // - std::vector> m_vManagers; - std::vector> m_vHandles; + std::vector> m_managers; + std::vector> m_handles; friend class CForeignToplevelWlrManager; friend class CForeignToplevelHandleWlr; diff --git a/src/protocols/FractionalScale.cpp b/src/protocols/FractionalScale.cpp index a9fbcb16..899d1390 100644 --- a/src/protocols/FractionalScale.cpp +++ b/src/protocols/FractionalScale.cpp @@ -7,7 +7,7 @@ CFractionalScaleProtocol::CFractionalScaleProtocol(const wl_interface* iface, co } void CFractionalScaleProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CWpFractionalScaleManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpFractionalScaleManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -16,15 +16,15 @@ void CFractionalScaleProtocol::bindManager(wl_client* client, void* data, uint32 } void CFractionalScaleProtocol::removeAddon(CFractionalScaleAddon* addon) { - m_mAddons.erase(addon->surf()); + m_addons.erase(addon->surf()); } void CFractionalScaleProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [res](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [res](const auto& other) { return other->resource() == res; }); } void CFractionalScaleProtocol::onGetFractionalScale(CWpFractionalScaleManagerV1* pMgr, uint32_t id, SP surface) { - for (auto const& [k, v] : m_mAddons) { + for (auto const& [k, v] : m_addons) { if (k == surface) { LOGM(ERR, "Surface {:x} already has a fractionalScale addon", (uintptr_t)surface.get()); pMgr->error(WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_FRACTIONAL_SCALE_EXISTS, "Fractional scale already exists"); @@ -33,10 +33,10 @@ void CFractionalScaleProtocol::onGetFractionalScale(CWpFractionalScaleManagerV1* } const auto PADDON = - m_mAddons.emplace(surface, makeUnique(makeShared(pMgr->client(), pMgr->version(), id), surface)).first->second.get(); + m_addons.emplace(surface, makeUnique(makeShared(pMgr->client(), pMgr->version(), id), surface)).first->second.get(); if UNLIKELY (!PADDON->good()) { - m_mAddons.erase(surface); + m_addons.erase(surface); pMgr->noMemory(); return; } @@ -44,20 +44,20 @@ void CFractionalScaleProtocol::onGetFractionalScale(CWpFractionalScaleManagerV1* PADDON->m_resource->setOnDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); }); PADDON->m_resource->setDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); }); - if (std::ranges::find_if(m_mSurfaceScales, [surface](const auto& e) { return e.first == surface; }) == m_mSurfaceScales.end()) - m_mSurfaceScales.emplace(surface, 1.F); + if (std::ranges::find_if(m_surfaceScales, [surface](const auto& e) { return e.first == surface; }) == m_surfaceScales.end()) + m_surfaceScales.emplace(surface, 1.F); if (surface->m_mapped) - PADDON->setScale(m_mSurfaceScales.at(surface)); + PADDON->setScale(m_surfaceScales.at(surface)); // clean old - std::erase_if(m_mSurfaceScales, [](const auto& e) { return e.first.expired(); }); + std::erase_if(m_surfaceScales, [](const auto& e) { return e.first.expired(); }); } void CFractionalScaleProtocol::sendScale(SP surf, const float& scale) { - m_mSurfaceScales[surf] = scale; - if (m_mAddons.contains(surf)) - m_mAddons[surf]->setScale(scale); + m_surfaceScales[surf] = scale; + if (m_addons.contains(surf)) + m_addons[surf]->setScale(scale); } CFractionalScaleAddon::CFractionalScaleAddon(SP resource_, SP surf_) : m_resource(resource_), m_surface(surf_) { diff --git a/src/protocols/FractionalScale.hpp b/src/protocols/FractionalScale.hpp index ba896c01..c4aff560 100644 --- a/src/protocols/FractionalScale.hpp +++ b/src/protocols/FractionalScale.hpp @@ -49,9 +49,9 @@ class CFractionalScaleProtocol : public IWaylandProtocol { // - std::unordered_map, float> m_mSurfaceScales; - std::unordered_map, UP> m_mAddons; - std::vector> m_vManagers; + std::unordered_map, float> m_surfaceScales; + std::unordered_map, UP> m_addons; + std::vector> m_managers; friend class CFractionalScaleAddon; }; diff --git a/src/protocols/FrogColorManagement.cpp b/src/protocols/FrogColorManagement.cpp index 870b573f..42d3c496 100644 --- a/src/protocols/FrogColorManagement.cpp +++ b/src/protocols/FrogColorManagement.cpp @@ -22,14 +22,14 @@ static wpColorManagerV1Primaries getWPPrimaries(frogColorManagedSurfacePrimaries return (wpColorManagerV1Primaries)(primaries + 1); } -CFrogColorManager::CFrogColorManager(SP resource_) : resource(resource_) { +CFrogColorManager::CFrogColorManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([](CFrogColorManagementFactoryV1* r) { LOGM(TRACE, "Destroy frog_color_management at {:x} (generated default)", (uintptr_t)r); }); - resource->setOnDestroy([this](CFrogColorManagementFactoryV1* r) { PROTO::frogColorManagement->destroyResource(this); }); + m_resource->setDestroy([](CFrogColorManagementFactoryV1* r) { LOGM(TRACE, "Destroy frog_color_management at {:x} (generated default)", (uintptr_t)r); }); + m_resource->setOnDestroy([this](CFrogColorManagementFactoryV1* r) { PROTO::frogColorManagement->destroyResource(this); }); - resource->setGetColorManagedSurface([](CFrogColorManagementFactoryV1* r, wl_resource* surface, uint32_t id) { + m_resource->setGetColorManagedSurface([](CFrogColorManagementFactoryV1* r, wl_resource* surface, uint32_t id) { LOGM(TRACE, "Get surface for id={}, surface={}", id, (uintptr_t)surface); auto SURF = CWLSurfaceResource::fromResource(surface); @@ -39,70 +39,70 @@ CFrogColorManager::CFrogColorManager(SP resource_ return; } - const auto RESOURCE = PROTO::frogColorManagement->m_vSurfaces.emplace_back( - makeShared(makeShared(r->client(), r->version(), id), SURF)); + const auto RESOURCE = + PROTO::frogColorManagement->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::frogColorManagement->m_vSurfaces.pop_back(); + PROTO::frogColorManagement->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); } bool CFrogColorManager::good() { - return resource->resource(); + return m_resource->resource(); } -CFrogColorManagementSurface::CFrogColorManagementSurface(SP resource_, SP surface_) : surface(surface_), resource(resource_) { +CFrogColorManagementSurface::CFrogColorManagementSurface(SP resource_, SP surface_) : m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - if (!surface->m_colorManagement.valid()) { - const auto RESOURCE = PROTO::colorManagement->m_vSurfaces.emplace_back(makeShared(surface_)); + if (!m_surface->m_colorManagement.valid()) { + const auto RESOURCE = PROTO::colorManagement->m_surfaces.emplace_back(makeShared(surface_)); if UNLIKELY (!RESOURCE) { - resource->noMemory(); - PROTO::colorManagement->m_vSurfaces.pop_back(); + m_resource->noMemory(); + PROTO::colorManagement->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - surface->m_colorManagement = RESOURCE; + m_surface->m_colorManagement = RESOURCE; - resource->setOnDestroy([this](CFrogColorManagedSurface* r) { - LOGM(TRACE, "Destroy frog cm and xx cm for surface {}", (uintptr_t)surface); - if (surface.valid()) - PROTO::colorManagement->destroyResource(surface->m_colorManagement.get()); + m_resource->setOnDestroy([this](CFrogColorManagedSurface* r) { + LOGM(TRACE, "Destroy frog cm and xx cm for surface {}", (uintptr_t)m_surface); + if (m_surface.valid()) + PROTO::colorManagement->destroyResource(m_surface->m_colorManagement.get()); PROTO::frogColorManagement->destroyResource(this); }); } else - resource->setOnDestroy([this](CFrogColorManagedSurface* r) { - LOGM(TRACE, "Destroy frog cm surface {}", (uintptr_t)surface); + m_resource->setOnDestroy([this](CFrogColorManagedSurface* r) { + LOGM(TRACE, "Destroy frog cm surface {}", (uintptr_t)m_surface); PROTO::frogColorManagement->destroyResource(this); }); - resource->setDestroy([this](CFrogColorManagedSurface* r) { - LOGM(TRACE, "Destroy frog cm surface {}", (uintptr_t)surface); + m_resource->setDestroy([this](CFrogColorManagedSurface* r) { + LOGM(TRACE, "Destroy frog cm surface {}", (uintptr_t)m_surface); PROTO::frogColorManagement->destroyResource(this); }); - resource->setSetKnownTransferFunction([this](CFrogColorManagedSurface* r, frogColorManagedSurfaceTransferFunction tf) { - LOGM(TRACE, "Set frog cm transfer function {} for {}", (uint32_t)tf, surface->id()); + m_resource->setSetKnownTransferFunction([this](CFrogColorManagedSurface* r, frogColorManagedSurfaceTransferFunction tf) { + LOGM(TRACE, "Set frog cm transfer function {} for {}", (uint32_t)tf, m_surface->id()); switch (tf) { case FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ: - surface->m_colorManagement->m_imageDescription.transferFunction = + m_surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ)); break; ; case FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_GAMMA_22: - if (pqIntentSent) { + if (m_pqIntentSent) { LOGM(TRACE, "FIXME: assuming broken enum value 2 (FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_GAMMA_22) referring to eotf value 2 (TRANSFER_FUNCTION_ST2084_PQ)"); - surface->m_colorManagement->m_imageDescription.transferFunction = + m_surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(FROG_COLOR_MANAGED_SURFACE_TRANSFER_FUNCTION_ST2084_PQ)); break; }; @@ -110,49 +110,49 @@ CFrogColorManagementSurface::CFrogColorManagementSurface(SPm_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(tf)); + m_surface->m_colorManagement->m_imageDescription.transferFunction = convertTransferFunction(getWPTransferFunction(tf)); - surface->m_colorManagement->setHasImageDescription(true); + m_surface->m_colorManagement->setHasImageDescription(true); } }); - resource->setSetKnownContainerColorVolume([this](CFrogColorManagedSurface* r, frogColorManagedSurfacePrimaries primariesName) { + m_resource->setSetKnownContainerColorVolume([this](CFrogColorManagedSurface* r, frogColorManagedSurfacePrimaries primariesName) { LOGM(TRACE, "Set frog cm primaries {}", (uint32_t)primariesName); switch (primariesName) { case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_UNDEFINED: - case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC709: surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT709; break; - case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC2020: surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT2020; break; + case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC709: m_surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT709; break; + case FROG_COLOR_MANAGED_SURFACE_PRIMARIES_REC2020: m_surface->m_colorManagement->m_imageDescription.primaries = NColorPrimaries::BT2020; break; } - surface->m_colorManagement->m_imageDescription.primariesNamed = convertPrimaries(getWPPrimaries(primariesName)); + m_surface->m_colorManagement->m_imageDescription.primariesNamed = convertPrimaries(getWPPrimaries(primariesName)); - surface->m_colorManagement->setHasImageDescription(true); + m_surface->m_colorManagement->setHasImageDescription(true); }); - resource->setSetRenderIntent([this](CFrogColorManagedSurface* r, frogColorManagedSurfaceRenderIntent intent) { + m_resource->setSetRenderIntent([this](CFrogColorManagedSurface* r, frogColorManagedSurfaceRenderIntent intent) { LOGM(TRACE, "Set frog cm intent {}", (uint32_t)intent); - pqIntentSent = intent == FROG_COLOR_MANAGED_SURFACE_RENDER_INTENT_PERCEPTUAL; - surface->m_colorManagement->setHasImageDescription(true); + m_pqIntentSent = intent == FROG_COLOR_MANAGED_SURFACE_RENDER_INTENT_PERCEPTUAL; + m_surface->m_colorManagement->setHasImageDescription(true); }); - resource->setSetHdrMetadata([this](CFrogColorManagedSurface* r, uint32_t r_x, uint32_t r_y, uint32_t g_x, uint32_t g_y, uint32_t b_x, uint32_t b_y, uint32_t w_x, uint32_t w_y, - uint32_t max_lum, uint32_t min_lum, uint32_t cll, uint32_t fall) { + m_resource->setSetHdrMetadata([this](CFrogColorManagedSurface* r, uint32_t r_x, uint32_t r_y, uint32_t g_x, uint32_t g_y, uint32_t b_x, uint32_t b_y, uint32_t w_x, + uint32_t w_y, uint32_t max_lum, uint32_t min_lum, uint32_t cll, uint32_t fall) { LOGM(TRACE, "Set frog primaries r:{},{} g:{},{} b:{},{} w:{},{} luminances {} - {} cll {} fall {}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y, min_lum, max_lum, cll, fall); - surface->m_colorManagement->m_imageDescription.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 50000.0f, .y = r_y / 50000.0f}, - .green = {.x = g_x / 50000.0f, .y = g_y / 50000.0f}, - .blue = {.x = b_x / 50000.0f, .y = b_y / 50000.0f}, - .white = {.x = w_x / 50000.0f, .y = w_y / 50000.0f}}; - surface->m_colorManagement->m_imageDescription.masteringLuminances.min = min_lum / 10000.0f; - surface->m_colorManagement->m_imageDescription.masteringLuminances.max = max_lum; - surface->m_colorManagement->m_imageDescription.maxCLL = cll; - surface->m_colorManagement->m_imageDescription.maxFALL = fall; + m_surface->m_colorManagement->m_imageDescription.masteringPrimaries = SPCPRimaries{.red = {.x = r_x / 50000.0f, .y = r_y / 50000.0f}, + .green = {.x = g_x / 50000.0f, .y = g_y / 50000.0f}, + .blue = {.x = b_x / 50000.0f, .y = b_y / 50000.0f}, + .white = {.x = w_x / 50000.0f, .y = w_y / 50000.0f}}; + m_surface->m_colorManagement->m_imageDescription.masteringLuminances.min = min_lum / 10000.0f; + m_surface->m_colorManagement->m_imageDescription.masteringLuminances.max = max_lum; + m_surface->m_colorManagement->m_imageDescription.maxCLL = cll; + m_surface->m_colorManagement->m_imageDescription.maxFALL = fall; - surface->m_colorManagement->setHasImageDescription(true); + m_surface->m_colorManagement->setHasImageDescription(true); }); } bool CFrogColorManagementSurface::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CFrogColorManagementSurface::client() { - return pClient; + return m_client; } CFrogColorManagementProtocol::CFrogColorManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -160,11 +160,11 @@ CFrogColorManagementProtocol::CFrogColorManagementProtocol(const wl_interface* i } void CFrogColorManagementProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } @@ -172,9 +172,9 @@ void CFrogColorManagementProtocol::bindManager(wl_client* client, void* data, ui } void CFrogColorManagementProtocol::destroyResource(CFrogColorManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CFrogColorManagementProtocol::destroyResource(CFrogColorManagementSurface* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/FrogColorManagement.hpp b/src/protocols/FrogColorManagement.hpp index db467b1d..32e2202c 100644 --- a/src/protocols/FrogColorManagement.hpp +++ b/src/protocols/FrogColorManagement.hpp @@ -12,7 +12,7 @@ class CFrogColorManager { bool good(); private: - SP resource; + SP m_resource; }; class CFrogColorManagementSurface { @@ -22,14 +22,14 @@ class CFrogColorManagementSurface { bool good(); wl_client* client(); - WP self; - WP surface; + WP m_self; + WP m_surface; - bool pqIntentSent = false; + bool m_pqIntentSent = false; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; }; class CFrogColorManagementProtocol : public IWaylandProtocol { @@ -42,8 +42,8 @@ class CFrogColorManagementProtocol : public IWaylandProtocol { void destroyResource(CFrogColorManager* resource); void destroyResource(CFrogColorManagementSurface* resource); - std::vector> m_vManagers; - std::vector> m_vSurfaces; + std::vector> m_managers; + std::vector> m_surfaces; friend class CFrogColorManager; friend class CFrogColorManagementSurface; diff --git a/src/protocols/GammaControl.cpp b/src/protocols/GammaControl.cpp index 1309ffc5..1d5b4fd5 100644 --- a/src/protocols/GammaControl.cpp +++ b/src/protocols/GammaControl.cpp @@ -6,7 +6,7 @@ #include "../render/Renderer.hpp" using namespace Hyprutils::OS; -CGammaControl::CGammaControl(SP resource_, wl_resource* output) : resource(resource_) { +CGammaControl::CGammaControl(SP resource_, wl_resource* output) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; @@ -14,144 +14,144 @@ CGammaControl::CGammaControl(SP resource_, wl_resource* out if UNLIKELY (!OUTPUTRES) { LOGM(ERR, "No output in CGammaControl"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - pMonitor = OUTPUTRES->m_monitor; + m_monitor = OUTPUTRES->m_monitor; - if UNLIKELY (!pMonitor || !pMonitor->m_output) { + if UNLIKELY (!m_monitor || !m_monitor->m_output) { LOGM(ERR, "No CMonitor"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - for (auto const& g : PROTO::gamma->m_vGammaControllers) { - if UNLIKELY (g->pMonitor == pMonitor) { - resource->sendFailed(); + for (auto const& g : PROTO::gamma->m_gammaControllers) { + if UNLIKELY (g->m_monitor == m_monitor) { + m_resource->sendFailed(); return; } } - gammaSize = pMonitor->m_output->getGammaSize(); + m_gammaSize = m_monitor->m_output->getGammaSize(); - if UNLIKELY (gammaSize <= 0) { - LOGM(ERR, "Output {} doesn't support gamma", pMonitor->m_name); - resource->sendFailed(); + if UNLIKELY (m_gammaSize <= 0) { + LOGM(ERR, "Output {} doesn't support gamma", m_monitor->m_name); + m_resource->sendFailed(); return; } - gammaTable.resize(gammaSize * 3); + m_gammaTable.resize(m_gammaSize * 3); - resource->setDestroy([this](CZwlrGammaControlV1* gamma) { PROTO::gamma->destroyGammaControl(this); }); - resource->setOnDestroy([this](CZwlrGammaControlV1* gamma) { PROTO::gamma->destroyGammaControl(this); }); + m_resource->setDestroy([this](CZwlrGammaControlV1* gamma) { PROTO::gamma->destroyGammaControl(this); }); + m_resource->setOnDestroy([this](CZwlrGammaControlV1* gamma) { PROTO::gamma->destroyGammaControl(this); }); - resource->setSetGamma([this](CZwlrGammaControlV1* gamma, int32_t fd) { + m_resource->setSetGamma([this](CZwlrGammaControlV1* gamma, int32_t fd) { CFileDescriptor gammaFd{fd}; - if UNLIKELY (!pMonitor) { + if UNLIKELY (!m_monitor) { LOGM(ERR, "setGamma for a dead monitor"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - LOGM(LOG, "setGamma for {}", pMonitor->m_name); + LOGM(LOG, "setGamma for {}", m_monitor->m_name); // TODO: make CFileDescriptor getflags use F_GETFL int fdFlags = fcntl(gammaFd.get(), F_GETFL, 0); if UNLIKELY (fdFlags < 0) { LOGM(ERR, "Failed to get fd flags"); - resource->sendFailed(); + m_resource->sendFailed(); return; } // TODO: make CFileDescriptor setflags use F_SETFL if UNLIKELY (fcntl(gammaFd.get(), F_SETFL, fdFlags | O_NONBLOCK) < 0) { LOGM(ERR, "Failed to set fd flags"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - ssize_t readBytes = pread(gammaFd.get(), gammaTable.data(), gammaTable.size() * sizeof(uint16_t), 0); - if (readBytes < 0 || (size_t)readBytes != gammaTable.size() * sizeof(uint16_t)) { + ssize_t readBytes = pread(gammaFd.get(), m_gammaTable.data(), m_gammaTable.size() * sizeof(uint16_t), 0); + if (readBytes < 0 || (size_t)readBytes != m_gammaTable.size() * sizeof(uint16_t)) { LOGM(ERR, "Failed to read bytes"); - if ((size_t)readBytes != gammaTable.size() * sizeof(uint16_t)) { + if ((size_t)readBytes != m_gammaTable.size() * sizeof(uint16_t)) { gamma->error(ZWLR_GAMMA_CONTROL_V1_ERROR_INVALID_GAMMA, "Gamma ramps size mismatch"); return; } - resource->sendFailed(); + m_resource->sendFailed(); return; } - gammaTableSet = true; + m_gammaTableSet = true; // translate the table to AQ format std::vector red, green, blue; - red.resize(gammaTable.size() / 3); - green.resize(gammaTable.size() / 3); - blue.resize(gammaTable.size() / 3); - for (size_t i = 0; i < gammaTable.size() / 3; ++i) { - red.at(i) = gammaTable.at(i); - green.at(i) = gammaTable.at(gammaTable.size() / 3 + i); - blue.at(i) = gammaTable.at((gammaTable.size() / 3) * 2 + i); + red.resize(m_gammaTable.size() / 3); + green.resize(m_gammaTable.size() / 3); + blue.resize(m_gammaTable.size() / 3); + for (size_t i = 0; i < m_gammaTable.size() / 3; ++i) { + red.at(i) = m_gammaTable.at(i); + green.at(i) = m_gammaTable.at(m_gammaTable.size() / 3 + i); + blue.at(i) = m_gammaTable.at((m_gammaTable.size() / 3) * 2 + i); } - for (size_t i = 0; i < gammaTable.size() / 3; ++i) { - gammaTable.at(i * 3) = red.at(i); - gammaTable.at(i * 3 + 1) = green.at(i); - gammaTable.at(i * 3 + 2) = blue.at(i); + for (size_t i = 0; i < m_gammaTable.size() / 3; ++i) { + m_gammaTable.at(i * 3) = red.at(i); + m_gammaTable.at(i * 3 + 1) = green.at(i); + m_gammaTable.at(i * 3 + 2) = blue.at(i); } applyToMonitor(); }); - resource->sendGammaSize(gammaSize); + m_resource->sendGammaSize(m_gammaSize); - listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); }); - listeners.monitorDisconnect = pMonitor->m_events.disconnect.registerListener([this](std::any) { this->onMonitorDestroy(); }); + m_listeners.monitorDestroy = m_monitor->m_events.destroy.registerListener([this](std::any) { this->onMonitorDestroy(); }); + m_listeners.monitorDisconnect = m_monitor->m_events.disconnect.registerListener([this](std::any) { this->onMonitorDestroy(); }); } CGammaControl::~CGammaControl() { - if (!gammaTableSet || !pMonitor || !pMonitor->m_output) + if (!m_gammaTableSet || !m_monitor || !m_monitor->m_output) return; // reset the LUT if the client dies for whatever reason and doesn't unset the gamma - pMonitor->m_output->state->setGammaLut({}); + m_monitor->m_output->state->setGammaLut({}); } bool CGammaControl::good() { - return resource->resource(); + return m_resource->resource(); } void CGammaControl::applyToMonitor() { - if UNLIKELY (!pMonitor || !pMonitor->m_output) + if UNLIKELY (!m_monitor || !m_monitor->m_output) return; // ?? - LOGM(LOG, "setting to monitor {}", pMonitor->m_name); + LOGM(LOG, "setting to monitor {}", m_monitor->m_name); - if (!gammaTableSet) { - pMonitor->m_output->state->setGammaLut({}); + if (!m_gammaTableSet) { + m_monitor->m_output->state->setGammaLut({}); return; } - pMonitor->m_output->state->setGammaLut(gammaTable); + m_monitor->m_output->state->setGammaLut(m_gammaTable); - if (!pMonitor->m_state.test()) { - LOGM(LOG, "setting to monitor {} failed", pMonitor->m_name); - pMonitor->m_output->state->setGammaLut({}); + if (!m_monitor->m_state.test()) { + LOGM(LOG, "setting to monitor {} failed", m_monitor->m_name); + m_monitor->m_output->state->setGammaLut({}); } - g_pHyprRenderer->damageMonitor(pMonitor.lock()); + g_pHyprRenderer->damageMonitor(m_monitor.lock()); } PHLMONITOR CGammaControl::getMonitor() { - return pMonitor ? pMonitor.lock() : nullptr; + return m_monitor ? m_monitor.lock() : nullptr; } void CGammaControl::onMonitorDestroy() { - LOGM(LOG, "Destroying gamma control for {}", pMonitor->m_name); - resource->sendFailed(); + LOGM(LOG, "Destroying gamma control for {}", m_monitor->m_name); + m_resource->sendFailed(); } CGammaControlProtocol::CGammaControlProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -159,7 +159,7 @@ CGammaControlProtocol::CGammaControlProtocol(const wl_interface* iface, const in } void CGammaControlProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwlrGammaControlManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwlrGammaControlManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -167,26 +167,26 @@ void CGammaControlProtocol::bindManager(wl_client* client, void* data, uint32_t } void CGammaControlProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CGammaControlProtocol::destroyGammaControl(CGammaControl* gamma) { - std::erase_if(m_vGammaControllers, [&](const auto& other) { return other.get() == gamma; }); + std::erase_if(m_gammaControllers, [&](const auto& other) { return other.get() == gamma; }); } void CGammaControlProtocol::onGetGammaControl(CZwlrGammaControlManagerV1* pMgr, uint32_t id, wl_resource* output) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vGammaControllers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), output)).get(); + const auto RESOURCE = m_gammaControllers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), output)).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vGammaControllers.pop_back(); + m_gammaControllers.pop_back(); return; } } void CGammaControlProtocol::applyGammaToState(PHLMONITOR pMonitor) { - for (auto const& g : m_vGammaControllers) { + for (auto const& g : m_gammaControllers) { if (g->getMonitor() != pMonitor) continue; diff --git a/src/protocols/GammaControl.hpp b/src/protocols/GammaControl.hpp index 9e21ef08..525f5b67 100644 --- a/src/protocols/GammaControl.hpp +++ b/src/protocols/GammaControl.hpp @@ -18,18 +18,18 @@ class CGammaControl { PHLMONITOR getMonitor(); private: - SP resource; - PHLMONITORREF pMonitor; - size_t gammaSize = 0; - bool gammaTableSet = false; - std::vector gammaTable; // [r,g,b]+ + SP m_resource; + PHLMONITORREF m_monitor; + size_t m_gammaSize = 0; + bool m_gammaTableSet = false; + std::vector m_gammaTable; // [r,g,b]+ void onMonitorDestroy(); struct { CHyprSignalListener monitorDisconnect; CHyprSignalListener monitorDestroy; - } listeners; + } m_listeners; }; class CGammaControlProtocol : public IWaylandProtocol { @@ -46,8 +46,8 @@ class CGammaControlProtocol : public IWaylandProtocol { void onGetGammaControl(CZwlrGammaControlManagerV1* pMgr, uint32_t id, wl_resource* output); // - std::vector> m_vManagers; - std::vector> m_vGammaControllers; + std::vector> m_managers; + std::vector> m_gammaControllers; friend class CGammaControl; }; diff --git a/src/protocols/GlobalShortcuts.cpp b/src/protocols/GlobalShortcuts.cpp index 04e4e091..50e7434d 100644 --- a/src/protocols/GlobalShortcuts.cpp +++ b/src/protocols/GlobalShortcuts.cpp @@ -1,21 +1,21 @@ #include "GlobalShortcuts.hpp" #include "../helpers/time/Time.hpp" -CShortcutClient::CShortcutClient(SP resource_) : resource(resource_) { +CShortcutClient::CShortcutClient(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CHyprlandGlobalShortcutsManagerV1* pMgr) { PROTO::globalShortcuts->destroyResource(this); }); - resource->setDestroy([this](CHyprlandGlobalShortcutsManagerV1* pMgr) { PROTO::globalShortcuts->destroyResource(this); }); + m_resource->setOnDestroy([this](CHyprlandGlobalShortcutsManagerV1* pMgr) { PROTO::globalShortcuts->destroyResource(this); }); + m_resource->setDestroy([this](CHyprlandGlobalShortcutsManagerV1* pMgr) { PROTO::globalShortcuts->destroyResource(this); }); - resource->setRegisterShortcut([this](CHyprlandGlobalShortcutsManagerV1* pMgr, uint32_t shortcut, const char* id, const char* app_id, const char* description, - const char* trigger_description) { + m_resource->setRegisterShortcut([this](CHyprlandGlobalShortcutsManagerV1* pMgr, uint32_t shortcut, const char* id, const char* app_id, const char* description, + const char* trigger_description) { if UNLIKELY (PROTO::globalShortcuts->isTaken(id, app_id)) { - resource->error(HYPRLAND_GLOBAL_SHORTCUTS_MANAGER_V1_ERROR_ALREADY_TAKEN, "Combination is taken"); + m_resource->error(HYPRLAND_GLOBAL_SHORTCUTS_MANAGER_V1_ERROR_ALREADY_TAKEN, "Combination is taken"); return; } - const auto PSHORTCUT = shortcuts.emplace_back(makeShared(makeShared(resource->client(), resource->version(), shortcut))); + const auto PSHORTCUT = m_shortcuts.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), shortcut))); PSHORTCUT->id = id; PSHORTCUT->description = description; PSHORTCUT->appid = app_id; @@ -23,16 +23,16 @@ CShortcutClient::CShortcutClient(SP resource_ if UNLIKELY (!PSHORTCUT->resource->resource()) { PSHORTCUT->resource->noMemory(); - shortcuts.pop_back(); + m_shortcuts.pop_back(); return; } - PSHORTCUT->resource->setDestroy([this](CHyprlandGlobalShortcutV1* pMgr) { std::erase_if(shortcuts, [&](const auto& other) { return other->resource.get() == pMgr; }); }); + PSHORTCUT->resource->setDestroy([this](CHyprlandGlobalShortcutV1* pMgr) { std::erase_if(m_shortcuts, [&](const auto& other) { return other->resource.get() == pMgr; }); }); }); } bool CShortcutClient::good() { - return resource->resource(); + return m_resource->resource(); } CGlobalShortcutsProtocol::CGlobalShortcutsProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -40,22 +40,22 @@ CGlobalShortcutsProtocol::CGlobalShortcutsProtocol(const wl_interface* iface, co } void CGlobalShortcutsProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESROUCE = m_vClients.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESROUCE = m_clients.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESROUCE->good()) { wl_client_post_no_memory(client); - m_vClients.pop_back(); + m_clients.pop_back(); return; } } void CGlobalShortcutsProtocol::destroyResource(CShortcutClient* client) { - std::erase_if(m_vClients, [&](const auto& other) { return other.get() == client; }); + std::erase_if(m_clients, [&](const auto& other) { return other.get() == client; }); } bool CGlobalShortcutsProtocol::isTaken(std::string appid, std::string trigger) { - for (auto const& c : m_vClients) { - for (auto const& sh : c->shortcuts) { + for (auto const& c : m_clients) { + for (auto const& sh : c->m_shortcuts) { if (sh->appid == appid && sh->id == trigger) { return true; } @@ -66,8 +66,8 @@ bool CGlobalShortcutsProtocol::isTaken(std::string appid, std::string trigger) { } void CGlobalShortcutsProtocol::sendGlobalShortcutEvent(std::string appid, std::string trigger, bool pressed) { - for (auto const& c : m_vClients) { - for (auto const& sh : c->shortcuts) { + for (auto const& c : m_clients) { + for (auto const& sh : c->m_shortcuts) { if (sh->appid == appid && sh->id == trigger) { const auto [sec, nsec] = Time::secNsec(Time::steadyNow()); uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; @@ -87,15 +87,15 @@ std::vector CGlobalShortcutsProtocol::getAllShortcuts() { // and potential reallocation is more costly then the added precompute overhead of looping // and finding the total size. size_t totalShortcuts = 0; - for (const auto& c : m_vClients) { - totalShortcuts += c->shortcuts.size(); + for (const auto& c : m_clients) { + totalShortcuts += c->m_shortcuts.size(); } // reserve number of elements to avoid reallocations copy.reserve(totalShortcuts); - for (const auto& c : m_vClients) { - for (const auto& sh : c->shortcuts) { + for (const auto& c : m_clients) { + for (const auto& sh : c->m_shortcuts) { copy.push_back(*sh); } } diff --git a/src/protocols/GlobalShortcuts.hpp b/src/protocols/GlobalShortcuts.hpp index 14f6ee0b..a4d5baf9 100644 --- a/src/protocols/GlobalShortcuts.hpp +++ b/src/protocols/GlobalShortcuts.hpp @@ -17,8 +17,8 @@ class CShortcutClient { bool good(); private: - SP resource; - std::vector> shortcuts; + SP m_resource; + std::vector> m_shortcuts; friend class CGlobalShortcutsProtocol; }; @@ -35,7 +35,7 @@ class CGlobalShortcutsProtocol : IWaylandProtocol { std::vector getAllShortcuts(); private: - std::vector> m_vClients; + std::vector> m_clients; }; namespace PROTO { diff --git a/src/protocols/HyprlandSurface.cpp b/src/protocols/HyprlandSurface.cpp index 13d5a49a..9c66fba4 100644 --- a/src/protocols/HyprlandSurface.cpp +++ b/src/protocols/HyprlandSurface.cpp @@ -6,83 +6,83 @@ #include #include -CHyprlandSurface::CHyprlandSurface(SP resource, SP surface) : m_pSurface(surface) { +CHyprlandSurface::CHyprlandSurface(SP resource, SP surface) : m_surface(surface) { setResource(std::move(resource)); } bool CHyprlandSurface::good() const { - return m_pResource->resource(); + return m_resource->resource(); } void CHyprlandSurface::setResource(SP resource) { - m_pResource = std::move(resource); + m_resource = std::move(resource); - if UNLIKELY (!m_pResource->resource()) + if UNLIKELY (!m_resource->resource()) return; - m_pResource->setDestroy([this](CHyprlandSurfaceV1* resource) { destroy(); }); - m_pResource->setOnDestroy([this](CHyprlandSurfaceV1* resource) { destroy(); }); + m_resource->setDestroy([this](CHyprlandSurfaceV1* resource) { destroy(); }); + m_resource->setOnDestroy([this](CHyprlandSurfaceV1* resource) { destroy(); }); - m_pResource->setSetOpacity([this](CHyprlandSurfaceV1* resource, uint32_t opacity) { - if UNLIKELY (!m_pSurface) { - m_pResource->error(HYPRLAND_SURFACE_V1_ERROR_NO_SURFACE, "set_opacity called for destroyed wl_surface"); + m_resource->setSetOpacity([this](CHyprlandSurfaceV1* resource, uint32_t opacity) { + if UNLIKELY (!m_surface) { + m_resource->error(HYPRLAND_SURFACE_V1_ERROR_NO_SURFACE, "set_opacity called for destroyed wl_surface"); return; } auto fOpacity = wl_fixed_to_double(opacity); if UNLIKELY (fOpacity < 0.0 || fOpacity > 1.0) { - m_pResource->error(HYPRLAND_SURFACE_V1_ERROR_OUT_OF_RANGE, "set_opacity called with an opacity value larger than 1.0 or smaller than 0.0."); + m_resource->error(HYPRLAND_SURFACE_V1_ERROR_OUT_OF_RANGE, "set_opacity called with an opacity value larger than 1.0 or smaller than 0.0."); return; } - m_fOpacity = fOpacity; + m_opacity = fOpacity; }); - m_pResource->setSetVisibleRegion([this](CHyprlandSurfaceV1* resource, wl_resource* region) { + m_resource->setSetVisibleRegion([this](CHyprlandSurfaceV1* resource, wl_resource* region) { if (!region) { if (!m_visibleRegion.empty()) - m_bVisibleRegionChanged = true; + m_visibleRegionChanged = true; m_visibleRegion.clear(); return; } - m_bVisibleRegionChanged = true; - m_visibleRegion = CWLRegionResource::fromResource(region)->m_region; + m_visibleRegionChanged = true; + m_visibleRegion = CWLRegionResource::fromResource(region)->m_region; }); - listeners.surfaceCommitted = m_pSurface->m_events.commit.registerListener([this](std::any data) { - auto surface = CWLSurface::fromResource(m_pSurface.lock()); + m_listeners.surfaceCommitted = m_surface->m_events.commit.registerListener([this](std::any data) { + auto surface = CWLSurface::fromResource(m_surface.lock()); - if (surface && (surface->m_overallOpacity != m_fOpacity || m_bVisibleRegionChanged)) { - surface->m_overallOpacity = m_fOpacity; + if (surface && (surface->m_overallOpacity != m_opacity || m_visibleRegionChanged)) { + surface->m_overallOpacity = m_opacity; surface->m_visibleRegion = m_visibleRegion; auto box = surface->getSurfaceBoxGlobal(); if (box.has_value()) g_pHyprRenderer->damageBox(*box); - if (!m_pResource) + if (!m_resource) PROTO::hyprlandSurface->destroySurface(this); } }); - listeners.surfaceDestroyed = m_pSurface->m_events.destroy.registerListener([this](std::any data) { - if (!m_pResource) + m_listeners.surfaceDestroyed = m_surface->m_events.destroy.registerListener([this](std::any data) { + if (!m_resource) PROTO::hyprlandSurface->destroySurface(this); }); } void CHyprlandSurface::destroy() { - m_pResource.reset(); - m_fOpacity = 1.F; + m_resource.reset(); + m_opacity = 1.F; if (!m_visibleRegion.empty()) - m_bVisibleRegionChanged = true; + m_visibleRegionChanged = true; m_visibleRegion.clear(); - if (!m_pSurface) + if (!m_surface) PROTO::hyprlandSurface->destroySurface(this); } @@ -91,7 +91,7 @@ CHyprlandSurfaceProtocol::CHyprlandSurfaceProtocol(const wl_interface* iface, co } void CHyprlandSurfaceProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - auto manager = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + auto manager = m_managers.emplace_back(makeUnique(client, ver, id)).get(); manager->setOnDestroy([this](CHyprlandSurfaceManagerV1* manager) { destroyManager(manager); }); manager->setDestroy([this](CHyprlandSurfaceManagerV1* manager) { destroyManager(manager); }); @@ -100,19 +100,19 @@ void CHyprlandSurfaceProtocol::bindManager(wl_client* client, void* data, uint32 } void CHyprlandSurfaceProtocol::destroyManager(CHyprlandSurfaceManagerV1* manager) { - std::erase_if(m_vManagers, [&](const auto& p) { return p.get() == manager; }); + std::erase_if(m_managers, [&](const auto& p) { return p.get() == manager; }); } void CHyprlandSurfaceProtocol::destroySurface(CHyprlandSurface* surface) { - std::erase_if(m_mSurfaces, [&](const auto& entry) { return entry.second.get() == surface; }); + std::erase_if(m_surfaces, [&](const auto& entry) { return entry.second.get() == surface; }); } void CHyprlandSurfaceProtocol::getSurface(CHyprlandSurfaceManagerV1* manager, uint32_t id, SP surface) { CHyprlandSurface* hyprlandSurface = nullptr; - auto iter = std::find_if(m_mSurfaces.begin(), m_mSurfaces.end(), [&](const auto& entry) { return entry.second->m_pSurface == surface; }); + auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [&](const auto& entry) { return entry.second->m_surface == surface; }); - if (iter != m_mSurfaces.end()) { - if (iter->second->m_pResource) { + if (iter != m_surfaces.end()) { + if (iter->second->m_resource) { LOGM(ERR, "HyprlandSurface already present for surface {:x}", (uintptr_t)surface.get()); manager->error(HYPRLAND_SURFACE_MANAGER_V1_ERROR_ALREADY_CONSTRUCTED, "HyprlandSurface already present"); return; @@ -122,11 +122,11 @@ void CHyprlandSurfaceProtocol::getSurface(CHyprlandSurfaceManagerV1* manager, ui } } else { hyprlandSurface = - m_mSurfaces.emplace(surface, makeUnique(makeShared(manager->client(), manager->version(), id), surface)).first->second.get(); + m_surfaces.emplace(surface, makeUnique(makeShared(manager->client(), manager->version(), id), surface)).first->second.get(); } if UNLIKELY (!hyprlandSurface->good()) { manager->noMemory(); - m_mSurfaces.erase(surface); + m_surfaces.erase(surface); } } diff --git a/src/protocols/HyprlandSurface.hpp b/src/protocols/HyprlandSurface.hpp index 5c1181c4..5402e916 100644 --- a/src/protocols/HyprlandSurface.hpp +++ b/src/protocols/HyprlandSurface.hpp @@ -18,10 +18,10 @@ class CHyprlandSurface { void setResource(SP resource); private: - SP m_pResource; - WP m_pSurface; - float m_fOpacity = 1.0; - bool m_bVisibleRegionChanged = false; + SP m_resource; + WP m_surface; + float m_opacity = 1.0; + bool m_visibleRegionChanged = false; CRegion m_visibleRegion; void destroy(); @@ -29,7 +29,7 @@ class CHyprlandSurface { struct { CHyprSignalListener surfaceCommitted; CHyprSignalListener surfaceDestroyed; - } listeners; + } m_listeners; friend class CHyprlandSurfaceProtocol; }; @@ -45,8 +45,8 @@ class CHyprlandSurfaceProtocol : public IWaylandProtocol { void destroySurface(CHyprlandSurface* surface); void getSurface(CHyprlandSurfaceManagerV1* manager, uint32_t id, SP surface); - std::vector> m_vManagers; - std::unordered_map, UP> m_mSurfaces; + std::vector> m_managers; + std::unordered_map, UP> m_surfaces; friend class CHyprlandSurface; }; diff --git a/src/protocols/IdleInhibit.cpp b/src/protocols/IdleInhibit.cpp index b8ba01e2..f8031d22 100644 --- a/src/protocols/IdleInhibit.cpp +++ b/src/protocols/IdleInhibit.cpp @@ -1,25 +1,25 @@ #include "IdleInhibit.hpp" #include "core/Compositor.hpp" -CIdleInhibitor::CIdleInhibitor(SP resource_, SP surf_) : resource(resource_), surface(surf_) { +CIdleInhibitor::CIdleInhibitor(SP resource_, SP surf_) : m_resource(resource_), m_surface(surf_) { ; } -CIdleInhibitorResource::CIdleInhibitorResource(SP resource_, SP surface_) : resource(resource_), surface(surface_) { - listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { - surface.reset(); - listeners.destroySurface.reset(); - destroySent = true; - events.destroy.emit(); +CIdleInhibitorResource::CIdleInhibitorResource(SP resource_, SP surface_) : m_resource(resource_), m_surface(surface_) { + m_listeners.destroySurface = m_surface->m_events.destroy.registerListener([this](std::any d) { + m_surface.reset(); + m_listeners.destroySurface.reset(); + m_destroySent = true; + m_events.destroy.emit(); }); - resource->setOnDestroy([this](CZwpIdleInhibitorV1* p) { PROTO::idleInhibit->removeInhibitor(this); }); - resource->setDestroy([this](CZwpIdleInhibitorV1* p) { PROTO::idleInhibit->removeInhibitor(this); }); + m_resource->setOnDestroy([this](CZwpIdleInhibitorV1* p) { PROTO::idleInhibit->removeInhibitor(this); }); + m_resource->setDestroy([this](CZwpIdleInhibitorV1* p) { PROTO::idleInhibit->removeInhibitor(this); }); } CIdleInhibitorResource::~CIdleInhibitorResource() { - if (!destroySent) - events.destroy.emit(); + if (!m_destroySent) + m_events.destroy.emit(); } CIdleInhibitProtocol::CIdleInhibitProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -27,11 +27,11 @@ CIdleInhibitProtocol::CIdleInhibitProtocol(const wl_interface* iface, const int& } void CIdleInhibitProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [res](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [res](const auto& other) { return other->resource() == res; }); } void CIdleInhibitProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpIdleInhibitManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpIdleInhibitManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -40,13 +40,13 @@ void CIdleInhibitProtocol::bindManager(wl_client* client, void* data, uint32_t v } void CIdleInhibitProtocol::removeInhibitor(CIdleInhibitorResource* resource) { - std::erase_if(m_vInhibitors, [resource](const auto& el) { return el.get() == resource; }); + std::erase_if(m_inhibitors, [resource](const auto& el) { return el.get() == resource; }); } void CIdleInhibitProtocol::onCreateInhibitor(CZwpIdleInhibitManagerV1* pMgr, uint32_t id, SP surface) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vInhibitors.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), surface)); + const auto RESOURCE = m_inhibitors.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), surface)); - RESOURCE->inhibitor = makeShared(RESOURCE, surface); - events.newIdleInhibitor.emit(RESOURCE->inhibitor); + RESOURCE->m_inhibitor = makeShared(RESOURCE, surface); + m_events.newIdleInhibitor.emit(RESOURCE->m_inhibitor); } \ No newline at end of file diff --git a/src/protocols/IdleInhibit.hpp b/src/protocols/IdleInhibit.hpp index 2e024a7a..791d83f9 100644 --- a/src/protocols/IdleInhibit.hpp +++ b/src/protocols/IdleInhibit.hpp @@ -14,10 +14,10 @@ class CIdleInhibitor { struct { CHyprSignalListener destroy; - } listeners; + } m_listeners; - WP resource; - WP surface; + WP m_resource; + WP m_surface; }; class CIdleInhibitorResource { @@ -25,20 +25,20 @@ class CIdleInhibitorResource { CIdleInhibitorResource(SP resource_, SP surface_); ~CIdleInhibitorResource(); - SP inhibitor; + SP m_inhibitor; struct { CSignal destroy; - } events; + } m_events; private: - SP resource; - WP surface; - bool destroySent = false; + SP m_resource; + WP m_surface; + bool m_destroySent = false; struct { CHyprSignalListener destroySurface; - } listeners; + } m_listeners; }; class CIdleInhibitProtocol : public IWaylandProtocol { @@ -49,7 +49,7 @@ class CIdleInhibitProtocol : public IWaylandProtocol { struct { CSignal newIdleInhibitor; // data: SP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -58,8 +58,8 @@ class CIdleInhibitProtocol : public IWaylandProtocol { void removeInhibitor(CIdleInhibitorResource*); // - std::vector> m_vManagers; - std::vector> m_vInhibitors; + std::vector> m_managers; + std::vector> m_inhibitors; friend class CIdleInhibitorResource; }; diff --git a/src/protocols/IdleNotify.cpp b/src/protocols/IdleNotify.cpp index 14a5f3e1..82bd59b1 100644 --- a/src/protocols/IdleNotify.cpp +++ b/src/protocols/IdleNotify.cpp @@ -11,15 +11,15 @@ static int onTimer(SP self, void* data) { } CExtIdleNotification::CExtIdleNotification(SP resource_, uint32_t timeoutMs_, bool obeyInhibitors_) : - resource(resource_), timeoutMs(timeoutMs_), obeyInhibitors(obeyInhibitors_) { + m_resource(resource_), m_timeoutMs(timeoutMs_), m_obeyInhibitors(obeyInhibitors_) { if UNLIKELY (!resource_->resource()) return; - resource->setDestroy([this](CExtIdleNotificationV1* r) { PROTO::idle->destroyNotification(this); }); - resource->setOnDestroy([this](CExtIdleNotificationV1* r) { PROTO::idle->destroyNotification(this); }); + m_resource->setDestroy([this](CExtIdleNotificationV1* r) { PROTO::idle->destroyNotification(this); }); + m_resource->setOnDestroy([this](CExtIdleNotificationV1* r) { PROTO::idle->destroyNotification(this); }); - timer = makeShared(std::nullopt, onTimer, this); - g_pEventLoopManager->addTimer(timer); + m_timer = makeShared(std::nullopt, onTimer, this); + g_pEventLoopManager->addTimer(m_timer); updateTimer(); @@ -27,36 +27,36 @@ CExtIdleNotification::CExtIdleNotification(SP resource_, } CExtIdleNotification::~CExtIdleNotification() { - g_pEventLoopManager->removeTimer(timer); - timer.reset(); + g_pEventLoopManager->removeTimer(m_timer); + m_timer.reset(); } bool CExtIdleNotification::good() { - return resource->resource(); + return m_resource->resource(); } void CExtIdleNotification::updateTimer() { - if (PROTO::idle->isInhibited && obeyInhibitors) - timer->updateTimeout(std::nullopt); + if (PROTO::idle->isInhibited && m_obeyInhibitors) + m_timer->updateTimeout(std::nullopt); else - timer->updateTimeout(std::chrono::milliseconds(timeoutMs)); + m_timer->updateTimeout(std::chrono::milliseconds(m_timeoutMs)); } void CExtIdleNotification::onTimerFired() { - resource->sendIdled(); - idled = true; + m_resource->sendIdled(); + m_idled = true; } void CExtIdleNotification::onActivity() { - if (idled) - resource->sendResumed(); + if (m_idled) + m_resource->sendResumed(); - idled = false; + m_idled = false; updateTimer(); } bool CExtIdleNotification::inhibitorsAreObeyed() const { - return obeyInhibitors; + return m_obeyInhibitors; } CIdleNotifyProtocol::CIdleNotifyProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -64,7 +64,7 @@ CIdleNotifyProtocol::CIdleNotifyProtocol(const wl_interface* iface, const int& v } void CIdleNotifyProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CExtIdleNotifierV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CExtIdleNotifierV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -75,34 +75,34 @@ void CIdleNotifyProtocol::bindManager(wl_client* client, void* data, uint32_t ve } void CIdleNotifyProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CIdleNotifyProtocol::destroyNotification(CExtIdleNotification* notif) { - std::erase_if(m_vNotifications, [&](const auto& other) { return other.get() == notif; }); + std::erase_if(m_notifications, [&](const auto& other) { return other.get() == notif; }); } void CIdleNotifyProtocol::onGetNotification(CExtIdleNotifierV1* pMgr, uint32_t id, uint32_t timeout, wl_resource* seat, bool obeyInhibitors) { const auto CLIENT = pMgr->client(); const auto RESOURCE = - m_vNotifications.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), timeout, obeyInhibitors)).get(); + m_notifications.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), timeout, obeyInhibitors)).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vNotifications.pop_back(); + m_notifications.pop_back(); return; } } void CIdleNotifyProtocol::onActivity() { - for (auto const& n : m_vNotifications) { + for (auto const& n : m_notifications) { n->onActivity(); } } void CIdleNotifyProtocol::setInhibit(bool inhibited) { isInhibited = inhibited; - for (auto const& n : m_vNotifications) { + for (auto const& n : m_notifications) { if (n->inhibitorsAreObeyed()) n->onActivity(); } diff --git a/src/protocols/IdleNotify.hpp b/src/protocols/IdleNotify.hpp index efc3accc..02b59e65 100644 --- a/src/protocols/IdleNotify.hpp +++ b/src/protocols/IdleNotify.hpp @@ -19,12 +19,12 @@ class CExtIdleNotification { bool inhibitorsAreObeyed() const; private: - SP resource; - uint32_t timeoutMs = 0; - SP timer; + SP m_resource; + uint32_t m_timeoutMs = 0; + SP m_timer; - bool idled = false; - bool obeyInhibitors = false; + bool m_idled = false; + bool m_obeyInhibitors = false; void updateTimer(); }; @@ -46,8 +46,8 @@ class CIdleNotifyProtocol : public IWaylandProtocol { bool isInhibited = false; // - std::vector> m_vManagers; - std::vector> m_vNotifications; + std::vector> m_managers; + std::vector> m_notifications; friend class CExtIdleNotification; }; diff --git a/src/protocols/InputMethodV2.cpp b/src/protocols/InputMethodV2.cpp index ae575250..63f9f33f 100644 --- a/src/protocols/InputMethodV2.cpp +++ b/src/protocols/InputMethodV2.cpp @@ -6,12 +6,12 @@ #include "core/Compositor.hpp" #include -CInputMethodKeyboardGrabV2::CInputMethodKeyboardGrabV2(SP resource_, SP owner_) : resource(resource_), owner(owner_) { - if UNLIKELY (!resource->resource()) +CInputMethodKeyboardGrabV2::CInputMethodKeyboardGrabV2(SP resource_, SP owner_) : m_resource(resource_), m_owner(owner_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setRelease([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); - resource->setOnDestroy([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); + m_resource->setRelease([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); }); if (!g_pSeatManager->m_keyboard) { LOGM(ERR, "IME called but no active keyboard???"); @@ -22,16 +22,16 @@ CInputMethodKeyboardGrabV2::CInputMethodKeyboardGrabV2(SPgrabs, [](const auto& g) { return g.expired(); }); + if (!m_owner.expired()) + std::erase_if(m_owner->m_grabs, [](const auto& g) { return g.expired(); }); } void CInputMethodKeyboardGrabV2::sendKeyboardData(SP keyboard) { - if (keyboard == pLastKeyboard) + if (keyboard == m_lastKeyboard) return; - pLastKeyboard = keyboard; + m_lastKeyboard = keyboard; auto keymapFD = allocateSHMFile(keyboard->m_xkbKeymapString.length() + 1); if UNLIKELY (!keymapFD.isValid()) { @@ -48,95 +48,96 @@ void CInputMethodKeyboardGrabV2::sendKeyboardData(SP keyboard) { memcpy(data, keyboard->m_xkbKeymapString.c_str(), keyboard->m_xkbKeymapString.length()); munmap(data, keyboard->m_xkbKeymapString.length() + 1); - resource->sendKeymap(WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymapFD.get(), keyboard->m_xkbKeymapString.length() + 1); + m_resource->sendKeymap(WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymapFD.get(), keyboard->m_xkbKeymapString.length() + 1); sendMods(keyboard->m_modifiersState.depressed, keyboard->m_modifiersState.latched, keyboard->m_modifiersState.locked, keyboard->m_modifiersState.group); - resource->sendRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay); + m_resource->sendRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay); } void CInputMethodKeyboardGrabV2::sendKey(uint32_t time, uint32_t key, wl_keyboard_key_state state) { - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(resource->client())); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(m_resource->client())); - resource->sendKey(SERIAL, time, key, (uint32_t)state); + m_resource->sendKey(SERIAL, time, key, (uint32_t)state); } void CInputMethodKeyboardGrabV2::sendMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(resource->client())); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(m_resource->client())); - resource->sendModifiers(SERIAL, depressed, latched, locked, group); + m_resource->sendModifiers(SERIAL, depressed, latched, locked, group); } bool CInputMethodKeyboardGrabV2::good() { - return resource->resource(); + return m_resource->resource(); } SP CInputMethodKeyboardGrabV2::getOwner() { - return owner.lock(); + return m_owner.lock(); } wl_client* CInputMethodKeyboardGrabV2::client() { - return resource->resource() ? resource->client() : nullptr; + return m_resource->resource() ? m_resource->client() : nullptr; } -CInputMethodPopupV2::CInputMethodPopupV2(SP resource_, SP owner_, SP surface) : resource(resource_), owner(owner_) { - if UNLIKELY (!resource->resource()) +CInputMethodPopupV2::CInputMethodPopupV2(SP resource_, SP owner_, SP surface) : + m_resource(resource_), m_owner(owner_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CZwpInputPopupSurfaceV2* r) { PROTO::ime->destroyResource(this); }); - resource->setOnDestroy([this](CZwpInputPopupSurfaceV2* r) { PROTO::ime->destroyResource(this); }); + m_resource->setDestroy([this](CZwpInputPopupSurfaceV2* r) { PROTO::ime->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpInputPopupSurfaceV2* r) { PROTO::ime->destroyResource(this); }); - pSurface = surface; + m_surface = surface; - listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { - if (mapped) - events.unmap.emit(); + m_listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { + if (m_mapped) + m_events.unmap.emit(); - listeners.destroySurface.reset(); - listeners.commitSurface.reset(); + m_listeners.destroySurface.reset(); + m_listeners.commitSurface.reset(); - if (g_pCompositor->m_lastFocus == pSurface) + if (g_pCompositor->m_lastFocus == m_surface) g_pCompositor->m_lastFocus.reset(); - pSurface.reset(); + m_surface.reset(); }); - listeners.commitSurface = surface->m_events.commit.registerListener([this](std::any d) { - if (pSurface->m_current.texture && !mapped) { - mapped = true; - pSurface->map(); - events.map.emit(); + m_listeners.commitSurface = surface->m_events.commit.registerListener([this](std::any d) { + if (m_surface->m_current.texture && !m_mapped) { + m_mapped = true; + m_surface->map(); + m_events.map.emit(); return; } - if (!pSurface->m_current.texture && mapped) { - mapped = false; - pSurface->unmap(); - events.unmap.emit(); + if (!m_surface->m_current.texture && m_mapped) { + m_mapped = false; + m_surface->unmap(); + m_events.unmap.emit(); return; } - events.commit.emit(); + m_events.commit.emit(); }); } CInputMethodPopupV2::~CInputMethodPopupV2() { - if (!owner.expired()) - std::erase_if(owner->popups, [](const auto& p) { return p.expired(); }); + if (!m_owner.expired()) + std::erase_if(m_owner->m_popups, [](const auto& p) { return p.expired(); }); - events.destroy.emit(); + m_events.destroy.emit(); } bool CInputMethodPopupV2::good() { - return resource->resource(); + return m_resource->resource(); } void CInputMethodPopupV2::sendInputRectangle(const CBox& box) { - resource->sendTextInputRectangle(box.x, box.y, box.w, box.h); + m_resource->sendTextInputRectangle(box.x, box.y, box.w, box.h); } SP CInputMethodPopupV2::surface() { - return pSurface.lock(); + return m_surface.lock(); } void CInputMethodV2::SState::reset() { @@ -145,127 +146,127 @@ void CInputMethodV2::SState::reset() { preeditString.committed = false; } -CInputMethodV2::CInputMethodV2(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CInputMethodV2::CInputMethodV2(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CZwpInputMethodV2* r) { - events.destroy.emit(); + m_resource->setDestroy([this](CZwpInputMethodV2* r) { + m_events.destroy.emit(); PROTO::ime->destroyResource(this); }); - resource->setOnDestroy([this](CZwpInputMethodV2* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CZwpInputMethodV2* r) { + m_events.destroy.emit(); PROTO::ime->destroyResource(this); }); - resource->setCommitString([this](CZwpInputMethodV2* r, const char* str) { - pending.committedString.string = str; - pending.committedString.committed = true; + m_resource->setCommitString([this](CZwpInputMethodV2* r, const char* str) { + m_pending.committedString.string = str; + m_pending.committedString.committed = true; }); - resource->setDeleteSurroundingText([this](CZwpInputMethodV2* r, uint32_t before, uint32_t after) { - pending.deleteSurrounding.before = before; - pending.deleteSurrounding.after = after; - pending.deleteSurrounding.committed = true; + m_resource->setDeleteSurroundingText([this](CZwpInputMethodV2* r, uint32_t before, uint32_t after) { + m_pending.deleteSurrounding.before = before; + m_pending.deleteSurrounding.after = after; + m_pending.deleteSurrounding.committed = true; }); - resource->setSetPreeditString([this](CZwpInputMethodV2* r, const char* str, int32_t begin, int32_t end) { - pending.preeditString.string = str; - pending.preeditString.begin = begin; - pending.preeditString.end = end; - pending.preeditString.committed = true; + m_resource->setSetPreeditString([this](CZwpInputMethodV2* r, const char* str, int32_t begin, int32_t end) { + m_pending.preeditString.string = str; + m_pending.preeditString.begin = begin; + m_pending.preeditString.end = end; + m_pending.preeditString.committed = true; }); - resource->setCommit([this](CZwpInputMethodV2* r, uint32_t serial) { - current = pending; - pending.reset(); - events.onCommit.emit(); + m_resource->setCommit([this](CZwpInputMethodV2* r, uint32_t serial) { + m_current = m_pending; + m_pending.reset(); + m_events.onCommit.emit(); }); - resource->setGetInputPopupSurface([this](CZwpInputMethodV2* r, uint32_t id, wl_resource* surface) { - const auto RESOURCE = PROTO::ime->m_vPopups.emplace_back( - makeShared(makeShared(r->client(), r->version(), id), self.lock(), CWLSurfaceResource::fromResource(surface))); + m_resource->setGetInputPopupSurface([this](CZwpInputMethodV2* r, uint32_t id, wl_resource* surface) { + const auto RESOURCE = PROTO::ime->m_popups.emplace_back( + makeShared(makeShared(r->client(), r->version(), id), m_self.lock(), CWLSurfaceResource::fromResource(surface))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::ime->m_vPopups.pop_back(); + PROTO::ime->m_popups.pop_back(); return; } LOGM(LOG, "New IME Popup with resource id {}", id); - popups.emplace_back(RESOURCE); + m_popups.emplace_back(RESOURCE); - events.newPopup.emit(RESOURCE); + m_events.newPopup.emit(RESOURCE); }); - resource->setGrabKeyboard([this](CZwpInputMethodV2* r, uint32_t id) { + m_resource->setGrabKeyboard([this](CZwpInputMethodV2* r, uint32_t id) { const auto RESOURCE = - PROTO::ime->m_vGrabs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + PROTO::ime->m_grabs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::ime->m_vGrabs.pop_back(); + PROTO::ime->m_grabs.pop_back(); return; } LOGM(LOG, "New IME Grab with resource id {}", id); - grabs.emplace_back(RESOURCE); + m_grabs.emplace_back(RESOURCE); }); } CInputMethodV2::~CInputMethodV2() { - events.destroy.emit(); + m_events.destroy.emit(); } bool CInputMethodV2::good() { - return resource->resource(); + return m_resource->resource(); } void CInputMethodV2::activate() { - if (active) + if (m_active) return; - resource->sendActivate(); - active = true; + m_resource->sendActivate(); + m_active = true; } void CInputMethodV2::deactivate() { - if (!active) + if (!m_active) return; - resource->sendDeactivate(); - active = false; + m_resource->sendDeactivate(); + m_active = false; } void CInputMethodV2::surroundingText(const std::string& text, uint32_t cursor, uint32_t anchor) { - resource->sendSurroundingText(text.c_str(), cursor, anchor); + m_resource->sendSurroundingText(text.c_str(), cursor, anchor); } void CInputMethodV2::textChangeCause(zwpTextInputV3ChangeCause changeCause) { - resource->sendTextChangeCause((uint32_t)changeCause); + m_resource->sendTextChangeCause((uint32_t)changeCause); } void CInputMethodV2::textContentType(zwpTextInputV3ContentHint hint, zwpTextInputV3ContentPurpose purpose) { - resource->sendContentType((uint32_t)hint, (uint32_t)purpose); + m_resource->sendContentType((uint32_t)hint, (uint32_t)purpose); } void CInputMethodV2::done() { - resource->sendDone(); + m_resource->sendDone(); } void CInputMethodV2::unavailable() { - resource->sendUnavailable(); + m_resource->sendUnavailable(); } bool CInputMethodV2::hasGrab() { - return !grabs.empty(); + return !m_grabs.empty(); } wl_client* CInputMethodV2::grabClient() { - if (grabs.empty()) + if (m_grabs.empty()) return nullptr; - for (auto const& gw : grabs) { + for (auto const& gw : m_grabs) { auto g = gw.lock(); if (!g) @@ -278,19 +279,19 @@ wl_client* CInputMethodV2::grabClient() { } void CInputMethodV2::sendInputRectangle(const CBox& box) { - inputRectangle = box; - for (auto const& wp : popups) { + m_inputRectangle = box; + for (auto const& wp : m_popups) { auto p = wp.lock(); if (!p) continue; - p->sendInputRectangle(inputRectangle); + p->sendInputRectangle(m_inputRectangle); } } void CInputMethodV2::sendKey(uint32_t time, uint32_t key, wl_keyboard_key_state state) { - for (auto const& gw : grabs) { + for (auto const& gw : m_grabs) { auto g = gw.lock(); if (!g) @@ -301,7 +302,7 @@ void CInputMethodV2::sendKey(uint32_t time, uint32_t key, wl_keyboard_key_state } void CInputMethodV2::sendMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - for (auto const& gw : grabs) { + for (auto const& gw : m_grabs) { auto g = gw.lock(); if (!g) @@ -312,7 +313,7 @@ void CInputMethodV2::sendMods(uint32_t depressed, uint32_t latched, uint32_t loc } void CInputMethodV2::setKeyboard(SP keyboard) { - for (auto const& gw : grabs) { + for (auto const& gw : m_grabs) { auto g = gw.lock(); if (!g) @@ -323,7 +324,7 @@ void CInputMethodV2::setKeyboard(SP keyboard) { } wl_client* CInputMethodV2::client() { - return resource->client(); + return m_resource->client(); } CInputMethodV2Protocol::CInputMethodV2Protocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -331,7 +332,7 @@ CInputMethodV2Protocol::CInputMethodV2Protocol(const wl_interface* iface, const } void CInputMethodV2Protocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpInputMethodManagerV2* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpInputMethodManagerV2* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -339,33 +340,33 @@ void CInputMethodV2Protocol::bindManager(wl_client* client, void* data, uint32_t } void CInputMethodV2Protocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CInputMethodV2Protocol::destroyResource(CInputMethodPopupV2* popup) { - std::erase_if(m_vPopups, [&](const auto& other) { return other.get() == popup; }); + std::erase_if(m_popups, [&](const auto& other) { return other.get() == popup; }); } void CInputMethodV2Protocol::destroyResource(CInputMethodKeyboardGrabV2* grab) { - std::erase_if(m_vGrabs, [&](const auto& other) { return other.get() == grab; }); + std::erase_if(m_grabs, [&](const auto& other) { return other.get() == grab; }); } void CInputMethodV2Protocol::destroyResource(CInputMethodV2* ime) { - std::erase_if(m_vIMEs, [&](const auto& other) { return other.get() == ime; }); + std::erase_if(m_imes, [&](const auto& other) { return other.get() == ime; }); } void CInputMethodV2Protocol::onGetIME(CZwpInputMethodManagerV2* mgr, wl_resource* seat, uint32_t id) { - const auto RESOURCE = m_vIMEs.emplace_back(makeShared(makeShared(mgr->client(), mgr->version(), id))); + const auto RESOURCE = m_imes.emplace_back(makeShared(makeShared(mgr->client(), mgr->version(), id))); if UNLIKELY (!RESOURCE->good()) { mgr->noMemory(); - m_vIMEs.pop_back(); + m_imes.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "New IME with resource id {}", id); - events.newIME.emit(RESOURCE); + m_events.newIME.emit(RESOURCE); } diff --git a/src/protocols/InputMethodV2.hpp b/src/protocols/InputMethodV2.hpp index 0c249c6c..74efcbb3 100644 --- a/src/protocols/InputMethodV2.hpp +++ b/src/protocols/InputMethodV2.hpp @@ -21,7 +21,7 @@ class CInputMethodV2 { CSignal onCommit; CSignal destroy; CSignal newPopup; - } events; + } m_events; struct SState { void reset(); @@ -43,7 +43,8 @@ class CInputMethodV2 { } deleteSurrounding; }; - SState pending, current; + SState m_pending; + SState m_current; bool good(); void activate(); @@ -64,15 +65,15 @@ class CInputMethodV2 { wl_client* grabClient(); private: - SP resource; - std::vector> grabs; - std::vector> popups; + SP m_resource; + std::vector> m_grabs; + std::vector> m_popups; - WP self; + WP m_self; - bool active = false; + bool m_active = false; - CBox inputRectangle; + CBox m_inputRectangle; friend class CInputMethodPopupV2; friend class CInputMethodKeyboardGrabV2; @@ -93,10 +94,10 @@ class CInputMethodKeyboardGrabV2 { void sendKeyboardData(SP keyboard); private: - SP resource; - WP owner; + SP m_resource; + WP m_owner; - WP pLastKeyboard; + WP m_lastKeyboard; }; class CInputMethodPopupV2 { @@ -113,19 +114,19 @@ class CInputMethodPopupV2 { CSignal unmap; CSignal commit; CSignal destroy; - } events; + } m_events; - bool mapped = false; + bool m_mapped = false; private: - SP resource; - WP owner; - WP pSurface; + SP m_resource; + WP m_owner; + WP m_surface; struct { CHyprSignalListener destroySurface; CHyprSignalListener commitSurface; - } listeners; + } m_listeners; }; class CInputMethodV2Protocol : public IWaylandProtocol { @@ -136,7 +137,7 @@ class CInputMethodV2Protocol : public IWaylandProtocol { struct { CSignal newIME; // SP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -147,10 +148,10 @@ class CInputMethodV2Protocol : public IWaylandProtocol { void onGetIME(CZwpInputMethodManagerV2* mgr, wl_resource* seat, uint32_t id); // - std::vector> m_vManagers; - std::vector> m_vIMEs; - std::vector> m_vGrabs; - std::vector> m_vPopups; + std::vector> m_managers; + std::vector> m_imes; + std::vector> m_grabs; + std::vector> m_popups; friend class CInputMethodPopupV2; friend class CInputMethodKeyboardGrabV2; diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index bc4112fa..1f37f622 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -17,107 +17,107 @@ void CLayerShellResource::SState::reset() { } CLayerShellResource::CLayerShellResource(SP resource_, SP surf_, std::string namespace_, PHLMONITOR pMonitor, - zwlrLayerShellV1Layer layer) : layerNamespace(namespace_), surface(surf_), resource(resource_) { + zwlrLayerShellV1Layer layer) : m_layerNamespace(namespace_), m_surface(surf_), m_resource(resource_) { if UNLIKELY (!good()) return; - current.layer = layer; - monitor = pMonitor ? pMonitor->m_name : ""; + m_current.layer = layer; + m_monitor = pMonitor ? pMonitor->m_name : ""; - resource->setDestroy([this](CZwlrLayerSurfaceV1* r) { - events.destroy.emit(); + m_resource->setDestroy([this](CZwlrLayerSurfaceV1* r) { + m_events.destroy.emit(); PROTO::layerShell->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrLayerSurfaceV1* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CZwlrLayerSurfaceV1* r) { + m_events.destroy.emit(); PROTO::layerShell->destroyResource(this); }); - listeners.destroySurface = surf_->m_events.destroy.registerListener([this](std::any d) { - events.destroy.emit(); + m_listeners.destroySurface = surf_->m_events.destroy.registerListener([this](std::any d) { + m_events.destroy.emit(); PROTO::layerShell->destroyResource(this); }); - listeners.unmapSurface = surf_->m_events.unmap.registerListener([this](std::any d) { events.unmap.emit(); }); + m_listeners.unmapSurface = surf_->m_events.unmap.registerListener([this](std::any d) { m_events.unmap.emit(); }); - listeners.commitSurface = surf_->m_events.commit.registerListener([this](std::any d) { - current = pending; - pending.committed = 0; + m_listeners.commitSurface = surf_->m_events.commit.registerListener([this](std::any d) { + m_current = m_pending; + m_pending.committed = 0; - bool attachedBuffer = surface->m_current.texture; + bool attachedBuffer = m_surface->m_current.texture; - if (attachedBuffer && !configured) { - surface->error(-1, "layerSurface was not configured, but a buffer was attached"); + if (attachedBuffer && !m_configured) { + m_surface->error(-1, "layerSurface was not configured, but a buffer was attached"); return; } constexpr uint32_t horiz = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; constexpr uint32_t vert = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM; - if (current.desiredSize.x <= 0 && (current.anchor & horiz) != horiz) { - surface->error(-1, "x == 0 but anchor doesn't have left and right"); + if (m_current.desiredSize.x <= 0 && (m_current.anchor & horiz) != horiz) { + m_surface->error(-1, "x == 0 but anchor doesn't have left and right"); return; } - if (current.desiredSize.y <= 0 && (current.anchor & vert) != vert) { - surface->error(-1, "y == 0 but anchor doesn't have top and bottom"); + if (m_current.desiredSize.y <= 0 && (m_current.anchor & vert) != vert) { + m_surface->error(-1, "y == 0 but anchor doesn't have top and bottom"); return; } - if (attachedBuffer && !mapped) { - mapped = true; - surface->map(); - events.map.emit(); + if (attachedBuffer && !m_mapped) { + m_mapped = true; + m_surface->map(); + m_events.map.emit(); return; } - if (!attachedBuffer && mapped) { - mapped = false; - events.unmap.emit(); - surface->unmap(); - configured = false; + if (!attachedBuffer && m_mapped) { + m_mapped = false; + m_events.unmap.emit(); + m_surface->unmap(); + m_configured = false; return; } - events.commit.emit(); + m_events.commit.emit(); }); - resource->setSetSize([this](CZwlrLayerSurfaceV1* r, uint32_t x, uint32_t y) { - pending.committed |= STATE_SIZE; - pending.desiredSize = {(int)x, (int)y}; + m_resource->setSetSize([this](CZwlrLayerSurfaceV1* r, uint32_t x, uint32_t y) { + m_pending.committed |= STATE_SIZE; + m_pending.desiredSize = {(int)x, (int)y}; }); - resource->setSetAnchor([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1Anchor anchor) { + m_resource->setSetAnchor([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1Anchor anchor) { if (anchor > (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT)) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR, "Invalid anchor"); return; } - pending.committed |= STATE_ANCHOR; - pending.anchor = anchor; + m_pending.committed |= STATE_ANCHOR; + m_pending.anchor = anchor; }); - resource->setSetExclusiveZone([this](CZwlrLayerSurfaceV1* r, int32_t zone) { - pending.committed |= STATE_EXCLUSIVE; - pending.exclusive = zone; + m_resource->setSetExclusiveZone([this](CZwlrLayerSurfaceV1* r, int32_t zone) { + m_pending.committed |= STATE_EXCLUSIVE; + m_pending.exclusive = zone; }); - resource->setSetMargin([this](CZwlrLayerSurfaceV1* r, int32_t top, int32_t right, int32_t bottom, int32_t left) { - pending.committed |= STATE_MARGIN; - pending.margin = {left, right, top, bottom}; + m_resource->setSetMargin([this](CZwlrLayerSurfaceV1* r, int32_t top, int32_t right, int32_t bottom, int32_t left) { + m_pending.committed |= STATE_MARGIN; + m_pending.margin = {left, right, top, bottom}; }); - resource->setSetKeyboardInteractivity([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1KeyboardInteractivity kbi) { + m_resource->setSetKeyboardInteractivity([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1KeyboardInteractivity kbi) { if (kbi > ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY, "Invalid keyboard interactivity"); return; } - pending.committed |= STATE_INTERACTIVITY; - pending.interactivity = kbi; + m_pending.committed |= STATE_INTERACTIVITY; + m_pending.interactivity = kbi; }); - resource->setGetPopup([this](CZwlrLayerSurfaceV1* r, wl_resource* popup_) { + m_resource->setGetPopup([this](CZwlrLayerSurfaceV1* r, wl_resource* popup_) { auto popup = CXDGPopupResource::fromResource(popup_); if (popup->taken) { @@ -126,74 +126,74 @@ CLayerShellResource::CLayerShellResource(SP resource_, SPtaken = true; - events.newPopup.emit(popup); + m_events.newPopup.emit(popup); }); - resource->setAckConfigure([this](CZwlrLayerSurfaceV1* r, uint32_t serial) { - auto serialFound = std::find_if(serials.begin(), serials.end(), [serial](const auto& e) { return e.first == serial; }); + m_resource->setAckConfigure([this](CZwlrLayerSurfaceV1* r, uint32_t serial) { + auto serialFound = std::find_if(m_serials.begin(), m_serials.end(), [serial](const auto& e) { return e.first == serial; }); - if (serialFound == serials.end()) { + if (serialFound == m_serials.end()) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE, "Serial invalid in ack_configure"); return; } - configured = true; - size = serialFound->second; + m_configured = true; + m_size = serialFound->second; - serials.erase(serialFound); + m_serials.erase(serialFound); }); - resource->setSetLayer([this](CZwlrLayerSurfaceV1* r, uint32_t layer) { + m_resource->setSetLayer([this](CZwlrLayerSurfaceV1* r, uint32_t layer) { if (layer > ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY) { r->error(ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER, "Invalid layer"); return; } - pending.committed |= STATE_LAYER; - pending.layer = (zwlrLayerShellV1Layer)layer; + m_pending.committed |= STATE_LAYER; + m_pending.layer = (zwlrLayerShellV1Layer)layer; }); - resource->setSetExclusiveEdge([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1Anchor anchor) { + m_resource->setSetExclusiveEdge([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1Anchor anchor) { if (anchor > (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT)) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE, "Invalid exclusive edge"); return; } - if (anchor && (!pending.anchor || !(pending.anchor & anchor))) { + if (anchor && (!m_pending.anchor || !(m_pending.anchor & anchor))) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE, "Exclusive edge doesn't align with anchor"); return; } - pending.committed |= STATE_EDGE; - pending.exclusiveEdge = anchor; + m_pending.committed |= STATE_EDGE; + m_pending.exclusiveEdge = anchor; }); } CLayerShellResource::~CLayerShellResource() { - events.destroy.emit(); - if (surface) - surface->resetRole(); + m_events.destroy.emit(); + if (m_surface) + m_surface->resetRole(); } bool CLayerShellResource::good() { - return resource->resource(); + return m_resource->resource(); } void CLayerShellResource::sendClosed() { - if (closed) + if (m_closed) return; - closed = true; - resource->sendClosed(); + m_closed = true; + m_resource->sendClosed(); } void CLayerShellResource::configure(const Vector2D& size_) { - size = size_; + m_size = size_; auto serial = wl_display_next_serial(g_pCompositor->m_wlDisplay); - serials.push_back({serial, size_}); + m_serials.push_back({serial, size_}); - resource->sendConfigure(serial, size_.x, size_.y); + m_resource->sendConfigure(serial, size_.x, size_.y); } CLayerShellProtocol::CLayerShellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -201,7 +201,7 @@ CLayerShellProtocol::CLayerShellProtocol(const wl_interface* iface, const int& v } void CLayerShellProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwlrLayerShellV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwlrLayerShellV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -211,11 +211,11 @@ void CLayerShellProtocol::bindManager(wl_client* client, void* data, uint32_t ve } void CLayerShellProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CLayerShellProtocol::destroyResource(CLayerShellResource* surf) { - std::erase_if(m_vLayers, [&](const auto& other) { return other.get() == surf; }); + std::erase_if(m_layers, [&](const auto& other) { return other.get() == surf; }); } void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* output, zwlrLayerShellV1Layer layer, std::string namespace_) { @@ -238,11 +238,11 @@ void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id return; } - const auto RESOURCE = m_vLayers.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), SURF, namespace_, PMONITOR, layer)); + const auto RESOURCE = m_layers.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), SURF, namespace_, PMONITOR, layer)); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vLayers.pop_back(); + m_layers.pop_back(); return; } @@ -252,6 +252,6 @@ void CLayerShellProtocol::onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id LOGM(LOG, "New wlr_layer_surface {:x}", (uintptr_t)RESOURCE.get()); } -CLayerShellRole::CLayerShellRole(SP ls) : layerSurface(ls) { +CLayerShellRole::CLayerShellRole(SP ls) : m_layerSurface(ls) { ; } diff --git a/src/protocols/LayerShell.hpp b/src/protocols/LayerShell.hpp index b634c63c..c6c162a3 100644 --- a/src/protocols/LayerShell.hpp +++ b/src/protocols/LayerShell.hpp @@ -21,8 +21,9 @@ class CLayerShellRole : public ISurfaceRole { return SURFACE_ROLE_LAYER_SHELL; } - WP layerSurface; + WP m_layerSurface; }; + class CLayerShellResource { public: CLayerShellResource(SP resource_, SP surf_, std::string namespace_, PHLMONITOR pMonitor, zwlrLayerShellV1Layer layer); @@ -48,7 +49,7 @@ class CLayerShellResource { CSignal map; CSignal unmap; CSignal newPopup; // wlr_xdg_popup* - } events; + } m_events; struct SState { uint32_t anchor = 0; @@ -64,27 +65,27 @@ class CLayerShellResource { } margin; void reset(); - } current, pending; + } m_current, m_pending; - Vector2D size; - std::string layerNamespace; - std::string monitor = ""; - WP surface; - bool mapped = false; - bool configured = false; + Vector2D m_size; + std::string m_layerNamespace; + std::string m_monitor = ""; + WP m_surface; + bool m_mapped = false; + bool m_configured = false; private: - SP resource; + SP m_resource; struct { CHyprSignalListener commitSurface; CHyprSignalListener destroySurface; CHyprSignalListener unmapSurface; - } listeners; + } m_listeners; - bool closed = false; + bool m_closed = false; - std::vector> serials; + std::vector> m_serials; }; class CLayerShellProtocol : public IWaylandProtocol { @@ -99,8 +100,8 @@ class CLayerShellProtocol : public IWaylandProtocol { void onGetLayerSurface(CZwlrLayerShellV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* output, zwlrLayerShellV1Layer layer, std::string namespace_); // - std::vector> m_vManagers; - std::vector> m_vLayers; + std::vector> m_managers; + std::vector> m_layers; friend class CLayerShellResource; }; diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index 189a2555..ee64415b 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -24,7 +24,7 @@ static std::optional devIDFromFD(int fd) { } CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vector> tranches_) : - rendererTranche(_rendererTranche), monitorTranches(tranches_) { + m_rendererTranche(_rendererTranche), m_monitorTranches(tranches_) { std::vector formatsVec; std::set> formats; @@ -32,14 +32,14 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec // insert formats into vec if they got inserted into set, meaning they're unique size_t i = 0; - rendererTranche.indicies.clear(); - for (auto const& fmt : rendererTranche.formats) { + m_rendererTranche.indicies.clear(); + for (auto const& fmt : m_rendererTranche.formats) { for (auto const& mod : fmt.modifiers) { auto format = std::make_pair<>(fmt.drmFormat, mod); auto [_, inserted] = formats.insert(format); if (inserted) { // if it was inserted into set, then its unique and will have a new index in vec - rendererTranche.indicies.push_back(i++); + m_rendererTranche.indicies.push_back(i++); formatsVec.push_back(SDMABUFFormatTableEntry{ .fmt = fmt.drmFormat, .modifier = mod, @@ -48,12 +48,12 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec // if it wasn't inserted then find its index in vec auto it = std::find_if(formatsVec.begin(), formatsVec.end(), [fmt, mod](const SDMABUFFormatTableEntry& oth) { return oth.fmt == fmt.drmFormat && oth.modifier == mod; }); - rendererTranche.indicies.push_back(it - formatsVec.begin()); + m_rendererTranche.indicies.push_back(it - formatsVec.begin()); } } } - for (auto& [monitor, tranche] : monitorTranches) { + for (auto& [monitor, tranche] : m_monitorTranches) { tranche.indicies.clear(); for (auto const& fmt : tranche.formats) { for (auto const& mod : fmt.modifiers) { @@ -77,12 +77,12 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec } } - tableSize = formatsVec.size() * sizeof(SDMABUFFormatTableEntry); + m_tableSize = formatsVec.size() * sizeof(SDMABUFFormatTableEntry); CFileDescriptor fds[2]; - allocateSHMFilePair(tableSize, fds[0], fds[1]); + allocateSHMFilePair(m_tableSize, fds[0], fds[1]); - auto arr = (SDMABUFFormatTableEntry*)mmap(nullptr, tableSize, PROT_READ | PROT_WRITE, MAP_SHARED, fds[0].get(), 0); + auto arr = (SDMABUFFormatTableEntry*)mmap(nullptr, m_tableSize, PROT_READ | PROT_WRITE, MAP_SHARED, fds[0].get(), 0); if (arr == MAP_FAILED) { LOGM(ERR, "mmap failed"); @@ -91,50 +91,50 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec std::copy(formatsVec.begin(), formatsVec.end(), arr); - munmap(arr, tableSize); + munmap(arr, m_tableSize); - tableFD = std::move(fds[1]); + m_tableFD = std::move(fds[1]); } CLinuxDMABuffer::CLinuxDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs attrs) { - buffer = makeShared(id, client, attrs); + m_buffer = makeShared(id, client, attrs); - buffer->m_resource->m_buffer = buffer; + m_buffer->m_resource->m_buffer = m_buffer; - listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { - listeners.bufferResourceDestroy.reset(); + m_listeners.bufferResourceDestroy = m_buffer->events.destroy.registerListener([this](std::any d) { + m_listeners.bufferResourceDestroy.reset(); PROTO::linuxDma->destroyResource(this); }); - if (!buffer->m_success) + if (!m_buffer->m_success) LOGM(ERR, "Possibly compositor bug: buffer failed to create"); } CLinuxDMABuffer::~CLinuxDMABuffer() { - if (buffer && buffer->m_resource) - buffer->m_resource->sendRelease(); + if (m_buffer && m_buffer->m_resource) + m_buffer->m_resource->sendRelease(); - buffer.reset(); - listeners.bufferResourceDestroy.reset(); + m_buffer.reset(); + m_listeners.bufferResourceDestroy.reset(); } bool CLinuxDMABuffer::good() { - return buffer && buffer->good(); + return m_buffer && m_buffer->good(); } -CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SP resource_) : resource(resource_) { +CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwpLinuxBufferParamsV1* r) { PROTO::linuxDma->destroyResource(this); }); - resource->setDestroy([this](CZwpLinuxBufferParamsV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpLinuxBufferParamsV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setDestroy([this](CZwpLinuxBufferParamsV1* r) { PROTO::linuxDma->destroyResource(this); }); - attrs = makeShared(); + m_attrs = makeShared(); - attrs->success = true; + m_attrs->success = true; - resource->setAdd([this](CZwpLinuxBufferParamsV1* r, int32_t fd, uint32_t plane, uint32_t offset, uint32_t stride, uint32_t modHi, uint32_t modLo) { - if (used) { + m_resource->setAdd([this](CZwpLinuxBufferParamsV1* r, int32_t fd, uint32_t plane, uint32_t offset, uint32_t stride, uint32_t modHi, uint32_t modLo) { + if (m_used) { r->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ALREADY_USED, "Already used"); return; } @@ -144,19 +144,19 @@ CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SPfds.at(plane) != -1) { + if (m_attrs->fds.at(plane) != -1) { r->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_IDX, "plane used"); return; } - attrs->fds[plane] = fd; - attrs->strides[plane] = stride; - attrs->offsets[plane] = offset; - attrs->modifier = ((uint64_t)modHi << 32) | modLo; + m_attrs->fds[plane] = fd; + m_attrs->strides[plane] = stride; + m_attrs->offsets[plane] = offset; + m_attrs->modifier = ((uint64_t)modHi << 32) | modLo; }); - resource->setCreate([this](CZwpLinuxBufferParamsV1* r, int32_t w, int32_t h, uint32_t fmt, zwpLinuxBufferParamsV1Flags flags) { - if (used) { + m_resource->setCreate([this](CZwpLinuxBufferParamsV1* r, int32_t w, int32_t h, uint32_t fmt, zwpLinuxBufferParamsV1Flags flags) { + if (m_used) { r->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ALREADY_USED, "Already used"); return; } @@ -167,15 +167,15 @@ CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SPsize = {w, h}; - attrs->format = fmt; - attrs->planes = 4 - std::count(attrs->fds.begin(), attrs->fds.end(), -1); + m_attrs->size = {w, h}; + m_attrs->format = fmt; + m_attrs->planes = 4 - std::count(m_attrs->fds.begin(), m_attrs->fds.end(), -1); create(0); }); - resource->setCreateImmed([this](CZwpLinuxBufferParamsV1* r, uint32_t id, int32_t w, int32_t h, uint32_t fmt, zwpLinuxBufferParamsV1Flags flags) { - if (used) { + m_resource->setCreateImmed([this](CZwpLinuxBufferParamsV1* r, uint32_t id, int32_t w, int32_t h, uint32_t fmt, zwpLinuxBufferParamsV1Flags flags) { + if (m_used) { r->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ALREADY_USED, "Already used"); return; } @@ -186,20 +186,20 @@ CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SPsize = {w, h}; - attrs->format = fmt; - attrs->planes = 4 - std::count(attrs->fds.begin(), attrs->fds.end(), -1); + m_attrs->size = {w, h}; + m_attrs->format = fmt; + m_attrs->planes = 4 - std::count(m_attrs->fds.begin(), m_attrs->fds.end(), -1); create(id); }); } bool CLinuxDMABUFParamsResource::good() { - return resource->resource(); + return m_resource->resource(); } void CLinuxDMABUFParamsResource::create(uint32_t id) { - used = true; + m_used = true; if UNLIKELY (!verify()) { LOGM(ERR, "Failed creating a dmabuf: verify() said no"); @@ -208,42 +208,42 @@ void CLinuxDMABUFParamsResource::create(uint32_t id) { if UNLIKELY (!commence()) { LOGM(ERR, "Failed creating a dmabuf: commence() said no"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - LOGM(LOG, "Creating a dmabuf, with id {}: size {}, fmt {}, planes {}", id, attrs->size, NFormatUtils::drmFormatName(attrs->format), attrs->planes); - for (int i = 0; i < attrs->planes; ++i) { - LOGM(LOG, " | plane {}: mod {} fd {} stride {} offset {}", i, attrs->modifier, attrs->fds[i], attrs->strides[i], attrs->offsets[i]); + LOGM(LOG, "Creating a dmabuf, with id {}: size {}, fmt {}, planes {}", id, m_attrs->size, NFormatUtils::drmFormatName(m_attrs->format), m_attrs->planes); + for (int i = 0; i < m_attrs->planes; ++i) { + LOGM(LOG, " | plane {}: mod {} fd {} stride {} offset {}", i, m_attrs->modifier, m_attrs->fds[i], m_attrs->strides[i], m_attrs->offsets[i]); } - auto buf = PROTO::linuxDma->m_vBuffers.emplace_back(makeShared(id, resource->client(), *attrs)); + auto buf = PROTO::linuxDma->m_buffers.emplace_back(makeShared(id, m_resource->client(), *m_attrs)); - if UNLIKELY (!buf->good() || !buf->buffer->m_success) { - resource->sendFailed(); - PROTO::linuxDma->m_vBuffers.pop_back(); + if UNLIKELY (!buf->good() || !buf->m_buffer->m_success) { + m_resource->sendFailed(); + PROTO::linuxDma->m_buffers.pop_back(); return; } if (!id) - resource->sendCreated(PROTO::linuxDma->m_vBuffers.back()->buffer->m_resource->getResource()); + m_resource->sendCreated(PROTO::linuxDma->m_buffers.back()->m_buffer->m_resource->getResource()); - createdBuffer = buf; + m_createdBuffer = buf; } bool CLinuxDMABUFParamsResource::commence() { - if (!PROTO::linuxDma->mainDeviceFD.isValid()) + if (!PROTO::linuxDma->m_mainDeviceFD.isValid()) return true; - for (int i = 0; i < attrs->planes; i++) { + for (int i = 0; i < m_attrs->planes; i++) { uint32_t handle = 0; - if (drmPrimeFDToHandle(PROTO::linuxDma->mainDeviceFD.get(), attrs->fds.at(i), &handle)) { + if (drmPrimeFDToHandle(PROTO::linuxDma->m_mainDeviceFD.get(), m_attrs->fds.at(i), &handle)) { LOGM(ERR, "Failed to import dmabuf fd"); return false; } - if (drmCloseBufferHandle(PROTO::linuxDma->mainDeviceFD.get(), handle)) { + if (drmCloseBufferHandle(PROTO::linuxDma->m_mainDeviceFD.get(), handle)) { LOGM(ERR, "Failed to close dmabuf handle"); return false; } @@ -253,20 +253,20 @@ bool CLinuxDMABUFParamsResource::commence() { } bool CLinuxDMABUFParamsResource::verify() { - if UNLIKELY (attrs->planes <= 0) { - resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE, "No planes added"); + if UNLIKELY (m_attrs->planes <= 0) { + m_resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE, "No planes added"); return false; } - if UNLIKELY (attrs->fds.at(0) < 0) { - resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE, "No plane 0"); + if UNLIKELY (m_attrs->fds.at(0) < 0) { + m_resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE, "No plane 0"); return false; } bool empty = false; - for (auto const& plane : attrs->fds) { + for (auto const& plane : m_attrs->fds) { if (empty && plane != -1) { - resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_FORMAT, "Gap in planes"); + m_resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_FORMAT, "Gap in planes"); return false; } @@ -276,16 +276,16 @@ bool CLinuxDMABUFParamsResource::verify() { } } - if UNLIKELY (attrs->size.x < 1 || attrs->size.y < 1) { - resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS, "x/y < 1"); + if UNLIKELY (m_attrs->size.x < 1 || m_attrs->size.y < 1) { + m_resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS, "x/y < 1"); return false; } - for (size_t i = 0; i < (size_t)attrs->planes; ++i) { - if ((uint64_t)attrs->offsets.at(i) + (uint64_t)attrs->strides.at(i) * attrs->size.y > UINT32_MAX) { - resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS, - std::format("size overflow on plane {}: offset {} + stride {} * height {} = {}, overflows UINT32_MAX", i, (uint64_t)attrs->offsets.at(i), - (uint64_t)attrs->strides.at(i), attrs->size.y, (uint64_t)attrs->offsets.at(i) + (uint64_t)attrs->strides.at(i))); + for (size_t i = 0; i < (size_t)m_attrs->planes; ++i) { + if ((uint64_t)m_attrs->offsets.at(i) + (uint64_t)m_attrs->strides.at(i) * m_attrs->size.y > UINT32_MAX) { + m_resource->error(ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_OUT_OF_BOUNDS, + std::format("size overflow on plane {}: offset {} + stride {} * height {} = {}, overflows UINT32_MAX", i, (uint64_t)m_attrs->offsets.at(i), + (uint64_t)m_attrs->strides.at(i), m_attrs->size.y, (uint64_t)m_attrs->offsets.at(i) + (uint64_t)m_attrs->strides.at(i))); return false; } } @@ -293,20 +293,20 @@ bool CLinuxDMABUFParamsResource::verify() { return true; } -CLinuxDMABUFFeedbackResource::CLinuxDMABUFFeedbackResource(SP resource_, SP surface_) : surface(surface_), resource(resource_) { +CLinuxDMABUFFeedbackResource::CLinuxDMABUFFeedbackResource(SP resource_, SP surface_) : m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwpLinuxDmabufFeedbackV1* r) { PROTO::linuxDma->destroyResource(this); }); - resource->setDestroy([this](CZwpLinuxDmabufFeedbackV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpLinuxDmabufFeedbackV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setDestroy([this](CZwpLinuxDmabufFeedbackV1* r) { PROTO::linuxDma->destroyResource(this); }); - auto& formatTable = PROTO::linuxDma->formatTable; - resource->sendFormatTable(formatTable->tableFD.get(), formatTable->tableSize); + auto& formatTable = PROTO::linuxDma->m_formatTable; + m_resource->sendFormatTable(formatTable->m_tableFD.get(), formatTable->m_tableSize); sendDefaultFeedback(); } bool CLinuxDMABUFFeedbackResource::good() { - return resource->resource(); + return m_resource->resource(); } void CLinuxDMABUFFeedbackResource::sendTranche(SDMABUFTranche& tranche) { @@ -314,95 +314,95 @@ void CLinuxDMABUFFeedbackResource::sendTranche(SDMABUFTranche& tranche) { .size = sizeof(tranche.device), .data = (void*)&tranche.device, }; - resource->sendTrancheTargetDevice(&deviceArr); + m_resource->sendTrancheTargetDevice(&deviceArr); - resource->sendTrancheFlags((zwpLinuxDmabufFeedbackV1TrancheFlags)tranche.flags); + m_resource->sendTrancheFlags((zwpLinuxDmabufFeedbackV1TrancheFlags)tranche.flags); wl_array indices = { .size = tranche.indicies.size() * sizeof(tranche.indicies.at(0)), .data = tranche.indicies.data(), }; - resource->sendTrancheFormats(&indices); - resource->sendTrancheDone(); + m_resource->sendTrancheFormats(&indices); + m_resource->sendTrancheDone(); } // default tranche is based on renderer (egl) void CLinuxDMABUFFeedbackResource::sendDefaultFeedback() { - auto mainDevice = PROTO::linuxDma->mainDevice; - auto& formatTable = PROTO::linuxDma->formatTable; + auto mainDevice = PROTO::linuxDma->m_mainDevice; + auto& formatTable = PROTO::linuxDma->m_formatTable; struct wl_array deviceArr = { .size = sizeof(mainDevice), .data = (void*)&mainDevice, }; - resource->sendMainDevice(&deviceArr); + m_resource->sendMainDevice(&deviceArr); - sendTranche(formatTable->rendererTranche); + sendTranche(formatTable->m_rendererTranche); - resource->sendDone(); + m_resource->sendDone(); - lastFeedbackWasScanout = false; + m_lastFeedbackWasScanout = false; } -CLinuxDMABUFResource::CLinuxDMABUFResource(SP resource_) : resource(resource_) { +CLinuxDMABUFResource::CLinuxDMABUFResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwpLinuxDmabufV1* r) { PROTO::linuxDma->destroyResource(this); }); - resource->setDestroy([this](CZwpLinuxDmabufV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpLinuxDmabufV1* r) { PROTO::linuxDma->destroyResource(this); }); + m_resource->setDestroy([this](CZwpLinuxDmabufV1* r) { PROTO::linuxDma->destroyResource(this); }); - resource->setGetDefaultFeedback([](CZwpLinuxDmabufV1* r, uint32_t id) { + m_resource->setGetDefaultFeedback([](CZwpLinuxDmabufV1* r, uint32_t id) { const auto RESOURCE = - PROTO::linuxDma->m_vFeedbacks.emplace_back(makeShared(makeShared(r->client(), r->version(), id), nullptr)); + PROTO::linuxDma->m_feedbacks.emplace_back(makeShared(makeShared(r->client(), r->version(), id), nullptr)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::linuxDma->m_vFeedbacks.pop_back(); + PROTO::linuxDma->m_feedbacks.pop_back(); return; } }); - resource->setGetSurfaceFeedback([](CZwpLinuxDmabufV1* r, uint32_t id, wl_resource* surf) { - const auto RESOURCE = PROTO::linuxDma->m_vFeedbacks.emplace_back( + m_resource->setGetSurfaceFeedback([](CZwpLinuxDmabufV1* r, uint32_t id, wl_resource* surf) { + const auto RESOURCE = PROTO::linuxDma->m_feedbacks.emplace_back( makeShared(makeShared(r->client(), r->version(), id), CWLSurfaceResource::fromResource(surf))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::linuxDma->m_vFeedbacks.pop_back(); + PROTO::linuxDma->m_feedbacks.pop_back(); return; } }); - resource->setCreateParams([](CZwpLinuxDmabufV1* r, uint32_t id) { - const auto RESOURCE = PROTO::linuxDma->m_vParams.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + m_resource->setCreateParams([](CZwpLinuxDmabufV1* r, uint32_t id) { + const auto RESOURCE = PROTO::linuxDma->m_params.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::linuxDma->m_vParams.pop_back(); + PROTO::linuxDma->m_params.pop_back(); return; } }); - if (resource->version() < 4) + if (m_resource->version() < 4) sendMods(); } bool CLinuxDMABUFResource::good() { - return resource->resource(); + return m_resource->resource(); } void CLinuxDMABUFResource::sendMods() { - for (auto const& fmt : PROTO::linuxDma->formatTable->rendererTranche.formats) { + for (auto const& fmt : PROTO::linuxDma->m_formatTable->m_rendererTranche.formats) { for (auto const& mod : fmt.modifiers) { - if (resource->version() < 3) { + if (m_resource->version() < 3) { if (mod == DRM_FORMAT_MOD_INVALID || mod == DRM_FORMAT_MOD_LINEAR) - resource->sendFormat(fmt.drmFormat); + m_resource->sendFormat(fmt.drmFormat); continue; } // TODO: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1166 - resource->sendModifier(fmt.drmFormat, mod >> 32, mod & 0xFFFFFFFF); + m_resource->sendModifier(fmt.drmFormat, mod >> 32, mod & 0xFFFFFFFF); } } } @@ -418,10 +418,10 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const return; } - mainDevice = *dev; + m_mainDevice = *dev; SDMABUFTranche eglTranche = { - .device = mainDevice, + .device = m_mainDevice, .flags = 0, // renderer isnt for ds so dont set flag. .formats = g_pHyprOpenGL->getDRMFormats(), }; @@ -434,7 +434,7 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const for (auto const& mon : g_pCompositor->m_monitors) { auto tranche = SDMABUFTranche{ - .device = mainDevice, + .device = m_mainDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, .formats = mon->m_output->getRenderFormats(), }; @@ -444,25 +444,25 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const static auto monitorAdded = g_pHookSystem->hookDynamic("monitorAdded", [this](void* self, SCallbackInfo& info, std::any param) { auto pMonitor = std::any_cast(param); auto tranche = SDMABUFTranche{ - .device = mainDevice, + .device = m_mainDevice, .flags = ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT, .formats = pMonitor->m_output->getRenderFormats(), }; - formatTable->monitorTranches.emplace_back(std::make_pair<>(pMonitor, tranche)); + m_formatTable->m_monitorTranches.emplace_back(std::make_pair<>(pMonitor, tranche)); resetFormatTable(); }); static auto monitorRemoved = g_pHookSystem->hookDynamic("monitorRemoved", [this](void* self, SCallbackInfo& info, std::any param) { auto pMonitor = std::any_cast(param); - std::erase_if(formatTable->monitorTranches, [pMonitor](std::pair pair) { return pair.first == pMonitor; }); + std::erase_if(m_formatTable->m_monitorTranches, [pMonitor](std::pair pair) { return pair.first == pMonitor; }); resetFormatTable(); }); } - formatTable = makeUnique(eglTranche, tches); + m_formatTable = makeUnique(eglTranche, tches); drmDevice* device = nullptr; - if (drmGetDeviceFromDevId(mainDevice, 0, &device) != 0) { + if (drmGetDeviceFromDevId(m_mainDevice, 0, &device) != 0) { LOGM(ERR, "failed to get drm dev, disabling linux dmabuf"); removeGlobal(); return; @@ -470,9 +470,9 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const if (device->available_nodes & (1 << DRM_NODE_RENDER)) { const char* name = device->nodes[DRM_NODE_RENDER]; - mainDeviceFD = CFileDescriptor{open(name, O_RDWR | O_CLOEXEC)}; + m_mainDeviceFD = CFileDescriptor{open(name, O_RDWR | O_CLOEXEC)}; drmFreeDevice(&device); - if (!mainDeviceFD.isValid()) { + if (!m_mainDeviceFD.isValid()) { LOGM(ERR, "failed to open drm dev, disabling linux dmabuf"); removeGlobal(); return; @@ -485,19 +485,19 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const } void CLinuxDMABufV1Protocol::resetFormatTable() { - if (!formatTable) + if (!m_formatTable) return; LOGM(LOG, "Resetting format table"); // this might be a big copy - auto newFormatTable = makeUnique(formatTable->rendererTranche, formatTable->monitorTranches); + auto newFormatTable = makeUnique(m_formatTable->m_rendererTranche, m_formatTable->m_monitorTranches); - for (auto const& feedback : m_vFeedbacks) { - feedback->resource->sendFormatTable(newFormatTable->tableFD.get(), newFormatTable->tableSize); - if (feedback->lastFeedbackWasScanout) { + for (auto const& feedback : m_feedbacks) { + feedback->m_resource->sendFormatTable(newFormatTable->m_tableFD.get(), newFormatTable->m_tableSize); + if (feedback->m_lastFeedbackWasScanout) { PHLMONITOR mon; - auto HLSurface = CWLSurface::fromResource(feedback->surface); + auto HLSurface = CWLSurface::fromResource(feedback->m_surface); if (auto w = HLSurface->getWindow(); w) if (auto m = w->m_monitor.lock(); m) mon = m->m_self.lock(); @@ -507,46 +507,46 @@ void CLinuxDMABufV1Protocol::resetFormatTable() { return; } - updateScanoutTranche(feedback->surface, mon); + updateScanoutTranche(feedback->m_surface, mon); } else { feedback->sendDefaultFeedback(); } } // delete old table after we sent new one - formatTable = std::move(newFormatTable); + m_formatTable = std::move(newFormatTable); } void CLinuxDMABufV1Protocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CLinuxDMABufV1Protocol::destroyResource(CLinuxDMABUFResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CLinuxDMABufV1Protocol::destroyResource(CLinuxDMABUFFeedbackResource* resource) { - std::erase_if(m_vFeedbacks, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_feedbacks, [&](const auto& other) { return other.get() == resource; }); } void CLinuxDMABufV1Protocol::destroyResource(CLinuxDMABUFParamsResource* resource) { - std::erase_if(m_vParams, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_params, [&](const auto& other) { return other.get() == resource; }); } void CLinuxDMABufV1Protocol::destroyResource(CLinuxDMABuffer* resource) { - std::erase_if(m_vBuffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_buffers, [&](const auto& other) { return other.get() == resource; }); } void CLinuxDMABufV1Protocol::updateScanoutTranche(SP surface, PHLMONITOR pMonitor) { SP feedbackResource; - for (auto const& f : m_vFeedbacks) { - if (f->surface != surface) + for (auto const& f : m_feedbacks) { + if (f->m_surface != surface) continue; feedbackResource = f; @@ -564,10 +564,10 @@ void CLinuxDMABufV1Protocol::updateScanoutTranche(SP surface return; } - const auto& monitorTranchePair = std::find_if(formatTable->monitorTranches.begin(), formatTable->monitorTranches.end(), + const auto& monitorTranchePair = std::find_if(m_formatTable->m_monitorTranches.begin(), m_formatTable->m_monitorTranches.end(), [pMonitor](std::pair pair) { return pair.first == pMonitor; }); - if (monitorTranchePair == formatTable->monitorTranches.end()) { + if (monitorTranchePair == m_formatTable->m_monitorTranches.end()) { LOGM(LOG, "updateScanoutTranche: monitor has no tranche"); return; } @@ -577,17 +577,17 @@ void CLinuxDMABufV1Protocol::updateScanoutTranche(SP surface LOGM(LOG, "updateScanoutTranche: sending a scanout tranche"); struct wl_array deviceArr = { - .size = sizeof(mainDevice), - .data = (void*)&mainDevice, + .size = sizeof(m_mainDevice), + .data = (void*)&m_mainDevice, }; - feedbackResource->resource->sendMainDevice(&deviceArr); + feedbackResource->m_resource->sendMainDevice(&deviceArr); // prioritize scnaout tranche but have renderer fallback tranche // also yes formats can be duped here because different tranche flags (ds and no ds) feedbackResource->sendTranche(monitorTranche); - feedbackResource->sendTranche(formatTable->rendererTranche); + feedbackResource->sendTranche(m_formatTable->m_rendererTranche); - feedbackResource->resource->sendDone(); + feedbackResource->m_resource->sendDone(); - feedbackResource->lastFeedbackWasScanout = true; + feedbackResource->m_lastFeedbackWasScanout = true; } diff --git a/src/protocols/LinuxDMABUF.hpp b/src/protocols/LinuxDMABUF.hpp index d55ce8a7..7e8450e1 100644 --- a/src/protocols/LinuxDMABUF.hpp +++ b/src/protocols/LinuxDMABUF.hpp @@ -22,11 +22,11 @@ class CLinuxDMABuffer { bool good(); private: - SP buffer; + SP m_buffer; struct { CHyprSignalListener bufferResourceDestroy; - } listeners; + } m_listeners; friend class CLinuxDMABUFParamsResource; }; @@ -51,10 +51,10 @@ class CDMABUFFormatTable { CDMABUFFormatTable(SDMABUFTranche rendererTranche, std::vector> tranches); ~CDMABUFFormatTable() = default; - Hyprutils::OS::CFileDescriptor tableFD; - size_t tableSize = 0; - SDMABUFTranche rendererTranche; - std::vector> monitorTranches; + Hyprutils::OS::CFileDescriptor m_tableFD; + size_t m_tableSize = 0; + SDMABUFTranche m_rendererTranche; + std::vector> m_monitorTranches; }; class CLinuxDMABUFParamsResource { @@ -65,12 +65,12 @@ class CLinuxDMABUFParamsResource { bool good(); void create(uint32_t id); // 0 means not immed - SP attrs; - WP createdBuffer; - bool used = false; + SP m_attrs; + WP m_createdBuffer; + bool m_used = false; private: - SP resource; + SP m_resource; bool verify(); bool commence(); @@ -85,11 +85,11 @@ class CLinuxDMABUFFeedbackResource { void sendDefaultFeedback(); void sendTranche(SDMABUFTranche& tranche); - SP surface; // optional, for surface feedbacks + SP m_surface; // optional, for surface feedbacks private: - SP resource; - bool lastFeedbackWasScanout = false; + SP m_resource; + bool m_lastFeedbackWasScanout = false; friend class CLinuxDMABufV1Protocol; }; @@ -103,7 +103,7 @@ class CLinuxDMABUFResource { void sendMods(); private: - SP resource; + SP m_resource; }; class CLinuxDMABufV1Protocol : public IWaylandProtocol { @@ -123,14 +123,14 @@ class CLinuxDMABufV1Protocol : public IWaylandProtocol { void resetFormatTable(); // - std::vector> m_vManagers; - std::vector> m_vFeedbacks; - std::vector> m_vParams; - std::vector> m_vBuffers; + std::vector> m_managers; + std::vector> m_feedbacks; + std::vector> m_params; + std::vector> m_buffers; - UP formatTable; - dev_t mainDevice; - Hyprutils::OS::CFileDescriptor mainDeviceFD; + UP m_formatTable; + dev_t m_mainDevice; + Hyprutils::OS::CFileDescriptor m_mainDeviceFD; friend class CLinuxDMABUFResource; friend class CLinuxDMABUFFeedbackResource; diff --git a/src/protocols/MesaDRM.cpp b/src/protocols/MesaDRM.cpp index be5a02cd..c8532265 100644 --- a/src/protocols/MesaDRM.cpp +++ b/src/protocols/MesaDRM.cpp @@ -11,47 +11,48 @@ CMesaDRMBufferResource::CMesaDRMBufferResource(uint32_t id, wl_client* client, A LOGM(LOG, " | plane {}: mod {} fd {} stride {} offset {}", i, attrs_.modifier, attrs_.fds[i], attrs_.strides[i], attrs_.offsets[i]); } - buffer = makeShared(id, client, attrs_); - buffer->m_resource->m_buffer = buffer; + m_buffer = makeShared(id, client, attrs_); + m_buffer->m_resource->m_buffer = m_buffer; - listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { - listeners.bufferResourceDestroy.reset(); + m_listeners.bufferResourceDestroy = m_buffer->events.destroy.registerListener([this](std::any d) { + m_listeners.bufferResourceDestroy.reset(); PROTO::mesaDRM->destroyResource(this); }); - if (!buffer->m_success) + if (!m_buffer->m_success) LOGM(ERR, "Possibly compositor bug: buffer failed to create"); } CMesaDRMBufferResource::~CMesaDRMBufferResource() { - if (buffer && buffer->m_resource) - buffer->m_resource->sendRelease(); - buffer.reset(); - listeners.bufferResourceDestroy.reset(); + if (m_buffer && m_buffer->m_resource) + m_buffer->m_resource->sendRelease(); + m_buffer.reset(); + m_listeners.bufferResourceDestroy.reset(); } bool CMesaDRMBufferResource::good() { - return buffer && buffer->good(); + return m_buffer && m_buffer->good(); } -CMesaDRMResource::CMesaDRMResource(SP resource_) : resource(resource_) { +CMesaDRMResource::CMesaDRMResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWlDrm* r) { PROTO::mesaDRM->destroyResource(this); }); + m_resource->setOnDestroy([this](CWlDrm* r) { PROTO::mesaDRM->destroyResource(this); }); - resource->setAuthenticate([this](CWlDrm* r, uint32_t token) { + m_resource->setAuthenticate([this](CWlDrm* r, uint32_t token) { // we don't need this - resource->sendAuthenticated(); + m_resource->sendAuthenticated(); }); - resource->setCreateBuffer([](CWlDrm* r, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t) { r->error(WL_DRM_ERROR_INVALID_NAME, "Not supported, use prime instead"); }); + m_resource->setCreateBuffer( + [](CWlDrm* r, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t) { r->error(WL_DRM_ERROR_INVALID_NAME, "Not supported, use prime instead"); }); - resource->setCreatePlanarBuffer([](CWlDrm* r, uint32_t, uint32_t, int32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t) { + m_resource->setCreatePlanarBuffer([](CWlDrm* r, uint32_t, uint32_t, int32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t) { r->error(WL_DRM_ERROR_INVALID_NAME, "Not supported, use prime instead"); }); - resource->setCreatePrimeBuffer( + m_resource->setCreatePrimeBuffer( [this](CWlDrm* r, uint32_t id, int32_t nameFd, int32_t w, int32_t h, uint32_t fmt, int32_t off0, int32_t str0, int32_t off1, int32_t str1, int32_t off2, int32_t str2) { if (off0 < 0 || w <= 0 || h <= 0) { r->error(WL_DRM_ERROR_INVALID_FORMAT, "Invalid w, h, or offset"); @@ -85,29 +86,29 @@ CMesaDRMResource::CMesaDRMResource(SP resource_) : resource(resource_) { attrs.fds[0] = nameFd; attrs.format = fmt; - const auto RESOURCE = PROTO::mesaDRM->m_vBuffers.emplace_back(makeShared(id, resource->client(), attrs)); + const auto RESOURCE = PROTO::mesaDRM->m_buffers.emplace_back(makeShared(id, m_resource->client(), attrs)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::mesaDRM->m_vBuffers.pop_back(); + PROTO::mesaDRM->m_buffers.pop_back(); return; } // append instance so that buffer knows its owner - RESOURCE->buffer->m_resource->m_buffer = RESOURCE->buffer; + RESOURCE->m_buffer->m_resource->m_buffer = RESOURCE->m_buffer; }); - resource->sendDevice(PROTO::mesaDRM->nodeName.c_str()); - resource->sendCapabilities(WL_DRM_CAPABILITY_PRIME); + m_resource->sendDevice(PROTO::mesaDRM->m_nodeName.c_str()); + m_resource->sendCapabilities(WL_DRM_CAPABILITY_PRIME); auto fmts = g_pHyprOpenGL->getDRMFormats(); for (auto const& fmt : fmts) { - resource->sendFormat(fmt.drmFormat); + m_resource->sendFormat(fmt.drmFormat); } } bool CMesaDRMResource::good() { - return resource->resource(); + return m_resource->resource(); } CMesaDRMProtocol::CMesaDRMProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -120,7 +121,7 @@ CMesaDRMProtocol::CMesaDRMProtocol(const wl_interface* iface, const int& ver, co } if (dev->available_nodes & (1 << DRM_NODE_RENDER)) { - nodeName = dev->nodes[DRM_NODE_RENDER]; + m_nodeName = dev->nodes[DRM_NODE_RENDER]; } else { ASSERT(dev->available_nodes & (1 << DRM_NODE_PRIMARY)); @@ -132,25 +133,25 @@ CMesaDRMProtocol::CMesaDRMProtocol(const wl_interface* iface, const int& ver, co } LOGM(WARN, "No DRM render node, falling back to primary {}", dev->nodes[DRM_NODE_PRIMARY]); - nodeName = dev->nodes[DRM_NODE_PRIMARY]; + m_nodeName = dev->nodes[DRM_NODE_PRIMARY]; } drmFreeDevice(&dev); } void CMesaDRMProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CMesaDRMProtocol::destroyResource(CMesaDRMResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CMesaDRMProtocol::destroyResource(CMesaDRMBufferResource* resource) { - std::erase_if(m_vBuffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_buffers, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/MesaDRM.hpp b/src/protocols/MesaDRM.hpp index bfa604cf..d3d3a50a 100644 --- a/src/protocols/MesaDRM.hpp +++ b/src/protocols/MesaDRM.hpp @@ -15,11 +15,11 @@ class CMesaDRMBufferResource { bool good(); private: - SP buffer; + SP m_buffer; struct { CHyprSignalListener bufferResourceDestroy; - } listeners; + } m_listeners; friend class CMesaDRMResource; }; @@ -31,7 +31,7 @@ class CMesaDRMResource { bool good(); private: - SP resource; + SP m_resource; }; class CMesaDRMProtocol : public IWaylandProtocol { @@ -45,10 +45,10 @@ class CMesaDRMProtocol : public IWaylandProtocol { void destroyResource(CMesaDRMBufferResource* resource); // - std::vector> m_vManagers; - std::vector> m_vBuffers; + std::vector> m_managers; + std::vector> m_buffers; - std::string nodeName = ""; + std::string m_nodeName = ""; friend class CMesaDRMResource; friend class CMesaDRMBufferResource; diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index 182c2a6d..e0a9b61d 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -196,14 +196,14 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPclient(); if (!surface->m_colorManagement.valid()) { - const auto RESOURCE = PROTO::colorManagement->m_vSurfaces.emplace_back(makeShared(surface_)); + const auto RESOURCE = PROTO::colorManagement->m_surfaces.emplace_back(makeShared(surface_)); if UNLIKELY (!RESOURCE) { resource->noMemory(); - PROTO::colorManagement->m_vSurfaces.pop_back(); + PROTO::colorManagement->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; surface->m_colorManagement = RESOURCE; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index cddc8c95..74f4192f 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1686,7 +1686,7 @@ void CHyprRenderer::arrangeLayerArray(PHLMONITOR pMonitor, const std::vectorm_layerSurface; - const auto PSTATE = &PLAYER->current; + const auto PSTATE = &PLAYER->m_current; if (exclusiveZone != (PSTATE->exclusive > 0)) continue; From 2626f89ea6fe0df585df28052bf1fcca2c50fe8e Mon Sep 17 00:00:00 2001 From: davc0n Date: Sun, 4 May 2025 19:21:36 +0200 Subject: [PATCH 0151/1077] protocols: refactor class member vars (n-t) (#10273) --- src/managers/SessionLockManager.cpp | 14 +- src/managers/input/InputMethodRelay.cpp | 4 +- src/managers/input/TextInput.cpp | 74 ++--- src/protocols/OutputManagement.cpp | 401 +++++++++++------------ src/protocols/OutputManagement.hpp | 44 +-- src/protocols/OutputPower.cpp | 48 +-- src/protocols/OutputPower.hpp | 10 +- src/protocols/PointerConstraints.cpp | 110 +++---- src/protocols/PointerConstraints.hpp | 28 +- src/protocols/PointerGestures.cpp | 94 +++--- src/protocols/PointerGestures.hpp | 14 +- src/protocols/PresentationTime.cpp | 75 +++-- src/protocols/PresentationTime.hpp | 22 +- src/protocols/PrimarySelection.cpp | 142 ++++---- src/protocols/PrimarySelection.hpp | 36 +-- src/protocols/RelativePointer.cpp | 28 +- src/protocols/RelativePointer.hpp | 8 +- src/protocols/Screencopy.cpp | 260 +++++++-------- src/protocols/Screencopy.hpp | 49 ++- src/protocols/SecurityContext.cpp | 112 +++---- src/protocols/SecurityContext.hpp | 29 +- src/protocols/ServerDecorationKDE.cpp | 20 +- src/protocols/ServerDecorationKDE.hpp | 6 +- src/protocols/SessionLock.cpp | 130 ++++---- src/protocols/SessionLock.hpp | 32 +- src/protocols/ShortcutsInhibit.cpp | 29 +- src/protocols/ShortcutsInhibit.hpp | 8 +- src/protocols/SinglePixel.cpp | 44 +-- src/protocols/SinglePixel.hpp | 18 +- src/protocols/Tablet.cpp | 412 ++++++++++++------------ src/protocols/Tablet.hpp | 83 +++-- src/protocols/TearingControl.cpp | 36 +-- src/protocols/TearingControl.hpp | 14 +- src/protocols/TextInputV1.cpp | 84 ++--- src/protocols/TextInputV1.hpp | 21 +- src/protocols/TextInputV3.cpp | 104 +++--- src/protocols/TextInputV3.hpp | 16 +- src/protocols/ToplevelExport.cpp | 248 +++++++------- src/protocols/ToplevelExport.hpp | 49 ++- src/protocols/ToplevelMapping.cpp | 54 ++-- src/protocols/ToplevelMapping.hpp | 8 +- 41 files changed, 1507 insertions(+), 1511 deletions(-) diff --git a/src/managers/SessionLockManager.cpp b/src/managers/SessionLockManager.cpp index bb01c944..f39acf23 100644 --- a/src/managers/SessionLockManager.cpp +++ b/src/managers/SessionLockManager.cpp @@ -12,7 +12,7 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : surface(surface_) { pWlrSurface = surface->surface(); - listeners.map = surface_->events.map.registerListener([this](std::any data) { + listeners.map = surface_->m_events.map.registerListener([this](std::any data) { mapped = true; g_pInputManager->simulateMouseMovement(); @@ -23,14 +23,14 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : sur g_pHyprRenderer->damageMonitor(PMONITOR); }); - listeners.destroy = surface_->events.destroy.registerListener([this](std::any data) { + listeners.destroy = surface_->m_events.destroy.registerListener([this](std::any data) { if (pWlrSurface == g_pCompositor->m_lastFocus) g_pCompositor->m_lastFocus.reset(); g_pSessionLockManager->removeSessionLockSurface(this); }); - listeners.commit = surface_->events.commit.registerListener([this](std::any data) { + listeners.commit = surface_->m_events.commit.registerListener([this](std::any data) { const auto PMONITOR = g_pCompositor->getMonitorFromID(iMonitorID); if (mapped && !g_pCompositor->m_lastFocus) @@ -42,7 +42,7 @@ SSessionLockSurface::SSessionLockSurface(SP surface_) : sur } CSessionLockManager::CSessionLockManager() { - m_listeners.newLock = PROTO::sessionLock->events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast>(data)); }); + m_listeners.newLock = PROTO::sessionLock->m_events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast>(data)); }); } void CSessionLockManager::onNewSessionLock(SP pLock) { @@ -61,7 +61,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { m_sessionLock->lock = pLock; m_sessionLock->mLockTimer.reset(); - m_sessionLock->listeners.newSurface = pLock->events.newLockSurface.registerListener([this](std::any data) { + m_sessionLock->listeners.newSurface = pLock->m_events.newLockSurface.registerListener([this](std::any data) { auto SURFACE = std::any_cast>(data); const auto PMONITOR = SURFACE->monitor(); @@ -71,7 +71,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { PROTO::fractional->sendScale(SURFACE->surface(), PMONITOR->m_scale); }); - m_sessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) { + m_sessionLock->listeners.unlock = pLock->m_events.unlockAndDestroy.registerListener([this](std::any data) { m_sessionLock.reset(); g_pInputManager->refocus(); @@ -79,7 +79,7 @@ void CSessionLockManager::onNewSessionLock(SP pLock) { g_pHyprRenderer->damageMonitor(m); }); - m_sessionLock->listeners.destroy = pLock->events.destroyed.registerListener([this](std::any data) { + m_sessionLock->listeners.destroy = pLock->m_events.destroyed.registerListener([this](std::any data) { m_sessionLock.reset(); g_pCompositor->focusSurface(nullptr); diff --git a/src/managers/input/InputMethodRelay.cpp b/src/managers/input/InputMethodRelay.cpp index 050734a8..40c87f95 100644 --- a/src/managers/input/InputMethodRelay.cpp +++ b/src/managers/input/InputMethodRelay.cpp @@ -11,8 +11,8 @@ CInputMethodRelay::CInputMethodRelay() { static auto P = g_pHookSystem->hookDynamic("keyboardFocus", [&](void* self, SCallbackInfo& info, std::any param) { onKeyboardFocus(std::any_cast>(param)); }); - m_listeners.newTIV3 = PROTO::textInputV3->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); - m_listeners.newTIV1 = PROTO::textInputV1->events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); + m_listeners.newTIV3 = PROTO::textInputV3->m_events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); + m_listeners.newTIV1 = PROTO::textInputV1->m_events.newTextInput.registerListener([this](std::any ti) { onNewTextInput(std::any_cast>(ti)); }); m_listeners.newIME = PROTO::ime->m_events.newIME.registerListener([this](std::any ime) { onNewIME(std::any_cast>(ime)); }); } diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index c563f4de..cac64da4 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -19,11 +19,11 @@ void CTextInput::initCallbacks() { if (isV3()) { const auto INPUT = m_v3Input.lock(); - m_listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { onEnabled(); }); - m_listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); - m_listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); - m_listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); - m_listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { + m_listeners.enable = INPUT->m_events.enable.registerListener([this](std::any p) { onEnabled(); }); + m_listeners.disable = INPUT->m_events.disable.registerListener([this](std::any p) { onDisabled(); }); + m_listeners.commit = INPUT->m_events.onCommit.registerListener([this](std::any p) { onCommit(); }); + m_listeners.reset = INPUT->m_events.reset.registerListener([this](std::any p) { onReset(); }); + m_listeners.destroy = INPUT->m_events.destroy.registerListener([this](std::any p) { m_listeners.surfaceUnmap.reset(); m_listeners.surfaceDestroy.reset(); g_pInputManager->m_relay.removeTextInput(this); @@ -36,14 +36,14 @@ void CTextInput::initCallbacks() { } else { const auto INPUT = m_v1Input.lock(); - m_listeners.enable = INPUT->events.enable.registerListener([this](std::any p) { + m_listeners.enable = INPUT->m_events.enable.registerListener([this](std::any p) { const auto SURFACE = std::any_cast>(p); onEnabled(SURFACE); }); - m_listeners.disable = INPUT->events.disable.registerListener([this](std::any p) { onDisabled(); }); - m_listeners.commit = INPUT->events.onCommit.registerListener([this](std::any p) { onCommit(); }); - m_listeners.reset = INPUT->events.reset.registerListener([this](std::any p) { onReset(); }); - m_listeners.destroy = INPUT->events.destroy.registerListener([this](std::any p) { + m_listeners.disable = INPUT->m_events.disable.registerListener([this](std::any p) { onDisabled(); }); + m_listeners.commit = INPUT->m_events.onCommit.registerListener([this](std::any p) { onCommit(); }); + m_listeners.reset = INPUT->m_events.reset.registerListener([this](std::any p) { onReset(); }); + m_listeners.destroy = INPUT->m_events.destroy.registerListener([this](std::any p) { m_listeners.surfaceUnmap.reset(); m_listeners.surfaceDestroy.reset(); g_pInputManager->m_relay.removeTextInput(this); @@ -63,7 +63,7 @@ void CTextInput::onEnabled(SP surfV1) { // v1 only, map surface to PTI if (!isV3()) { - if (g_pCompositor->m_lastFocus != surfV1 || !m_v1Input->active) + if (g_pCompositor->m_lastFocus != surfV1 || !m_v1Input->m_active) return; enter(surfV1); @@ -115,7 +115,7 @@ void CTextInput::onCommit() { return; } - if (!(isV3() ? m_v3Input->current.enabled.value : m_v1Input->active)) { + if (!(isV3() ? m_v3Input->m_current.enabled.value : m_v1Input->m_active)) { Debug::log(WARN, "Disabled TextInput commit?"); return; } @@ -144,11 +144,11 @@ void CTextInput::setFocusedSurface(SP pSurface) { m_listeners.surfaceUnmap.reset(); m_listeners.surfaceDestroy.reset(); - if (isV3() && !m_v3Input.expired() && m_v3Input->current.enabled.value) { - m_v3Input->pending.enabled.value = false; - m_v3Input->pending.enabled.isDisablePending = false; - m_v3Input->pending.enabled.isEnablePending = false; - m_v3Input->current.enabled.value = false; + if (isV3() && !m_v3Input.expired() && m_v3Input->m_current.enabled.value) { + m_v3Input->m_pending.enabled.value = false; + m_v3Input->m_pending.enabled.isDisablePending = false; + m_v3Input->m_pending.enabled.isEnablePending = false; + m_v3Input->m_current.enabled.value = false; } if (!g_pInputManager->m_relay.getFocusedTextInput()) @@ -164,11 +164,11 @@ void CTextInput::setFocusedSurface(SP pSurface) { m_listeners.surfaceUnmap.reset(); m_listeners.surfaceDestroy.reset(); - if (isV3() && !m_v3Input.expired() && m_v3Input->current.enabled.value) { - m_v3Input->pending.enabled.value = false; - m_v3Input->pending.enabled.isDisablePending = false; - m_v3Input->pending.enabled.isEnablePending = false; - m_v3Input->current.enabled.value = false; + if (isV3() && !m_v3Input.expired() && m_v3Input->m_current.enabled.value) { + m_v3Input->m_pending.enabled.value = false; + m_v3Input->m_pending.enabled.isDisablePending = false; + m_v3Input->m_pending.enabled.isEnablePending = false; + m_v3Input->m_current.enabled.value = false; } if (!g_pInputManager->m_relay.getFocusedTextInput()) @@ -238,23 +238,23 @@ void CTextInput::commitStateToIME(SP ime) { if (isV3() && !m_v3Input.expired()) { const auto INPUT = m_v3Input.lock(); - if (INPUT->current.surrounding.updated) - ime->surroundingText(INPUT->current.surrounding.text, INPUT->current.surrounding.cursor, INPUT->current.surrounding.anchor); + if (INPUT->m_current.surrounding.updated) + ime->surroundingText(INPUT->m_current.surrounding.text, INPUT->m_current.surrounding.cursor, INPUT->m_current.surrounding.anchor); - ime->textChangeCause(INPUT->current.cause); + ime->textChangeCause(INPUT->m_current.cause); - if (INPUT->current.contentType.updated) - ime->textContentType(INPUT->current.contentType.hint, INPUT->current.contentType.purpose); + if (INPUT->m_current.contentType.updated) + ime->textContentType(INPUT->m_current.contentType.hint, INPUT->m_current.contentType.purpose); } else if (!m_v1Input.expired()) { const auto INPUT = m_v1Input.lock(); - if (INPUT->pendingSurrounding.isPending) - ime->surroundingText(INPUT->pendingSurrounding.text, INPUT->pendingSurrounding.cursor, INPUT->pendingSurrounding.anchor); + if (INPUT->m_pendingSurrounding.isPending) + ime->surroundingText(INPUT->m_pendingSurrounding.text, INPUT->m_pendingSurrounding.cursor, INPUT->m_pendingSurrounding.anchor); ime->textChangeCause(ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD); - if (m_v1Input->pendingContentType.isPending) - ime->textContentType((zwpTextInputV3ContentHint)INPUT->pendingContentType.hint, (zwpTextInputV3ContentPurpose)INPUT->pendingContentType.purpose); + if (m_v1Input->m_pendingContentType.isPending) + ime->textContentType((zwpTextInputV3ContentHint)INPUT->m_pendingContentType.hint, (zwpTextInputV3ContentPurpose)INPUT->m_pendingContentType.purpose); } g_pInputManager->m_relay.updateAllPopups(); @@ -282,30 +282,30 @@ void CTextInput::updateIMEState(SP ime) { if (ime->m_current.preeditString.committed) { INPUT->preeditCursor(ime->m_current.preeditString.begin); INPUT->preeditStyling(0, std::string(ime->m_current.preeditString.string).length(), ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); - INPUT->preeditString(m_v1Input->serial, ime->m_current.preeditString.string.c_str(), ""); + INPUT->preeditString(m_v1Input->m_serial, ime->m_current.preeditString.string.c_str(), ""); } else { INPUT->preeditCursor(0); INPUT->preeditStyling(0, 0, ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_HIGHLIGHT); - INPUT->preeditString(m_v1Input->serial, "", ""); + INPUT->preeditString(m_v1Input->m_serial, "", ""); } if (ime->m_current.committedString.committed) - INPUT->commitString(m_v1Input->serial, ime->m_current.committedString.string.c_str()); + INPUT->commitString(m_v1Input->m_serial, ime->m_current.committedString.string.c_str()); if (ime->m_current.deleteSurrounding.committed) { INPUT->deleteSurroundingText(std::string(ime->m_current.preeditString.string).length() - ime->m_current.deleteSurrounding.before, ime->m_current.deleteSurrounding.after + ime->m_current.deleteSurrounding.before); if (ime->m_current.preeditString.committed) - INPUT->commitString(m_v1Input->serial, ime->m_current.preeditString.string.c_str()); + INPUT->commitString(m_v1Input->m_serial, ime->m_current.preeditString.string.c_str()); } } } bool CTextInput::hasCursorRectangle() { - return !isV3() || m_v3Input->current.box.updated; + return !isV3() || m_v3Input->m_current.box.updated; } CBox CTextInput::cursorBox() { - return CBox{isV3() ? m_v3Input->current.box.cursorBox : m_v1Input->cursorRectangle}; + return CBox{isV3() ? m_v3Input->m_current.box.cursorBox : m_v1Input->m_cursorRectangle}; } diff --git a/src/protocols/OutputManagement.cpp b/src/protocols/OutputManagement.cpp index 4af7a6e2..b5c0de74 100644 --- a/src/protocols/OutputManagement.cpp +++ b/src/protocols/OutputManagement.cpp @@ -7,25 +7,25 @@ using namespace Aquamarine; -COutputManager::COutputManager(SP resource_) : resource(resource_) { +COutputManager::COutputManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; LOGM(LOG, "New OutputManager registered"); - resource->setOnDestroy([this](CZwlrOutputManagerV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrOutputManagerV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setStop([this](CZwlrOutputManagerV1* r) { stopped = true; }); + m_resource->setStop([this](CZwlrOutputManagerV1* r) { m_stopped = true; }); - resource->setCreateConfiguration([this](CZwlrOutputManagerV1* r, uint32_t id, uint32_t serial) { + m_resource->setCreateConfiguration([this](CZwlrOutputManagerV1* r, uint32_t id, uint32_t serial) { LOGM(LOG, "Creating new configuration"); - const auto RESOURCE = PROTO::outputManagement->m_vConfigurations.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), id), self.lock())); + const auto RESOURCE = PROTO::outputManagement->m_configurations.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::outputManagement->m_vConfigurations.pop_back(); + m_resource->noMemory(); + PROTO::outputManagement->m_configurations.pop_back(); return; } }); @@ -44,25 +44,25 @@ COutputManager::COutputManager(SP resource_) : resource(re } bool COutputManager::good() { - return resource->resource(); + return m_resource->resource(); } void COutputManager::makeAndSendNewHead(PHLMONITOR pMonitor) { - if UNLIKELY (stopped) + if UNLIKELY (m_stopped) return; const auto RESOURCE = - PROTO::outputManagement->m_vHeads.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), pMonitor)); + PROTO::outputManagement->m_heads.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), pMonitor)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::outputManagement->m_vHeads.pop_back(); + m_resource->noMemory(); + PROTO::outputManagement->m_heads.pop_back(); return; } - heads.emplace_back(RESOURCE); + m_heads.emplace_back(RESOURCE); - resource->sendHead(RESOURCE->resource.get()); + m_resource->sendHead(RESOURCE->m_resource.get()); RESOURCE->sendAllData(); } @@ -70,13 +70,13 @@ void COutputManager::ensureMonitorSent(PHLMONITOR pMonitor) { if (pMonitor == g_pCompositor->m_unsafeOutput) return; - for (auto const& hw : heads) { + for (auto const& hw : m_heads) { auto h = hw.lock(); if (!h) continue; - if (h->pMonitor == pMonitor) + if (h->m_monitor == pMonitor) return; } @@ -86,93 +86,93 @@ void COutputManager::ensureMonitorSent(PHLMONITOR pMonitor) { } void COutputManager::sendDone() { - resource->sendDone(wl_display_next_serial(g_pCompositor->m_wlDisplay)); + m_resource->sendDone(wl_display_next_serial(g_pCompositor->m_wlDisplay)); } -COutputHead::COutputHead(SP resource_, PHLMONITOR pMonitor_) : resource(resource_), pMonitor(pMonitor_) { +COutputHead::COutputHead(SP resource_, PHLMONITOR pMonitor_) : m_resource(resource_), m_monitor(pMonitor_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setRelease([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrOutputHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); - listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any d) { - resource->sendFinished(); + m_listeners.monitorDestroy = m_monitor->m_events.destroy.registerListener([this](std::any d) { + m_resource->sendFinished(); - for (auto const& mw : modes) { + for (auto const& mw : m_modes) { auto m = mw.lock(); if (!m) continue; - m->resource->sendFinished(); + m->m_resource->sendFinished(); } - pMonitor.reset(); - for (auto const& m : PROTO::outputManagement->m_vManagers) { + m_monitor.reset(); + for (auto const& m : PROTO::outputManagement->m_managers) { m->sendDone(); } }); - listeners.monitorModeChange = pMonitor->m_events.modeChanged.registerListener([this](std::any d) { updateMode(); }); + m_listeners.monitorModeChange = m_monitor->m_events.modeChanged.registerListener([this](std::any d) { updateMode(); }); } bool COutputHead::good() { - return resource->resource(); + return m_resource->resource(); } void COutputHead::sendAllData() { - const auto VERSION = resource->version(); + const auto VERSION = m_resource->version(); - resource->sendName(pMonitor->m_name.c_str()); - resource->sendDescription(pMonitor->m_description.c_str()); - if (pMonitor->m_output->physicalSize.x > 0 && pMonitor->m_output->physicalSize.y > 0) - resource->sendPhysicalSize(pMonitor->m_output->physicalSize.x, pMonitor->m_output->physicalSize.y); - resource->sendEnabled(pMonitor->m_enabled); + m_resource->sendName(m_monitor->m_name.c_str()); + m_resource->sendDescription(m_monitor->m_description.c_str()); + if (m_monitor->m_output->physicalSize.x > 0 && m_monitor->m_output->physicalSize.y > 0) + m_resource->sendPhysicalSize(m_monitor->m_output->physicalSize.x, m_monitor->m_output->physicalSize.y); + m_resource->sendEnabled(m_monitor->m_enabled); - if (pMonitor->m_enabled) { - resource->sendPosition(pMonitor->m_position.x, pMonitor->m_position.y); - resource->sendTransform(pMonitor->m_transform); - resource->sendScale(wl_fixed_from_double(pMonitor->m_scale)); + if (m_monitor->m_enabled) { + m_resource->sendPosition(m_monitor->m_position.x, m_monitor->m_position.y); + m_resource->sendTransform(m_monitor->m_transform); + m_resource->sendScale(wl_fixed_from_double(m_monitor->m_scale)); } - if (!pMonitor->m_output->make.empty() && VERSION >= 2) - resource->sendMake(pMonitor->m_output->make.c_str()); - if (!pMonitor->m_output->model.empty() && VERSION >= 2) - resource->sendModel(pMonitor->m_output->model.c_str()); - if (!pMonitor->m_output->serial.empty() && VERSION >= 2) - resource->sendSerialNumber(pMonitor->m_output->serial.c_str()); + if (!m_monitor->m_output->make.empty() && VERSION >= 2) + m_resource->sendMake(m_monitor->m_output->make.c_str()); + if (!m_monitor->m_output->model.empty() && VERSION >= 2) + m_resource->sendModel(m_monitor->m_output->model.c_str()); + if (!m_monitor->m_output->serial.empty() && VERSION >= 2) + m_resource->sendSerialNumber(m_monitor->m_output->serial.c_str()); if (VERSION >= 4) - resource->sendAdaptiveSync(pMonitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); + m_resource->sendAdaptiveSync(m_monitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); // send all available modes - if (modes.empty()) { - if (!pMonitor->m_output->modes.empty()) { - for (auto const& m : pMonitor->m_output->modes) { + if (m_modes.empty()) { + if (!m_monitor->m_output->modes.empty()) { + for (auto const& m : m_monitor->m_output->modes) { makeAndSendNewMode(m); } - } else if (pMonitor->m_output->state->state().customMode) { - makeAndSendNewMode(pMonitor->m_output->state->state().customMode); + } else if (m_monitor->m_output->state->state().customMode) { + makeAndSendNewMode(m_monitor->m_output->state->state().customMode); } else makeAndSendNewMode(nullptr); } // send current mode - if (pMonitor->m_enabled) { - for (auto const& mw : modes) { + if (m_monitor->m_enabled) { + for (auto const& mw : m_modes) { auto m = mw.lock(); if (!m) continue; - if (m->mode == pMonitor->m_output->state->state().mode) { - if (m->mode) - LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->m_name, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); + if (m->m_mode == m_monitor->m_output->state->state().mode) { + if (m->m_mode) + LOGM(LOG, " | sending current mode for {}: {}x{}@{}", m_monitor->m_name, m->m_mode->pixelSize.x, m->m_mode->pixelSize.y, m->m_mode->refreshRate); else - LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->m_name); - resource->sendCurrentMode(m->resource.get()); + LOGM(LOG, " | sending current mode for {}: null (fake)", m_monitor->m_name); + m_resource->sendCurrentMode(m->m_resource.get()); break; } } @@ -180,30 +180,30 @@ void COutputHead::sendAllData() { } void COutputHead::updateMode() { - resource->sendEnabled(pMonitor->m_enabled); + m_resource->sendEnabled(m_monitor->m_enabled); - if (pMonitor->m_enabled) { - resource->sendPosition(pMonitor->m_position.x, pMonitor->m_position.y); - resource->sendTransform(pMonitor->m_transform); - resource->sendScale(wl_fixed_from_double(pMonitor->m_scale)); + if (m_monitor->m_enabled) { + m_resource->sendPosition(m_monitor->m_position.x, m_monitor->m_position.y); + m_resource->sendTransform(m_monitor->m_transform); + m_resource->sendScale(wl_fixed_from_double(m_monitor->m_scale)); } - if (resource->version() >= 4) - resource->sendAdaptiveSync(pMonitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); + if (m_resource->version() >= 4) + m_resource->sendAdaptiveSync(m_monitor->m_vrrActive ? ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_ENABLED : ZWLR_OUTPUT_HEAD_V1_ADAPTIVE_SYNC_STATE_DISABLED); - if (pMonitor->m_enabled) { - for (auto const& mw : modes) { + if (m_monitor->m_enabled) { + for (auto const& mw : m_modes) { auto m = mw.lock(); if (!m) continue; - if (m->mode == pMonitor->m_currentMode) { - if (m->mode) - LOGM(LOG, " | sending current mode for {}: {}x{}@{}", pMonitor->m_name, m->mode->pixelSize.x, m->mode->pixelSize.y, m->mode->refreshRate); + if (m->m_mode == m_monitor->m_currentMode) { + if (m->m_mode) + LOGM(LOG, " | sending current mode for {}: {}x{}@{}", m_monitor->m_name, m->m_mode->pixelSize.x, m->m_mode->pixelSize.y, m->m_mode->refreshRate); else - LOGM(LOG, " | sending current mode for {}: null (fake)", pMonitor->m_name); - resource->sendCurrentMode(m->resource.get()); + LOGM(LOG, " | sending current mode for {}: null (fake)", m_monitor->m_name); + m_resource->sendCurrentMode(m->m_resource.get()); break; } } @@ -211,60 +211,61 @@ void COutputHead::updateMode() { } void COutputHead::makeAndSendNewMode(SP mode) { - const auto RESOURCE = PROTO::outputManagement->m_vModes.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), mode)); + const auto RESOURCE = + PROTO::outputManagement->m_modes.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), mode)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::outputManagement->m_vModes.pop_back(); + m_resource->noMemory(); + PROTO::outputManagement->m_modes.pop_back(); return; } - modes.emplace_back(RESOURCE); - resource->sendMode(RESOURCE->resource.get()); + m_modes.emplace_back(RESOURCE); + m_resource->sendMode(RESOURCE->m_resource.get()); RESOURCE->sendAllData(); } PHLMONITOR COutputHead::monitor() { - return pMonitor.lock(); + return m_monitor.lock(); } -COutputMode::COutputMode(SP resource_, SP mode_) : resource(resource_), mode(mode_) { +COutputMode::COutputMode(SP resource_, SP mode_) : m_resource(resource_), m_mode(mode_) { if UNLIKELY (!good()) return; - resource->setRelease([this](CZwlrOutputModeV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrOutputModeV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setRelease([this](CZwlrOutputModeV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrOutputModeV1* r) { PROTO::outputManagement->destroyResource(this); }); } void COutputMode::sendAllData() { - if (!mode) + if (!m_mode) return; - LOGM(LOG, " | sending mode {}x{}@{}mHz, pref: {}", mode->pixelSize.x, mode->pixelSize.y, mode->refreshRate, mode->preferred); + LOGM(LOG, " | sending mode {}x{}@{}mHz, pref: {}", m_mode->pixelSize.x, m_mode->pixelSize.y, m_mode->refreshRate, m_mode->preferred); - resource->sendSize(mode->pixelSize.x, mode->pixelSize.y); - if (mode->refreshRate > 0) - resource->sendRefresh(mode->refreshRate); - if (mode->preferred) - resource->sendPreferred(); + m_resource->sendSize(m_mode->pixelSize.x, m_mode->pixelSize.y); + if (m_mode->refreshRate > 0) + m_resource->sendRefresh(m_mode->refreshRate); + if (m_mode->preferred) + m_resource->sendPreferred(); } bool COutputMode::good() { - return resource->resource(); + return m_resource->resource(); } SP COutputMode::getMode() { - return mode.lock(); + return m_mode.lock(); } -COutputConfiguration::COutputConfiguration(SP resource_, SP owner_) : resource(resource_), owner(owner_) { +COutputConfiguration::COutputConfiguration(SP resource_, SP owner_) : m_resource(resource_), m_owner(owner_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwlrOutputConfigurationV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrOutputConfigurationV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setDestroy([this](CZwlrOutputConfigurationV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrOutputConfigurationV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setEnableHead([this](CZwlrOutputConfigurationV1* r, uint32_t id, wl_resource* outputHead) { + m_resource->setEnableHead([this](CZwlrOutputConfigurationV1* r, uint32_t id, wl_resource* outputHead) { const auto HEAD = PROTO::outputManagement->headFromResource(outputHead); if (!HEAD) { @@ -279,21 +280,21 @@ COutputConfiguration::COutputConfiguration(SP resour return; } - const auto RESOURCE = PROTO::outputManagement->m_vConfigurationHeads.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), id), PMONITOR)); + const auto RESOURCE = PROTO::outputManagement->m_configurationHeads.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), id), PMONITOR)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::outputManagement->m_vConfigurationHeads.pop_back(); + m_resource->noMemory(); + PROTO::outputManagement->m_configurationHeads.pop_back(); return; } - heads.emplace_back(RESOURCE); + m_heads.emplace_back(RESOURCE); LOGM(LOG, "enableHead on {}. For now, doing nothing. Waiting for apply().", PMONITOR->m_name); }); - resource->setDisableHead([this](CZwlrOutputConfigurationV1* r, wl_resource* outputHead) { + m_resource->setDisableHead([this](CZwlrOutputConfigurationV1* r, wl_resource* outputHead) { const auto HEAD = PROTO::outputManagement->headFromResource(outputHead); if (!HEAD) { @@ -311,39 +312,39 @@ COutputConfiguration::COutputConfiguration(SP resour LOGM(LOG, "disableHead on {}", PMONITOR->m_name); SWlrManagerSavedOutputState newState; - if (owner->monitorStates.contains(PMONITOR->m_name)) - newState = owner->monitorStates.at(PMONITOR->m_name); + if (m_owner->m_monitorStates.contains(PMONITOR->m_name)) + newState = m_owner->m_monitorStates.at(PMONITOR->m_name); newState.enabled = false; g_pConfigManager->m_wantsMonitorReload = true; - owner->monitorStates[PMONITOR->m_name] = newState; + m_owner->m_monitorStates[PMONITOR->m_name] = newState; }); - resource->setTest([this](CZwlrOutputConfigurationV1* r) { + m_resource->setTest([this](CZwlrOutputConfigurationV1* r) { const auto SUCCESS = applyTestConfiguration(true); if (SUCCESS) - resource->sendSucceeded(); + m_resource->sendSucceeded(); else - resource->sendFailed(); + m_resource->sendFailed(); }); - resource->setApply([this](CZwlrOutputConfigurationV1* r) { + m_resource->setApply([this](CZwlrOutputConfigurationV1* r) { const auto SUCCESS = applyTestConfiguration(false); if (SUCCESS) - resource->sendSucceeded(); + m_resource->sendSucceeded(); else - resource->sendFailed(); + m_resource->sendFailed(); - owner->sendDone(); + m_owner->sendDone(); }); } bool COutputConfiguration::good() { - return resource->resource(); + return m_resource->resource(); } bool COutputConfiguration::applyTestConfiguration(bool test) { @@ -354,18 +355,18 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { LOGM(LOG, "Applying configuration"); - if (!owner) { + if (!m_owner) { LOGM(ERR, "applyTestConfiguration: no owner?!"); return false; } - for (auto const& headw : heads) { + for (auto const& headw : m_heads) { auto head = headw.lock(); if (!head) continue; - const auto PMONITOR = head->pMonitor; + const auto PMONITOR = head->m_monitor; if (!PMONITOR) continue; @@ -373,53 +374,53 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { LOGM(LOG, "Saving config for monitor {}", PMONITOR->m_name); SWlrManagerSavedOutputState newState; - if (owner->monitorStates.contains(PMONITOR->m_name)) - newState = owner->monitorStates.at(PMONITOR->m_name); + if (m_owner->m_monitorStates.contains(PMONITOR->m_name)) + newState = m_owner->m_monitorStates.at(PMONITOR->m_name); newState.enabled = true; - if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_MODE) { - newState.resolution = head->state.mode->getMode()->pixelSize; - newState.refresh = head->state.mode->getMode()->refreshRate; + if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_MODE) { + newState.resolution = head->m_state.mode->getMode()->pixelSize; + newState.refresh = head->m_state.mode->getMode()->refreshRate; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_MODE; LOGM(LOG, " > Mode: {:.0f}x{:.0f}@{}mHz", newState.resolution.x, newState.resolution.y, newState.refresh); - } else if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_CUSTOM_MODE) { - newState.resolution = head->state.customMode.size; - newState.refresh = head->state.customMode.refresh; + } else if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_CUSTOM_MODE) { + newState.resolution = head->m_state.customMode.size; + newState.refresh = head->m_state.customMode.refresh; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_CUSTOM_MODE; LOGM(LOG, " > Custom mode: {:.0f}x{:.0f}@{}mHz", newState.resolution.x, newState.resolution.y, newState.refresh); } - if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_POSITION) { - newState.position = head->state.position; + if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_POSITION) { + newState.position = head->m_state.position; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_POSITION; - LOGM(LOG, " > Position: {:.0f}, {:.0f}", head->state.position.x, head->state.position.y); + LOGM(LOG, " > Position: {:.0f}, {:.0f}", head->m_state.position.x, head->m_state.position.y); } - if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC) { - newState.adaptiveSync = head->state.adaptiveSync; + if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC) { + newState.adaptiveSync = head->m_state.adaptiveSync; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC; LOGM(LOG, " > vrr: {}", newState.adaptiveSync); } - if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_SCALE) { - newState.scale = head->state.scale; + if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_SCALE) { + newState.scale = head->m_state.scale; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_SCALE; LOGM(LOG, " > scale: {:.2f}", newState.scale); } - if (head->state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_TRANSFORM) { - newState.transform = head->state.transform; + if (head->m_state.committedProperties & eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_TRANSFORM) { + newState.transform = head->m_state.transform; newState.committedProperties |= eWlrOutputCommittedProperties::OUTPUT_HEAD_COMMITTED_TRANSFORM; LOGM(LOG, " > transform: {}", (uint8_t)newState.transform); } // reset properties for next set. - head->state.committedProperties = 0; + head->m_state.committedProperties = 0; g_pConfigManager->m_wantsMonitorReload = true; - owner->monitorStates[PMONITOR->m_name] = newState; + m_owner->m_monitorStates[PMONITOR->m_name] = newState; } LOGM(LOG, "Saved configuration"); @@ -427,13 +428,13 @@ bool COutputConfiguration::applyTestConfiguration(bool test) { return true; } -COutputConfigurationHead::COutputConfigurationHead(SP resource_, PHLMONITOR pMonitor_) : resource(resource_), pMonitor(pMonitor_) { +COutputConfigurationHead::COutputConfigurationHead(SP resource_, PHLMONITOR pMonitor_) : m_resource(resource_), m_monitor(pMonitor_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwlrOutputConfigurationHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrOutputConfigurationHeadV1* r) { PROTO::outputManagement->destroyResource(this); }); - resource->setSetMode([this](CZwlrOutputConfigurationHeadV1* r, wl_resource* outputMode) { + m_resource->setSetMode([this](CZwlrOutputConfigurationHeadV1* r, wl_resource* outputMode) { const auto MODE = PROTO::outputManagement->modeFromResource(outputMode); if (!MODE || !MODE->getMode()) { @@ -441,137 +442,137 @@ COutputConfigurationHead::COutputConfigurationHead(SPerror(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_MODE) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_MODE; - state.mode = MODE; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_MODE; + m_state.mode = MODE; - LOGM(LOG, " | configHead for {}: set mode to {}x{}@{}", pMonitor->m_name, MODE->getMode()->pixelSize.x, MODE->getMode()->pixelSize.y, MODE->getMode()->refreshRate); + LOGM(LOG, " | configHead for {}: set mode to {}x{}@{}", m_monitor->m_name, MODE->getMode()->pixelSize.x, MODE->getMode()->pixelSize.y, MODE->getMode()->refreshRate); }); - resource->setSetCustomMode([this](CZwlrOutputConfigurationHeadV1* r, int32_t w, int32_t h, int32_t refresh) { - if (!pMonitor) { + m_resource->setSetCustomMode([this](CZwlrOutputConfigurationHeadV1* r, int32_t w, int32_t h, int32_t refresh) { + if (!m_monitor) { LOGM(ERR, "setCustomMode on inert resource"); return; } - if (state.committedProperties & OUTPUT_HEAD_COMMITTED_CUSTOM_MODE) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_CUSTOM_MODE) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } if (w <= 0 || h <= 0 || refresh < 0) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_CUSTOM_MODE, "Invalid mode"); + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_CUSTOM_MODE, "Invalid mode"); return; } if (refresh == 0) { - LOGM(LOG, " | configHead for {}: refreshRate 0, using old refresh rate of {:.2f}Hz", pMonitor->m_name, pMonitor->m_refreshRate); - refresh = std::round(pMonitor->m_refreshRate * 1000.F); + LOGM(LOG, " | configHead for {}: refreshRate 0, using old refresh rate of {:.2f}Hz", m_monitor->m_name, m_monitor->m_refreshRate); + refresh = std::round(m_monitor->m_refreshRate * 1000.F); } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_CUSTOM_MODE; - state.customMode = {{w, h}, (uint32_t)refresh}; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_CUSTOM_MODE; + m_state.customMode = {{w, h}, (uint32_t)refresh}; - LOGM(LOG, " | configHead for {}: set custom mode to {}x{}@{}", pMonitor->m_name, w, h, refresh); + LOGM(LOG, " | configHead for {}: set custom mode to {}x{}@{}", m_monitor->m_name, w, h, refresh); }); - resource->setSetPosition([this](CZwlrOutputConfigurationHeadV1* r, int32_t x, int32_t y) { - if (!pMonitor) { + m_resource->setSetPosition([this](CZwlrOutputConfigurationHeadV1* r, int32_t x, int32_t y) { + if (!m_monitor) { LOGM(ERR, "setMode on inert resource"); return; } - if (state.committedProperties & OUTPUT_HEAD_COMMITTED_POSITION) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_POSITION) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_POSITION; - state.position = {x, y}; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_POSITION; + m_state.position = {x, y}; - LOGM(LOG, " | configHead for {}: set pos to {}, {}", pMonitor->m_name, x, y); + LOGM(LOG, " | configHead for {}: set pos to {}, {}", m_monitor->m_name, x, y); }); - resource->setSetTransform([this](CZwlrOutputConfigurationHeadV1* r, int32_t transform) { - if (!pMonitor) { + m_resource->setSetTransform([this](CZwlrOutputConfigurationHeadV1* r, int32_t transform) { + if (!m_monitor) { LOGM(ERR, "setMode on inert resource"); return; } - if (state.committedProperties & OUTPUT_HEAD_COMMITTED_TRANSFORM) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_TRANSFORM) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } if (transform < 0 || transform > 7) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_TRANSFORM, "Invalid transform"); + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_TRANSFORM, "Invalid transform"); return; } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_TRANSFORM; - state.transform = (wl_output_transform)transform; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_TRANSFORM; + m_state.transform = (wl_output_transform)transform; - LOGM(LOG, " | configHead for {}: set transform to {}", pMonitor->m_name, transform); + LOGM(LOG, " | configHead for {}: set transform to {}", m_monitor->m_name, transform); }); - resource->setSetScale([this](CZwlrOutputConfigurationHeadV1* r, wl_fixed_t scale_) { - if (!pMonitor) { + m_resource->setSetScale([this](CZwlrOutputConfigurationHeadV1* r, wl_fixed_t scale_) { + if (!m_monitor) { LOGM(ERR, "setMode on inert resource"); return; } - if (state.committedProperties & OUTPUT_HEAD_COMMITTED_SCALE) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_SCALE) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } double scale = wl_fixed_to_double(scale_); if (scale < 0.1 || scale > 10.0) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_SCALE, "Invalid scale"); + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_SCALE, "Invalid scale"); return; } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_SCALE; - state.scale = scale; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_SCALE; + m_state.scale = scale; - LOGM(LOG, " | configHead for {}: set scale to {:.2f}", pMonitor->m_name, scale); + LOGM(LOG, " | configHead for {}: set scale to {:.2f}", m_monitor->m_name, scale); }); - resource->setSetAdaptiveSync([this](CZwlrOutputConfigurationHeadV1* r, uint32_t as) { - if (!pMonitor) { + m_resource->setSetAdaptiveSync([this](CZwlrOutputConfigurationHeadV1* r, uint32_t as) { + if (!m_monitor) { LOGM(ERR, "setMode on inert resource"); return; } - if (state.committedProperties & OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); + if (m_state.committedProperties & OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC) { + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_ALREADY_SET, "Property already set"); return; } if (as > 1) { - resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_ADAPTIVE_SYNC_STATE, "Invalid adaptive sync state"); + m_resource->error(ZWLR_OUTPUT_CONFIGURATION_HEAD_V1_ERROR_INVALID_ADAPTIVE_SYNC_STATE, "Invalid adaptive sync state"); return; } - state.committedProperties |= OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC; - state.adaptiveSync = as; + m_state.committedProperties |= OUTPUT_HEAD_COMMITTED_ADAPTIVE_SYNC; + m_state.adaptiveSync = as; - LOGM(LOG, " | configHead for {}: set adaptiveSync to {}", pMonitor->m_name, as); + LOGM(LOG, " | configHead for {}: set adaptiveSync to {}", m_monitor->m_name, as); }); } bool COutputConfigurationHead::good() { - return resource->resource(); + return m_resource->resource(); } COutputManagementProtocol::COutputManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -579,48 +580,48 @@ COutputManagementProtocol::COutputManagementProtocol(const wl_interface* iface, } void COutputManagementProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; } void COutputManagementProtocol::destroyResource(COutputManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void COutputManagementProtocol::destroyResource(COutputHead* resource) { - std::erase_if(m_vHeads, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_heads, [&](const auto& other) { return other.get() == resource; }); } void COutputManagementProtocol::destroyResource(COutputMode* resource) { - std::erase_if(m_vModes, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_modes, [&](const auto& other) { return other.get() == resource; }); } void COutputManagementProtocol::destroyResource(COutputConfiguration* resource) { - std::erase_if(m_vConfigurations, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_configurations, [&](const auto& other) { return other.get() == resource; }); } void COutputManagementProtocol::destroyResource(COutputConfigurationHead* resource) { - std::erase_if(m_vConfigurationHeads, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_configurationHeads, [&](const auto& other) { return other.get() == resource; }); } void COutputManagementProtocol::updateAllOutputs() { for (auto const& m : g_pCompositor->m_realMonitors) { - for (auto const& mgr : m_vManagers) { + for (auto const& mgr : m_managers) { mgr->ensureMonitorSent(m); } } } SP COutputManagementProtocol::headFromResource(wl_resource* r) { - for (auto const& h : m_vHeads) { - if (h->resource->resource() == r) + for (auto const& h : m_heads) { + if (h->m_resource->resource() == r) return h; } @@ -628,8 +629,8 @@ SP COutputManagementProtocol::headFromResource(wl_resource* r) { } SP COutputManagementProtocol::modeFromResource(wl_resource* r) { - for (auto const& h : m_vModes) { - if (h->resource->resource() == r) + for (auto const& h : m_modes) { + if (h->m_resource->resource() == r) return h; } @@ -637,11 +638,11 @@ SP COutputManagementProtocol::modeFromResource(wl_resource* r) { } SP COutputManagementProtocol::getOutputStateFor(PHLMONITOR pMonitor) { - for (auto const& m : m_vManagers) { - if (!m->monitorStates.contains(pMonitor->m_name)) + for (auto const& m : m_managers) { + if (!m->m_monitorStates.contains(pMonitor->m_name)) continue; - return makeShared(m->monitorStates.at(pMonitor->m_name)); + return makeShared(m->m_monitorStates.at(pMonitor->m_name)); } return nullptr; diff --git a/src/protocols/OutputManagement.hpp b/src/protocols/OutputManagement.hpp index 1594df5d..cb03661e 100644 --- a/src/protocols/OutputManagement.hpp +++ b/src/protocols/OutputManagement.hpp @@ -59,15 +59,15 @@ class COutputManager { void sendDone(); // holds the states for this manager. - std::unordered_map monitorStates; + std::unordered_map m_monitorStates; private: - SP resource; - bool stopped = false; + SP m_resource; + bool m_stopped = false; - WP self; + WP m_self; - std::vector> heads; + std::vector> m_heads; void makeAndSendNewHead(PHLMONITOR pMonitor); friend class COutputManagementProtocol; @@ -82,8 +82,8 @@ class COutputMode { void sendAllData(); private: - SP resource; - WP mode; + SP m_resource; + WP m_mode; friend class COutputHead; friend class COutputManagementProtocol; @@ -99,18 +99,18 @@ class COutputHead { PHLMONITOR monitor(); private: - SP resource; - PHLMONITORREF pMonitor; + SP m_resource; + PHLMONITORREF m_monitor; void makeAndSendNewMode(SP mode); void sendCurrentMode(); - std::vector> modes; + std::vector> m_modes; struct { CHyprSignalListener monitorDestroy; CHyprSignalListener monitorModeChange; - } listeners; + } m_listeners; friend class COutputManager; friend class COutputManagementProtocol; @@ -122,11 +122,11 @@ class COutputConfigurationHead { bool good(); - SWlrManagerOutputState state; + SWlrManagerOutputState m_state; private: - SP resource; - PHLMONITORREF pMonitor; + SP m_resource; + PHLMONITORREF m_monitor; friend class COutputConfiguration; }; @@ -138,9 +138,9 @@ class COutputConfiguration { bool good(); private: - SP resource; - std::vector> heads; - WP owner; + SP m_resource; + std::vector> m_heads; + WP m_owner; bool applyTestConfiguration(bool test); }; @@ -164,11 +164,11 @@ class COutputManagementProtocol : public IWaylandProtocol { void updateAllOutputs(); // - std::vector> m_vManagers; - std::vector> m_vHeads; - std::vector> m_vModes; - std::vector> m_vConfigurations; - std::vector> m_vConfigurationHeads; + std::vector> m_managers; + std::vector> m_heads; + std::vector> m_modes; + std::vector> m_configurations; + std::vector> m_configurationHeads; SP headFromResource(wl_resource* r); SP modeFromResource(wl_resource* r); diff --git a/src/protocols/OutputPower.cpp b/src/protocols/OutputPower.cpp index 37f932bb..bae3078f 100644 --- a/src/protocols/OutputPower.cpp +++ b/src/protocols/OutputPower.cpp @@ -2,40 +2,40 @@ #include "core/Output.hpp" #include "../helpers/Monitor.hpp" -COutputPower::COutputPower(SP resource_, PHLMONITOR pMonitor_) : resource(resource_), pMonitor(pMonitor_) { - if UNLIKELY (!resource->resource()) +COutputPower::COutputPower(SP resource_, PHLMONITOR pMonitor_) : m_resource(resource_), m_monitor(pMonitor_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CZwlrOutputPowerV1* r) { PROTO::outputPower->destroyOutputPower(this); }); - resource->setOnDestroy([this](CZwlrOutputPowerV1* r) { PROTO::outputPower->destroyOutputPower(this); }); + m_resource->setDestroy([this](CZwlrOutputPowerV1* r) { PROTO::outputPower->destroyOutputPower(this); }); + m_resource->setOnDestroy([this](CZwlrOutputPowerV1* r) { PROTO::outputPower->destroyOutputPower(this); }); - resource->setSetMode([this](CZwlrOutputPowerV1* r, zwlrOutputPowerV1Mode mode) { - if (!pMonitor) + m_resource->setSetMode([this](CZwlrOutputPowerV1* r, zwlrOutputPowerV1Mode mode) { + if (!m_monitor) return; - pMonitor->m_dpmsStatus = mode == ZWLR_OUTPUT_POWER_V1_MODE_ON; + m_monitor->m_dpmsStatus = mode == ZWLR_OUTPUT_POWER_V1_MODE_ON; - pMonitor->m_output->state->setEnabled(mode == ZWLR_OUTPUT_POWER_V1_MODE_ON); + m_monitor->m_output->state->setEnabled(mode == ZWLR_OUTPUT_POWER_V1_MODE_ON); - if (!pMonitor->m_state.commit()) - LOGM(ERR, "Couldn't set dpms to {} for {}", pMonitor->m_dpmsStatus, pMonitor->m_name); + if (!m_monitor->m_state.commit()) + LOGM(ERR, "Couldn't set dpms to {} for {}", m_monitor->m_dpmsStatus, m_monitor->m_name); }); - resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); + m_resource->sendMode(m_monitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); - listeners.monitorDestroy = pMonitor->m_events.destroy.registerListener([this](std::any v) { - pMonitor.reset(); - resource->sendFailed(); + m_listeners.monitorDestroy = m_monitor->m_events.destroy.registerListener([this](std::any v) { + m_monitor.reset(); + m_resource->sendFailed(); }); - listeners.monitorDpms = pMonitor->m_events.dpmsChanged.registerListener( - [this](std::any v) { resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); - listeners.monitorState = pMonitor->m_events.modeChanged.registerListener( - [this](std::any v) { resource->sendMode(pMonitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); + m_listeners.monitorDpms = m_monitor->m_events.dpmsChanged.registerListener( + [this](std::any v) { m_resource->sendMode(m_monitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); + m_listeners.monitorState = m_monitor->m_events.modeChanged.registerListener( + [this](std::any v) { m_resource->sendMode(m_monitor->m_dpmsStatus ? ZWLR_OUTPUT_POWER_V1_MODE_ON : ZWLR_OUTPUT_POWER_V1_MODE_OFF); }); } bool COutputPower::good() { - return resource->resource(); + return m_resource->resource(); } COutputPowerProtocol::COutputPowerProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -43,7 +43,7 @@ COutputPowerProtocol::COutputPowerProtocol(const wl_interface* iface, const int& } void COutputPowerProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwlrOutputPowerManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwlrOutputPowerManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -51,11 +51,11 @@ void COutputPowerProtocol::bindManager(wl_client* client, void* data, uint32_t v } void COutputPowerProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void COutputPowerProtocol::destroyOutputPower(COutputPower* power) { - std::erase_if(m_vOutputPowers, [&](const auto& other) { return other.get() == power; }); + std::erase_if(m_outputPowers, [&](const auto& other) { return other.get() == power; }); } void COutputPowerProtocol::onGetOutputPower(CZwlrOutputPowerManagerV1* pMgr, uint32_t id, wl_resource* output) { @@ -68,11 +68,11 @@ void COutputPowerProtocol::onGetOutputPower(CZwlrOutputPowerManagerV1* pMgr, uin } const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vOutputPowers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), OUTPUT->m_monitor.lock())).get(); + const auto RESOURCE = m_outputPowers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), OUTPUT->m_monitor.lock())).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vOutputPowers.pop_back(); + m_outputPowers.pop_back(); return; } } diff --git a/src/protocols/OutputPower.hpp b/src/protocols/OutputPower.hpp index c61eaa3d..1c3ecc77 100644 --- a/src/protocols/OutputPower.hpp +++ b/src/protocols/OutputPower.hpp @@ -15,15 +15,15 @@ class COutputPower { bool good(); private: - SP resource; + SP m_resource; - PHLMONITORREF pMonitor; + PHLMONITORREF m_monitor; struct { CHyprSignalListener monitorDestroy; CHyprSignalListener monitorState; CHyprSignalListener monitorDpms; - } listeners; + } m_listeners; }; class COutputPowerProtocol : public IWaylandProtocol { @@ -38,8 +38,8 @@ class COutputPowerProtocol : public IWaylandProtocol { void onGetOutputPower(CZwlrOutputPowerManagerV1* pMgr, uint32_t id, wl_resource* output); // - std::vector> m_vManagers; - std::vector> m_vOutputPowers; + std::vector> m_managers; + std::vector> m_outputPowers; friend class COutputPower; }; diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index 38df694c..425a983d 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -9,38 +9,38 @@ #include "../helpers/Monitor.hpp" CPointerConstraint::CPointerConstraint(SP resource_, SP surf, wl_resource* region_, zwpPointerConstraintsV1Lifetime lifetime_) : - resourceL(resource_), locked(true), lifetime(lifetime_) { + m_resourceLocked(resource_), m_locked(true), m_lifetime(lifetime_) { if UNLIKELY (!resource_->resource()) return; resource_->setOnDestroy([this](CZwpLockedPointerV1* p) { PROTO::constraints->destroyPointerConstraint(this); }); resource_->setDestroy([this](CZwpLockedPointerV1* p) { PROTO::constraints->destroyPointerConstraint(this); }); - pHLSurface = CWLSurface::fromResource(surf); + m_hlSurface = CWLSurface::fromResource(surf); - if (!pHLSurface) + if (!m_hlSurface) return; if (region_) - region.set(CWLRegionResource::fromResource(region_)->m_region); + m_region.set(CWLRegionResource::fromResource(region_)->m_region); resource_->setSetRegion([this](CZwpLockedPointerV1* p, wl_resource* region) { onSetRegion(region); }); resource_->setSetCursorPositionHint([this](CZwpLockedPointerV1* p, wl_fixed_t x, wl_fixed_t y) { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - if (!pHLSurface) + if (!m_hlSurface) return; - hintSet = true; + m_hintSet = true; float scale = 1.f; - const auto PWINDOW = pHLSurface->getWindow(); + const auto PWINDOW = m_hlSurface->getWindow(); if (PWINDOW) { const auto ISXWL = PWINDOW->m_isX11; scale = ISXWL && *PXWLFORCESCALEZERO ? PWINDOW->m_X11SurfaceScaledBy : 1.f; } - positionHint = {wl_fixed_to_double(x) / scale, wl_fixed_to_double(y) / scale}; + m_positionHint = {wl_fixed_to_double(x) / scale, wl_fixed_to_double(y) / scale}; g_pInputManager->simulateMouseMovement(); }); @@ -48,20 +48,20 @@ CPointerConstraint::CPointerConstraint(SP resource_, SP resource_, SP surf, wl_resource* region_, zwpPointerConstraintsV1Lifetime lifetime_) : - resourceC(resource_), lifetime(lifetime_) { + m_resourceConfined(resource_), m_lifetime(lifetime_) { if UNLIKELY (!resource_->resource()) return; resource_->setOnDestroy([this](CZwpConfinedPointerV1* p) { PROTO::constraints->destroyPointerConstraint(this); }); resource_->setDestroy([this](CZwpConfinedPointerV1* p) { PROTO::constraints->destroyPointerConstraint(this); }); - pHLSurface = CWLSurface::fromResource(surf); + m_hlSurface = CWLSurface::fromResource(surf); - if (!pHLSurface) + if (!m_hlSurface) return; if (region_) - region.set(CWLRegionResource::fromResource(region_)->m_region); + m_region.set(CWLRegionResource::fromResource(region_)->m_region); resource_->setSetRegion([this](CZwpConfinedPointerV1* p, wl_resource* region) { onSetRegion(region); }); @@ -74,15 +74,15 @@ CPointerConstraint::~CPointerConstraint() { return !SHP || SHP.get() == this; }); - if (pHLSurface) - pHLSurface->m_constraint.reset(); + if (m_hlSurface) + m_hlSurface->m_constraint.reset(); } void CPointerConstraint::sharedConstructions() { - if (pHLSurface) { - listeners.destroySurface = pHLSurface->m_events.destroy.registerListener([this](std::any d) { - pHLSurface.reset(); - if (active) + if (m_hlSurface) { + m_listeners.destroySurface = m_hlSurface->m_events.destroy.registerListener([this](std::any d) { + m_hlSurface.reset(); + if (m_active) deactivate(); std::erase_if(g_pInputManager->m_constraints, [this](const auto& c) { @@ -92,26 +92,26 @@ void CPointerConstraint::sharedConstructions() { }); } - cursorPosOnActivate = g_pInputManager->getMouseCoordsInternal(); + m_cursorPosOnActivate = g_pInputManager->getMouseCoordsInternal(); } bool CPointerConstraint::good() { - return locked ? resourceL->resource() : resourceC->resource(); + return m_locked ? m_resourceLocked->resource() : m_resourceConfined->resource(); } void CPointerConstraint::deactivate() { - if (!active) + if (!m_active) return; - if (locked) - resourceL->sendUnlocked(); + if (m_locked) + m_resourceLocked->sendUnlocked(); else - resourceC->sendUnconfined(); + m_resourceConfined->sendUnconfined(); - active = false; + m_active = false; - if (lifetime == ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT) { - dead = true; + if (m_lifetime == ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT) { + m_dead = true; // remove from inputmgr std::erase_if(g_pInputManager->m_constraints, [this](const auto& c) { const auto SHP = c.lock(); @@ -121,50 +121,50 @@ void CPointerConstraint::deactivate() { } void CPointerConstraint::activate() { - if (dead || active) + if (m_dead || m_active) return; // TODO: hack, probably not a super duper great idea - if (g_pSeatManager->m_state.pointerFocus != pHLSurface->resource()) { - const auto SURFBOX = pHLSurface->getSurfaceBoxGlobal(); + if (g_pSeatManager->m_state.pointerFocus != m_hlSurface->resource()) { + const auto SURFBOX = m_hlSurface->getSurfaceBoxGlobal(); const auto LOCAL = SURFBOX.has_value() ? logicPositionHint() - SURFBOX->pos() : Vector2D{}; - g_pSeatManager->setPointerFocus(pHLSurface->resource(), LOCAL); + g_pSeatManager->setPointerFocus(m_hlSurface->resource(), LOCAL); } - if (locked) - resourceL->sendLocked(); + if (m_locked) + m_resourceLocked->sendLocked(); else - resourceC->sendConfined(); + m_resourceConfined->sendConfined(); - active = true; + m_active = true; g_pInputManager->simulateMouseMovement(); } bool CPointerConstraint::isActive() { - return active; + return m_active; } void CPointerConstraint::onSetRegion(wl_resource* wlRegion) { if (!wlRegion) { - region.clear(); + m_region.clear(); return; } - const auto REGION = region.set(CWLRegionResource::fromResource(wlRegion)->m_region); + const auto REGION = m_region.set(CWLRegionResource::fromResource(wlRegion)->m_region); - region.set(REGION); - positionHint = region.closestPoint(positionHint); + m_region.set(REGION); + m_positionHint = m_region.closestPoint(m_positionHint); g_pInputManager->simulateMouseMovement(); // to warp the cursor if anything's amiss } SP CPointerConstraint::owner() { - return pHLSurface.lock(); + return m_hlSurface.lock(); } CRegion CPointerConstraint::logicConstraintRegion() { - CRegion rg = region; - const auto SURFBOX = pHLSurface->getSurfaceBoxGlobal(); + CRegion rg = m_region; + const auto SURFBOX = m_hlSurface->getSurfaceBoxGlobal(); // if region wasn't set in pointer-constraints request take surface region if (rg.empty() && SURFBOX.has_value()) { @@ -178,17 +178,17 @@ CRegion CPointerConstraint::logicConstraintRegion() { } bool CPointerConstraint::isLocked() { - return locked; + return m_locked; } Vector2D CPointerConstraint::logicPositionHint() { - if UNLIKELY (!pHLSurface) + if UNLIKELY (!m_hlSurface) return {}; - const auto SURFBOX = pHLSurface->getSurfaceBoxGlobal(); + const auto SURFBOX = m_hlSurface->getSurfaceBoxGlobal(); const auto CONSTRAINTPOS = SURFBOX.has_value() ? SURFBOX->pos() : Vector2D{}; - return hintSet ? CONSTRAINTPOS + positionHint : cursorPosOnActivate; + return m_hintSet ? CONSTRAINTPOS + m_positionHint : m_cursorPosOnActivate; } CPointerConstraintsProtocol::CPointerConstraintsProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -196,7 +196,7 @@ CPointerConstraintsProtocol::CPointerConstraintsProtocol(const wl_interface* ifa } void CPointerConstraintsProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpPointerConstraintsV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpPointerConstraintsV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -207,18 +207,18 @@ void CPointerConstraintsProtocol::bindManager(wl_client* client, void* data, uin } void CPointerConstraintsProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CPointerConstraintsProtocol::destroyPointerConstraint(CPointerConstraint* hyprlandEgg) { - std::erase_if(m_vConstraints, [&](const auto& other) { return other.get() == hyprlandEgg; }); + std::erase_if(m_constraints, [&](const auto& other) { return other.get() == hyprlandEgg; }); } void CPointerConstraintsProtocol::onNewConstraint(SP constraint, CZwpPointerConstraintsV1* pMgr) { if UNLIKELY (!constraint->good()) { LOGM(ERR, "Couldn't create constraint??"); pMgr->noMemory(); - m_vConstraints.pop_back(); + m_constraints.pop_back(); return; } @@ -229,12 +229,12 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra const auto OWNER = constraint->owner(); - const auto DUPES = std::count_if(m_vConstraints.begin(), m_vConstraints.end(), [OWNER](const auto& c) { return c->owner() == OWNER; }); + const auto DUPES = std::count_if(m_constraints.begin(), m_constraints.end(), [OWNER](const auto& c) { return c->owner() == OWNER; }); if UNLIKELY (DUPES > 1) { LOGM(ERR, "Constraint for surface duped"); pMgr->error(ZWP_POINTER_CONSTRAINTS_V1_ERROR_ALREADY_CONSTRAINED, "Surface already confined"); - m_vConstraints.pop_back(); + m_constraints.pop_back(); return; } @@ -249,7 +249,7 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra void CPointerConstraintsProtocol::onLockPointer(CZwpPointerConstraintsV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* pointer, wl_resource* region, zwpPointerConstraintsV1Lifetime lifetime) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vConstraints.emplace_back( + const auto RESOURCE = m_constraints.emplace_back( makeShared(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surface), region, lifetime)); onNewConstraint(RESOURCE, pMgr); @@ -258,7 +258,7 @@ void CPointerConstraintsProtocol::onLockPointer(CZwpPointerConstraintsV1* pMgr, void CPointerConstraintsProtocol::onConfinePointer(CZwpPointerConstraintsV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* pointer, wl_resource* region, zwpPointerConstraintsV1Lifetime lifetime) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vConstraints.emplace_back( + const auto RESOURCE = m_constraints.emplace_back( makeShared(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surface), region, lifetime)); onNewConstraint(RESOURCE, pMgr); diff --git a/src/protocols/PointerConstraints.hpp b/src/protocols/PointerConstraints.hpp index 4d2b4b38..1691b7c0 100644 --- a/src/protocols/PointerConstraints.hpp +++ b/src/protocols/PointerConstraints.hpp @@ -31,26 +31,26 @@ class CPointerConstraint { Vector2D logicPositionHint(); private: - SP resourceL; - SP resourceC; + SP m_resourceLocked; + SP m_resourceConfined; - WP pHLSurface; + WP m_hlSurface; - CRegion region; - bool hintSet = false; - Vector2D positionHint = {-1, -1}; - Vector2D cursorPosOnActivate = {-1, -1}; - bool active = false; - bool locked = false; - bool dead = false; - zwpPointerConstraintsV1Lifetime lifetime = ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT; + CRegion m_region; + bool m_hintSet = false; + Vector2D m_positionHint = {-1, -1}; + Vector2D m_cursorPosOnActivate = {-1, -1}; + bool m_active = false; + bool m_locked = false; + bool m_dead = false; + zwpPointerConstraintsV1Lifetime m_lifetime = ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT; void sharedConstructions(); void onSetRegion(wl_resource* region); struct { CHyprSignalListener destroySurface; - } listeners; + } m_listeners; }; class CPointerConstraintsProtocol : public IWaylandProtocol { @@ -67,8 +67,8 @@ class CPointerConstraintsProtocol : public IWaylandProtocol { void onNewConstraint(SP constraint, CZwpPointerConstraintsV1* pMgr); // - std::vector> m_vManagers; - std::vector> m_vConstraints; + std::vector> m_managers; + std::vector> m_constraints; friend class CPointerConstraint; }; diff --git a/src/protocols/PointerGestures.cpp b/src/protocols/PointerGestures.cpp index e6c50dad..00576778 100644 --- a/src/protocols/PointerGestures.cpp +++ b/src/protocols/PointerGestures.cpp @@ -3,40 +3,40 @@ #include "core/Seat.hpp" #include "core/Compositor.hpp" -CPointerGestureSwipe::CPointerGestureSwipe(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CPointerGestureSwipe::CPointerGestureSwipe(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setOnDestroy([this](CZwpPointerGestureSwipeV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); - resource->setDestroy([this](CZwpPointerGestureSwipeV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setOnDestroy([this](CZwpPointerGestureSwipeV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setDestroy([this](CZwpPointerGestureSwipeV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); } bool CPointerGestureSwipe::good() { - return resource->resource(); + return m_resource->resource(); } -CPointerGestureHold::CPointerGestureHold(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CPointerGestureHold::CPointerGestureHold(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setOnDestroy([this](CZwpPointerGestureHoldV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); - resource->setDestroy([this](CZwpPointerGestureHoldV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setOnDestroy([this](CZwpPointerGestureHoldV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setDestroy([this](CZwpPointerGestureHoldV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); } bool CPointerGestureHold::good() { - return resource->resource(); + return m_resource->resource(); } -CPointerGesturePinch::CPointerGesturePinch(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CPointerGesturePinch::CPointerGesturePinch(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setOnDestroy([this](CZwpPointerGesturePinchV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); - resource->setDestroy([this](CZwpPointerGesturePinchV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setOnDestroy([this](CZwpPointerGesturePinchV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); + m_resource->setDestroy([this](CZwpPointerGesturePinchV1* p) { PROTO::pointerGestures->onGestureDestroy(this); }); } bool CPointerGesturePinch::good() { - return resource->resource(); + return m_resource->resource(); } CPointerGesturesProtocol::CPointerGesturesProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -44,7 +44,7 @@ CPointerGesturesProtocol::CPointerGesturesProtocol(const wl_interface* iface, co } void CPointerGesturesProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpPointerGesturesV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setRelease([this](CZwpPointerGesturesV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -54,24 +54,24 @@ void CPointerGesturesProtocol::bindManager(wl_client* client, void* data, uint32 } void CPointerGesturesProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CPointerGesturesProtocol::onGestureDestroy(CPointerGestureSwipe* gesture) { - std::erase_if(m_vSwipes, [&](const auto& other) { return other.get() == gesture; }); + std::erase_if(m_swipes, [&](const auto& other) { return other.get() == gesture; }); } void CPointerGesturesProtocol::onGestureDestroy(CPointerGesturePinch* gesture) { - std::erase_if(m_vPinches, [&](const auto& other) { return other.get() == gesture; }); + std::erase_if(m_pinches, [&](const auto& other) { return other.get() == gesture; }); } void CPointerGesturesProtocol::onGestureDestroy(CPointerGestureHold* gesture) { - std::erase_if(m_vHolds, [&](const auto& other) { return other.get() == gesture; }); + std::erase_if(m_holds, [&](const auto& other) { return other.get() == gesture; }); } void CPointerGesturesProtocol::onGetPinchGesture(CZwpPointerGesturesV1* pMgr, uint32_t id, wl_resource* pointer) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vPinches.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); + const auto RESOURCE = m_pinches.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); @@ -82,7 +82,7 @@ void CPointerGesturesProtocol::onGetPinchGesture(CZwpPointerGesturesV1* pMgr, ui void CPointerGesturesProtocol::onGetSwipeGesture(CZwpPointerGesturesV1* pMgr, uint32_t id, wl_resource* pointer) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vSwipes.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); + const auto RESOURCE = m_swipes.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); @@ -93,7 +93,7 @@ void CPointerGesturesProtocol::onGetSwipeGesture(CZwpPointerGesturesV1* pMgr, ui void CPointerGesturesProtocol::onGetHoldGesture(CZwpPointerGesturesV1* pMgr, uint32_t id, wl_resource* pointer) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vHolds.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); + const auto RESOURCE = m_holds.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); @@ -110,11 +110,11 @@ void CPointerGesturesProtocol::swipeBegin(uint32_t timeMs, uint32_t fingers) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vSwipes) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_swipes) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); + sw->m_resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } @@ -124,11 +124,11 @@ void CPointerGesturesProtocol::swipeUpdate(uint32_t timeMs, const Vector2D& delt const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - for (auto const& sw : m_vSwipes) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_swipes) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendUpdate(timeMs, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y)); + sw->m_resource->sendUpdate(timeMs, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y)); } } @@ -140,11 +140,11 @@ void CPointerGesturesProtocol::swipeEnd(uint32_t timeMs, bool cancelled) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vSwipes) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_swipes) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendEnd(SERIAL, timeMs, cancelled); + sw->m_resource->sendEnd(SERIAL, timeMs, cancelled); } } @@ -156,11 +156,11 @@ void CPointerGesturesProtocol::pinchBegin(uint32_t timeMs, uint32_t fingers) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vPinches) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_pinches) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); + sw->m_resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } @@ -170,11 +170,11 @@ void CPointerGesturesProtocol::pinchUpdate(uint32_t timeMs, const Vector2D& delt const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client(); - for (auto const& sw : m_vPinches) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_pinches) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendUpdate(timeMs, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y), wl_fixed_from_double(scale), wl_fixed_from_double(rotation)); + sw->m_resource->sendUpdate(timeMs, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y), wl_fixed_from_double(scale), wl_fixed_from_double(rotation)); } } @@ -186,11 +186,11 @@ void CPointerGesturesProtocol::pinchEnd(uint32_t timeMs, bool cancelled) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vPinches) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_pinches) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendEnd(SERIAL, timeMs, cancelled); + sw->m_resource->sendEnd(SERIAL, timeMs, cancelled); } } @@ -202,11 +202,11 @@ void CPointerGesturesProtocol::holdBegin(uint32_t timeMs, uint32_t fingers) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vHolds) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_holds) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); + sw->m_resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers); } } @@ -218,10 +218,10 @@ void CPointerGesturesProtocol::holdEnd(uint32_t timeMs, bool cancelled) { const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock()); - for (auto const& sw : m_vHolds) { - if (sw->resource->client() != FOCUSEDCLIENT) + for (auto const& sw : m_holds) { + if (sw->m_resource->client() != FOCUSEDCLIENT) continue; - sw->resource->sendEnd(SERIAL, timeMs, cancelled); + sw->m_resource->sendEnd(SERIAL, timeMs, cancelled); } } diff --git a/src/protocols/PointerGestures.hpp b/src/protocols/PointerGestures.hpp index 5211ecf3..7e169b24 100644 --- a/src/protocols/PointerGestures.hpp +++ b/src/protocols/PointerGestures.hpp @@ -12,7 +12,7 @@ class CPointerGestureSwipe { bool good(); private: - SP resource; + SP m_resource; friend class CPointerGesturesProtocol; }; @@ -24,7 +24,7 @@ class CPointerGesturePinch { bool good(); private: - SP resource; + SP m_resource; friend class CPointerGesturesProtocol; }; @@ -36,7 +36,7 @@ class CPointerGestureHold { bool good(); private: - SP resource; + SP m_resource; friend class CPointerGesturesProtocol; }; @@ -68,10 +68,10 @@ class CPointerGesturesProtocol : public IWaylandProtocol { void onGetHoldGesture(CZwpPointerGesturesV1* pMgr, uint32_t id, wl_resource* pointer); // - std::vector> m_vManagers; - std::vector> m_vSwipes; - std::vector> m_vPinches; - std::vector> m_vHolds; + std::vector> m_managers; + std::vector> m_swipes; + std::vector> m_pinches; + std::vector> m_holds; friend class CPointerGestureHold; friend class CPointerGesturePinch; diff --git a/src/protocols/PresentationTime.cpp b/src/protocols/PresentationTime.cpp index e002bc28..a533d7b3 100644 --- a/src/protocols/PresentationTime.cpp +++ b/src/protocols/PresentationTime.cpp @@ -6,52 +6,52 @@ #include "core/Output.hpp" #include -CQueuedPresentationData::CQueuedPresentationData(SP surf) : surface(surf) { +CQueuedPresentationData::CQueuedPresentationData(SP surf) : m_surface(surf) { ; } void CQueuedPresentationData::setPresentationType(bool zeroCopy_) { - zeroCopy = zeroCopy_; + m_zeroCopy = zeroCopy_; } void CQueuedPresentationData::attachMonitor(PHLMONITOR pMonitor_) { - pMonitor = pMonitor_; + m_monitor = pMonitor_; } void CQueuedPresentationData::presented() { - wasPresented = true; + m_wasPresented = true; } void CQueuedPresentationData::discarded() { - wasPresented = false; + m_wasPresented = false; } -CPresentationFeedback::CPresentationFeedback(SP resource_, SP surf) : resource(resource_), surface(surf) { +CPresentationFeedback::CPresentationFeedback(SP resource_, SP surf) : m_resource(resource_), m_surface(surf) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CWpPresentationFeedback* pMgr) { - if (!done) // if it's done, it's probably already destroyed. If not, it will be in a sec. + m_resource->setOnDestroy([this](CWpPresentationFeedback* pMgr) { + if (!m_done) // if it's done, it's probably already destroyed. If not, it will be in a sec. PROTO::presentation->destroyResource(this); }); } bool CPresentationFeedback::good() { - return resource->resource(); + return m_resource->resource(); } void CPresentationFeedback::sendQueued(SP data, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { - auto client = resource->client(); + auto client = m_resource->client(); - if LIKELY (PROTO::outputs.contains(data->pMonitor->m_name)) { - if LIKELY (auto outputResource = PROTO::outputs.at(data->pMonitor->m_name)->outputResourceFrom(client); outputResource) - resource->sendSyncOutput(outputResource->getResource()->resource()); + if LIKELY (PROTO::outputs.contains(data->m_monitor->m_name)) { + if LIKELY (auto outputResource = PROTO::outputs.at(data->m_monitor->m_name)->outputResourceFrom(client); outputResource) + m_resource->sendSyncOutput(outputResource->getResource()->resource()); } uint32_t flags = 0; - if (!data->pMonitor->m_tearingState.activelyTearing) + if (!data->m_monitor->m_tearingState.activelyTearing) flags |= WP_PRESENTATION_FEEDBACK_KIND_VSYNC; - if (data->zeroCopy) + if (data->m_zeroCopy) flags |= WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY; if (reportedFlags & Aquamarine::IOutput::AQ_OUTPUT_PRESENT_HW_CLOCK) flags |= WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK; @@ -64,24 +64,24 @@ void CPresentationFeedback::sendQueued(SP data, const T if (sizeof(time_t) > 4) tv_sec = TIMESPEC.tv_sec >> 32; - if (data->wasPresented) - resource->sendPresented((uint32_t)tv_sec, (uint32_t)(TIMESPEC.tv_sec & 0xFFFFFFFF), (uint32_t)(TIMESPEC.tv_nsec), untilRefreshNs, (uint32_t)(seq >> 32), - (uint32_t)(seq & 0xFFFFFFFF), (wpPresentationFeedbackKind)flags); + if (data->m_wasPresented) + m_resource->sendPresented((uint32_t)tv_sec, (uint32_t)(TIMESPEC.tv_sec & 0xFFFFFFFF), (uint32_t)(TIMESPEC.tv_nsec), untilRefreshNs, (uint32_t)(seq >> 32), + (uint32_t)(seq & 0xFFFFFFFF), (wpPresentationFeedbackKind)flags); else - resource->sendDiscarded(); + m_resource->sendDiscarded(); - done = true; + m_done = true; } CPresentationProtocol::CPresentationProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { static auto P = g_pHookSystem->hookDynamic("monitorRemoved", [this](void* self, SCallbackInfo& info, std::any param) { const auto PMONITOR = PHLMONITORREF{std::any_cast(param)}; - std::erase_if(m_vQueue, [PMONITOR](const auto& other) { return !other->surface || other->pMonitor == PMONITOR; }); + std::erase_if(m_queue, [PMONITOR](const auto& other) { return !other->m_surface || other->m_monitor == PMONITOR; }); }); } void CPresentationProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CWpPresentation* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpPresentation* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -89,50 +89,49 @@ void CPresentationProtocol::bindManager(wl_client* client, void* data, uint32_t } void CPresentationProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CPresentationProtocol::destroyResource(CPresentationFeedback* feedback) { - std::erase_if(m_vFeedbacks, [&](const auto& other) { return other.get() == feedback; }); + std::erase_if(m_feedbacks, [&](const auto& other) { return other.get() == feedback; }); } void CPresentationProtocol::onGetFeedback(CWpPresentation* pMgr, wl_resource* surf, uint32_t id) { const auto CLIENT = pMgr->client(); const auto RESOURCE = - m_vFeedbacks.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surf))) - .get(); + m_feedbacks.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surf))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vFeedbacks.pop_back(); + m_feedbacks.pop_back(); return; } } void CPresentationProtocol::onPresented(PHLMONITOR pMonitor, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags) { - for (auto const& feedback : m_vFeedbacks) { - if (!feedback->surface) + for (auto const& feedback : m_feedbacks) { + if (!feedback->m_surface) continue; - for (auto const& data : m_vQueue) { - if (!data->surface || data->surface != feedback->surface || (data->pMonitor && data->pMonitor != pMonitor)) + for (auto const& data : m_queue) { + if (!data->m_surface || data->m_surface != feedback->m_surface || (data->m_monitor && data->m_monitor != pMonitor)) continue; feedback->sendQueued(data, when, untilRefreshNs, seq, reportedFlags); - feedback->done = true; + feedback->m_done = true; break; } } - if (m_vFeedbacks.size() > 10000 /* arbitrary number I chose as fitting */) { - LOGM(ERR, "FIXME: presentation has a feedback leak, and has grown to {} pending entries!!! Dropping!!!!!", m_vFeedbacks.size()); - m_vFeedbacks = {m_vFeedbacks.begin() + 9000, m_vFeedbacks.end()}; + if (m_feedbacks.size() > 10000 /* arbitrary number I chose as fitting */) { + LOGM(ERR, "FIXME: presentation has a feedback leak, and has grown to {} pending entries!!! Dropping!!!!!", m_feedbacks.size()); + m_feedbacks = {m_feedbacks.begin() + 9000, m_feedbacks.end()}; } - std::erase_if(m_vFeedbacks, [](const auto& other) { return !other->surface || other->done; }); - std::erase_if(m_vQueue, [pMonitor](const auto& other) { return !other->surface || other->pMonitor == pMonitor || !other->pMonitor || other->done; }); + std::erase_if(m_feedbacks, [](const auto& other) { return !other->m_surface || other->m_done; }); + std::erase_if(m_queue, [pMonitor](const auto& other) { return !other->m_surface || other->m_monitor == pMonitor || !other->m_monitor || other->m_done; }); } void CPresentationProtocol::queueData(SP data) { - m_vQueue.emplace_back(data); + m_queue.emplace_back(data); } diff --git a/src/protocols/PresentationTime.hpp b/src/protocols/PresentationTime.hpp index aa93068b..a7b13a77 100644 --- a/src/protocols/PresentationTime.hpp +++ b/src/protocols/PresentationTime.hpp @@ -19,13 +19,13 @@ class CQueuedPresentationData { void presented(); void discarded(); - bool done = false; + bool m_done = false; private: - bool wasPresented = false; - bool zeroCopy = false; - PHLMONITORREF pMonitor; - WP surface; + bool m_wasPresented = false; + bool m_zeroCopy = false; + PHLMONITORREF m_monitor; + WP m_surface; friend class CPresentationFeedback; friend class CPresentationProtocol; @@ -40,9 +40,9 @@ class CPresentationFeedback { void sendQueued(SP data, const Time::steady_tp& when, uint32_t untilRefreshNs, uint64_t seq, uint32_t reportedFlags); private: - SP resource; - WP surface; - bool done = false; + SP m_resource; + WP m_surface; + bool m_done = false; friend class CPresentationProtocol; }; @@ -62,9 +62,9 @@ class CPresentationProtocol : public IWaylandProtocol { void onGetFeedback(CWpPresentation* pMgr, wl_resource* surf, uint32_t id); // - std::vector> m_vManagers; - std::vector> m_vFeedbacks; - std::vector> m_vQueue; + std::vector> m_managers; + std::vector> m_feedbacks; + std::vector> m_queue; friend class CPresentationFeedback; }; diff --git a/src/protocols/PrimarySelection.cpp b/src/protocols/PrimarySelection.cpp index d6eb5165..3c263647 100644 --- a/src/protocols/PrimarySelection.cpp +++ b/src/protocols/PrimarySelection.cpp @@ -5,60 +5,60 @@ #include "../config/ConfigValue.hpp" using namespace Hyprutils::OS; -CPrimarySelectionOffer::CPrimarySelectionOffer(SP resource_, SP source_) : source(source_), resource(resource_) { +CPrimarySelectionOffer::CPrimarySelectionOffer(SP resource_, SP source_) : m_source(source_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpPrimarySelectionOfferV1* r) { PROTO::primarySelection->destroyResource(this); }); - resource->setOnDestroy([this](CZwpPrimarySelectionOfferV1* r) { PROTO::primarySelection->destroyResource(this); }); + m_resource->setDestroy([this](CZwpPrimarySelectionOfferV1* r) { PROTO::primarySelection->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpPrimarySelectionOfferV1* r) { PROTO::primarySelection->destroyResource(this); }); - resource->setReceive([this](CZwpPrimarySelectionOfferV1* r, const char* mime, int32_t fd) { + m_resource->setReceive([this](CZwpPrimarySelectionOfferV1* r, const char* mime, int32_t fd) { CFileDescriptor sendFd{fd}; - if (!source) { + if (!m_source) { LOGM(WARN, "Possible bug: Receive on an offer w/o a source"); return; } - if (dead) { + if (m_dead) { LOGM(WARN, "Possible bug: Receive on an offer that's dead"); return; } - LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)source.get()); + LOGM(LOG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)m_source.get()); - source->send(mime, std::move(sendFd)); + m_source->send(mime, std::move(sendFd)); }); } bool CPrimarySelectionOffer::good() { - return resource->resource(); + return m_resource->resource(); } void CPrimarySelectionOffer::sendData() { - if UNLIKELY (!source) + if UNLIKELY (!m_source) return; - for (auto const& m : source->mimes()) { - resource->sendOffer(m.c_str()); + for (auto const& m : m_source->mimes()) { + m_resource->sendOffer(m.c_str()); } } -CPrimarySelectionSource::CPrimarySelectionSource(SP resource_, SP device_) : device(device_), resource(resource_) { +CPrimarySelectionSource::CPrimarySelectionSource(SP resource_, SP device_) : m_device(device_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CZwpPrimarySelectionSourceV1* r) { + m_resource->setDestroy([this](CZwpPrimarySelectionSourceV1* r) { m_events.destroy.emit(); PROTO::primarySelection->destroyResource(this); }); - resource->setOnDestroy([this](CZwpPrimarySelectionSourceV1* r) { + m_resource->setOnDestroy([this](CZwpPrimarySelectionSourceV1* r) { m_events.destroy.emit(); PROTO::primarySelection->destroyResource(this); }); - resource->setOffer([this](CZwpPrimarySelectionSourceV1* r, const char* mime) { mimeTypes.emplace_back(mime); }); + m_resource->setOffer([this](CZwpPrimarySelectionSourceV1* r, const char* mime) { m_mimeTypes.emplace_back(mime); }); } CPrimarySelectionSource::~CPrimarySelectionSource() { @@ -67,51 +67,51 @@ CPrimarySelectionSource::~CPrimarySelectionSource() { SP CPrimarySelectionSource::fromResource(wl_resource* res) { auto data = (CPrimarySelectionSource*)(((CZwpPrimarySelectionSourceV1*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CPrimarySelectionSource::good() { - return resource->resource(); + return m_resource->resource(); } std::vector CPrimarySelectionSource::mimes() { - return mimeTypes; + return m_mimeTypes; } void CPrimarySelectionSource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) { + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CPrimarySelectionSource::sendAskSend with non-existent mime"); return; } - resource->sendSend(mime.c_str(), fd.get()); + m_resource->sendSend(mime.c_str(), fd.get()); } void CPrimarySelectionSource::accepted(const std::string& mime) { - if (std::find(mimeTypes.begin(), mimeTypes.end(), mime) == mimeTypes.end()) + if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) LOGM(ERR, "Compositor/App bug: CPrimarySelectionSource::sendAccepted with non-existent mime"); // primary sel has no accepted } void CPrimarySelectionSource::cancelled() { - resource->sendCancelled(); + m_resource->sendCancelled(); } void CPrimarySelectionSource::error(uint32_t code, const std::string& msg) { - resource->error(code, msg); + m_resource->error(code, msg); } -CPrimarySelectionDevice::CPrimarySelectionDevice(SP resource_) : resource(resource_) { +CPrimarySelectionDevice::CPrimarySelectionDevice(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setDestroy([this](CZwpPrimarySelectionDeviceV1* r) { PROTO::primarySelection->destroyResource(this); }); - resource->setOnDestroy([this](CZwpPrimarySelectionDeviceV1* r) { PROTO::primarySelection->destroyResource(this); }); + m_resource->setDestroy([this](CZwpPrimarySelectionDeviceV1* r) { PROTO::primarySelection->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpPrimarySelectionDeviceV1* r) { PROTO::primarySelection->destroyResource(this); }); - resource->setSetSelection([](CZwpPrimarySelectionDeviceV1* r, wl_resource* sourceR, uint32_t serial) { + m_resource->setSetSelection([](CZwpPrimarySelectionDeviceV1* r, wl_resource* sourceR, uint32_t serial) { static auto PPRIMARYSEL = CConfigValue("misc:middle_click_paste"); if (!*PPRIMARYSEL) { @@ -138,77 +138,77 @@ CPrimarySelectionDevice::CPrimarySelectionDevice(SPresource(); + return m_resource->resource(); } wl_client* CPrimarySelectionDevice::client() { - return pClient; + return m_client; } void CPrimarySelectionDevice::sendDataOffer(SP offer) { - resource->sendDataOffer(offer->resource.get()); + m_resource->sendDataOffer(offer->m_resource.get()); } void CPrimarySelectionDevice::sendSelection(SP selection) { if (!selection) - resource->sendSelectionRaw(nullptr); + m_resource->sendSelectionRaw(nullptr); else - resource->sendSelection(selection->resource.get()); + m_resource->sendSelection(selection->m_resource.get()); } -CPrimarySelectionManager::CPrimarySelectionManager(SP resource_) : resource(resource_) { +CPrimarySelectionManager::CPrimarySelectionManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwpPrimarySelectionDeviceManagerV1* r) { PROTO::primarySelection->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpPrimarySelectionDeviceManagerV1* r) { PROTO::primarySelection->destroyResource(this); }); - resource->setGetDevice([this](CZwpPrimarySelectionDeviceManagerV1* r, uint32_t id, wl_resource* seat) { + m_resource->setGetDevice([this](CZwpPrimarySelectionDeviceManagerV1* r, uint32_t id, wl_resource* seat) { const auto RESOURCE = - PROTO::primarySelection->m_vDevices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + PROTO::primarySelection->m_devices.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::primarySelection->m_vDevices.pop_back(); + PROTO::primarySelection->m_devices.pop_back(); return; } - RESOURCE->self = RESOURCE; - device = RESOURCE; + RESOURCE->m_self = RESOURCE; + m_device = RESOURCE; - for (auto const& s : sources) { + for (auto const& s : m_sources) { if (!s) continue; - s->device = RESOURCE; + s->m_device = RESOURCE; } LOGM(LOG, "New primary selection data device bound at {:x}", (uintptr_t)RESOURCE.get()); }); - resource->setCreateSource([this](CZwpPrimarySelectionDeviceManagerV1* r, uint32_t id) { - std::erase_if(sources, [](const auto& e) { return e.expired(); }); + m_resource->setCreateSource([this](CZwpPrimarySelectionDeviceManagerV1* r, uint32_t id) { + std::erase_if(m_sources, [](const auto& e) { return e.expired(); }); - const auto RESOURCE = PROTO::primarySelection->m_vSources.emplace_back( - makeShared(makeShared(r->client(), r->version(), id), device.lock())); + const auto RESOURCE = PROTO::primarySelection->m_sources.emplace_back( + makeShared(makeShared(r->client(), r->version(), id), m_device.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::primarySelection->m_vSources.pop_back(); + PROTO::primarySelection->m_sources.pop_back(); return; } - if (!device) + if (!m_device) LOGM(WARN, "New data source before a device was created"); - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - sources.emplace_back(RESOURCE); + m_sources.emplace_back(RESOURCE); LOGM(LOG, "New primary selection data source bound at {:x}", (uintptr_t)RESOURCE.get()); }); } bool CPrimarySelectionManager::good() { - return resource->resource(); + return m_resource->resource(); } CPrimarySelectionProtocol::CPrimarySelectionProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -216,35 +216,35 @@ CPrimarySelectionProtocol::CPrimarySelectionProtocol(const wl_interface* iface, } void CPrimarySelectionProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } LOGM(LOG, "New primary_seletion_manager at {:x}", (uintptr_t)RESOURCE.get()); // we need to do it here because protocols come before seatMgr - if (!listeners.onPointerFocusChange) - listeners.onPointerFocusChange = g_pSeatManager->m_events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); }); + if (!m_listeners.onPointerFocusChange) + m_listeners.onPointerFocusChange = g_pSeatManager->m_events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); }); } void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionSource* resource) { - std::erase_if(m_vSources, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_sources, [&](const auto& other) { return other.get() == resource; }); } void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionDevice* resource) { - std::erase_if(m_vDevices, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_devices, [&](const auto& other) { return other.get() == resource; }); } void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionOffer* resource) { - std::erase_if(m_vOffers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_offers, [&](const auto& other) { return other.get() == resource; }); } void CPrimarySelectionProtocol::sendSelectionToDevice(SP dev, SP sel) { @@ -254,11 +254,11 @@ void CPrimarySelectionProtocol::sendSelectionToDevice(SP(makeShared(dev->resource->client(), dev->resource->version(), 0), sel)); + m_offers.emplace_back(makeShared(makeShared(dev->m_resource->client(), dev->m_resource->version(), 0), sel)); if (!OFFER->good()) { - dev->resource->noMemory(); - m_vOffers.pop_back(); + dev->m_resource->noMemory(); + m_offers.pop_back(); return; } @@ -270,10 +270,10 @@ void CPrimarySelectionProtocol::sendSelectionToDevice(SP source) { - for (auto const& o : m_vOffers) { - if (o->source && o->source->hasDnd()) + for (auto const& o : m_offers) { + if (o->m_source && o->m_source->hasDnd()) continue; - o->dead = true; + o->m_dead = true; } if (!source) { @@ -319,16 +319,16 @@ void CPrimarySelectionProtocol::updateSelection() { } void CPrimarySelectionProtocol::onPointerFocus() { - for (auto const& o : m_vOffers) { - o->dead = true; + for (auto const& o : m_offers) { + o->m_dead = true; } updateSelection(); } SP CPrimarySelectionProtocol::dataDeviceForClient(wl_client* c) { - auto it = std::find_if(m_vDevices.begin(), m_vDevices.end(), [c](const auto& e) { return e->client() == c; }); - if (it == m_vDevices.end()) + auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + if (it == m_devices.end()) return nullptr; return *it; } diff --git a/src/protocols/PrimarySelection.hpp b/src/protocols/PrimarySelection.hpp index 0ecc962b..f5a8823e 100644 --- a/src/protocols/PrimarySelection.hpp +++ b/src/protocols/PrimarySelection.hpp @@ -19,12 +19,12 @@ class CPrimarySelectionOffer { bool good(); void sendData(); - bool dead = false; + bool m_dead = false; - WP source; + WP m_source; private: - SP resource; + SP m_resource; friend class CPrimarySelectionDevice; }; @@ -44,12 +44,12 @@ class CPrimarySelectionSource : public IDataSource { virtual void cancelled(); virtual void error(uint32_t code, const std::string& msg); - std::vector mimeTypes; - WP self; - WP device; + std::vector m_mimeTypes; + WP m_self; + WP m_device; private: - SP resource; + SP m_resource; }; class CPrimarySelectionDevice { @@ -62,11 +62,11 @@ class CPrimarySelectionDevice { void sendDataOffer(SP offer); void sendSelection(SP selection); - WP self; + WP m_self; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; friend class CPrimarySelectionProtocol; }; @@ -77,11 +77,11 @@ class CPrimarySelectionManager { bool good(); - WP device; - std::vector> sources; + WP m_device; + std::vector> m_sources; private: - SP resource; + SP m_resource; }; class CPrimarySelectionProtocol : public IWaylandProtocol { @@ -97,10 +97,10 @@ class CPrimarySelectionProtocol : public IWaylandProtocol { void destroyResource(CPrimarySelectionOffer* resource); // - std::vector> m_vManagers; - std::vector> m_vDevices; - std::vector> m_vSources; - std::vector> m_vOffers; + std::vector> m_managers; + std::vector> m_devices; + std::vector> m_sources; + std::vector> m_offers; // void setSelection(SP source); @@ -119,7 +119,7 @@ class CPrimarySelectionProtocol : public IWaylandProtocol { struct { CHyprSignalListener onPointerFocusChange; - } listeners; + } m_listeners; }; namespace PROTO { diff --git a/src/protocols/RelativePointer.cpp b/src/protocols/RelativePointer.cpp index 9876852f..67bff46e 100644 --- a/src/protocols/RelativePointer.cpp +++ b/src/protocols/RelativePointer.cpp @@ -3,27 +3,27 @@ #include "core/Seat.hpp" #include -CRelativePointer::CRelativePointer(SP resource_) : resource(resource_) { +CRelativePointer::CRelativePointer(SP resource_) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setDestroy([this](CZwpRelativePointerV1* pMgr) { PROTO::relativePointer->destroyRelativePointer(this); }); - resource->setOnDestroy([this](CZwpRelativePointerV1* pMgr) { PROTO::relativePointer->destroyRelativePointer(this); }); + m_resource->setDestroy([this](CZwpRelativePointerV1* pMgr) { PROTO::relativePointer->destroyRelativePointer(this); }); + m_resource->setOnDestroy([this](CZwpRelativePointerV1* pMgr) { PROTO::relativePointer->destroyRelativePointer(this); }); } bool CRelativePointer::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CRelativePointer::client() { - return pClient; + return m_client; } void CRelativePointer::sendRelativeMotion(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) { - resource->sendRelativeMotion(time >> 32, time & 0xFFFFFFFF, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y), wl_fixed_from_double(deltaUnaccel.x), - wl_fixed_from_double(deltaUnaccel.y)); + m_resource->sendRelativeMotion(time >> 32, time & 0xFFFFFFFF, wl_fixed_from_double(delta.x), wl_fixed_from_double(delta.y), wl_fixed_from_double(deltaUnaccel.x), + wl_fixed_from_double(deltaUnaccel.y)); } CRelativePointerProtocol::CRelativePointerProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -31,7 +31,7 @@ CRelativePointerProtocol::CRelativePointerProtocol(const wl_interface* iface, co } void CRelativePointerProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpRelativePointerManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpRelativePointerManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -39,20 +39,20 @@ void CRelativePointerProtocol::bindManager(wl_client* client, void* data, uint32 } void CRelativePointerProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CRelativePointerProtocol::destroyRelativePointer(CRelativePointer* pointer) { - std::erase_if(m_vRelativePointers, [&](const auto& other) { return other.get() == pointer; }); + std::erase_if(m_relativePointers, [&](const auto& other) { return other.get() == pointer; }); } void CRelativePointerProtocol::onGetRelativePointer(CZwpRelativePointerManagerV1* pMgr, uint32_t id, wl_resource* pointer) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vRelativePointers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); + const auto RESOURCE = m_relativePointers.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vRelativePointers.pop_back(); + m_relativePointers.pop_back(); return; } } @@ -64,7 +64,7 @@ void CRelativePointerProtocol::sendRelativeMotion(uint64_t time, const Vector2D& const auto FOCUSED = g_pSeatManager->m_state.pointerFocusResource->client(); - for (auto const& rp : m_vRelativePointers) { + for (auto const& rp : m_relativePointers) { if (FOCUSED != rp->client()) continue; diff --git a/src/protocols/RelativePointer.hpp b/src/protocols/RelativePointer.hpp index ce060ed3..3d6a3e30 100644 --- a/src/protocols/RelativePointer.hpp +++ b/src/protocols/RelativePointer.hpp @@ -16,8 +16,8 @@ class CRelativePointer { wl_client* client(); private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; }; class CRelativePointerProtocol : public IWaylandProtocol { @@ -34,8 +34,8 @@ class CRelativePointerProtocol : public IWaylandProtocol { void onGetRelativePointer(CZwpRelativePointerManagerV1* pMgr, uint32_t id, wl_resource* pointer); // - std::vector> m_vManagers; - std::vector> m_vRelativePointers; + std::vector> m_managers; + std::vector> m_relativePointers; friend class CRelativePointer; }; diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 391d13e7..2c84fe93 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -17,66 +17,66 @@ #include #include -CScreencopyFrame::CScreencopyFrame(SP resource_, int32_t overlay_cursor, wl_resource* output, CBox box_) : resource(resource_) { +CScreencopyFrame::CScreencopyFrame(SP resource_, int32_t overlay_cursor, wl_resource* output, CBox box_) : m_resource(resource_) { if UNLIKELY (!good()) return; - overlayCursor = !!overlay_cursor; - pMonitor = CWLOutputResource::fromResource(output)->m_monitor; + m_overlayCursor = !!overlay_cursor; + m_monitor = CWLOutputResource::fromResource(output)->m_monitor; - if (!pMonitor) { + if (!m_monitor) { LOGM(ERR, "Client requested sharing of a monitor that doesnt exist"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - resource->setOnDestroy([this](CZwlrScreencopyFrameV1* pMgr) { PROTO::screencopy->destroyResource(this); }); - resource->setDestroy([this](CZwlrScreencopyFrameV1* pFrame) { PROTO::screencopy->destroyResource(this); }); - resource->setCopy([this](CZwlrScreencopyFrameV1* pFrame, wl_resource* res) { this->copy(pFrame, res); }); - resource->setCopyWithDamage([this](CZwlrScreencopyFrameV1* pFrame, wl_resource* res) { - withDamage = true; + m_resource->setOnDestroy([this](CZwlrScreencopyFrameV1* pMgr) { PROTO::screencopy->destroyResource(this); }); + m_resource->setDestroy([this](CZwlrScreencopyFrameV1* pFrame) { PROTO::screencopy->destroyResource(this); }); + m_resource->setCopy([this](CZwlrScreencopyFrameV1* pFrame, wl_resource* res) { this->copy(pFrame, res); }); + m_resource->setCopyWithDamage([this](CZwlrScreencopyFrameV1* pFrame, wl_resource* res) { + m_withDamage = true; this->copy(pFrame, res); }); g_pHyprRenderer->makeEGLCurrent(); - shmFormat = g_pHyprOpenGL->getPreferredReadFormat(pMonitor.lock()); - if (shmFormat == DRM_FORMAT_INVALID) { + m_shmFormat = g_pHyprOpenGL->getPreferredReadFormat(m_monitor.lock()); + if (m_shmFormat == DRM_FORMAT_INVALID) { LOGM(ERR, "No format supported by renderer in capture output"); - resource->sendFailed(); + m_resource->sendFailed(); return; } // TODO: hack, we can't bit flip so we'll format flip heh, GL_BGRA_EXT wont work here - if (shmFormat == DRM_FORMAT_XRGB2101010 || shmFormat == DRM_FORMAT_ARGB2101010) - shmFormat = DRM_FORMAT_XBGR2101010; + if (m_shmFormat == DRM_FORMAT_XRGB2101010 || m_shmFormat == DRM_FORMAT_ARGB2101010) + m_shmFormat = DRM_FORMAT_XBGR2101010; - const auto PSHMINFO = NFormatUtils::getPixelFormatFromDRM(shmFormat); + const auto PSHMINFO = NFormatUtils::getPixelFormatFromDRM(m_shmFormat); if (!PSHMINFO) { LOGM(ERR, "No pixel format supported by renderer in capture output"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - dmabufFormat = pMonitor->m_output->state->state().drmFormat; + m_dmabufFormat = m_monitor->m_output->state->state().drmFormat; if (box_.width == 0 && box_.height == 0) - box = {0, 0, (int)(pMonitor->m_size.x), (int)(pMonitor->m_size.y)}; + m_box = {0, 0, (int)(m_monitor->m_size.x), (int)(m_monitor->m_size.y)}; else { - box = box_; + m_box = box_; } - box.transform(wlTransformToHyprutils(pMonitor->m_transform), pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y).scale(pMonitor->m_scale).round(); + m_box.transform(wlTransformToHyprutils(m_monitor->m_transform), m_monitor->m_transformedSize.x, m_monitor->m_transformedSize.y).scale(m_monitor->m_scale).round(); - shmStride = NFormatUtils::minStride(PSHMINFO, box.w); + m_shmStride = NFormatUtils::minStride(PSHMINFO, m_box.w); - resource->sendBuffer(NFormatUtils::drmToShm(shmFormat), box.width, box.height, shmStride); + m_resource->sendBuffer(NFormatUtils::drmToShm(m_shmFormat), m_box.width, m_box.height, m_shmStride); - if (resource->version() >= 3) { - if LIKELY (dmabufFormat != DRM_FORMAT_INVALID) - resource->sendLinuxDmabuf(dmabufFormat, box.width, box.height); + if (m_resource->version() >= 3) { + if LIKELY (m_dmabufFormat != DRM_FORMAT_INVALID) + m_resource->sendLinuxDmabuf(m_dmabufFormat, m_box.width, m_box.height); - resource->sendBufferDone(); + m_resource->sendBufferDone(); } } @@ -86,137 +86,137 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ return; } - if UNLIKELY (!g_pCompositor->monitorExists(pMonitor.lock())) { + if UNLIKELY (!g_pCompositor->monitorExists(m_monitor.lock())) { LOGM(ERR, "Client requested sharing of a monitor that is gone"); - resource->sendFailed(); + m_resource->sendFailed(); return; } const auto PBUFFER = CWLBufferResource::fromResource(buffer_); if UNLIKELY (!PBUFFER) { LOGM(ERR, "Invalid buffer in {:x}", (uintptr_t)this); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer"); PROTO::screencopy->destroyResource(this); return; } - if UNLIKELY (PBUFFER->m_buffer->size != box.size()) { + if UNLIKELY (PBUFFER->m_buffer->size != m_box.size()) { LOGM(ERR, "Invalid dimensions in {:x}", (uintptr_t)this); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); PROTO::screencopy->destroyResource(this); return; } - if UNLIKELY (buffer) { + if UNLIKELY (m_buffer) { LOGM(ERR, "Buffer used in {:x}", (uintptr_t)this); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_ALREADY_USED, "frame already used"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_ALREADY_USED, "frame already used"); PROTO::screencopy->destroyResource(this); return; } if (auto attrs = PBUFFER->m_buffer->dmabuf(); attrs.success) { - bufferDMA = true; + m_bufferDMA = true; - if (attrs.format != dmabufFormat) { + if (attrs.format != m_dmabufFormat) { LOGM(ERR, "Invalid buffer dma format in {:x}", (uintptr_t)pFrame); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); PROTO::screencopy->destroyResource(this); return; } } else if (auto attrs = PBUFFER->m_buffer->shm(); attrs.success) { - if (attrs.format != shmFormat) { + if (attrs.format != m_shmFormat) { LOGM(ERR, "Invalid buffer shm format in {:x}", (uintptr_t)pFrame); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); PROTO::screencopy->destroyResource(this); return; - } else if ((int)attrs.stride != shmStride) { + } else if ((int)attrs.stride != m_shmStride) { LOGM(ERR, "Invalid buffer shm stride in {:x}", (uintptr_t)pFrame); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer stride"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer stride"); PROTO::screencopy->destroyResource(this); return; } } else { LOGM(ERR, "Invalid buffer type in {:x}", (uintptr_t)pFrame); - resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer type"); + m_resource->error(ZWLR_SCREENCOPY_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer type"); PROTO::screencopy->destroyResource(this); return; } - buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); + m_buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); - PROTO::screencopy->m_vFramesAwaitingWrite.emplace_back(self); + PROTO::screencopy->m_framesAwaitingWrite.emplace_back(m_self); g_pHyprRenderer->m_bDirectScanoutBlocked = true; - if (!withDamage) - g_pHyprRenderer->damageMonitor(pMonitor.lock()); + if (!m_withDamage) + g_pHyprRenderer->damageMonitor(m_monitor.lock()); } void CScreencopyFrame::share() { - if (!buffer || !pMonitor) + if (!m_buffer || !m_monitor) return; const auto NOW = Time::steadyNow(); - auto callback = [this, NOW, weak = self](bool success) { + auto callback = [this, NOW, weak = m_self](bool success) { if (weak.expired()) return; if (!success) { - LOGM(ERR, "{} copy failed in {:x}", bufferDMA ? "Dmabuf" : "Shm", (uintptr_t)this); - resource->sendFailed(); + LOGM(ERR, "{} copy failed in {:x}", m_bufferDMA ? "Dmabuf" : "Shm", (uintptr_t)this); + m_resource->sendFailed(); return; } - resource->sendFlags((zwlrScreencopyFrameV1Flags)0); - if (withDamage) { + m_resource->sendFlags((zwlrScreencopyFrameV1Flags)0); + if (m_withDamage) { // TODO: add a damage ring for this. - resource->sendDamage(0, 0, buffer->size.x, buffer->size.y); + m_resource->sendDamage(0, 0, m_buffer->size.x, m_buffer->size.y); } const auto [sec, nsec] = Time::secNsec(NOW); uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; uint32_t tvSecLo = sec & 0xFFFFFFFF; - resource->sendReady(tvSecHi, tvSecLo, nsec); + m_resource->sendReady(tvSecHi, tvSecLo, nsec); }; - if (bufferDMA) + if (m_bufferDMA) copyDmabuf(callback); else callback(copyShm()); } void CScreencopyFrame::copyDmabuf(std::function callback) { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(pMonitor->m_output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto TEXTURE = makeShared(m_monitor->m_output->state->state().buffer); CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; - if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, buffer.m_buffer, nullptr, true)) { + if (!g_pHyprRenderer->beginRender(m_monitor.lock(), fakeDamage, RENDER_MODE_TO_BUFFER, m_buffer.m_buffer, nullptr, true)) { LOGM(ERR, "Can't copy: failed to begin rendering to dma frame"); callback(false); return; } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y} - .translate({-box.x, -box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. - .transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); + CBox monbox = CBox{0, 0, m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y} + .translate({-m_box.x, -m_box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. + .transform(wlTransformToHyprutils(invertTransform(m_monitor->m_transform)), m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y); g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); - if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - pMonitor->m_position - box.pos(), true); + if (m_overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, + g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); CBox texbox = - CBox{pMonitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } @@ -229,40 +229,40 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } bool CScreencopyFrame::copyShm() { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(pMonitor->m_output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto TEXTURE = makeShared(m_monitor->m_output->state->state().buffer); - auto shm = buffer->shm(); - auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm + auto shm = m_buffer->shm(); + auto [pixelData, fmt, bufLen] = m_buffer->beginDataPtr(0); // no need for end, cuz it's shm CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; g_pHyprRenderer->makeEGLCurrent(); CFramebuffer fb; - fb.alloc(box.w, box.h, pMonitor->m_output->state->state().drmFormat); + fb.alloc(m_box.w, m_box.h, m_monitor->m_output->state->state().drmFormat); - if (!g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &fb, true)) { + if (!g_pHyprRenderer->beginRender(m_monitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &fb, true)) { LOGM(ERR, "Can't copy: failed to begin rendering"); return false; } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y}.translate({-box.x, -box.y}); + CBox monbox = CBox{0, 0, m_monitor->m_transformedSize.x, m_monitor->m_transformedSize.y}.translate({-m_box.x, -m_box.y}); g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); - if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(pMonitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - pMonitor->m_position - box.pos(), true); + if (m_overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, + g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); CBox texbox = - CBox{pMonitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); + CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); } @@ -285,22 +285,22 @@ bool CScreencopyFrame::copyShm() { g_pHyprRenderer->endRender(); g_pHyprRenderer->makeEGLCurrent(); - g_pHyprOpenGL->m_RenderData.pMonitor = pMonitor; + g_pHyprOpenGL->m_RenderData.pMonitor = m_monitor; fb.bind(); glPixelStorei(GL_PACK_ALIGNMENT, 1); const auto drmFmt = NFormatUtils::getPixelFormatFromDRM(shm.format); - uint32_t packStride = NFormatUtils::minStride(drmFmt, box.w); + uint32_t packStride = NFormatUtils::minStride(drmFmt, m_box.w); // This could be optimized by using a pixel buffer object to make this async, // but really clients should just use a dma buffer anyways. if (packStride == (uint32_t)shm.stride) { - glReadPixels(0, 0, box.w, box.h, glFormat, PFORMAT->glType, pixelData); + glReadPixels(0, 0, m_box.w, m_box.h, glFormat, PFORMAT->glType, pixelData); } else { - for (size_t i = 0; i < box.h; ++i) { + for (size_t i = 0; i < m_box.h; ++i) { uint32_t y = i; - glReadPixels(0, y, box.w, 1, glFormat, PFORMAT->glType, ((unsigned char*)pixelData) + i * shm.stride); + glReadPixels(0, y, m_box.w, 1, glFormat, PFORMAT->glType, ((unsigned char*)pixelData) + i * shm.stride); } } @@ -318,68 +318,68 @@ bool CScreencopyFrame::copyShm() { } bool CScreencopyFrame::good() { - return resource->resource(); + return m_resource->resource(); } CScreencopyClient::~CScreencopyClient() { - g_pHookSystem->unhook(tickCallback); + g_pHookSystem->unhook(m_tickCallback); } -CScreencopyClient::CScreencopyClient(SP resource_) : resource(resource_) { +CScreencopyClient::CScreencopyClient(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwlrScreencopyManagerV1* pMgr) { PROTO::screencopy->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrScreencopyManagerV1* pMgr) { PROTO::screencopy->destroyResource(this); }); - resource->setCaptureOutput( + m_resource->setDestroy([this](CZwlrScreencopyManagerV1* pMgr) { PROTO::screencopy->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwlrScreencopyManagerV1* pMgr) { PROTO::screencopy->destroyResource(this); }); + m_resource->setCaptureOutput( [this](CZwlrScreencopyManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, wl_resource* output) { this->captureOutput(frame, overlayCursor, output, {}); }); - resource->setCaptureOutputRegion([this](CZwlrScreencopyManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, wl_resource* output, int32_t x, int32_t y, int32_t w, - int32_t h) { this->captureOutput(frame, overlayCursor, output, {x, y, w, h}); }); + m_resource->setCaptureOutputRegion([this](CZwlrScreencopyManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, wl_resource* output, int32_t x, int32_t y, int32_t w, + int32_t h) { this->captureOutput(frame, overlayCursor, output, {x, y, w, h}); }); - lastMeasure.reset(); - lastFrame.reset(); - tickCallback = g_pHookSystem->hookDynamic("tick", [&](void* self, SCallbackInfo& info, std::any data) { onTick(); }); + m_lastMeasure.reset(); + m_lastFrame.reset(); + m_tickCallback = g_pHookSystem->hookDynamic("tick", [&](void* self, SCallbackInfo& info, std::any data) { onTick(); }); } void CScreencopyClient::captureOutput(uint32_t frame, int32_t overlayCursor_, wl_resource* output, CBox box) { - const auto FRAME = PROTO::screencopy->m_vFrames.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), frame), overlayCursor_, output, box)); + const auto FRAME = PROTO::screencopy->m_frames.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), frame), overlayCursor_, output, box)); if (!FRAME->good()) { LOGM(ERR, "Couldn't alloc frame for sharing! (no memory)"); - resource->noMemory(); + m_resource->noMemory(); PROTO::screencopy->destroyResource(FRAME.get()); return; } - FRAME->self = FRAME; - FRAME->client = self; + FRAME->m_self = FRAME; + FRAME->m_client = m_self; } void CScreencopyClient::onTick() { - if (lastMeasure.getMillis() < 500) + if (m_lastMeasure.getMillis() < 500) return; - framesInLastHalfSecond = frameCounter; - frameCounter = 0; - lastMeasure.reset(); + m_framesInLastHalfSecond = m_frameCounter; + m_frameCounter = 0; + m_lastMeasure.reset(); - const auto LASTFRAMEDELTA = lastFrame.getMillis() / 1000.0; - const bool FRAMEAWAITING = std::ranges::any_of(PROTO::screencopy->m_vFrames, [&](const auto& frame) { return frame->client.get() == this; }); + const auto LASTFRAMEDELTA = m_lastFrame.getMillis() / 1000.0; + const bool FRAMEAWAITING = std::ranges::any_of(PROTO::screencopy->m_frames, [&](const auto& frame) { return frame->m_client.get() == this; }); - if (framesInLastHalfSecond > 3 && !sentScreencast) { - EMIT_HOOK_EVENT("screencast", (std::vector{1, (uint64_t)framesInLastHalfSecond, (uint64_t)clientOwner})); - g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "1," + std::to_string(clientOwner)}); - sentScreencast = true; - } else if (framesInLastHalfSecond < 4 && sentScreencast && LASTFRAMEDELTA > 1.0 && !FRAMEAWAITING) { - EMIT_HOOK_EVENT("screencast", (std::vector{0, (uint64_t)framesInLastHalfSecond, (uint64_t)clientOwner})); - g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "0," + std::to_string(clientOwner)}); - sentScreencast = false; + if (m_framesInLastHalfSecond > 3 && !m_sentScreencast) { + EMIT_HOOK_EVENT("screencast", (std::vector{1, (uint64_t)m_framesInLastHalfSecond, (uint64_t)m_clientOwner})); + g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "1," + std::to_string(m_clientOwner)}); + m_sentScreencast = true; + } else if (m_framesInLastHalfSecond < 4 && m_sentScreencast && LASTFRAMEDELTA > 1.0 && !FRAMEAWAITING) { + EMIT_HOOK_EVENT("screencast", (std::vector{0, (uint64_t)m_framesInLastHalfSecond, (uint64_t)m_clientOwner})); + g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "0," + std::to_string(m_clientOwner)}); + m_sentScreencast = false; } } bool CScreencopyClient::good() { - return resource->resource(); + return m_resource->resource(); } CScreencopyProtocol::CScreencopyProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -387,71 +387,71 @@ CScreencopyProtocol::CScreencopyProtocol(const wl_interface* iface, const int& v } void CScreencopyProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto CLIENT = m_vClients.emplace_back(makeShared(makeShared(client, ver, id))); + const auto CLIENT = m_clients.emplace_back(makeShared(makeShared(client, ver, id))); if (!CLIENT->good()) { LOGM(LOG, "Failed to bind client! (out of memory)"); - CLIENT->resource->noMemory(); - m_vClients.pop_back(); + CLIENT->m_resource->noMemory(); + m_clients.pop_back(); return; } - CLIENT->self = CLIENT; + CLIENT->m_self = CLIENT; LOGM(LOG, "Bound client successfully!"); } void CScreencopyProtocol::destroyResource(CScreencopyClient* client) { - std::erase_if(m_vClients, [&](const auto& other) { return other.get() == client; }); - std::erase_if(m_vFrames, [&](const auto& other) { return other->client.get() == client; }); - std::erase_if(m_vFramesAwaitingWrite, [&](const auto& other) { return !other || other->client.get() == client; }); + std::erase_if(m_clients, [&](const auto& other) { return other.get() == client; }); + std::erase_if(m_frames, [&](const auto& other) { return other->m_client.get() == client; }); + std::erase_if(m_framesAwaitingWrite, [&](const auto& other) { return !other || other->m_client.get() == client; }); } void CScreencopyProtocol::destroyResource(CScreencopyFrame* frame) { - std::erase_if(m_vFrames, [&](const auto& other) { return other.get() == frame; }); - std::erase_if(m_vFramesAwaitingWrite, [&](const auto& other) { return !other || other.get() == frame; }); + std::erase_if(m_frames, [&](const auto& other) { return other.get() == frame; }); + std::erase_if(m_framesAwaitingWrite, [&](const auto& other) { return !other || other.get() == frame; }); } void CScreencopyProtocol::onOutputCommit(PHLMONITOR pMonitor) { - if (m_vFramesAwaitingWrite.empty()) { + if (m_framesAwaitingWrite.empty()) { g_pHyprRenderer->m_bDirectScanoutBlocked = false; return; // nothing to share } std::vector> framesToRemove; // reserve number of elements to avoid reallocations - framesToRemove.reserve(m_vFramesAwaitingWrite.size()); + framesToRemove.reserve(m_framesAwaitingWrite.size()); // share frame if correct output - for (auto const& f : m_vFramesAwaitingWrite) { + for (auto const& f : m_framesAwaitingWrite) { if (!f) continue; // check permissions - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->resource->client(), PERMISSION_TYPE_SCREENCOPY); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->m_resource->client(), PERMISSION_TYPE_SCREENCOPY); if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) continue; // pending an answer, don't do anything yet. // otherwise share. If it's denied, it will be black. - if (!f->pMonitor || !f->buffer) { + if (!f->m_monitor || !f->m_buffer) { framesToRemove.emplace_back(f); continue; } - if (f->pMonitor != pMonitor) + if (f->m_monitor != pMonitor) continue; f->share(); - f->client->lastFrame.reset(); - ++f->client->frameCounter; + f->m_client->m_lastFrame.reset(); + ++f->m_client->m_frameCounter; framesToRemove.emplace_back(f); } for (auto const& f : framesToRemove) { - std::erase(m_vFramesAwaitingWrite, f); + std::erase(m_framesAwaitingWrite, f); } } diff --git a/src/protocols/Screencopy.hpp b/src/protocols/Screencopy.hpp index a69fce3a..ead8b2ed 100644 --- a/src/protocols/Screencopy.hpp +++ b/src/protocols/Screencopy.hpp @@ -28,20 +28,20 @@ class CScreencopyClient { bool good(); - WP self; - eClientOwners clientOwner = CLIENT_SCREENCOPY; + WP m_self; + eClientOwners m_clientOwner = CLIENT_SCREENCOPY; - CTimer lastFrame; - int frameCounter = 0; + CTimer m_lastFrame; + int m_frameCounter = 0; private: - SP resource; + SP m_resource; - int framesInLastHalfSecond = 0; - CTimer lastMeasure; - bool sentScreencast = false; + int m_framesInLastHalfSecond = 0; + CTimer m_lastMeasure; + bool m_sentScreencast = false; - SP tickCallback; + SP m_tickCallback; void onTick(); void captureOutput(uint32_t frame, int32_t overlayCursor, wl_resource* output, CBox box); @@ -55,23 +55,22 @@ class CScreencopyFrame { bool good(); - WP self; - WP client; + WP m_self; + WP m_client; private: - SP resource; + SP m_resource; - PHLMONITORREF pMonitor; - bool overlayCursor = false; - bool withDamage = false; - bool lockedSWCursors = false; + PHLMONITORREF m_monitor; + bool m_overlayCursor = false; + bool m_withDamage = false; - CHLBufferReference buffer; - bool bufferDMA = false; - uint32_t shmFormat = 0; - uint32_t dmabufFormat = 0; - int shmStride = 0; - CBox box = {}; + CHLBufferReference m_buffer; + bool m_bufferDMA = false; + uint32_t m_shmFormat = 0; + uint32_t m_dmabufFormat = 0; + int m_shmStride = 0; + CBox m_box = {}; void copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer); void copyDmabuf(std::function callback); @@ -92,9 +91,9 @@ class CScreencopyProtocol : public IWaylandProtocol { void onOutputCommit(PHLMONITOR pMonitor); private: - std::vector> m_vFrames; - std::vector> m_vFramesAwaitingWrite; - std::vector> m_vClients; + std::vector> m_frames; + std::vector> m_framesAwaitingWrite; + std::vector> m_clients; void shareAllFrames(PHLMONITOR pMonitor); void shareFrame(CScreencopyFrame* frame); diff --git a/src/protocols/SecurityContext.cpp b/src/protocols/SecurityContext.cpp index 8c4ff756..ae3f41b1 100644 --- a/src/protocols/SecurityContext.cpp +++ b/src/protocols/SecurityContext.cpp @@ -17,7 +17,7 @@ static int onCloseFdEvent(int fd, uint32_t mask, void* data) { SP CSecurityContextSandboxedClient::create(CFileDescriptor clientFD_) { auto p = SP(new CSecurityContextSandboxedClient(std::move(clientFD_))); - if (!p->client) + if (!p->m_client) return nullptr; return p; } @@ -28,95 +28,95 @@ static void onSecurityContextClientDestroy(wl_listener* l, void* d) { client->onDestroy(); } -CSecurityContextSandboxedClient::CSecurityContextSandboxedClient(CFileDescriptor clientFD_) : clientFD(std::move(clientFD_)) { - client = wl_client_create(g_pCompositor->m_wlDisplay, clientFD.get()); - if (!client) +CSecurityContextSandboxedClient::CSecurityContextSandboxedClient(CFileDescriptor clientFD_) : m_clientFD(std::move(clientFD_)) { + m_client = wl_client_create(g_pCompositor->m_wlDisplay, m_clientFD.get()); + if (!m_client) return; - wl_list_init(&destroyListener.listener.link); - destroyListener.listener.notify = ::onSecurityContextClientDestroy; - destroyListener.parent = this; - wl_client_add_destroy_late_listener(client, &destroyListener.listener); + wl_list_init(&m_destroyListener.listener.link); + m_destroyListener.listener.notify = ::onSecurityContextClientDestroy; + m_destroyListener.parent = this; + wl_client_add_destroy_late_listener(m_client, &m_destroyListener.listener); } CSecurityContextSandboxedClient::~CSecurityContextSandboxedClient() { - wl_list_remove(&destroyListener.listener.link); - wl_list_init(&destroyListener.listener.link); + wl_list_remove(&m_destroyListener.listener.link); + wl_list_init(&m_destroyListener.listener.link); } void CSecurityContextSandboxedClient::onDestroy() { - std::erase_if(PROTO::securityContext->m_vSandboxedClients, [this](const auto& e) { return e.get() == this; }); + std::erase_if(PROTO::securityContext->m_sandboxedClients, [this](const auto& e) { return e.get() == this; }); } -CSecurityContext::CSecurityContext(SP resource_, int listenFD_, int closeFD_) : listenFD(listenFD_), closeFD(closeFD_), resource(resource_) { +CSecurityContext::CSecurityContext(SP resource_, int listenFD_, int closeFD_) : m_listenFD(listenFD_), m_closeFD(closeFD_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWpSecurityContextV1* r) { + m_resource->setDestroy([this](CWpSecurityContextV1* r) { LOGM(LOG, "security_context at 0x{:x}: resource destroyed, keeping context until fd hangup", (uintptr_t)this); - resource = nullptr; + m_resource = nullptr; }); - resource->setOnDestroy([this](CWpSecurityContextV1* r) { + m_resource->setOnDestroy([this](CWpSecurityContextV1* r) { LOGM(LOG, "security_context at 0x{:x}: resource destroyed, keeping context until fd hangup", (uintptr_t)this); - resource = nullptr; + m_resource = nullptr; }); LOGM(LOG, "New security_context at 0x{:x}", (uintptr_t)this); - resource->setSetSandboxEngine([this](CWpSecurityContextV1* r, const char* engine) { - if UNLIKELY (!sandboxEngine.empty()) { + m_resource->setSetSandboxEngine([this](CWpSecurityContextV1* r, const char* engine) { + if UNLIKELY (!m_sandboxEngine.empty()) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_SET, "Sandbox engine already set"); return; } - if UNLIKELY (committed) { + if UNLIKELY (m_committed) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_USED, "Context already committed"); return; } - sandboxEngine = engine ? engine : "(null)"; - LOGM(LOG, "security_context at 0x{:x} sets engine to {}", (uintptr_t)this, sandboxEngine); + m_sandboxEngine = engine ? engine : "(null)"; + LOGM(LOG, "security_context at 0x{:x} sets engine to {}", (uintptr_t)this, m_sandboxEngine); }); - resource->setSetAppId([this](CWpSecurityContextV1* r, const char* appid) { - if UNLIKELY (!appID.empty()) { + m_resource->setSetAppId([this](CWpSecurityContextV1* r, const char* appid) { + if UNLIKELY (!m_appID.empty()) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_SET, "Sandbox appid already set"); return; } - if UNLIKELY (committed) { + if UNLIKELY (m_committed) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_USED, "Context already committed"); return; } - appID = appid ? appid : "(null)"; - LOGM(LOG, "security_context at 0x{:x} sets appid to {}", (uintptr_t)this, appID); + m_appID = appid ? appid : "(null)"; + LOGM(LOG, "security_context at 0x{:x} sets appid to {}", (uintptr_t)this, m_appID); }); - resource->setSetInstanceId([this](CWpSecurityContextV1* r, const char* instance) { - if UNLIKELY (!instanceID.empty()) { + m_resource->setSetInstanceId([this](CWpSecurityContextV1* r, const char* instance) { + if UNLIKELY (!m_instanceID.empty()) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_SET, "Sandbox instance already set"); return; } - if UNLIKELY (committed) { + if UNLIKELY (m_committed) { r->error(WP_SECURITY_CONTEXT_V1_ERROR_ALREADY_USED, "Context already committed"); return; } - instanceID = instance ? instance : "(null)"; - LOGM(LOG, "security_context at 0x{:x} sets instance to {}", (uintptr_t)this, instanceID); + m_instanceID = instance ? instance : "(null)"; + LOGM(LOG, "security_context at 0x{:x} sets instance to {}", (uintptr_t)this, m_instanceID); }); - resource->setCommit([this](CWpSecurityContextV1* r) { - committed = true; + m_resource->setCommit([this](CWpSecurityContextV1* r) { + m_committed = true; LOGM(LOG, "security_context at 0x{:x} commits", (uintptr_t)this); - listenSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, listenFD.get(), WL_EVENT_READABLE, ::onListenFdEvent, this); - closeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, closeFD.get(), 0, ::onCloseFdEvent, this); + m_listenSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_listenFD.get(), WL_EVENT_READABLE, ::onListenFdEvent, this); + m_closeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_closeFD.get(), 0, ::onCloseFdEvent, this); - if (!listenSource || !closeSource) { + if (!m_listenSource || !m_closeSource) { r->noMemory(); return; } @@ -124,14 +124,14 @@ CSecurityContext::CSecurityContext(SP resource_, int liste } CSecurityContext::~CSecurityContext() { - if (listenSource) - wl_event_source_remove(listenSource); - if (closeSource) - wl_event_source_remove(closeSource); + if (m_listenSource) + wl_event_source_remove(m_listenSource); + if (m_closeSource) + wl_event_source_remove(m_closeSource); } bool CSecurityContext::good() { - return resource->resource(); + return m_resource->resource(); } void CSecurityContext::onListen(uint32_t mask) { @@ -144,7 +144,7 @@ void CSecurityContext::onListen(uint32_t mask) { if (!(mask & WL_EVENT_READABLE)) return; - CFileDescriptor clientFD{accept(listenFD.get(), nullptr, nullptr)}; + CFileDescriptor clientFD{accept(m_listenFD.get(), nullptr, nullptr)}; if UNLIKELY (!clientFD.isValid()) { LOGM(ERR, "security_context at 0x{:x} couldn't accept", (uintptr_t)this); return; @@ -156,9 +156,9 @@ void CSecurityContext::onListen(uint32_t mask) { return; } - PROTO::securityContext->m_vSandboxedClients.emplace_back(newClient); + PROTO::securityContext->m_sandboxedClients.emplace_back(newClient); - LOGM(LOG, "security_context at 0x{:x} got a new wl_client 0x{:x}", (uintptr_t)this, (uintptr_t)newClient->client); + LOGM(LOG, "security_context at 0x{:x} got a new wl_client 0x{:x}", (uintptr_t)this, (uintptr_t)newClient->m_client); } void CSecurityContext::onClose(uint32_t mask) { @@ -168,27 +168,27 @@ void CSecurityContext::onClose(uint32_t mask) { PROTO::securityContext->destroyContext(this); } -CSecurityContextManagerResource::CSecurityContextManagerResource(SP resource_) : resource(resource_) { +CSecurityContextManagerResource::CSecurityContextManagerResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWpSecurityContextManagerV1* r) { PROTO::securityContext->destroyResource(this); }); - resource->setOnDestroy([this](CWpSecurityContextManagerV1* r) { PROTO::securityContext->destroyResource(this); }); + m_resource->setDestroy([this](CWpSecurityContextManagerV1* r) { PROTO::securityContext->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpSecurityContextManagerV1* r) { PROTO::securityContext->destroyResource(this); }); - resource->setCreateListener([](CWpSecurityContextManagerV1* r, uint32_t id, int32_t lfd, int32_t cfd) { + m_resource->setCreateListener([](CWpSecurityContextManagerV1* r, uint32_t id, int32_t lfd, int32_t cfd) { const auto RESOURCE = - PROTO::securityContext->m_vContexts.emplace_back(makeShared(makeShared(r->client(), r->version(), id), lfd, cfd)); + PROTO::securityContext->m_contexts.emplace_back(makeShared(makeShared(r->client(), r->version(), id), lfd, cfd)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::securityContext->m_vContexts.pop_back(); + PROTO::securityContext->m_contexts.pop_back(); return; } }); } bool CSecurityContextManagerResource::good() { - return resource->resource(); + return m_resource->resource(); } CSecurityContextProtocol::CSecurityContextProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -196,23 +196,23 @@ CSecurityContextProtocol::CSecurityContextProtocol(const wl_interface* iface, co } void CSecurityContextProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CSecurityContextProtocol::destroyResource(CSecurityContextManagerResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } void CSecurityContextProtocol::destroyContext(CSecurityContext* context) { - std::erase_if(m_vContexts, [&](const auto& other) { return other.get() == context; }); + std::erase_if(m_contexts, [&](const auto& other) { return other.get() == context; }); } bool CSecurityContextProtocol::isClientSandboxed(const wl_client* client) { - return std::find_if(m_vSandboxedClients.begin(), m_vSandboxedClients.end(), [client](const auto& e) { return e->client == client; }) != m_vSandboxedClients.end(); + return std::find_if(m_sandboxedClients.begin(), m_sandboxedClients.end(), [client](const auto& e) { return e->m_client == client; }) != m_sandboxedClients.end(); } diff --git a/src/protocols/SecurityContext.hpp b/src/protocols/SecurityContext.hpp index 56d4f7b4..c2acb66a 100644 --- a/src/protocols/SecurityContext.hpp +++ b/src/protocols/SecurityContext.hpp @@ -13,18 +13,23 @@ class CSecurityContext { bool good(); - std::string sandboxEngine, appID, instanceID; - Hyprutils::OS::CFileDescriptor listenFD, closeFD; + std::string m_sandboxEngine; + std::string m_appID; + std::string m_instanceID; + + Hyprutils::OS::CFileDescriptor m_listenFD; + Hyprutils::OS::CFileDescriptor m_closeFD; void onListen(uint32_t mask); void onClose(uint32_t mask); private: - SP resource; + SP m_resource; - wl_event_source * listenSource = nullptr, *closeSource = nullptr; + wl_event_source* m_listenSource = nullptr; + wl_event_source* m_closeSource = nullptr; - bool committed = false; + bool m_committed = false; }; class CSecurityContextManagerResource { @@ -34,7 +39,7 @@ class CSecurityContextManagerResource { bool good(); private: - SP resource; + SP m_resource; }; class CSecurityContextSandboxedClient; @@ -50,13 +55,13 @@ class CSecurityContextSandboxedClient { void onDestroy(); - SCSecurityContextSandboxedClientDestroyWrapper destroyListener; + SCSecurityContextSandboxedClientDestroyWrapper m_destroyListener; private: CSecurityContextSandboxedClient(Hyprutils::OS::CFileDescriptor clientFD_); - wl_client* client = nullptr; - Hyprutils::OS::CFileDescriptor clientFD; + wl_client* m_client = nullptr; + Hyprutils::OS::CFileDescriptor m_clientFD; friend class CSecurityContextProtocol; friend class CSecurityContext; @@ -76,9 +81,9 @@ class CSecurityContextProtocol : public IWaylandProtocol { void destroyContext(CSecurityContext* context); // - std::vector> m_vManagers; - std::vector> m_vContexts; - std::vector> m_vSandboxedClients; + std::vector> m_managers; + std::vector> m_contexts; + std::vector> m_sandboxedClients; friend class CSecurityContextManagerResource; friend class CSecurityContext; diff --git a/src/protocols/ServerDecorationKDE.cpp b/src/protocols/ServerDecorationKDE.cpp index 0726c8a5..81f03130 100644 --- a/src/protocols/ServerDecorationKDE.cpp +++ b/src/protocols/ServerDecorationKDE.cpp @@ -1,19 +1,19 @@ #include "ServerDecorationKDE.hpp" #include "core/Compositor.hpp" -CServerDecorationKDE::CServerDecorationKDE(SP resource_, SP surf) : resource(resource_) { +CServerDecorationKDE::CServerDecorationKDE(SP resource_, SP surf) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setRelease([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); - resource->setOnDestroy([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); + m_resource->setRelease([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); + m_resource->setOnDestroy([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); // we send this and ignore request_mode. - resource->sendMode(ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER); + m_resource->sendMode(ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER); } bool CServerDecorationKDE::good() { - return resource->resource(); + return m_resource->resource(); } CServerDecorationKDEProtocol::CServerDecorationKDEProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -21,7 +21,7 @@ CServerDecorationKDEProtocol::CServerDecorationKDEProtocol(const wl_interface* i } void CServerDecorationKDEProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](COrgKdeKwinServerDecorationManager* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setCreate([this](COrgKdeKwinServerDecorationManager* pMgr, uint32_t id, wl_resource* pointer) { this->createDecoration(pMgr, id, pointer); }); @@ -31,21 +31,21 @@ void CServerDecorationKDEProtocol::bindManager(wl_client* client, void* data, ui } void CServerDecorationKDEProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CServerDecorationKDEProtocol::destroyResource(CServerDecorationKDE* hayperlaaaand) { - std::erase_if(m_vDecos, [&](const auto& other) { return other.get() == hayperlaaaand; }); + std::erase_if(m_decos, [&](const auto& other) { return other.get() == hayperlaaaand; }); } void CServerDecorationKDEProtocol::createDecoration(COrgKdeKwinServerDecorationManager* pMgr, uint32_t id, wl_resource* surf) { const auto CLIENT = pMgr->client(); const auto RESOURCE = - m_vDecos.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surf))).get(); + m_decos.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), CWLSurfaceResource::fromResource(surf))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vDecos.pop_back(); + m_decos.pop_back(); return; } } diff --git a/src/protocols/ServerDecorationKDE.hpp b/src/protocols/ServerDecorationKDE.hpp index 0d0fa898..5dc93f50 100644 --- a/src/protocols/ServerDecorationKDE.hpp +++ b/src/protocols/ServerDecorationKDE.hpp @@ -14,7 +14,7 @@ class CServerDecorationKDE { bool good(); private: - SP resource; + SP m_resource; }; class CServerDecorationKDEProtocol : public IWaylandProtocol { @@ -30,8 +30,8 @@ class CServerDecorationKDEProtocol : public IWaylandProtocol { void createDecoration(COrgKdeKwinServerDecorationManager* pMgr, uint32_t id, wl_resource* surf); // - std::vector> m_vManagers; - std::vector> m_vDecos; + std::vector> m_managers; + std::vector> m_decos; friend class CServerDecorationKDE; }; diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index 0eccb543..a470117b 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -8,99 +8,99 @@ #include "../helpers/Monitor.hpp" CSessionLockSurface::CSessionLockSurface(SP resource_, SP surface_, PHLMONITOR pMonitor_, WP owner_) : - resource(resource_), sessionLock(owner_), pSurface(surface_), pMonitor(pMonitor_) { - if UNLIKELY (!resource->resource()) + m_resource(resource_), m_sessionLock(owner_), m_surface(surface_), m_monitor(pMonitor_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CExtSessionLockSurfaceV1* r) { - events.destroy.emit(); + m_resource->setDestroy([this](CExtSessionLockSurfaceV1* r) { + m_events.destroy.emit(); PROTO::sessionLock->destroyResource(this); }); - resource->setOnDestroy([this](CExtSessionLockSurfaceV1* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CExtSessionLockSurfaceV1* r) { + m_events.destroy.emit(); PROTO::sessionLock->destroyResource(this); }); - resource->setAckConfigure([this](CExtSessionLockSurfaceV1* r, uint32_t serial) { ackdConfigure = true; }); + m_resource->setAckConfigure([this](CExtSessionLockSurfaceV1* r, uint32_t serial) { m_ackdConfigure = true; }); - listeners.surfaceCommit = pSurface->m_events.commit.registerListener([this](std::any d) { - if (!pSurface->m_current.texture) { + m_listeners.surfaceCommit = m_surface->m_events.commit.registerListener([this](std::any d) { + if (!m_surface->m_current.texture) { LOGM(ERR, "SessionLock attached a null buffer"); - resource->error(EXT_SESSION_LOCK_SURFACE_V1_ERROR_NULL_BUFFER, "Null buffer attached"); + m_resource->error(EXT_SESSION_LOCK_SURFACE_V1_ERROR_NULL_BUFFER, "Null buffer attached"); return; } - if (!ackdConfigure) { + if (!m_ackdConfigure) { LOGM(ERR, "SessionLock committed without an ack"); - resource->error(EXT_SESSION_LOCK_SURFACE_V1_ERROR_COMMIT_BEFORE_FIRST_ACK, "Committed surface before first ack"); + m_resource->error(EXT_SESSION_LOCK_SURFACE_V1_ERROR_COMMIT_BEFORE_FIRST_ACK, "Committed surface before first ack"); return; } - if (committed) - events.commit.emit(); + if (m_committed) + m_events.commit.emit(); else { - pSurface->map(); - events.map.emit(); + m_surface->map(); + m_events.map.emit(); } - committed = true; + m_committed = true; }); - listeners.surfaceDestroy = pSurface->m_events.destroy.registerListener([this](std::any d) { + m_listeners.surfaceDestroy = m_surface->m_events.destroy.registerListener([this](std::any d) { LOGM(WARN, "SessionLockSurface object remains but surface is being destroyed???"); - pSurface->unmap(); - listeners.surfaceCommit.reset(); - listeners.surfaceDestroy.reset(); - if (g_pCompositor->m_lastFocus == pSurface) + m_surface->unmap(); + m_listeners.surfaceCommit.reset(); + m_listeners.surfaceDestroy.reset(); + if (g_pCompositor->m_lastFocus == m_surface) g_pCompositor->m_lastFocus.reset(); - pSurface.reset(); + m_surface.reset(); }); PROTO::fractional->sendScale(surface_, pMonitor_->m_scale); sendConfigure(); - listeners.monitorMode = pMonitor->m_events.modeChanged.registerListener([this](std::any data) { sendConfigure(); }); + m_listeners.monitorMode = m_monitor->m_events.modeChanged.registerListener([this](std::any data) { sendConfigure(); }); } CSessionLockSurface::~CSessionLockSurface() { - if (pSurface && pSurface->m_mapped) - pSurface->unmap(); - listeners.surfaceCommit.reset(); - listeners.surfaceDestroy.reset(); - events.destroy.emit(); // just in case. + if (m_surface && m_surface->m_mapped) + m_surface->unmap(); + m_listeners.surfaceCommit.reset(); + m_listeners.surfaceDestroy.reset(); + m_events.destroy.emit(); // just in case. } void CSessionLockSurface::sendConfigure() { - const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(resource->client())); - resource->sendConfigure(SERIAL, pMonitor->m_size.x, pMonitor->m_size.y); + const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(m_resource->client())); + m_resource->sendConfigure(SERIAL, m_monitor->m_size.x, m_monitor->m_size.y); } bool CSessionLockSurface::good() { - return resource->resource(); + return m_resource->resource(); } bool CSessionLockSurface::inert() { - return sessionLock.expired(); + return m_sessionLock.expired(); } PHLMONITOR CSessionLockSurface::monitor() { - return pMonitor.lock(); + return m_monitor.lock(); } SP CSessionLockSurface::surface() { - return pSurface.lock(); + return m_surface.lock(); } -CSessionLock::CSessionLock(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CSessionLock::CSessionLock(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CExtSessionLockV1* r) { PROTO::sessionLock->destroyResource(this); }); - resource->setOnDestroy([this](CExtSessionLockV1* r) { PROTO::sessionLock->destroyResource(this); }); + m_resource->setDestroy([this](CExtSessionLockV1* r) { PROTO::sessionLock->destroyResource(this); }); + m_resource->setOnDestroy([this](CExtSessionLockV1* r) { PROTO::sessionLock->destroyResource(this); }); - resource->setGetLockSurface([this](CExtSessionLockV1* r, uint32_t id, wl_resource* surf, wl_resource* output) { - if (inert) { + m_resource->setGetLockSurface([this](CExtSessionLockV1* r, uint32_t id, wl_resource* surf, wl_resource* output) { + if (m_inert) { LOGM(ERR, "Lock is trying to send getLockSurface after it's inert"); return; } @@ -108,39 +108,39 @@ CSessionLock::CSessionLock(SP resource_) : resource(resource_ PROTO::sessionLock->onGetLockSurface(r, id, surf, output); }); - resource->setUnlockAndDestroy([this](CExtSessionLockV1* r) { - if (inert) { + m_resource->setUnlockAndDestroy([this](CExtSessionLockV1* r) { + if (m_inert) { PROTO::sessionLock->destroyResource(this); return; } - PROTO::sessionLock->locked = false; + PROTO::sessionLock->m_locked = false; PROTO::lockNotify->onUnlocked(); - events.unlockAndDestroy.emit(); + m_events.unlockAndDestroy.emit(); - inert = true; + m_inert = true; PROTO::sessionLock->destroyResource(this); }); } CSessionLock::~CSessionLock() { - events.destroyed.emit(); + m_events.destroyed.emit(); } void CSessionLock::sendLocked() { - resource->sendLocked(); + m_resource->sendLocked(); PROTO::lockNotify->onLocked(); } bool CSessionLock::good() { - return resource->resource(); + return m_resource->resource(); } void CSessionLock::sendDenied() { - inert = true; - resource->sendFinished(); + m_inert = true; + m_resource->sendFinished(); } CSessionLockProtocol::CSessionLockProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -148,7 +148,7 @@ CSessionLockProtocol::CSessionLockProtocol(const wl_interface* iface, const int& } void CSessionLockProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CExtSessionLockManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CExtSessionLockManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -156,15 +156,15 @@ void CSessionLockProtocol::bindManager(wl_client* client, void* data, uint32_t v } void CSessionLockProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CSessionLockProtocol::destroyResource(CSessionLock* lock) { - std::erase_if(m_vLocks, [&](const auto& other) { return other.get() == lock; }); + std::erase_if(m_locks, [&](const auto& other) { return other.get() == lock; }); } void CSessionLockProtocol::destroyResource(CSessionLockSurface* surf) { - std::erase_if(m_vLockSurfaces, [&](const auto& other) { return other.get() == surf; }); + std::erase_if(m_lockSurfaces, [&](const auto& other) { return other.get() == surf; }); } void CSessionLockProtocol::onLock(CExtSessionLockManagerV1* pMgr, uint32_t id) { @@ -172,17 +172,17 @@ void CSessionLockProtocol::onLock(CExtSessionLockManagerV1* pMgr, uint32_t id) { LOGM(LOG, "New sessionLock with id {}", id); const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vLocks.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id))); + const auto RESOURCE = m_locks.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id))); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vLocks.pop_back(); + m_locks.pop_back(); return; } - events.newLock.emit(RESOURCE); + m_events.newLock.emit(RESOURCE); - locked = true; + m_locked = true; } void CSessionLockProtocol::onGetLockSurface(CExtSessionLockV1* lock, uint32_t id, wl_resource* surface, wl_resource* output) { @@ -192,25 +192,25 @@ void CSessionLockProtocol::onGetLockSurface(CExtSessionLockV1* lock, uint32_t id auto PMONITOR = CWLOutputResource::fromResource(output)->m_monitor.lock(); SP sessionLock; - for (auto const& l : m_vLocks) { - if (l->resource.get() == lock) { + for (auto const& l : m_locks) { + if (l->m_resource.get() == lock) { sessionLock = l; break; } } const auto RESOURCE = - m_vLockSurfaces.emplace_back(makeShared(makeShared(lock->client(), lock->version(), id), PSURFACE, PMONITOR, sessionLock)); + m_lockSurfaces.emplace_back(makeShared(makeShared(lock->client(), lock->version(), id), PSURFACE, PMONITOR, sessionLock)); if UNLIKELY (!RESOURCE->good()) { lock->noMemory(); - m_vLockSurfaces.pop_back(); + m_lockSurfaces.pop_back(); return; } - sessionLock->events.newLockSurface.emit(RESOURCE); + sessionLock->m_events.newLockSurface.emit(RESOURCE); } bool CSessionLockProtocol::isLocked() { - return locked; + return m_locked; } diff --git a/src/protocols/SessionLock.hpp b/src/protocols/SessionLock.hpp index 670e5e1d..8f0e0af6 100644 --- a/src/protocols/SessionLock.hpp +++ b/src/protocols/SessionLock.hpp @@ -24,16 +24,16 @@ class CSessionLockSurface { CSignal map; CSignal destroy; CSignal commit; - } events; + } m_events; private: - SP resource; - WP sessionLock; - WP pSurface; - PHLMONITORREF pMonitor; + SP m_resource; + WP m_sessionLock; + WP m_surface; + PHLMONITORREF m_monitor; - bool ackdConfigure = false; - bool committed = false; + bool m_ackdConfigure = false; + bool m_committed = false; void sendConfigure(); @@ -41,7 +41,7 @@ class CSessionLockSurface { CHyprSignalListener monitorMode; CHyprSignalListener surfaceCommit; CHyprSignalListener surfaceDestroy; - } listeners; + } m_listeners; }; class CSessionLock { @@ -57,12 +57,12 @@ class CSessionLock { CSignal newLockSurface; // SP CSignal unlockAndDestroy; CSignal destroyed; // fires regardless of whether there was a unlockAndDestroy or not. - } events; + } m_events; private: - SP resource; + SP m_resource; - bool inert = false; + bool m_inert = false; friend class CSessionLockProtocol; }; @@ -77,7 +77,7 @@ class CSessionLockProtocol : public IWaylandProtocol { struct { CSignal newLock; // SP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -86,12 +86,12 @@ class CSessionLockProtocol : public IWaylandProtocol { void onLock(CExtSessionLockManagerV1* pMgr, uint32_t id); void onGetLockSurface(CExtSessionLockV1* lock, uint32_t id, wl_resource* surface, wl_resource* output); - bool locked = false; + bool m_locked = false; // - std::vector> m_vManagers; - std::vector> m_vLocks; - std::vector> m_vLockSurfaces; + std::vector> m_managers; + std::vector> m_locks; + std::vector> m_lockSurfaces; friend class CSessionLock; friend class CSessionLockSurface; diff --git a/src/protocols/ShortcutsInhibit.cpp b/src/protocols/ShortcutsInhibit.cpp index b9219f72..b33db998 100644 --- a/src/protocols/ShortcutsInhibit.cpp +++ b/src/protocols/ShortcutsInhibit.cpp @@ -3,24 +3,24 @@ #include "../Compositor.hpp" #include "core/Compositor.hpp" -CKeyboardShortcutsInhibitor::CKeyboardShortcutsInhibitor(SP resource_, SP surf) : resource(resource_), pSurface(surf) { - if UNLIKELY (!resource->resource()) +CKeyboardShortcutsInhibitor::CKeyboardShortcutsInhibitor(SP resource_, SP surf) : m_resource(resource_), m_surface(surf) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CZwpKeyboardShortcutsInhibitorV1* pMgr) { PROTO::shortcutsInhibit->destroyInhibitor(this); }); - resource->setOnDestroy([this](CZwpKeyboardShortcutsInhibitorV1* pMgr) { PROTO::shortcutsInhibit->destroyInhibitor(this); }); + m_resource->setDestroy([this](CZwpKeyboardShortcutsInhibitorV1* pMgr) { PROTO::shortcutsInhibit->destroyInhibitor(this); }); + m_resource->setOnDestroy([this](CZwpKeyboardShortcutsInhibitorV1* pMgr) { PROTO::shortcutsInhibit->destroyInhibitor(this); }); // I don't really care about following the spec here that much, // let's make the app believe it's always active - resource->sendActive(); + m_resource->sendActive(); } SP CKeyboardShortcutsInhibitor::surface() { - return pSurface.lock(); + return m_surface.lock(); } bool CKeyboardShortcutsInhibitor::good() { - return resource->resource(); + return m_resource->resource(); } CKeyboardShortcutsInhibitProtocol::CKeyboardShortcutsInhibitProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -28,7 +28,7 @@ CKeyboardShortcutsInhibitProtocol::CKeyboardShortcutsInhibitProtocol(const wl_in } void CKeyboardShortcutsInhibitProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpKeyboardShortcutsInhibitManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpKeyboardShortcutsInhibitManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -37,18 +37,18 @@ void CKeyboardShortcutsInhibitProtocol::bindManager(wl_client* client, void* dat } void CKeyboardShortcutsInhibitProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CKeyboardShortcutsInhibitProtocol::destroyInhibitor(CKeyboardShortcutsInhibitor* inhibitor) { - std::erase_if(m_vInhibitors, [&](const auto& other) { return other.get() == inhibitor; }); + std::erase_if(m_inhibitors, [&](const auto& other) { return other.get() == inhibitor; }); } void CKeyboardShortcutsInhibitProtocol::onInhibit(CZwpKeyboardShortcutsInhibitManagerV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* seat) { SP surf = CWLSurfaceResource::fromResource(surface); const auto CLIENT = pMgr->client(); - for (auto const& in : m_vInhibitors) { + for (auto const& in : m_inhibitors) { if LIKELY (in->surface() != surf) continue; @@ -56,12 +56,11 @@ void CKeyboardShortcutsInhibitProtocol::onInhibit(CZwpKeyboardShortcutsInhibitMa return; } - const auto RESOURCE = - m_vInhibitors.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), surf)).get(); + const auto RESOURCE = m_inhibitors.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id), surf)).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vInhibitors.pop_back(); + m_inhibitors.pop_back(); LOGM(ERR, "Failed to create an inhibitor resource"); return; } @@ -74,7 +73,7 @@ bool CKeyboardShortcutsInhibitProtocol::isInhibited() { if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(g_pCompositor->m_lastFocus.lock()); PWINDOW && PWINDOW->m_windowData.noShortcutsInhibit.valueOrDefault()) return false; - for (auto const& in : m_vInhibitors) { + for (auto const& in : m_inhibitors) { if (in->surface() != g_pCompositor->m_lastFocus) continue; diff --git a/src/protocols/ShortcutsInhibit.hpp b/src/protocols/ShortcutsInhibit.hpp index c093ac6e..33b40f5b 100644 --- a/src/protocols/ShortcutsInhibit.hpp +++ b/src/protocols/ShortcutsInhibit.hpp @@ -16,8 +16,8 @@ class CKeyboardShortcutsInhibitor { bool good(); private: - SP resource; - WP pSurface; + SP m_resource; + WP m_surface; }; class CKeyboardShortcutsInhibitProtocol : public IWaylandProtocol { @@ -34,8 +34,8 @@ class CKeyboardShortcutsInhibitProtocol : public IWaylandProtocol { void onInhibit(CZwpKeyboardShortcutsInhibitManagerV1* pMgr, uint32_t id, wl_resource* surface, wl_resource* seat); // - std::vector> m_vManagers; - std::vector> m_vInhibitors; + std::vector> m_managers; + std::vector> m_inhibitors; friend class CKeyboardShortcutsInhibitor; }; diff --git a/src/protocols/SinglePixel.cpp b/src/protocols/SinglePixel.cpp index 1104ab42..7baddfd9 100644 --- a/src/protocols/SinglePixel.cpp +++ b/src/protocols/SinglePixel.cpp @@ -6,21 +6,21 @@ CSinglePixelBuffer::CSinglePixelBuffer(uint32_t id, wl_client* client, CHyprColor col_) { LOGM(LOG, "New single-pixel buffer with color 0x{:x}", col_.getAsHex()); - color = col_.getAsHex(); + m_color = col_.getAsHex(); g_pHyprRenderer->makeEGLCurrent(); m_opaque = col_.a >= 1.F; - m_texture = makeShared(DRM_FORMAT_ARGB8888, (uint8_t*)&color, 4, Vector2D{1, 1}); + m_texture = makeShared(DRM_FORMAT_ARGB8888, (uint8_t*)&m_color, 4, Vector2D{1, 1}); m_resource = CWLBufferResource::create(makeShared(client, 1, id)); - success = m_texture->m_iTexID; + m_success = m_texture->m_iTexID; size = {1, 1}; - if (!success) + if (!m_success) Debug::log(ERR, "Failed creating a single pixel texture: null texture id"); } @@ -50,7 +50,7 @@ Aquamarine::SDMABUFAttrs CSinglePixelBuffer::dmabuf() { } std::tuple CSinglePixelBuffer::beginDataPtr(uint32_t flags) { - return {(uint8_t*)&color, DRM_FORMAT_ARGB8888, 4}; + return {(uint8_t*)&m_color, DRM_FORMAT_ARGB8888, 4}; } void CSinglePixelBuffer::endDataPtr() { @@ -62,45 +62,45 @@ bool CSinglePixelBuffer::good() { } CSinglePixelBufferResource::CSinglePixelBufferResource(uint32_t id, wl_client* client, CHyprColor color) { - buffer = makeShared(id, client, color); + m_buffer = makeShared(id, client, color); - if UNLIKELY (!buffer->good()) + if UNLIKELY (!m_buffer->good()) return; - buffer->m_resource->m_buffer = buffer; + m_buffer->m_resource->m_buffer = m_buffer; - listeners.bufferResourceDestroy = buffer->events.destroy.registerListener([this](std::any d) { - listeners.bufferResourceDestroy.reset(); + m_listeners.bufferResourceDestroy = m_buffer->events.destroy.registerListener([this](std::any d) { + m_listeners.bufferResourceDestroy.reset(); PROTO::singlePixel->destroyResource(this); }); } bool CSinglePixelBufferResource::good() { - return buffer->good(); + return m_buffer->good(); } -CSinglePixelBufferManagerResource::CSinglePixelBufferManagerResource(SP resource_) : resource(resource_) { +CSinglePixelBufferManagerResource::CSinglePixelBufferManagerResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWpSinglePixelBufferManagerV1* r) { PROTO::singlePixel->destroyResource(this); }); - resource->setOnDestroy([this](CWpSinglePixelBufferManagerV1* r) { PROTO::singlePixel->destroyResource(this); }); + m_resource->setDestroy([this](CWpSinglePixelBufferManagerV1* r) { PROTO::singlePixel->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpSinglePixelBufferManagerV1* r) { PROTO::singlePixel->destroyResource(this); }); - resource->setCreateU32RgbaBuffer([this](CWpSinglePixelBufferManagerV1* res, uint32_t id, uint32_t r, uint32_t g, uint32_t b, uint32_t a) { + m_resource->setCreateU32RgbaBuffer([this](CWpSinglePixelBufferManagerV1* res, uint32_t id, uint32_t r, uint32_t g, uint32_t b, uint32_t a) { CHyprColor color{r / (float)std::numeric_limits::max(), g / (float)std::numeric_limits::max(), b / (float)std::numeric_limits::max(), a / (float)std::numeric_limits::max()}; - const auto RESOURCE = PROTO::singlePixel->m_vBuffers.emplace_back(makeShared(id, resource->client(), color)); + const auto RESOURCE = PROTO::singlePixel->m_buffers.emplace_back(makeShared(id, m_resource->client(), color)); if UNLIKELY (!RESOURCE->good()) { res->noMemory(); - PROTO::singlePixel->m_vBuffers.pop_back(); + PROTO::singlePixel->m_buffers.pop_back(); return; } }); } bool CSinglePixelBufferManagerResource::good() { - return resource->resource(); + return m_resource->resource(); } CSinglePixelProtocol::CSinglePixelProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -108,19 +108,19 @@ CSinglePixelProtocol::CSinglePixelProtocol(const wl_interface* iface, const int& } void CSinglePixelProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CSinglePixelProtocol::destroyResource(CSinglePixelBufferManagerResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } void CSinglePixelProtocol::destroyResource(CSinglePixelBufferResource* surf) { - std::erase_if(m_vBuffers, [&](const auto& other) { return other.get() == surf; }); + std::erase_if(m_buffers, [&](const auto& other) { return other.get() == surf; }); } diff --git a/src/protocols/SinglePixel.hpp b/src/protocols/SinglePixel.hpp index 478f3e35..4f613de8 100644 --- a/src/protocols/SinglePixel.hpp +++ b/src/protocols/SinglePixel.hpp @@ -20,14 +20,10 @@ class CSinglePixelBuffer : public IHLBuffer { virtual void endDataPtr(); // bool good(); - bool success = false; + bool m_success = false; private: - uint32_t color = 0x00000000; - - struct { - CHyprSignalListener resourceDestroy; - } listeners; + uint32_t m_color = 0x00000000; }; class CSinglePixelBufferResource { @@ -38,11 +34,11 @@ class CSinglePixelBufferResource { bool good(); private: - SP buffer; + SP m_buffer; struct { CHyprSignalListener bufferResourceDestroy; - } listeners; + } m_listeners; }; class CSinglePixelBufferManagerResource { @@ -52,7 +48,7 @@ class CSinglePixelBufferManagerResource { bool good(); private: - SP resource; + SP m_resource; }; class CSinglePixelProtocol : public IWaylandProtocol { @@ -66,8 +62,8 @@ class CSinglePixelProtocol : public IWaylandProtocol { void destroyResource(CSinglePixelBufferResource* resource); // - std::vector> m_vManagers; - std::vector> m_vBuffers; + std::vector> m_managers; + std::vector> m_buffers; friend class CSinglePixelBufferManagerResource; friend class CSinglePixelBufferResource; diff --git a/src/protocols/Tablet.cpp b/src/protocols/Tablet.cpp index 58aaa54c..4c47665f 100644 --- a/src/protocols/Tablet.cpp +++ b/src/protocols/Tablet.cpp @@ -9,154 +9,154 @@ #include #include -CTabletPadStripV2Resource::CTabletPadStripV2Resource(SP resource_, uint32_t id_) : id(id_), resource(resource_) { +CTabletPadStripV2Resource::CTabletPadStripV2Resource(SP resource_, uint32_t id_) : m_id(id_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletPadStripV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletPadStripV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletPadStripV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletPadStripV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletPadStripV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } -CTabletPadRingV2Resource::CTabletPadRingV2Resource(SP resource_, uint32_t id_) : id(id_), resource(resource_) { +CTabletPadRingV2Resource::CTabletPadRingV2Resource(SP resource_, uint32_t id_) : m_id(id_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletPadRingV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletPadRingV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletPadRingV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletPadRingV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletPadRingV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } -CTabletPadGroupV2Resource::CTabletPadGroupV2Resource(SP resource_, size_t idx_) : idx(idx_), resource(resource_) { +CTabletPadGroupV2Resource::CTabletPadGroupV2Resource(SP resource_, size_t idx_) : m_idx(idx_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletPadGroupV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletPadGroupV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletPadGroupV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletPadGroupV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletPadGroupV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } void CTabletPadGroupV2Resource::sendData(SP pad, SP group) { - resource->sendModes(group->modes); + m_resource->sendModes(group->modes); wl_array buttonArr; wl_array_init(&buttonArr); wl_array_add(&buttonArr, group->buttons.size() * sizeof(int)); memcpy(buttonArr.data, group->buttons.data(), group->buttons.size() * sizeof(int)); - resource->sendButtons(&buttonArr); + m_resource->sendButtons(&buttonArr); wl_array_release(&buttonArr); for (size_t i = 0; i < group->strips.size(); ++i) { const auto RESOURCE = - PROTO::tablet->m_vStrips.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), i)); + PROTO::tablet->m_strips.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), i)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vStrips.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_strips.pop_back(); return; } - resource->sendStrip(RESOURCE->resource.get()); + m_resource->sendStrip(RESOURCE->m_resource.get()); } for (size_t i = 0; i < group->rings.size(); ++i) { const auto RESOURCE = - PROTO::tablet->m_vRings.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), i)); + PROTO::tablet->m_rings.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), i)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vRings.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_rings.pop_back(); return; } - resource->sendRing(RESOURCE->resource.get()); + m_resource->sendRing(RESOURCE->m_resource.get()); } - resource->sendDone(); + m_resource->sendDone(); } -CTabletPadV2Resource::CTabletPadV2Resource(SP resource_, SP pad_, SP seat_) : pad(pad_), seat(seat_), resource(resource_) { +CTabletPadV2Resource::CTabletPadV2Resource(SP resource_, SP pad_, SP seat_) : m_pad(pad_), m_seat(seat_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletPadV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletPadV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletPadV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletPadV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletPadV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } void CTabletPadV2Resource::sendData() { // this is dodgy as fuck. I hate wl_array. it's expanded wl_array_for_each because C++ would complain about the implicit casts - for (auto const& p : pad->aq()->paths) { - resource->sendPath(p.c_str()); + for (auto const& p : m_pad->aq()->paths) { + m_resource->sendPath(p.c_str()); } - resource->sendButtons(pad->aq()->buttons); + m_resource->sendButtons(m_pad->aq()->buttons); - for (size_t i = 0; i < pad->aq()->groups.size(); ++i) { - createGroup(pad->aq()->groups.at(i), i); + for (size_t i = 0; i < m_pad->aq()->groups.size(); ++i) { + createGroup(m_pad->aq()->groups.at(i), i); } - resource->sendDone(); + m_resource->sendDone(); } void CTabletPadV2Resource::createGroup(SP group, size_t idx) { const auto RESOURCE = - PROTO::tablet->m_vGroups.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), idx)); + PROTO::tablet->m_groups.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), idx)); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vGroups.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_groups.pop_back(); return; } - resource->sendGroup(RESOURCE->resource.get()); + m_resource->sendGroup(RESOURCE->m_resource.get()); - RESOURCE->sendData(pad.lock(), group); + RESOURCE->sendData(m_pad.lock(), group); } -CTabletV2Resource::CTabletV2Resource(SP resource_, SP tablet_, SP seat_) : tablet(tablet_), seat(seat_), resource(resource_) { +CTabletV2Resource::CTabletV2Resource(SP resource_, SP tablet_, SP seat_) : m_tablet(tablet_), m_seat(seat_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } void CTabletV2Resource::sendData() { - resource->sendName(tablet->m_deviceName.c_str()); - resource->sendId(tablet->aq()->usbVendorID, tablet->aq()->usbProductID); + m_resource->sendName(m_tablet->m_deviceName.c_str()); + m_resource->sendId(m_tablet->aq()->usbVendorID, m_tablet->aq()->usbProductID); - for (auto const& p : tablet->aq()->paths) { - resource->sendPath(p.c_str()); + for (auto const& p : m_tablet->aq()->paths) { + m_resource->sendPath(p.c_str()); } - resource->sendDone(); + m_resource->sendDone(); } -CTabletToolV2Resource::CTabletToolV2Resource(SP resource_, SP tool_, SP seat_) : tool(tool_), seat(seat_), resource(resource_) { +CTabletToolV2Resource::CTabletToolV2Resource(SP resource_, SP tool_, SP seat_) : m_tool(tool_), m_seat(seat_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setSetCursor([](CZwpTabletToolV2* r, uint32_t serial, wl_resource* surf, int32_t hot_x, int32_t hot_y) { + m_resource->setSetCursor([](CZwpTabletToolV2* r, uint32_t serial, wl_resource* surf, int32_t hot_x, int32_t hot_y) { if (!g_pSeatManager->m_state.pointerFocusResource || g_pSeatManager->m_state.pointerFocusResource->client() != r->client()) return; @@ -165,12 +165,12 @@ CTabletToolV2Resource::CTabletToolV2Resource(SP resource_, SP< } CTabletToolV2Resource::~CTabletToolV2Resource() { - if (frameSource) - wl_event_source_remove(frameSource); + if (m_frameSource) + wl_event_source_remove(m_frameSource); } bool CTabletToolV2Resource::good() { - return resource->resource(); + return m_resource->resource(); } void CTabletToolV2Resource::sendData() { @@ -188,120 +188,120 @@ void CTabletToolV2Resource::sendData() { UNREACHABLE(); }; - resource->sendType(AQ_TYPE_TO_PROTO(tool->aq()->type)); - resource->sendHardwareSerial(tool->aq()->serial >> 32, tool->aq()->serial & 0xFFFFFFFF); - resource->sendHardwareIdWacom(tool->aq()->id >> 32, tool->aq()->id & 0xFFFFFFFF); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_DISTANCE) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_PRESSURE) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_ROTATION) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_SLIDER) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_TILT) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_TILT); - if (tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_WHEEL) - resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL); - resource->sendDone(); + m_resource->sendType(AQ_TYPE_TO_PROTO(m_tool->aq()->type)); + m_resource->sendHardwareSerial(m_tool->aq()->serial >> 32, m_tool->aq()->serial & 0xFFFFFFFF); + m_resource->sendHardwareIdWacom(m_tool->aq()->id >> 32, m_tool->aq()->id & 0xFFFFFFFF); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_DISTANCE) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_PRESSURE) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_ROTATION) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_SLIDER) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_TILT) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_TILT); + if (m_tool->m_toolCapabilities & CTabletTool::eTabletToolCapabilities::HID_TABLET_TOOL_CAPABILITY_WHEEL) + m_resource->sendCapability(zwpTabletToolV2Capability::ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL); + m_resource->sendDone(); } void CTabletToolV2Resource::queueFrame() { - if (frameSource) + if (m_frameSource) return; - frameSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, [](void* data) { ((CTabletToolV2Resource*)data)->sendFrame(false); }, this); + m_frameSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, [](void* data) { ((CTabletToolV2Resource*)data)->sendFrame(false); }, this); } void CTabletToolV2Resource::sendFrame(bool removeSource) { - if (frameSource) { + if (m_frameSource) { if (removeSource) - wl_event_source_remove(frameSource); - frameSource = nullptr; + wl_event_source_remove(m_frameSource); + m_frameSource = nullptr; } - if (!current) + if (!m_current) return; - resource->sendFrame(Time::millis(Time::steadyNow())); + m_resource->sendFrame(Time::millis(Time::steadyNow())); } -CTabletSeat::CTabletSeat(SP resource_) : resource(resource_) { +CTabletSeat::CTabletSeat(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpTabletSeatV2* r) { PROTO::tablet->destroyResource(this); }); - resource->setOnDestroy([this](CZwpTabletSeatV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setDestroy([this](CZwpTabletSeatV2* r) { PROTO::tablet->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTabletSeatV2* r) { PROTO::tablet->destroyResource(this); }); } bool CTabletSeat::good() { - return resource->resource(); + return m_resource->resource(); } void CTabletSeat::sendTool(SP tool) { const auto RESOURCE = - PROTO::tablet->m_vTools.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), tool, self.lock())); + PROTO::tablet->m_tools.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), tool, m_self.lock())); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vTools.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_tools.pop_back(); return; } - resource->sendToolAdded(RESOURCE->resource.get()); + m_resource->sendToolAdded(RESOURCE->m_resource.get()); RESOURCE->sendData(); - tools.emplace_back(RESOURCE); + m_tools.emplace_back(RESOURCE); } void CTabletSeat::sendPad(SP pad) { const auto RESOURCE = - PROTO::tablet->m_vPads.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), pad, self.lock())); + PROTO::tablet->m_pads.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), pad, m_self.lock())); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vPads.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_pads.pop_back(); return; } - resource->sendPadAdded(RESOURCE->resource.get()); + m_resource->sendPadAdded(RESOURCE->m_resource.get()); RESOURCE->sendData(); - pads.emplace_back(RESOURCE); + m_pads.emplace_back(RESOURCE); } void CTabletSeat::sendTablet(SP tablet) { const auto RESOURCE = - PROTO::tablet->m_vTablets.emplace_back(makeShared(makeShared(resource->client(), resource->version(), 0), tablet, self.lock())); + PROTO::tablet->m_tablets.emplace_back(makeShared(makeShared(m_resource->client(), m_resource->version(), 0), tablet, m_self.lock())); if UNLIKELY (!RESOURCE->good()) { - resource->noMemory(); - PROTO::tablet->m_vTablets.pop_back(); + m_resource->noMemory(); + PROTO::tablet->m_tablets.pop_back(); return; } - resource->sendTabletAdded(RESOURCE->resource.get()); + m_resource->sendTabletAdded(RESOURCE->m_resource.get()); RESOURCE->sendData(); - tablets.emplace_back(RESOURCE); + m_tablets.emplace_back(RESOURCE); } void CTabletSeat::sendData() { - for (auto const& tw : PROTO::tablet->tablets) { + for (auto const& tw : PROTO::tablet->m_tabletDevices) { if (tw.expired()) continue; sendTablet(tw.lock()); } - for (auto const& tw : PROTO::tablet->tools) { + for (auto const& tw : PROTO::tablet->m_toolDevices) { if (tw.expired()) continue; sendTool(tw.lock()); } - for (auto const& tw : PROTO::tablet->pads) { + for (auto const& tw : PROTO::tablet->m_padDevices) { if (tw.expired()) continue; @@ -314,7 +314,7 @@ CTabletV2Protocol::CTabletV2Protocol(const wl_interface* iface, const int& ver, } void CTabletV2Protocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpTabletManagerV2* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpTabletManagerV2* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -322,218 +322,218 @@ void CTabletV2Protocol::bindManager(wl_client* client, void* data, uint32_t ver, } void CTabletV2Protocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CTabletV2Protocol::destroyResource(CTabletSeat* resource) { - std::erase_if(m_vSeats, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_seats, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletToolV2Resource* resource) { - std::erase_if(m_vTools, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_tools, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletV2Resource* resource) { - std::erase_if(m_vTablets, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_tablets, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletPadV2Resource* resource) { - std::erase_if(m_vPads, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_pads, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletPadGroupV2Resource* resource) { - std::erase_if(m_vGroups, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_groups, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletPadRingV2Resource* resource) { - std::erase_if(m_vRings, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_rings, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::destroyResource(CTabletPadStripV2Resource* resource) { - std::erase_if(m_vStrips, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_strips, [&](const auto& other) { return other.get() == resource; }); } void CTabletV2Protocol::onGetSeat(CZwpTabletManagerV2* pMgr, uint32_t id, wl_resource* seat) { - const auto RESOURCE = m_vSeats.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); + const auto RESOURCE = m_seats.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vSeats.pop_back(); + m_seats.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; RESOURCE->sendData(); } void CTabletV2Protocol::registerDevice(SP tablet) { - for (auto const& s : m_vSeats) { + for (auto const& s : m_seats) { s->sendTablet(tablet); } - tablets.emplace_back(tablet); + m_tabletDevices.emplace_back(tablet); } void CTabletV2Protocol::registerDevice(SP tool) { - for (auto const& s : m_vSeats) { + for (auto const& s : m_seats) { s->sendTool(tool); } - tools.emplace_back(tool); + m_toolDevices.emplace_back(tool); } void CTabletV2Protocol::registerDevice(SP pad) { - for (auto const& s : m_vSeats) { + for (auto const& s : m_seats) { s->sendPad(pad); } - pads.emplace_back(pad); + m_padDevices.emplace_back(pad); } void CTabletV2Protocol::unregisterDevice(SP tablet) { - for (auto const& t : m_vTablets) { - if (t->tablet == tablet) { - t->resource->sendRemoved(); - t->inert = true; + for (auto const& t : m_tablets) { + if (t->m_tablet == tablet) { + t->m_resource->sendRemoved(); + t->m_inert = true; } } - std::erase_if(tablets, [tablet](const auto& e) { return e.expired() || e == tablet; }); + std::erase_if(m_tabletDevices, [tablet](const auto& e) { return e.expired() || e == tablet; }); } void CTabletV2Protocol::unregisterDevice(SP tool) { - for (auto const& t : m_vTools) { - if (t->tool == tool) { - t->resource->sendRemoved(); - t->inert = true; + for (auto const& t : m_tools) { + if (t->m_tool == tool) { + t->m_resource->sendRemoved(); + t->m_inert = true; } } - std::erase_if(tools, [tool](const auto& e) { return e.expired() || e == tool; }); + std::erase_if(m_toolDevices, [tool](const auto& e) { return e.expired() || e == tool; }); } void CTabletV2Protocol::unregisterDevice(SP pad) { - for (auto const& t : m_vPads) { - if (t->pad == pad) { - t->resource->sendRemoved(); - t->inert = true; + for (auto const& t : m_pads) { + if (t->m_pad == pad) { + t->m_resource->sendRemoved(); + t->m_inert = true; } } - std::erase_if(pads, [pad](const auto& e) { return e.expired() || e == pad; }); + std::erase_if(m_padDevices, [pad](const auto& e) { return e.expired() || e == pad; }); } void CTabletV2Protocol::recheckRegisteredDevices() { - std::erase_if(tablets, [](const auto& e) { return e.expired(); }); - std::erase_if(tools, [](const auto& e) { return e.expired(); }); - std::erase_if(pads, [](const auto& e) { return e.expired(); }); + std::erase_if(m_tabletDevices, [](const auto& e) { return e.expired(); }); + std::erase_if(m_toolDevices, [](const auto& e) { return e.expired(); }); + std::erase_if(m_padDevices, [](const auto& e) { return e.expired(); }); // now we need to send removed events - for (auto const& t : m_vTablets) { - if (!t->tablet.expired() || t->inert) + for (auto const& t : m_tablets) { + if (!t->m_tablet.expired() || t->m_inert) continue; - t->resource->sendRemoved(); - t->inert = true; + t->m_resource->sendRemoved(); + t->m_inert = true; } - for (auto const& t : m_vTools) { - if (!t->tool.expired() || t->inert) + for (auto const& t : m_tools) { + if (!t->m_tool.expired() || t->m_inert) continue; - if (t->current) { - t->resource->sendProximityOut(); + if (t->m_current) { + t->m_resource->sendProximityOut(); t->sendFrame(); - t->lastSurf.reset(); + t->m_lastSurf.reset(); } - t->resource->sendRemoved(); - t->inert = true; + t->m_resource->sendRemoved(); + t->m_inert = true; } - for (auto const& t : m_vPads) { - if (!t->pad.expired() || t->inert) + for (auto const& t : m_pads) { + if (!t->m_pad.expired() || t->m_inert) continue; - t->resource->sendRemoved(); - t->inert = true; + t->m_resource->sendRemoved(); + t->m_inert = true; } } void CTabletV2Protocol::pressure(SP tool, double value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendPressure(std::clamp(value * 65535, 0.0, 65535.0)); + t->m_resource->sendPressure(std::clamp(value * 65535, 0.0, 65535.0)); t->queueFrame(); } } void CTabletV2Protocol::distance(SP tool, double value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendDistance(std::clamp(value * 65535, 0.0, 65535.0)); + t->m_resource->sendDistance(std::clamp(value * 65535, 0.0, 65535.0)); t->queueFrame(); } } void CTabletV2Protocol::rotation(SP tool, double value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendRotation(wl_fixed_from_double(value)); + t->m_resource->sendRotation(wl_fixed_from_double(value)); t->queueFrame(); } } void CTabletV2Protocol::slider(SP tool, double value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendSlider(std::clamp(value * 65535, -65535.0, 65535.0)); + t->m_resource->sendSlider(std::clamp(value * 65535, -65535.0, 65535.0)); t->queueFrame(); } } void CTabletV2Protocol::wheel(SP tool, double value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendWheel(wl_fixed_from_double(value), 0); + t->m_resource->sendWheel(wl_fixed_from_double(value), 0); t->queueFrame(); } } void CTabletV2Protocol::tilt(SP tool, const Vector2D& value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendTilt(wl_fixed_from_double(value.x), wl_fixed_from_double(value.y)); + t->m_resource->sendTilt(wl_fixed_from_double(value.x), wl_fixed_from_double(value.y)); t->queueFrame(); } } void CTabletV2Protocol::up(SP tool) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendUp(); + t->m_resource->sendUp(); t->queueFrame(); } } void CTabletV2Protocol::down(SP tool) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->resource->client())); - t->resource->sendDown(serial); + auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->m_resource->client())); + t->m_resource->sendDown(serial); t->queueFrame(); } } @@ -545,25 +545,25 @@ void CTabletV2Protocol::proximityIn(SP tool, SP tablet, SP SP toolResource; SP tabletResource; - for (auto const& t : m_vTools) { - if (t->tool != tool || t->resource->client() != CLIENT) + for (auto const& t : m_tools) { + if (t->m_tool != tool || t->m_resource->client() != CLIENT) continue; - if (t->seat.expired()) { + if (t->m_seat.expired()) { LOGM(ERR, "proximityIn on a tool without a seat parent"); return; } - if (t->lastSurf == surf) + if (t->m_lastSurf == surf) return; toolResource = t; - for (auto const& tab : m_vTablets) { - if (tab->tablet != tablet) + for (auto const& tab : m_tablets) { + if (tab->m_tablet != tablet) continue; - if (tab->seat != t->seat || !tab->seat) + if (tab->m_seat != t->m_seat || !tab->m_seat) continue; tabletResource = tab; @@ -576,67 +576,67 @@ void CTabletV2Protocol::proximityIn(SP tool, SP tablet, SP return; } - toolResource->current = true; - toolResource->lastSurf = surf; + toolResource->m_current = true; + toolResource->m_lastSurf = surf; - auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(toolResource->resource->client())); - toolResource->resource->sendProximityIn(serial, tabletResource->resource.get(), surf->getResource()->resource()); + auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(toolResource->m_resource->client())); + toolResource->m_resource->sendProximityIn(serial, tabletResource->m_resource.get(), surf->getResource()->resource()); toolResource->queueFrame(); LOGM(ERR, "proximityIn: found no resource to send enter"); } void CTabletV2Protocol::proximityOut(SP tool) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->lastSurf.reset(); - t->resource->sendProximityOut(); + t->m_lastSurf.reset(); + t->m_resource->sendProximityOut(); t->sendFrame(); - t->current = false; + t->m_current = false; } } void CTabletV2Protocol::buttonTool(SP tool, uint32_t button, uint32_t state) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->resource->client())); - t->resource->sendButton(serial, button, (zwpTabletToolV2ButtonState)state); + auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->m_resource->client())); + t->m_resource->sendButton(serial, button, (zwpTabletToolV2ButtonState)state); t->queueFrame(); } } void CTabletV2Protocol::motion(SP tool, const Vector2D& value) { - for (auto const& t : m_vTools) { - if (t->tool != tool || !t->current) + for (auto const& t : m_tools) { + if (t->m_tool != tool || !t->m_current) continue; - t->resource->sendMotion(wl_fixed_from_double(value.x), wl_fixed_from_double(value.y)); + t->m_resource->sendMotion(wl_fixed_from_double(value.x), wl_fixed_from_double(value.y)); t->queueFrame(); } } void CTabletV2Protocol::mode(SP pad, uint32_t group, uint32_t mode, uint32_t timeMs) { - for (auto const& t : m_vPads) { - if (t->pad != pad) + for (auto const& t : m_pads) { + if (t->m_pad != pad) continue; - if (t->groups.size() <= group) { + if (t->m_groups.size() <= group) { LOGM(ERR, "BUG THIS: group >= t->groups.size()"); return; } - auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->resource->client())); - t->groups.at(group)->resource->sendModeSwitch(timeMs, serial, mode); + auto serial = g_pSeatManager->nextSerial(g_pSeatManager->seatResourceForClient(t->m_resource->client())); + t->m_groups.at(group)->m_resource->sendModeSwitch(timeMs, serial, mode); } } void CTabletV2Protocol::buttonPad(SP pad, uint32_t button, uint32_t timeMs, uint32_t state) { - for (auto const& t : m_vPads) { - if (t->pad != pad) + for (auto const& t : m_pads) { + if (t->m_pad != pad) continue; - t->resource->sendButton(timeMs, button, zwpTabletToolV2ButtonState{state}); + t->m_resource->sendButton(timeMs, button, zwpTabletToolV2ButtonState{state}); } } diff --git a/src/protocols/Tablet.hpp b/src/protocols/Tablet.hpp index 264c7633..25e85e18 100644 --- a/src/protocols/Tablet.hpp +++ b/src/protocols/Tablet.hpp @@ -20,10 +20,10 @@ class CTabletPadStripV2Resource { bool good(); - uint32_t id = 0; + uint32_t m_id = 0; private: - SP resource; + SP m_resource; friend class CTabletSeat; friend class CTabletPadGroupV2Resource; @@ -36,10 +36,10 @@ class CTabletPadRingV2Resource { bool good(); - uint32_t id = 0; + uint32_t m_id = 0; private: - SP resource; + SP m_resource; friend class CTabletSeat; friend class CTabletPadGroupV2Resource; @@ -50,16 +50,13 @@ class CTabletPadGroupV2Resource { public: CTabletPadGroupV2Resource(SP resource_, size_t idx); - bool good(); - void sendData(SP pad, SP group); + bool good(); + void sendData(SP pad, SP group); - std::vector> rings; - std::vector> strips; - - size_t idx = 0; + size_t m_idx = 0; private: - SP resource; + SP m_resource; friend class CTabletSeat; friend class CTabletPadV2Resource; @@ -73,15 +70,15 @@ class CTabletPadV2Resource { bool good(); void sendData(); - std::vector> groups; + std::vector> m_groups; - WP pad; - WP seat; + WP m_pad; + WP m_seat; - bool inert = false; // removed was sent + bool m_inert = false; // removed was sent private: - SP resource; + SP m_resource; void createGroup(SP group, size_t idx); @@ -96,13 +93,13 @@ class CTabletV2Resource { bool good(); void sendData(); - WP tablet; - WP seat; + WP m_tablet; + WP m_seat; - bool inert = false; // removed was sent + bool m_inert = false; // removed was sent private: - SP resource; + SP m_resource; friend class CTabletSeat; friend class CTabletV2Protocol; @@ -118,17 +115,17 @@ class CTabletToolV2Resource { void queueFrame(); void sendFrame(bool removeSource = true); - bool current = false; - WP lastSurf; + bool m_current = false; + WP m_lastSurf; - WP tool; - WP seat; - wl_event_source* frameSource = nullptr; + WP m_tool; + WP m_seat; + wl_event_source* m_frameSource = nullptr; - bool inert = false; // removed was sent + bool m_inert = false; // removed was sent private: - SP resource; + SP m_resource; friend class CTabletSeat; friend class CTabletV2Protocol; @@ -141,17 +138,17 @@ class CTabletSeat { bool good(); void sendData(); - std::vector> tools; - std::vector> pads; - std::vector> tablets; + std::vector> m_tools; + std::vector> m_pads; + std::vector> m_tablets; void sendTool(SP tool); void sendPad(SP pad); void sendTablet(SP tablet); private: - SP resource; - WP self; + SP m_resource; + WP m_self; friend class CTabletV2Protocol; }; @@ -204,19 +201,19 @@ class CTabletV2Protocol : public IWaylandProtocol { void onGetSeat(CZwpTabletManagerV2* pMgr, uint32_t id, wl_resource* seat); // - std::vector> m_vManagers; - std::vector> m_vSeats; - std::vector> m_vTools; - std::vector> m_vTablets; - std::vector> m_vPads; - std::vector> m_vGroups; - std::vector> m_vRings; - std::vector> m_vStrips; + std::vector> m_managers; + std::vector> m_seats; + std::vector> m_tools; + std::vector> m_tablets; + std::vector> m_pads; + std::vector> m_groups; + std::vector> m_rings; + std::vector> m_strips; // registered - std::vector> tablets; - std::vector> tools; - std::vector> pads; + std::vector> m_tabletDevices; + std::vector> m_toolDevices; + std::vector> m_padDevices; // FIXME: rings and strips are broken, I don't understand how this shit works. // It's 2am. diff --git a/src/protocols/TearingControl.cpp b/src/protocols/TearingControl.cpp index a6036690..ee65cc9e 100644 --- a/src/protocols/TearingControl.cpp +++ b/src/protocols/TearingControl.cpp @@ -11,7 +11,7 @@ CTearingControlProtocol::CTearingControlProtocol(const wl_interface* iface, cons } void CTearingControlProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CWpTearingControlManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpTearingControlManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -21,58 +21,58 @@ void CTearingControlProtocol::bindManager(wl_client* client, void* data, uint32_ } void CTearingControlProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CTearingControlProtocol::onGetController(wl_client* client, CWpTearingControlManagerV1* pMgr, uint32_t id, SP surf) { - const auto CONTROLLER = m_vTearingControllers.emplace_back(makeUnique(makeShared(client, pMgr->version(), id), surf)).get(); + const auto CONTROLLER = m_tearingControllers.emplace_back(makeUnique(makeShared(client, pMgr->version(), id), surf)).get(); if UNLIKELY (!CONTROLLER->good()) { pMgr->noMemory(); - m_vTearingControllers.pop_back(); + m_tearingControllers.pop_back(); return; } } void CTearingControlProtocol::onControllerDestroy(CTearingControl* control) { - std::erase_if(m_vTearingControllers, [control](const auto& other) { return other.get() == control; }); + std::erase_if(m_tearingControllers, [control](const auto& other) { return other.get() == control; }); } void CTearingControlProtocol::onWindowDestroy(PHLWINDOW pWindow) { - for (auto const& c : m_vTearingControllers) { - if (c->pWindow.lock() == pWindow) - c->pWindow.reset(); + for (auto const& c : m_tearingControllers) { + if (c->m_window.lock() == pWindow) + c->m_window.reset(); } } // -CTearingControl::CTearingControl(SP resource_, SP surf_) : resource(resource_) { - resource->setData(this); - resource->setOnDestroy([this](CWpTearingControlV1* res) { PROTO::tearing->onControllerDestroy(this); }); - resource->setDestroy([this](CWpTearingControlV1* res) { PROTO::tearing->onControllerDestroy(this); }); - resource->setSetPresentationHint([this](CWpTearingControlV1* res, wpTearingControlV1PresentationHint hint) { this->onHint(hint); }); +CTearingControl::CTearingControl(SP resource_, SP surf_) : m_resource(resource_) { + m_resource->setData(this); + m_resource->setOnDestroy([this](CWpTearingControlV1* res) { PROTO::tearing->onControllerDestroy(this); }); + m_resource->setDestroy([this](CWpTearingControlV1* res) { PROTO::tearing->onControllerDestroy(this); }); + m_resource->setSetPresentationHint([this](CWpTearingControlV1* res, wpTearingControlV1PresentationHint hint) { this->onHint(hint); }); for (auto const& w : g_pCompositor->m_windows) { if (w->m_wlSurface->resource() == surf_) { - pWindow = w; + m_window = w; break; } } } void CTearingControl::onHint(wpTearingControlV1PresentationHint hint_) { - hint = hint_; + m_hint = hint_; updateWindow(); } void CTearingControl::updateWindow() { - if UNLIKELY (pWindow.expired()) + if UNLIKELY (m_window.expired()) return; - pWindow->m_tearingHint = hint == WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; + m_window->m_tearingHint = m_hint == WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; } bool CTearingControl::good() { - return resource->resource(); + return m_resource->resource(); } diff --git a/src/protocols/TearingControl.hpp b/src/protocols/TearingControl.hpp index 7763214e..b58ec8e3 100644 --- a/src/protocols/TearingControl.hpp +++ b/src/protocols/TearingControl.hpp @@ -16,19 +16,19 @@ class CTearingControl { bool good(); bool operator==(const wl_resource* other) const { - return other == resource->resource(); + return other == m_resource->resource(); } bool operator==(const CTearingControl* other) const { - return other->resource == resource; + return other->m_resource == m_resource; } private: void updateWindow(); - SP resource; - PHLWINDOWREF pWindow; - wpTearingControlV1PresentationHint hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC; + SP m_resource; + PHLWINDOWREF m_window; + wpTearingControlV1PresentationHint m_hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC; friend class CTearingControlProtocol; }; @@ -46,8 +46,8 @@ class CTearingControlProtocol : public IWaylandProtocol { void onWindowDestroy(PHLWINDOW pWindow); // - std::vector> m_vManagers; - std::vector> m_vTearingControllers; + std::vector> m_managers; + std::vector> m_tearingControllers; friend class CTearingControl; }; diff --git a/src/protocols/TextInputV1.cpp b/src/protocols/TextInputV1.cpp index 4bf5e9e1..d7a0eb49 100644 --- a/src/protocols/TextInputV1.cpp +++ b/src/protocols/TextInputV1.cpp @@ -3,94 +3,94 @@ #include "core/Compositor.hpp" CTextInputV1::~CTextInputV1() { - events.destroy.emit(); + m_events.destroy.emit(); } -CTextInputV1::CTextInputV1(SP resource_) : resource(resource_) { +CTextInputV1::CTextInputV1(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CZwpTextInputV1* pMgr) { PROTO::textInputV1->destroyResource(this); }); + m_resource->setOnDestroy([this](CZwpTextInputV1* pMgr) { PROTO::textInputV1->destroyResource(this); }); - resource->setActivate([this](CZwpTextInputV1* pMgr, wl_resource* seat, wl_resource* surface) { + m_resource->setActivate([this](CZwpTextInputV1* pMgr, wl_resource* seat, wl_resource* surface) { if UNLIKELY (!surface) { LOGM(WARN, "Text-input-v1 PTI{:x}: No surface to activate text input on!", (uintptr_t)this); return; } - active = true; - events.enable.emit(CWLSurfaceResource::fromResource(surface)); + m_active = true; + m_events.enable.emit(CWLSurfaceResource::fromResource(surface)); }); - resource->setDeactivate([this](CZwpTextInputV1* pMgr, wl_resource* seat) { - active = false; - events.disable.emit(); + m_resource->setDeactivate([this](CZwpTextInputV1* pMgr, wl_resource* seat) { + m_active = false; + m_events.disable.emit(); }); - resource->setReset([this](CZwpTextInputV1* pMgr) { - pendingSurrounding.isPending = false; - pendingContentType.isPending = false; - events.reset.emit(); + m_resource->setReset([this](CZwpTextInputV1* pMgr) { + m_pendingSurrounding.isPending = false; + m_pendingContentType.isPending = false; + m_events.reset.emit(); }); - resource->setSetSurroundingText( - [this](CZwpTextInputV1* pMgr, const char* text, uint32_t cursor, uint32_t anchor) { pendingSurrounding = {true, std::string(text), cursor, anchor}; }); + m_resource->setSetSurroundingText( + [this](CZwpTextInputV1* pMgr, const char* text, uint32_t cursor, uint32_t anchor) { m_pendingSurrounding = {true, std::string(text), cursor, anchor}; }); - resource->setSetContentType([this](CZwpTextInputV1* pMgr, uint32_t hint, uint32_t purpose) { - pendingContentType = {true, hint == (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_HINT_DEFAULT ? (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_HINT_NONE : hint, - purpose > (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_PURPOSE_PASSWORD ? hint + 1 : hint}; + m_resource->setSetContentType([this](CZwpTextInputV1* pMgr, uint32_t hint, uint32_t purpose) { + m_pendingContentType = {true, hint == (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_HINT_DEFAULT ? (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_HINT_NONE : hint, + purpose > (uint32_t)ZWP_TEXT_INPUT_V1_CONTENT_PURPOSE_PASSWORD ? hint + 1 : hint}; }); - resource->setSetCursorRectangle([this](CZwpTextInputV1* pMgr, int32_t x, int32_t y, int32_t width, int32_t height) { cursorRectangle = CBox{x, y, width, height}; }); + m_resource->setSetCursorRectangle([this](CZwpTextInputV1* pMgr, int32_t x, int32_t y, int32_t width, int32_t height) { m_cursorRectangle = CBox{x, y, width, height}; }); - resource->setCommitState([this](CZwpTextInputV1* pMgr, uint32_t serial_) { - serial = serial_; - events.onCommit.emit(); + m_resource->setCommitState([this](CZwpTextInputV1* pMgr, uint32_t serial_) { + m_serial = serial_; + m_events.onCommit.emit(); }); // nothing - resource->setShowInputPanel([](CZwpTextInputV1* pMgr) {}); - resource->setHideInputPanel([](CZwpTextInputV1* pMgr) {}); - resource->setSetPreferredLanguage([](CZwpTextInputV1* pMgr, const char* language) {}); - resource->setInvokeAction([](CZwpTextInputV1* pMgr, uint32_t button, uint32_t index) {}); + m_resource->setShowInputPanel([](CZwpTextInputV1* pMgr) {}); + m_resource->setHideInputPanel([](CZwpTextInputV1* pMgr) {}); + m_resource->setSetPreferredLanguage([](CZwpTextInputV1* pMgr, const char* language) {}); + m_resource->setInvokeAction([](CZwpTextInputV1* pMgr, uint32_t button, uint32_t index) {}); } bool CTextInputV1::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CTextInputV1::client() { - return resource->client(); + return m_resource->client(); } void CTextInputV1::enter(SP surface) { - resource->sendEnter(surface->getResource()->resource()); - active = true; + m_resource->sendEnter(surface->getResource()->resource()); + m_active = true; } void CTextInputV1::leave() { - resource->sendLeave(); - active = false; + m_resource->sendLeave(); + m_active = false; } void CTextInputV1::preeditCursor(int32_t index) { - resource->sendPreeditCursor(index); + m_resource->sendPreeditCursor(index); } void CTextInputV1::preeditStyling(uint32_t index, uint32_t length, zwpTextInputV1PreeditStyle style) { - resource->sendPreeditStyling(index, length, style); + m_resource->sendPreeditStyling(index, length, style); } void CTextInputV1::preeditString(uint32_t serial, const char* text, const char* commit) { - resource->sendPreeditString(serial, text, commit); + m_resource->sendPreeditString(serial, text, commit); } void CTextInputV1::commitString(uint32_t serial, const char* text) { - resource->sendCommitString(serial, text); + m_resource->sendCommitString(serial, text); } void CTextInputV1::deleteSurroundingText(int32_t index, uint32_t length) { - resource->sendDeleteSurroundingText(index, length); + m_resource->sendDeleteSurroundingText(index, length); } CTextInputV1Protocol::CTextInputV1Protocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -98,11 +98,11 @@ CTextInputV1Protocol::CTextInputV1Protocol(const wl_interface* iface, const int& } void CTextInputV1Protocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(client, ver, id)); + const auto RESOURCE = m_managers.emplace_back(makeShared(client, ver, id)); RESOURCE->setOnDestroy([](CZwpTextInputManagerV1* pMgr) { PROTO::textInputV1->destroyResource(pMgr); }); RESOURCE->setCreateTextInput([this](CZwpTextInputManagerV1* pMgr, uint32_t id) { - const auto PTI = m_vClients.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); + const auto PTI = m_clients.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); LOGM(LOG, "New TI V1 at {:x}", (uintptr_t)PTI.get()); if UNLIKELY (!PTI->good()) { @@ -112,14 +112,14 @@ void CTextInputV1Protocol::bindManager(wl_client* client, void* data, uint32_t v return; } - events.newTextInput.emit(WP(PTI)); + m_events.newTextInput.emit(WP(PTI)); }); } void CTextInputV1Protocol::destroyResource(CTextInputV1* client) { - std::erase_if(m_vClients, [&](const auto& other) { return other.get() == client; }); + std::erase_if(m_clients, [&](const auto& other) { return other.get() == client; }); } void CTextInputV1Protocol::destroyResource(CZwpTextInputManagerV1* client) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == client; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == client; }); } diff --git a/src/protocols/TextInputV1.hpp b/src/protocols/TextInputV1.hpp index d3b0d71b..5f74bf72 100644 --- a/src/protocols/TextInputV1.hpp +++ b/src/protocols/TextInputV1.hpp @@ -27,11 +27,10 @@ class CTextInputV1 { wl_client* client(); private: - SP resource; - WP self; + SP m_resource; - uint32_t serial = 0; - bool active = false; + uint32_t m_serial = 0; + bool m_active = false; struct { CSignal onCommit; @@ -39,22 +38,22 @@ class CTextInputV1 { CSignal disable; CSignal reset; CSignal destroy; - } events; + } m_events; struct SPendingSurr { bool isPending = false; std::string text = ""; uint32_t cursor = 0; uint32_t anchor = 0; - } pendingSurrounding; + } m_pendingSurrounding; struct SPendingCT { bool isPending = false; uint32_t hint = 0; uint32_t purpose = 0; - } pendingContentType; + } m_pendingContentType; - CBox cursorRectangle = {0, 0, 0, 0}; + CBox m_cursorRectangle = {0, 0, 0, 0}; friend class CTextInput; friend class CTextInputV1Protocol; @@ -70,11 +69,11 @@ class CTextInputV1Protocol : public IWaylandProtocol { struct { CSignal newTextInput; // WP - } events; + } m_events; private: - std::vector> m_vManagers; - std::vector> m_vClients; + std::vector> m_managers; + std::vector> m_clients; friend class CTextInputV1; }; diff --git a/src/protocols/TextInputV3.cpp b/src/protocols/TextInputV3.cpp index 06aea5ae..8a5ee478 100644 --- a/src/protocols/TextInputV3.cpp +++ b/src/protocols/TextInputV3.cpp @@ -9,100 +9,100 @@ void CTextInputV3::SState::reset() { box.updated = false; } -CTextInputV3::CTextInputV3(SP resource_) : resource(resource_) { - if UNLIKELY (!resource->resource()) +CTextInputV3::CTextInputV3(SP resource_) : m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; LOGM(LOG, "New tiv3 at {:016x}", (uintptr_t)this); - resource->setDestroy([this](CZwpTextInputV3* r) { PROTO::textInputV3->destroyTextInput(this); }); - resource->setOnDestroy([this](CZwpTextInputV3* r) { PROTO::textInputV3->destroyTextInput(this); }); + m_resource->setDestroy([this](CZwpTextInputV3* r) { PROTO::textInputV3->destroyTextInput(this); }); + m_resource->setOnDestroy([this](CZwpTextInputV3* r) { PROTO::textInputV3->destroyTextInput(this); }); - resource->setCommit([this](CZwpTextInputV3* r) { - bool wasEnabled = current.enabled.value; + m_resource->setCommit([this](CZwpTextInputV3* r) { + bool wasEnabled = m_current.enabled.value; - current = pending; - serial++; + m_current = m_pending; + m_serial++; - if (wasEnabled && !current.enabled.value) - events.disable.emit(); - else if (!wasEnabled && current.enabled.value) - events.enable.emit(); - else if (current.enabled.value && current.enabled.isEnablePending && current.enabled.isDisablePending) - events.reset.emit(); + if (wasEnabled && !m_current.enabled.value) + m_events.disable.emit(); + else if (!wasEnabled && m_current.enabled.value) + m_events.enable.emit(); + else if (m_current.enabled.value && m_current.enabled.isEnablePending && m_current.enabled.isDisablePending) + m_events.reset.emit(); else - events.onCommit.emit(); + m_events.onCommit.emit(); - pending.enabled.isEnablePending = false; - pending.enabled.isDisablePending = false; + m_pending.enabled.isEnablePending = false; + m_pending.enabled.isDisablePending = false; }); - resource->setSetSurroundingText([this](CZwpTextInputV3* r, const char* text, int32_t cursor, int32_t anchor) { - pending.surrounding.updated = true; - pending.surrounding.anchor = anchor; - pending.surrounding.cursor = cursor; - pending.surrounding.text = text; + m_resource->setSetSurroundingText([this](CZwpTextInputV3* r, const char* text, int32_t cursor, int32_t anchor) { + m_pending.surrounding.updated = true; + m_pending.surrounding.anchor = anchor; + m_pending.surrounding.cursor = cursor; + m_pending.surrounding.text = text; }); - resource->setSetTextChangeCause([this](CZwpTextInputV3* r, zwpTextInputV3ChangeCause cause) { pending.cause = cause; }); + m_resource->setSetTextChangeCause([this](CZwpTextInputV3* r, zwpTextInputV3ChangeCause cause) { m_pending.cause = cause; }); - resource->setSetContentType([this](CZwpTextInputV3* r, zwpTextInputV3ContentHint hint, zwpTextInputV3ContentPurpose purpose) { - pending.contentType.updated = true; - pending.contentType.hint = hint; - pending.contentType.purpose = purpose; + m_resource->setSetContentType([this](CZwpTextInputV3* r, zwpTextInputV3ContentHint hint, zwpTextInputV3ContentPurpose purpose) { + m_pending.contentType.updated = true; + m_pending.contentType.hint = hint; + m_pending.contentType.purpose = purpose; }); - resource->setSetCursorRectangle([this](CZwpTextInputV3* r, int32_t x, int32_t y, int32_t w, int32_t h) { - pending.box.updated = true; - pending.box.cursorBox = {x, y, w, h}; + m_resource->setSetCursorRectangle([this](CZwpTextInputV3* r, int32_t x, int32_t y, int32_t w, int32_t h) { + m_pending.box.updated = true; + m_pending.box.cursorBox = {x, y, w, h}; }); - resource->setEnable([this](CZwpTextInputV3* r) { - pending.reset(); - pending.enabled.value = true; - pending.enabled.isEnablePending = true; + m_resource->setEnable([this](CZwpTextInputV3* r) { + m_pending.reset(); + m_pending.enabled.value = true; + m_pending.enabled.isEnablePending = true; }); - resource->setDisable([this](CZwpTextInputV3* r) { - pending.enabled.value = false; - pending.enabled.isDisablePending = true; + m_resource->setDisable([this](CZwpTextInputV3* r) { + m_pending.enabled.value = false; + m_pending.enabled.isDisablePending = true; }); } CTextInputV3::~CTextInputV3() { - events.destroy.emit(); + m_events.destroy.emit(); } void CTextInputV3::enter(SP surf) { - resource->sendEnter(surf->getResource()->resource()); + m_resource->sendEnter(surf->getResource()->resource()); } void CTextInputV3::leave(SP surf) { - resource->sendLeave(surf->getResource()->resource()); + m_resource->sendLeave(surf->getResource()->resource()); } void CTextInputV3::preeditString(const std::string& text, int32_t cursorBegin, int32_t cursorEnd) { - resource->sendPreeditString(text.c_str(), cursorBegin, cursorEnd); + m_resource->sendPreeditString(text.c_str(), cursorBegin, cursorEnd); } void CTextInputV3::commitString(const std::string& text) { - resource->sendCommitString(text.c_str()); + m_resource->sendCommitString(text.c_str()); } void CTextInputV3::deleteSurroundingText(uint32_t beforeLength, uint32_t afterLength) { - resource->sendDeleteSurroundingText(beforeLength, afterLength); + m_resource->sendDeleteSurroundingText(beforeLength, afterLength); } void CTextInputV3::sendDone() { - resource->sendDone(serial); + m_resource->sendDone(m_serial); } bool CTextInputV3::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CTextInputV3::client() { - return wl_resource_get_client(resource->resource()); + return wl_resource_get_client(m_resource->resource()); } CTextInputV3Protocol::CTextInputV3Protocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -110,7 +110,7 @@ CTextInputV3Protocol::CTextInputV3Protocol(const wl_interface* iface, const int& } void CTextInputV3Protocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpTextInputManagerV3* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwpTextInputManagerV3* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -118,23 +118,23 @@ void CTextInputV3Protocol::bindManager(wl_client* client, void* data, uint32_t v } void CTextInputV3Protocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CTextInputV3Protocol::destroyTextInput(CTextInputV3* input) { - std::erase_if(m_vTextInputs, [&](const auto& other) { return other.get() == input; }); + std::erase_if(m_textInputs, [&](const auto& other) { return other.get() == input; }); } void CTextInputV3Protocol::onGetTextInput(CZwpTextInputManagerV3* pMgr, uint32_t id, wl_resource* seat) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vTextInputs.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id))); + const auto RESOURCE = m_textInputs.emplace_back(makeShared(makeShared(CLIENT, pMgr->version(), id))); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vTextInputs.pop_back(); + m_textInputs.pop_back(); LOGM(ERR, "Failed to create a tiv3 resource"); return; } - events.newTextInput.emit(WP(RESOURCE)); + m_events.newTextInput.emit(WP(RESOURCE)); } \ No newline at end of file diff --git a/src/protocols/TextInputV3.hpp b/src/protocols/TextInputV3.hpp index 6cece521..65d29b7f 100644 --- a/src/protocols/TextInputV3.hpp +++ b/src/protocols/TextInputV3.hpp @@ -32,7 +32,7 @@ class CTextInputV3 { CSignal disable; CSignal reset; CSignal destroy; - } events; + } m_events; struct SState { struct { @@ -63,12 +63,14 @@ class CTextInputV3 { void reset(); }; - SState pending, current; + + SState m_pending; + SState m_current; private: - SP resource; + SP m_resource; - int serial = 0; + int m_serial = 0; }; class CTextInputV3Protocol : public IWaylandProtocol { @@ -79,7 +81,7 @@ class CTextInputV3Protocol : public IWaylandProtocol { struct { CSignal newTextInput; // WP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -87,8 +89,8 @@ class CTextInputV3Protocol : public IWaylandProtocol { void onGetTextInput(CZwpTextInputManagerV3* pMgr, uint32_t id, wl_resource* seat); // - std::vector> m_vManagers; - std::vector> m_vTextInputs; + std::vector> m_managers; + std::vector> m_textInputs; friend class CTextInputV3; }; diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index fd5d0b27..04781a9b 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -14,120 +14,120 @@ #include #include -CToplevelExportClient::CToplevelExportClient(SP resource_) : resource(resource_) { +CToplevelExportClient::CToplevelExportClient(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setOnDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); - resource->setDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); - resource->setCaptureToplevel([this](CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, uint32_t handle) { + m_resource->setOnDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); + m_resource->setDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); + m_resource->setCaptureToplevel([this](CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, uint32_t handle) { this->captureToplevel(pMgr, frame, overlayCursor, g_pCompositor->getWindowFromHandle(handle)); }); - resource->setCaptureToplevelWithWlrToplevelHandle([this](CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, wl_resource* handle) { + m_resource->setCaptureToplevelWithWlrToplevelHandle([this](CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, wl_resource* handle) { this->captureToplevel(pMgr, frame, overlayCursor, PROTO::foreignToplevelWlr->windowFromHandleResource(handle)); }); - lastMeasure.reset(); - lastFrame.reset(); - tickCallback = g_pHookSystem->hookDynamic("tick", [&](void* self, SCallbackInfo& info, std::any data) { onTick(); }); + m_lastMeasure.reset(); + m_lastFrame.reset(); + m_tickCallback = g_pHookSystem->hookDynamic("tick", [&](void* self, SCallbackInfo& info, std::any data) { onTick(); }); } void CToplevelExportClient::captureToplevel(CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor_, PHLWINDOW handle) { // create a frame - const auto FRAME = PROTO::toplevelExport->m_vFrames.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), frame), overlayCursor_, handle)); + const auto FRAME = PROTO::toplevelExport->m_frames.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), frame), overlayCursor_, handle)); if UNLIKELY (!FRAME->good()) { LOGM(ERR, "Couldn't alloc frame for sharing! (no memory)"); - resource->noMemory(); + m_resource->noMemory(); PROTO::toplevelExport->destroyResource(FRAME.get()); return; } - FRAME->self = FRAME; - FRAME->client = self; + FRAME->m_self = FRAME; + FRAME->m_client = m_self; } void CToplevelExportClient::onTick() { - if (lastMeasure.getMillis() < 500) + if (m_lastMeasure.getMillis() < 500) return; - framesInLastHalfSecond = frameCounter; - frameCounter = 0; - lastMeasure.reset(); + m_framesInLastHalfSecond = m_frameCounter; + m_frameCounter = 0; + m_lastMeasure.reset(); - const auto LASTFRAMEDELTA = lastFrame.getMillis() / 1000.0; - const bool FRAMEAWAITING = std::ranges::any_of(PROTO::toplevelExport->m_vFrames, [&](const auto& frame) { return frame->client.get() == this; }); + const auto LASTFRAMEDELTA = m_lastFrame.getMillis() / 1000.0; + const bool FRAMEAWAITING = std::ranges::any_of(PROTO::toplevelExport->m_frames, [&](const auto& frame) { return frame->m_client.get() == this; }); - if (framesInLastHalfSecond > 3 && !sentScreencast) { - EMIT_HOOK_EVENT("screencast", (std::vector{1, (uint64_t)framesInLastHalfSecond, (uint64_t)clientOwner})); - g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "1," + std::to_string(clientOwner)}); - sentScreencast = true; - } else if (framesInLastHalfSecond < 4 && sentScreencast && LASTFRAMEDELTA > 1.0 && !FRAMEAWAITING) { - EMIT_HOOK_EVENT("screencast", (std::vector{0, (uint64_t)framesInLastHalfSecond, (uint64_t)clientOwner})); - g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "0," + std::to_string(clientOwner)}); - sentScreencast = false; + if (m_framesInLastHalfSecond > 3 && !m_sentScreencast) { + EMIT_HOOK_EVENT("screencast", (std::vector{1, (uint64_t)m_framesInLastHalfSecond, (uint64_t)m_clientOwner})); + g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "1," + std::to_string(m_clientOwner)}); + m_sentScreencast = true; + } else if (m_framesInLastHalfSecond < 4 && m_sentScreencast && LASTFRAMEDELTA > 1.0 && !FRAMEAWAITING) { + EMIT_HOOK_EVENT("screencast", (std::vector{0, (uint64_t)m_framesInLastHalfSecond, (uint64_t)m_clientOwner})); + g_pEventManager->postEvent(SHyprIPCEvent{"screencast", "0," + std::to_string(m_clientOwner)}); + m_sentScreencast = false; } } bool CToplevelExportClient::good() { - return resource->resource(); + return m_resource->resource(); } -CToplevelExportFrame::CToplevelExportFrame(SP resource_, int32_t overlayCursor_, PHLWINDOW pWindow_) : resource(resource_), pWindow(pWindow_) { +CToplevelExportFrame::CToplevelExportFrame(SP resource_, int32_t overlayCursor_, PHLWINDOW pWindow_) : m_resource(resource_), m_window(pWindow_) { if UNLIKELY (!good()) return; - cursorOverlayRequested = !!overlayCursor_; + m_cursorOverlayRequested = !!overlayCursor_; - if UNLIKELY (!pWindow) { - LOGM(ERR, "Client requested sharing of window handle {:x} which does not exist!", pWindow); - resource->sendFailed(); + if UNLIKELY (!m_window) { + LOGM(ERR, "Client requested sharing of window handle {:x} which does not exist!", m_window); + m_resource->sendFailed(); return; } - if UNLIKELY (!pWindow->m_isMapped) { - LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable!", pWindow); - resource->sendFailed(); + if UNLIKELY (!m_window->m_isMapped) { + LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable!", m_window); + m_resource->sendFailed(); return; } - resource->setOnDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); - resource->setDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); - resource->setCopy([this](CHyprlandToplevelExportFrameV1* pFrame, wl_resource* res, int32_t ignoreDamage) { this->copy(pFrame, res, ignoreDamage); }); + m_resource->setOnDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); + m_resource->setDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); + m_resource->setCopy([this](CHyprlandToplevelExportFrameV1* pFrame, wl_resource* res, int32_t ignoreDamage) { this->copy(pFrame, res, ignoreDamage); }); - const auto PMONITOR = pWindow->m_monitor.lock(); + const auto PMONITOR = m_window->m_monitor.lock(); g_pHyprRenderer->makeEGLCurrent(); - shmFormat = g_pHyprOpenGL->getPreferredReadFormat(PMONITOR); - if UNLIKELY (shmFormat == DRM_FORMAT_INVALID) { + m_shmFormat = g_pHyprOpenGL->getPreferredReadFormat(PMONITOR); + if UNLIKELY (m_shmFormat == DRM_FORMAT_INVALID) { LOGM(ERR, "No format supported by renderer in capture toplevel"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - const auto PSHMINFO = NFormatUtils::getPixelFormatFromDRM(shmFormat); + const auto PSHMINFO = NFormatUtils::getPixelFormatFromDRM(m_shmFormat); if UNLIKELY (!PSHMINFO) { LOGM(ERR, "No pixel format supported by renderer in capture toplevel"); - resource->sendFailed(); + m_resource->sendFailed(); return; } - dmabufFormat = PMONITOR->m_output->state->state().drmFormat; + m_dmabufFormat = PMONITOR->m_output->state->state().drmFormat; - box = {0, 0, (int)(pWindow->m_realSize->value().x * PMONITOR->m_scale), (int)(pWindow->m_realSize->value().y * PMONITOR->m_scale)}; + m_box = {0, 0, (int)(m_window->m_realSize->value().x * PMONITOR->m_scale), (int)(m_window->m_realSize->value().y * PMONITOR->m_scale)}; - box.transform(wlTransformToHyprutils(PMONITOR->m_transform), PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y).round(); + m_box.transform(wlTransformToHyprutils(PMONITOR->m_transform), PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y).round(); - shmStride = NFormatUtils::minStride(PSHMINFO, box.w); + m_shmStride = NFormatUtils::minStride(PSHMINFO, m_box.w); - resource->sendBuffer(NFormatUtils::drmToShm(shmFormat), box.width, box.height, shmStride); + m_resource->sendBuffer(NFormatUtils::drmToShm(m_shmFormat), m_box.width, m_box.height, m_shmStride); - if LIKELY (dmabufFormat != DRM_FORMAT_INVALID) - resource->sendLinuxDmabuf(dmabufFormat, box.width, box.height); + if LIKELY (m_dmabufFormat != DRM_FORMAT_INVALID) + m_resource->sendLinuxDmabuf(m_dmabufFormat, m_box.width, m_box.height); - resource->sendBufferDone(); + m_resource->sendBufferDone(); } void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resource* buffer_, int32_t ignoreDamage) { @@ -136,106 +136,106 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou return; } - if UNLIKELY (!validMapped(pWindow)) { - LOGM(ERR, "Client requested sharing of window handle {:x} which is gone!", pWindow); - resource->sendFailed(); + if UNLIKELY (!validMapped(m_window)) { + LOGM(ERR, "Client requested sharing of window handle {:x} which is gone!", m_window); + m_resource->sendFailed(); return; } - if UNLIKELY (!pWindow->m_isMapped) { - LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable (2)!", pWindow); - resource->sendFailed(); + if UNLIKELY (!m_window->m_isMapped) { + LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable (2)!", m_window); + m_resource->sendFailed(); return; } const auto PBUFFER = CWLBufferResource::fromResource(buffer_); if UNLIKELY (!PBUFFER) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer"); + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer"); PROTO::toplevelExport->destroyResource(this); return; } - if UNLIKELY (PBUFFER->m_buffer->size != box.size()) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); + if UNLIKELY (PBUFFER->m_buffer->size != m_box.size()) { + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer dimensions"); PROTO::toplevelExport->destroyResource(this); return; } - if UNLIKELY (buffer) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_ALREADY_USED, "frame already used"); + if UNLIKELY (m_buffer) { + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_ALREADY_USED, "frame already used"); PROTO::toplevelExport->destroyResource(this); return; } if (auto attrs = PBUFFER->m_buffer->dmabuf(); attrs.success) { - bufferDMA = true; + m_bufferDMA = true; - if (attrs.format != dmabufFormat) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); + if (attrs.format != m_dmabufFormat) { + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); PROTO::toplevelExport->destroyResource(this); return; } } else if (auto attrs = PBUFFER->m_buffer->shm(); attrs.success) { - if (attrs.format != shmFormat) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); + if (attrs.format != m_shmFormat) { + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer format"); PROTO::toplevelExport->destroyResource(this); return; - } else if ((int)attrs.stride != shmStride) { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer stride"); + } else if ((int)attrs.stride != m_shmStride) { + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer stride"); PROTO::toplevelExport->destroyResource(this); return; } } else { - resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer type"); + m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_INVALID_BUFFER, "invalid buffer type"); PROTO::toplevelExport->destroyResource(this); return; } - buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); + m_buffer = CHLBufferReference(PBUFFER->m_buffer.lock()); m_ignoreDamage = ignoreDamage; - if (ignoreDamage && validMapped(pWindow)) + if (ignoreDamage && validMapped(m_window)) share(); else - PROTO::toplevelExport->m_vFramesAwaitingWrite.emplace_back(self); + PROTO::toplevelExport->m_framesAwaitingWrite.emplace_back(m_self); } void CToplevelExportFrame::share() { - if (!buffer || !validMapped(pWindow)) + if (!m_buffer || !validMapped(m_window)) return; - if (bufferDMA) { + if (m_bufferDMA) { if (!copyDmabuf(Time::steadyNow())) { - resource->sendFailed(); + m_resource->sendFailed(); return; } } else { if (!copyShm(Time::steadyNow())) { - resource->sendFailed(); + m_resource->sendFailed(); return; } } - resource->sendFlags((hyprlandToplevelExportFrameV1Flags)0); + m_resource->sendFlags((hyprlandToplevelExportFrameV1Flags)0); if (!m_ignoreDamage) - resource->sendDamage(0, 0, box.width, box.height); + m_resource->sendDamage(0, 0, m_box.width, m_box.height); const auto [sec, nsec] = Time::secNsec(Time::steadyNow()); uint32_t tvSecHi = (sizeof(sec) > 4) ? sec >> 32 : 0; uint32_t tvSecLo = sec & 0xFFFFFFFF; - resource->sendReady(tvSecHi, tvSecLo, nsec); + m_resource->sendReady(tvSecHi, tvSecLo, nsec); } bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto shm = buffer->shm(); - auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); // no need for end, cuz it's shm + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); + auto shm = m_buffer->shm(); + auto [pixelData, fmt, bufLen] = m_buffer->beginDataPtr(0); // no need for end, cuz it's shm // render the client - const auto PMONITOR = pWindow->m_monitor.lock(); + const auto PMONITOR = m_window->m_monitor.lock(); CRegion fakeDamage{0, 0, PMONITOR->m_pixelSize.x * 10, PMONITOR->m_pixelSize.y * 10}; g_pHyprRenderer->makeEGLCurrent(); @@ -257,12 +257,12 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { // render client at 0,0 if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); @@ -294,24 +294,24 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { switch (PMONITOR->m_transform) { case WL_OUTPUT_TRANSFORM_FLIPPED_180: case WL_OUTPUT_TRANSFORM_90: { - origin.y = PMONITOR->m_pixelSize.y - box.height; + origin.y = PMONITOR->m_pixelSize.y - m_box.height; break; } case WL_OUTPUT_TRANSFORM_FLIPPED_270: case WL_OUTPUT_TRANSFORM_180: { - origin.x = PMONITOR->m_pixelSize.x - box.width; - origin.y = PMONITOR->m_pixelSize.y - box.height; + origin.x = PMONITOR->m_pixelSize.x - m_box.width; + origin.y = PMONITOR->m_pixelSize.y - m_box.height; break; } case WL_OUTPUT_TRANSFORM_FLIPPED: case WL_OUTPUT_TRANSFORM_270: { - origin.x = PMONITOR->m_pixelSize.x - box.width; + origin.x = PMONITOR->m_pixelSize.x - m_box.width; break; } default: break; } - glReadPixels(origin.x, origin.y, box.width, box.height, glFormat, PFORMAT->glType, pixelData); + glReadPixels(origin.x, origin.y, m_box.width, m_box.height, glFormat, PFORMAT->glType, pixelData); if (overlayCursor) { g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->m_self.lock()); @@ -328,8 +328,8 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { } bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(resource->client(), PERMISSION_TYPE_SCREENCOPY); - const auto PMONITOR = pWindow->m_monitor.lock(); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); + const auto PMONITOR = m_window->m_monitor.lock(); CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; @@ -340,17 +340,17 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pPointerManager->damageCursor(PMONITOR->m_self.lock()); } - if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, buffer.m_buffer)) + if (!g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_TO_BUFFER, m_buffer.m_buffer)) return false; g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(pWindow); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); g_pHyprRenderer->m_bBlockSurfaceFeedback = false; if (overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - pWindow->m_realPosition->value()); + g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { CBox texbox = CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); @@ -369,7 +369,7 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { } bool CToplevelExportFrame::shouldOverlayCursor() const { - if (!cursorOverlayRequested) + if (!m_cursorOverlayRequested) return false; auto pointerSurfaceResource = g_pSeatManager->m_state.pointerFocus.lock(); @@ -379,11 +379,11 @@ bool CToplevelExportFrame::shouldOverlayCursor() const { auto pointerSurface = CWLSurface::fromResource(pointerSurfaceResource); - return pointerSurface && pointerSurface->getWindow() == pWindow; + return pointerSurface && pointerSurface->getWindow() == m_window; } bool CToplevelExportFrame::good() { - return resource->resource(); + return m_resource->resource(); } CToplevelExportProtocol::CToplevelExportProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -391,59 +391,59 @@ CToplevelExportProtocol::CToplevelExportProtocol(const wl_interface* iface, cons } void CToplevelExportProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto CLIENT = m_vClients.emplace_back(makeShared(makeShared(client, ver, id))); + const auto CLIENT = m_clients.emplace_back(makeShared(makeShared(client, ver, id))); if (!CLIENT->good()) { LOGM(LOG, "Failed to bind client! (out of memory)"); wl_client_post_no_memory(client); - m_vClients.pop_back(); + m_clients.pop_back(); return; } - CLIENT->self = CLIENT; + CLIENT->m_self = CLIENT; LOGM(LOG, "Bound client successfully!"); } void CToplevelExportProtocol::destroyResource(CToplevelExportClient* client) { - std::erase_if(m_vClients, [&](const auto& other) { return other.get() == client; }); - std::erase_if(m_vFrames, [&](const auto& other) { return other->client.get() == client; }); - std::erase_if(m_vFramesAwaitingWrite, [&](const auto& other) { return !other || other->client.get() == client; }); + std::erase_if(m_clients, [&](const auto& other) { return other.get() == client; }); + std::erase_if(m_frames, [&](const auto& other) { return other->m_client.get() == client; }); + std::erase_if(m_framesAwaitingWrite, [&](const auto& other) { return !other || other->m_client.get() == client; }); } void CToplevelExportProtocol::destroyResource(CToplevelExportFrame* frame) { - std::erase_if(m_vFrames, [&](const auto& other) { return other.get() == frame; }); - std::erase_if(m_vFramesAwaitingWrite, [&](const auto& other) { return !other || other.get() == frame; }); + std::erase_if(m_frames, [&](const auto& other) { return other.get() == frame; }); + std::erase_if(m_framesAwaitingWrite, [&](const auto& other) { return !other || other.get() == frame; }); } void CToplevelExportProtocol::onOutputCommit(PHLMONITOR pMonitor) { - if (m_vFramesAwaitingWrite.empty()) + if (m_framesAwaitingWrite.empty()) return; // nothing to share std::vector> framesToRemove; // reserve number of elements to avoid reallocations - framesToRemove.reserve(m_vFramesAwaitingWrite.size()); + framesToRemove.reserve(m_framesAwaitingWrite.size()); // share frame if correct output - for (auto const& f : m_vFramesAwaitingWrite) { + for (auto const& f : m_framesAwaitingWrite) { if (!f) continue; // check permissions - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->resource->client(), PERMISSION_TYPE_SCREENCOPY); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->m_resource->client(), PERMISSION_TYPE_SCREENCOPY); if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) continue; // pending an answer, don't do anything yet. - if (!validMapped(f->pWindow)) { + if (!validMapped(f->m_window)) { framesToRemove.emplace_back(f); continue; } - if (!f->pWindow) + if (!f->m_window) continue; - const auto PWINDOW = f->pWindow; + const auto PWINDOW = f->m_window; if (pMonitor != PWINDOW->m_monitor.lock()) continue; @@ -455,20 +455,20 @@ void CToplevelExportProtocol::onOutputCommit(PHLMONITOR pMonitor) { f->share(); - f->client->lastFrame.reset(); - ++f->client->frameCounter; + f->m_client->m_lastFrame.reset(); + ++f->m_client->m_frameCounter; framesToRemove.push_back(f); } for (auto const& f : framesToRemove) { - std::erase(m_vFramesAwaitingWrite, f); + std::erase(m_framesAwaitingWrite, f); } } void CToplevelExportProtocol::onWindowUnmap(PHLWINDOW pWindow) { - for (auto const& f : m_vFrames) { - if (f->pWindow == pWindow) - f->pWindow.reset(); + for (auto const& f : m_frames) { + if (f->m_window == pWindow) + f->m_window.reset(); } } diff --git a/src/protocols/ToplevelExport.hpp b/src/protocols/ToplevelExport.hpp index 907f6236..8ccd881b 100644 --- a/src/protocols/ToplevelExport.hpp +++ b/src/protocols/ToplevelExport.hpp @@ -17,20 +17,20 @@ class CToplevelExportClient { bool good(); - WP self; - eClientOwners clientOwner = CLIENT_TOPLEVEL_EXPORT; + WP m_self; + eClientOwners m_clientOwner = CLIENT_TOPLEVEL_EXPORT; - CTimer lastFrame; - int frameCounter = 0; + CTimer m_lastFrame; + int m_frameCounter = 0; private: - SP resource; + SP m_resource; - int framesInLastHalfSecond = 0; - CTimer lastMeasure; - bool sentScreencast = false; + int m_framesInLastHalfSecond = 0; + CTimer m_lastMeasure; + bool m_sentScreencast = false; - SP tickCallback; + SP m_tickCallback; void onTick(); void captureToplevel(CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, PHLWINDOW handle); @@ -44,23 +44,22 @@ class CToplevelExportFrame { bool good(); - WP self; - WP client; + WP m_self; + WP m_client; private: - SP resource; + SP m_resource; - PHLWINDOW pWindow; - bool cursorOverlayRequested = false; - bool m_ignoreDamage = false; - bool lockedSWCursors = false; + PHLWINDOW m_window; + bool m_cursorOverlayRequested = false; + bool m_ignoreDamage = false; - CHLBufferReference buffer; - bool bufferDMA = false; - uint32_t shmFormat = 0; - uint32_t dmabufFormat = 0; - int shmStride = 0; - CBox box = {}; + CHLBufferReference m_buffer; + bool m_bufferDMA = false; + uint32_t m_shmFormat = 0; + uint32_t m_dmabufFormat = 0; + int m_shmStride = 0; + CBox m_box = {}; void copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resource* buffer, int32_t ignoreDamage); bool copyDmabuf(const Time::steady_tp& now); @@ -83,9 +82,9 @@ class CToplevelExportProtocol : IWaylandProtocol { void onOutputCommit(PHLMONITOR pMonitor); private: - std::vector> m_vClients; - std::vector> m_vFrames; - std::vector> m_vFramesAwaitingWrite; + std::vector> m_clients; + std::vector> m_frames; + std::vector> m_framesAwaitingWrite; void shareFrame(CToplevelExportFrame* frame); bool copyFrameDmabuf(CToplevelExportFrame* frame, const Time::steady_tp& now); diff --git a/src/protocols/ToplevelMapping.cpp b/src/protocols/ToplevelMapping.cpp index e65695c8..5552fdf2 100644 --- a/src/protocols/ToplevelMapping.cpp +++ b/src/protocols/ToplevelMapping.cpp @@ -3,76 +3,76 @@ #include "ForeignToplevelWlr.hpp" #include "ForeignToplevel.hpp" -CToplevelWindowMappingHandle::CToplevelWindowMappingHandle(SP resource_) : resource(resource_) {} +CToplevelWindowMappingHandle::CToplevelWindowMappingHandle(SP resource_) : m_resource(resource_) {} -CToplevelMappingManager::CToplevelMappingManager(SP resource_) : resource(resource_) { +CToplevelMappingManager::CToplevelMappingManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; - resource->setOnDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); - resource->setDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); + m_resource->setOnDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); + m_resource->setDestroy([this](CHyprlandToplevelMappingManagerV1* h) { PROTO::toplevelMapping->onManagerResourceDestroy(this); }); - resource->setGetWindowForToplevel([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { - const auto NEWHANDLE = PROTO::toplevelMapping->m_vHandles.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), handle))); + m_resource->setGetWindowForToplevel([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { + const auto NEWHANDLE = PROTO::toplevelMapping->m_handles.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), handle))); - if UNLIKELY (!NEWHANDLE->resource->resource()) { + if UNLIKELY (!NEWHANDLE->m_resource->resource()) { LOGM(ERR, "Couldn't alloc mapping handle! (no memory)"); - resource->noMemory(); + m_resource->noMemory(); return; } - NEWHANDLE->resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); - NEWHANDLE->resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->m_resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->m_resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); const auto WINDOW = PROTO::foreignToplevel->windowFromHandleResource(toplevel); if (!WINDOW) - NEWHANDLE->resource->sendFailed(); + NEWHANDLE->m_resource->sendFailed(); else - NEWHANDLE->resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); + NEWHANDLE->m_resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); }); - resource->setGetWindowForToplevelWlr([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { - const auto NEWHANDLE = PROTO::toplevelMapping->m_vHandles.emplace_back( - makeShared(makeShared(resource->client(), resource->version(), handle))); + m_resource->setGetWindowForToplevelWlr([this](CHyprlandToplevelMappingManagerV1* mgr, uint32_t handle, wl_resource* toplevel) { + const auto NEWHANDLE = PROTO::toplevelMapping->m_handles.emplace_back( + makeShared(makeShared(m_resource->client(), m_resource->version(), handle))); - if UNLIKELY (!NEWHANDLE->resource->resource()) { + if UNLIKELY (!NEWHANDLE->m_resource->resource()) { LOGM(ERR, "Couldn't alloc mapping handle! (no memory)"); - resource->noMemory(); + m_resource->noMemory(); return; } - NEWHANDLE->resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); - NEWHANDLE->resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->m_resource->setOnDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); + NEWHANDLE->m_resource->setDestroy([](CHyprlandToplevelWindowMappingHandleV1* h) { PROTO::toplevelMapping->destroyHandle(h); }); const auto WINDOW = PROTO::foreignToplevelWlr->windowFromHandleResource(toplevel); if (!WINDOW) - NEWHANDLE->resource->sendFailed(); + NEWHANDLE->m_resource->sendFailed(); else - NEWHANDLE->resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); + NEWHANDLE->m_resource->sendWindowAddress((uint64_t)WINDOW.get() >> 32 & 0xFFFFFFFF, (uint64_t)WINDOW.get() & 0xFFFFFFFF); }); } bool CToplevelMappingManager::good() const { - return resource->resource(); + return m_resource->resource(); } CToplevelMappingProtocol::CToplevelMappingProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {} void CToplevelMappingProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(makeShared(client, ver, id))).get(); if UNLIKELY (!RESOURCE->good()) { LOGM(ERR, "Couldn't create a toplevel mapping manager"); wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CToplevelMappingProtocol::onManagerResourceDestroy(CToplevelMappingManager* mgr) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == mgr; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == mgr; }); } void CToplevelMappingProtocol::destroyHandle(CHyprlandToplevelWindowMappingHandleV1* handle) { - std::erase_if(m_vHandles, [&](const auto& other) { return other->resource.get() == handle; }); + std::erase_if(m_handles, [&](const auto& other) { return other->m_resource.get() == handle; }); } \ No newline at end of file diff --git a/src/protocols/ToplevelMapping.hpp b/src/protocols/ToplevelMapping.hpp index ffe94b14..65824a05 100644 --- a/src/protocols/ToplevelMapping.hpp +++ b/src/protocols/ToplevelMapping.hpp @@ -9,7 +9,7 @@ class CToplevelWindowMappingHandle { CToplevelWindowMappingHandle(SP resource_); private: - SP resource; + SP m_resource; friend class CToplevelMappingManager; friend class CToplevelMappingProtocol; @@ -22,7 +22,7 @@ class CToplevelMappingManager { bool good() const; private: - SP resource; + SP m_resource; }; class CToplevelMappingProtocol : IWaylandProtocol { @@ -35,8 +35,8 @@ class CToplevelMappingProtocol : IWaylandProtocol { void onManagerResourceDestroy(CToplevelMappingManager* mgr); void destroyHandle(CHyprlandToplevelWindowMappingHandleV1* handle); - std::vector> m_vManagers; - std::vector> m_vHandles; + std::vector> m_managers; + std::vector> m_handles; friend class CToplevelMappingManager; }; From 78ff20ddf03166c7fa769419b7c2861db89f412b Mon Sep 17 00:00:00 2001 From: phonetic112 <73647246+phonetic112@users.noreply.github.com> Date: Sun, 4 May 2025 13:22:41 -0400 Subject: [PATCH 0152/1077] workspaces: Fix empty flag not selecting active workspace (#10237) --- src/events/Windows.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 910220e1..ba5b77bf 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -337,19 +337,28 @@ void Events::listener_mapWindow(void* owner, void* data) { if (PWINDOW->m_pinned && !PWINDOW->m_isFloating) PWINDOW->m_pinned = false; - const CVarList WORKSPACEARGS = CVarList(requestedWorkspace, 0, ' '); + CVarList WORKSPACEARGS = CVarList(requestedWorkspace, 0, ' '); if (!WORKSPACEARGS[0].empty()) { - if (WORKSPACEARGS[WORKSPACEARGS.size() - 1].starts_with("silent")) + WORKSPACEID requestedWorkspaceID; + std::string requestedWorkspaceName; + if (WORKSPACEARGS.contains("silent")) workspaceSilent = true; - const auto& [REQUESTEDWORKSPACEID, requestedWorkspaceName] = getWorkspaceIDNameFromString(WORKSPACEARGS.join(" ", 0, workspaceSilent ? WORKSPACEARGS.size() - 1 : 0)); + if (WORKSPACEARGS.contains("empty") && PWORKSPACE->getWindows() <= 1) { + requestedWorkspaceID = PWORKSPACE->m_id; + requestedWorkspaceName = PWORKSPACE->m_name; + } else { + auto result = getWorkspaceIDNameFromString(WORKSPACEARGS.join(" ", 0, workspaceSilent ? WORKSPACEARGS.size() - 1 : 0)); + requestedWorkspaceID = result.id; + requestedWorkspaceName = result.name; + } - if (REQUESTEDWORKSPACEID != WORKSPACE_INVALID) { - auto pWorkspace = g_pCompositor->getWorkspaceByID(REQUESTEDWORKSPACEID); + if (requestedWorkspaceID != WORKSPACE_INVALID) { + auto pWorkspace = g_pCompositor->getWorkspaceByID(requestedWorkspaceID); if (!pWorkspace) - pWorkspace = g_pCompositor->createNewWorkspace(REQUESTEDWORKSPACEID, PWINDOW->monitorID(), requestedWorkspaceName, false); + pWorkspace = g_pCompositor->createNewWorkspace(requestedWorkspaceID, PWINDOW->monitorID(), requestedWorkspaceName, false); PWORKSPACE = pWorkspace; @@ -362,7 +371,7 @@ void Events::listener_mapWindow(void* owner, void* data) { if (!workspaceSilent) { if (pWorkspace->m_isSpecialWorkspace) pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace); - else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_noInitialFocus) + else if (PMONITOR->activeWorkspaceID() != requestedWorkspaceID && !PWINDOW->m_noInitialFocus) g_pKeybindManager->m_dispatchers["workspace"](requestedWorkspaceName); PMONITOR = g_pCompositor->m_lastMonitor.lock(); From 9cd5b257459a6b4c5d5d4d1026df85f0ecbe5a93 Mon Sep 17 00:00:00 2001 From: davc0n Date: Sun, 4 May 2025 23:39:00 +0200 Subject: [PATCH 0153/1077] protocols: refactor class member vars (u-z) (#10282) * protocols: refactor class member vars (u-z) * protocols: fix clang format --- src/Compositor.cpp | 4 +- src/desktop/Popup.cpp | 53 +-- src/desktop/Window.cpp | 70 ++-- src/devices/VirtualKeyboard.cpp | 10 +- src/devices/VirtualPointer.cpp | 32 +- src/events/Windows.cpp | 8 +- src/layout/IHyprLayout.cpp | 8 +- src/managers/ANRManager.cpp | 7 +- src/managers/XWaylandManager.cpp | 24 +- src/managers/input/InputManager.cpp | 6 +- src/protocols/LayerShell.cpp | 4 +- src/protocols/Viewporter.cpp | 74 ++-- src/protocols/Viewporter.hpp | 12 +- src/protocols/VirtualKeyboard.cpp | 60 +-- src/protocols/VirtualKeyboard.hpp | 16 +- src/protocols/VirtualPointer.cpp | 86 ++-- src/protocols/VirtualPointer.hpp | 18 +- src/protocols/WaylandProtocol.cpp | 20 +- src/protocols/WaylandProtocol.hpp | 4 +- src/protocols/XDGActivation.cpp | 56 +-- src/protocols/XDGActivation.hpp | 16 +- src/protocols/XDGBell.cpp | 4 +- src/protocols/XDGBell.hpp | 2 +- src/protocols/XDGDecoration.cpp | 34 +- src/protocols/XDGDecoration.hpp | 8 +- src/protocols/XDGDialog.cpp | 36 +- src/protocols/XDGDialog.hpp | 10 +- src/protocols/XDGOutput.cpp | 58 +-- src/protocols/XDGOutput.hpp | 16 +- src/protocols/XDGShell.cpp | 614 ++++++++++++++-------------- src/protocols/XDGShell.hpp | 113 ++--- src/protocols/XDGTag.cpp | 4 +- src/protocols/XDGTag.hpp | 2 +- src/protocols/XWaylandShell.cpp | 42 +- src/protocols/XWaylandShell.hpp | 18 +- src/protocols/XXColorManagement.cpp | 345 ++++++++-------- src/protocols/XXColorManagement.hpp | 58 +-- src/render/Renderer.cpp | 4 +- src/xwayland/XWM.cpp | 10 +- 39 files changed, 985 insertions(+), 981 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8495a328..c5b1e2b3 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1050,7 +1050,7 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDOW pWindo }, &iterData); - CBox geom = pWindow->m_xdgSurface->current.geometry; + CBox geom = pWindow->m_xdgSurface->m_current.geometry; if (std::get<1>(iterData) == Vector2D{-1337, -1337}) return vec - pWindow->m_realPosition->goal(); @@ -1879,7 +1879,7 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { *pWindow->m_borderFadeAnimationProgress = 1.f; }; - const bool IS_SHADOWED_BY_MODAL = pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel && pWindow->m_xdgSurface->toplevel->anyChildModal(); + const bool IS_SHADOWED_BY_MODAL = pWindow->m_xdgSurface && pWindow->m_xdgSurface->m_toplevel && pWindow->m_xdgSurface->m_toplevel->anyChildModal(); // border const auto RENDERDATA = g_pLayoutManager->getCurrentLayout()->requestRenderHints(pWindow); diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index e43aa865..f35cedcb 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -36,9 +36,9 @@ UP CPopup::create(SP resource, WP pOwner) { popup->m_parent = pOwner; popup->m_self = popup; popup->m_wlSurface = CWLSurface::create(); - popup->m_wlSurface->assign(resource->surface->surface.lock(), popup.get()); + popup->m_wlSurface->assign(resource->m_surface->m_surface.lock(), popup.get()); - popup->m_lastSize = resource->surface->current.geometry.size(); + popup->m_lastSize = resource->m_surface->m_current.geometry.size(); popup->reposition(); popup->initAllSignals(); @@ -54,7 +54,8 @@ void CPopup::initAllSignals() { if (!m_resource) { if (!m_windowOwner.expired()) - m_listeners.newPopup = m_windowOwner->m_xdgSurface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + m_listeners.newPopup = + m_windowOwner->m_xdgSurface->m_events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); else if (!m_layerOwner.expired()) m_listeners.newPopup = m_layerOwner->m_layerSurface->m_events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); @@ -64,13 +65,13 @@ void CPopup::initAllSignals() { return; } - m_listeners.reposition = m_resource->events.reposition.registerListener([this](std::any d) { this->onReposition(); }); - m_listeners.map = m_resource->surface->events.map.registerListener([this](std::any d) { this->onMap(); }); - m_listeners.unmap = m_resource->surface->events.unmap.registerListener([this](std::any d) { this->onUnmap(); }); - m_listeners.dismissed = m_resource->events.dismissed.registerListener([this](std::any d) { this->onUnmap(); }); - m_listeners.destroy = m_resource->surface->events.destroy.registerListener([this](std::any d) { this->onDestroy(); }); - m_listeners.commit = m_resource->surface->events.commit.registerListener([this](std::any d) { this->onCommit(); }); - m_listeners.newPopup = m_resource->surface->events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); + m_listeners.reposition = m_resource->m_events.reposition.registerListener([this](std::any d) { this->onReposition(); }); + m_listeners.map = m_resource->m_surface->m_events.map.registerListener([this](std::any d) { this->onMap(); }); + m_listeners.unmap = m_resource->m_surface->m_events.unmap.registerListener([this](std::any d) { this->onUnmap(); }); + m_listeners.dismissed = m_resource->m_events.dismissed.registerListener([this](std::any d) { this->onUnmap(); }); + m_listeners.destroy = m_resource->m_surface->m_events.destroy.registerListener([this](std::any d) { this->onDestroy(); }); + m_listeners.commit = m_resource->m_surface->m_events.commit.registerListener([this](std::any d) { this->onCommit(); }); + m_listeners.newPopup = m_resource->m_surface->m_events.newPopup.registerListener([this](std::any d) { this->onNewPopup(std::any_cast>(d)); }); } void CPopup::onNewPopup(SP popup) { @@ -93,7 +94,7 @@ void CPopup::onMap() { return; m_mapped = true; - m_lastSize = m_resource->surface->surface->m_current.size; + m_lastSize = m_resource->m_surface->m_surface->m_current.size; const auto COORDS = coordsGlobal(); const auto PMONITOR = g_pCompositor->getMonitorFromVector(COORDS); @@ -110,7 +111,7 @@ void CPopup::onMap() { //unconstrain(); sendScale(); - m_resource->surface->surface->enter(PMONITOR->m_self.lock()); + m_resource->m_surface->m_surface->enter(PMONITOR->m_self.lock()); if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) g_pHyprOpenGL->markBlurDirtyForMonitor(g_pCompositor->getMonitorFromID(m_layerOwner->m_layer)); @@ -120,7 +121,7 @@ void CPopup::onUnmap() { if (!m_mapped) return; - if (!m_resource || !m_resource->surface) { + if (!m_resource || !m_resource->m_surface) { Debug::log(ERR, "CPopup: orphaned (no surface/resource) and unmaps??"); onDestroy(); return; @@ -128,7 +129,7 @@ void CPopup::onUnmap() { m_mapped = false; - m_lastSize = m_resource->surface->surface->m_current.size; + m_lastSize = m_resource->m_surface->m_surface->m_current.size; const auto COORDS = coordsGlobal(); @@ -160,19 +161,19 @@ void CPopup::onUnmap() { } void CPopup::onCommit(bool ignoreSiblings) { - if (!m_resource || !m_resource->surface) { + if (!m_resource || !m_resource->m_surface) { Debug::log(ERR, "CPopup: orphaned (no surface/resource) and commits??"); onDestroy(); return; } - if (m_resource->surface->initialCommit) { - m_resource->surface->scheduleConfigure(); + if (m_resource->m_surface->m_initialCommit) { + m_resource->m_surface->scheduleConfigure(); return; } if (!m_windowOwner.expired() && (!m_windowOwner->m_isMapped || !m_windowOwner->m_workspace->m_visible)) { - m_lastSize = m_resource->surface->surface->m_current.size; + m_lastSize = m_resource->m_surface->m_surface->m_current.size; static auto PLOGDAMAGE = CConfigValue("debug:log_damage"); if (*PLOGDAMAGE) @@ -180,16 +181,16 @@ void CPopup::onCommit(bool ignoreSiblings) { return; } - if (!m_resource->surface->mapped) + if (!m_resource->m_surface->m_mapped) return; const auto COORDS = coordsGlobal(); const auto COORDSLOCAL = coordsRelativeToParent(); - if (m_lastSize != m_resource->surface->surface->m_current.size || m_requestedReposition || m_lastPos != COORDSLOCAL) { + if (m_lastSize != m_resource->m_surface->m_surface->m_current.size || m_requestedReposition || m_lastPos != COORDSLOCAL) { CBox box = {localToGlobal(m_lastPos), m_lastSize}; g_pHyprRenderer->damageBox(box); - m_lastSize = m_resource->surface->surface->m_current.size; + m_lastSize = m_resource->m_surface->m_surface->m_current.size; box = {COORDS, m_lastSize}; g_pHyprRenderer->damageBox(box); @@ -242,12 +243,12 @@ Vector2D CPopup::coordsRelativeToParent() { return {}; WP current = m_self; - offset -= current->m_resource->surface->current.geometry.pos(); + offset -= current->m_resource->m_surface->m_current.geometry.pos(); while (current->m_parent && current->m_resource) { offset += current->m_wlSurface->resource()->m_current.offset; - offset += current->m_resource->geometry.pos(); + offset += current->m_resource->m_geometry.pos(); current = current->m_parent; } @@ -351,10 +352,10 @@ WP CPopup::at(const Vector2D& globalCoords, bool allowsInput) { continue; if (!allowsInput) { - const bool HASSURFACE = p->m_resource && p->m_resource->surface; + const bool HASSURFACE = p->m_resource && p->m_resource->m_surface; - Vector2D offset = HASSURFACE ? p->m_resource->surface->current.geometry.pos() : Vector2D{}; - Vector2D size = HASSURFACE ? p->m_resource->surface->current.geometry.size() : p->size(); + Vector2D offset = HASSURFACE ? p->m_resource->m_surface->m_current.geometry.pos() : Vector2D{}; + Vector2D size = HASSURFACE ? p->m_resource->m_surface->m_current.geometry.size() : p->size(); if (size == Vector2D{}) size = p->size(); diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 05d5363e..a8fcf3a1 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -62,8 +62,8 @@ PHLWINDOW CWindow::create(SP surface) { PHLWINDOW CWindow::create(SP resource) { PHLWINDOW pWindow = SP(new CWindow(resource)); - pWindow->m_self = pWindow; - resource->toplevel->window = pWindow; + pWindow->m_self = pWindow; + resource->m_toplevel->m_window = pWindow; g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_realSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE); @@ -80,7 +80,7 @@ PHLWINDOW CWindow::create(SP resource) { pWindow->addWindowDeco(makeUnique(pWindow)); pWindow->addWindowDeco(makeUnique(pWindow)); - pWindow->m_wlSurface->assign(pWindow->m_xdgSurface->surface.lock(), pWindow); + pWindow->m_wlSurface->assign(pWindow->m_xdgSurface->m_surface.lock(), pWindow); return pWindow; } @@ -88,13 +88,13 @@ PHLWINDOW CWindow::create(SP resource) { CWindow::CWindow(SP resource) : m_xdgSurface(resource) { m_wlSurface = CWLSurface::create(); - m_listeners.map = m_xdgSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); - m_listeners.ack = m_xdgSurface->events.ack.registerListener([this](std::any d) { onAck(std::any_cast(d)); }); - m_listeners.unmap = m_xdgSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); - m_listeners.destroy = m_xdgSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); - m_listeners.commit = m_xdgSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); - m_listeners.updateState = m_xdgSurface->toplevel->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); - m_listeners.updateMetadata = m_xdgSurface->toplevel->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); + m_listeners.map = m_xdgSurface->m_events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); + m_listeners.ack = m_xdgSurface->m_events.ack.registerListener([this](std::any d) { onAck(std::any_cast(d)); }); + m_listeners.unmap = m_xdgSurface->m_events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); + m_listeners.destroy = m_xdgSurface->m_events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); + m_listeners.commit = m_xdgSurface->m_events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); + m_listeners.updateState = m_xdgSurface->m_toplevel->m_events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); + m_listeners.updateMetadata = m_xdgSurface->m_toplevel->m_events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); } CWindow::CWindow(SP surface) : m_xwaylandSurface(surface) { @@ -344,10 +344,10 @@ bool CWindow::checkInputOnDecos(const eInputType type, const Vector2D& mouseCoor pid_t CWindow::getPID() { pid_t PID = -1; if (!m_isX11) { - if (!m_xdgSurface || !m_xdgSurface->owner /* happens at unmap */) + if (!m_xdgSurface || !m_xdgSurface->m_owner /* happens at unmap */) return -1; - wl_client_get_credentials(m_xdgSurface->owner->client(), &PID, nullptr, nullptr); + wl_client_get_credentials(m_xdgSurface->m_owner->client(), &PID, nullptr, nullptr); } else { if (!m_xwaylandSurface) return -1; @@ -1166,8 +1166,8 @@ bool CWindow::opaque() { return false; // TODO: this is wrong - const auto EXTENTS = m_xdgSurface->surface->m_current.opaque.getExtents(); - if (EXTENTS.w >= m_xdgSurface->surface->m_current.bufferSize.x && EXTENTS.h >= m_xdgSurface->surface->m_current.bufferSize.y) + const auto EXTENTS = m_xdgSurface->m_surface->m_current.opaque.getExtents(); + if (EXTENTS.w >= m_xdgSurface->m_surface->m_current.bufferSize.x && EXTENTS.h >= m_xdgSurface->m_surface->m_current.bufferSize.y) return true; return m_wlSurface->resource()->m_current.texture->m_bOpaque; @@ -1238,10 +1238,10 @@ void CWindow::setSuspended(bool suspend) { if (suspend == m_suspended) return; - if (m_isX11 || !m_xdgSurface || !m_xdgSurface->toplevel) + if (m_isX11 || !m_xdgSurface || !m_xdgSurface->m_toplevel) return; - m_xdgSurface->toplevel->setSuspeneded(suspend); + m_xdgSurface->m_toplevel->setSuspeneded(suspend); m_suspended = suspend; } @@ -1418,9 +1418,9 @@ void CWindow::activate(bool force) { } void CWindow::onUpdateState() { - std::optional requestsFS = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsFullscreen : m_xwaylandSurface->state.requestsFullscreen; - std::optional requestsID = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsFullscreenMonitor : MONITOR_INVALID; - std::optional requestsMX = m_xdgSurface ? m_xdgSurface->toplevel->state.requestsMaximize : m_xwaylandSurface->state.requestsMaximize; + std::optional requestsFS = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsFullscreen : m_xwaylandSurface->state.requestsFullscreen; + std::optional requestsID = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsFullscreenMonitor : MONITOR_INVALID; + std::optional requestsMX = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsMaximize : m_xwaylandSurface->state.requestsMaximize; if (requestsFS.has_value() && !(m_suppressedEvents & SUPPRESS_FULLSCREEN)) { if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_suppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { @@ -1491,8 +1491,8 @@ void CWindow::onUpdateMeta() { std::string CWindow::fetchTitle() { if (!m_isX11) { - if (m_xdgSurface && m_xdgSurface->toplevel) - return m_xdgSurface->toplevel->state.title; + if (m_xdgSurface && m_xdgSurface->m_toplevel) + return m_xdgSurface->m_toplevel->m_state.title; } else { if (m_xwaylandSurface) return m_xwaylandSurface->state.title; @@ -1503,8 +1503,8 @@ std::string CWindow::fetchTitle() { std::string CWindow::fetchClass() { if (!m_isX11) { - if (m_xdgSurface && m_xdgSurface->toplevel) - return m_xdgSurface->toplevel->state.appid; + if (m_xdgSurface && m_xdgSurface->m_toplevel) + return m_xdgSurface->m_toplevel->m_state.appid; } else { if (m_xwaylandSurface) return m_xwaylandSurface->state.appid; @@ -1676,10 +1676,10 @@ bool CWindow::isModal() { } Vector2D CWindow::requestedMinSize() { - if ((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && !m_xdgSurface->toplevel)) + if ((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && !m_xdgSurface->m_toplevel)) return Vector2D(1, 1); - Vector2D minSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->min_width, m_xwaylandSurface->sizeHints->min_height) : m_xdgSurface->toplevel->layoutMinSize(); + Vector2D minSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->min_width, m_xwaylandSurface->sizeHints->min_height) : m_xdgSurface->m_toplevel->layoutMinSize(); minSize = minSize.clamp({1, 1}); @@ -1688,10 +1688,10 @@ Vector2D CWindow::requestedMinSize() { Vector2D CWindow::requestedMaxSize() { constexpr int NO_MAX_SIZE_LIMIT = 99999; - if (((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && (!m_xdgSurface || !m_xdgSurface->toplevel)) || m_windowData.noMaxSize.valueOrDefault())) + if (((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && (!m_xdgSurface || !m_xdgSurface->m_toplevel)) || m_windowData.noMaxSize.valueOrDefault())) return Vector2D(NO_MAX_SIZE_LIMIT, NO_MAX_SIZE_LIMIT); - Vector2D maxSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->max_width, m_xwaylandSurface->sizeHints->max_height) : m_xdgSurface->toplevel->layoutMaxSize(); + Vector2D maxSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->max_width, m_xwaylandSurface->sizeHints->max_height) : m_xdgSurface->m_toplevel->layoutMaxSize(); if (maxSize.x < 5) maxSize.x = NO_MAX_SIZE_LIMIT; @@ -1767,8 +1767,8 @@ void CWindow::sendWindowSize(bool force) { if (m_isX11 && m_xwaylandSurface) m_xwaylandSurface->configure({REPORTPOS, REPORTSIZE}); - else if (m_xdgSurface && m_xdgSurface->toplevel) - m_pendingSizeAcks.emplace_back(m_xdgSurface->toplevel->setSize(REPORTSIZE), REPORTPOS.floor()); + else if (m_xdgSurface && m_xdgSurface->m_toplevel) + m_pendingSizeAcks.emplace_back(m_xdgSurface->m_toplevel->setSize(REPORTSIZE), REPORTPOS.floor()); } NContentType::eContentType CWindow::getContentType() { @@ -1795,8 +1795,8 @@ void CWindow::deactivateGroupMembers() { // because X is weird, keep the behavior for wayland windows // also its not really needed for xwayland windows // ref: #9760 #9294 - if (!curr->m_isX11 && curr->m_xdgSurface && curr->m_xdgSurface->toplevel) - curr->m_xdgSurface->toplevel->setActive(false); + if (!curr->m_isX11 && curr->m_xdgSurface && curr->m_xdgSurface->m_toplevel) + curr->m_xdgSurface->m_toplevel->setActive(false); } curr = curr->m_groupData.pNextWindow.lock(); @@ -1810,15 +1810,15 @@ bool CWindow::isNotResponding() { } std::optional CWindow::xdgTag() { - if (!m_xdgSurface || !m_xdgSurface->toplevel) + if (!m_xdgSurface || !m_xdgSurface->m_toplevel) return std::nullopt; - return m_xdgSurface->toplevel->m_toplevelTag; + return m_xdgSurface->m_toplevel->m_toplevelTag; } std::optional CWindow::xdgDescription() { - if (!m_xdgSurface || !m_xdgSurface->toplevel) + if (!m_xdgSurface || !m_xdgSurface->m_toplevel) return std::nullopt; - return m_xdgSurface->toplevel->m_toplevelDescription; + return m_xdgSurface->m_toplevel->m_toplevelDescription; } diff --git a/src/devices/VirtualKeyboard.cpp b/src/devices/VirtualKeyboard.cpp index 4fb25b5b..9952847a 100644 --- a/src/devices/VirtualKeyboard.cpp +++ b/src/devices/VirtualKeyboard.cpp @@ -14,13 +14,13 @@ CVirtualKeyboard::CVirtualKeyboard(SP keeb_) : m_key if (!keeb_) return; - m_listeners.destroy = keeb_->events.destroy.registerListener([this](std::any d) { + m_listeners.destroy = keeb_->m_events.destroy.registerListener([this](std::any d) { m_keyboard.reset(); m_events.destroy.emit(); }); - m_listeners.key = keeb_->events.key.registerListener([this](std::any d) { m_keyboardEvents.key.emit(d); }); - m_listeners.modifiers = keeb_->events.modifiers.registerListener([this](std::any d) { + m_listeners.key = keeb_->m_events.key.registerListener([this](std::any d) { m_keyboardEvents.key.emit(d); }); + m_listeners.modifiers = keeb_->m_events.modifiers.registerListener([this](std::any d) { auto E = std::any_cast(d); updateModifiers(E.depressed, E.latched, E.locked, E.group); m_keyboardEvents.modifiers.emit(SModifiersEvent{ @@ -30,7 +30,7 @@ CVirtualKeyboard::CVirtualKeyboard(SP keeb_) : m_key .group = m_modifiersState.group, }); }); - m_listeners.keymap = keeb_->events.keymap.registerListener([this](std::any d) { + m_listeners.keymap = keeb_->m_events.keymap.registerListener([this](std::any d) { auto E = std::any_cast(d); if (m_xkbKeymap) xkb_keymap_unref(m_xkbKeymap); @@ -41,7 +41,7 @@ CVirtualKeyboard::CVirtualKeyboard(SP keeb_) : m_key m_keyboardEvents.keymap.emit(d); }); - m_deviceName = keeb_->name; + m_deviceName = keeb_->m_name; } bool CVirtualKeyboard::isVirtual() { diff --git a/src/devices/VirtualPointer.cpp b/src/devices/VirtualPointer.cpp index bc45f035..2b42b21c 100644 --- a/src/devices/VirtualPointer.cpp +++ b/src/devices/VirtualPointer.cpp @@ -14,37 +14,37 @@ CVirtualPointer::CVirtualPointer(SP resource) : m_poi if UNLIKELY (!resource->good()) return; - m_listeners.destroy = m_pointer->events.destroy.registerListener([this](std::any d) { + m_listeners.destroy = m_pointer->m_events.destroy.registerListener([this](std::any d) { m_pointer.reset(); m_events.destroy.emit(); }); - m_listeners.motion = m_pointer->events.move.registerListener([this](std::any d) { + m_listeners.motion = m_pointer->m_events.move.registerListener([this](std::any d) { auto E = std::any_cast(d); E.device = m_self.lock(); m_pointerEvents.motion.emit(E); }); - m_listeners.motionAbsolute = m_pointer->events.warp.registerListener([this](std::any d) { + m_listeners.motionAbsolute = m_pointer->m_events.warp.registerListener([this](std::any d) { // we need to unpack the event and add our device here because it's required to calculate the position correctly auto E = std::any_cast(d); E.device = m_self.lock(); m_pointerEvents.motionAbsolute.emit(E); }); - m_listeners.button = m_pointer->events.button.registerListener([this](std::any d) { m_pointerEvents.button.emit(d); }); - m_listeners.axis = m_pointer->events.axis.registerListener([this](std::any d) { m_pointerEvents.axis.emit(d); }); - m_listeners.frame = m_pointer->events.frame.registerListener([this](std::any d) { m_pointerEvents.frame.emit(); }); - m_listeners.swipeBegin = m_pointer->events.swipeBegin.registerListener([this](std::any d) { m_pointerEvents.swipeBegin.emit(d); }); - m_listeners.swipeEnd = m_pointer->events.swipeEnd.registerListener([this](std::any d) { m_pointerEvents.swipeEnd.emit(d); }); - m_listeners.swipeUpdate = m_pointer->events.swipeUpdate.registerListener([this](std::any d) { m_pointerEvents.swipeUpdate.emit(d); }); - m_listeners.pinchBegin = m_pointer->events.pinchBegin.registerListener([this](std::any d) { m_pointerEvents.pinchBegin.emit(d); }); - m_listeners.pinchEnd = m_pointer->events.pinchEnd.registerListener([this](std::any d) { m_pointerEvents.pinchEnd.emit(d); }); - m_listeners.pinchUpdate = m_pointer->events.pinchUpdate.registerListener([this](std::any d) { m_pointerEvents.pinchUpdate.emit(d); }); - m_listeners.holdBegin = m_pointer->events.holdBegin.registerListener([this](std::any d) { m_pointerEvents.holdBegin.emit(d); }); - m_listeners.holdEnd = m_pointer->events.holdEnd.registerListener([this](std::any d) { m_pointerEvents.holdEnd.emit(d); }); + m_listeners.button = m_pointer->m_events.button.registerListener([this](std::any d) { m_pointerEvents.button.emit(d); }); + m_listeners.axis = m_pointer->m_events.axis.registerListener([this](std::any d) { m_pointerEvents.axis.emit(d); }); + m_listeners.frame = m_pointer->m_events.frame.registerListener([this](std::any d) { m_pointerEvents.frame.emit(); }); + m_listeners.swipeBegin = m_pointer->m_events.swipeBegin.registerListener([this](std::any d) { m_pointerEvents.swipeBegin.emit(d); }); + m_listeners.swipeEnd = m_pointer->m_events.swipeEnd.registerListener([this](std::any d) { m_pointerEvents.swipeEnd.emit(d); }); + m_listeners.swipeUpdate = m_pointer->m_events.swipeUpdate.registerListener([this](std::any d) { m_pointerEvents.swipeUpdate.emit(d); }); + m_listeners.pinchBegin = m_pointer->m_events.pinchBegin.registerListener([this](std::any d) { m_pointerEvents.pinchBegin.emit(d); }); + m_listeners.pinchEnd = m_pointer->m_events.pinchEnd.registerListener([this](std::any d) { m_pointerEvents.pinchEnd.emit(d); }); + m_listeners.pinchUpdate = m_pointer->m_events.pinchUpdate.registerListener([this](std::any d) { m_pointerEvents.pinchUpdate.emit(d); }); + m_listeners.holdBegin = m_pointer->m_events.holdBegin.registerListener([this](std::any d) { m_pointerEvents.holdBegin.emit(d); }); + m_listeners.holdEnd = m_pointer->m_events.holdEnd.registerListener([this](std::any d) { m_pointerEvents.holdEnd.emit(d); }); - m_boundOutput = resource->boundOutput ? resource->boundOutput->m_name : ""; + m_boundOutput = resource->m_boundOutput ? resource->m_boundOutput->m_name : ""; - m_deviceName = m_pointer->name; + m_deviceName = m_pointer->m_name; } bool CVirtualPointer::isVirtual() { diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index ba5b77bf..d365e376 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -852,12 +852,12 @@ void Events::listener_unmapWindow(void* owner, void* data) { void Events::listener_commitWindow(void* owner, void* data) { PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); - if (!PWINDOW->m_isX11 && PWINDOW->m_xdgSurface->initialCommit) { + if (!PWINDOW->m_isX11 && PWINDOW->m_xdgSurface->m_initialCommit) { Vector2D predSize = g_pLayoutManager->getCurrentLayout()->predictSizeForNewWindow(PWINDOW); Debug::log(LOG, "Layout predicts size {} for {}", predSize, PWINDOW); - PWINDOW->m_xdgSurface->toplevel->setSize(predSize); + PWINDOW->m_xdgSurface->m_toplevel->setSize(predSize); return; } @@ -867,8 +867,8 @@ void Events::listener_commitWindow(void* owner, void* data) { PWINDOW->m_reportedSize = PWINDOW->m_pendingReportedSize; // apply pending size. We pinged, the window ponged. if (!PWINDOW->m_isX11 && !PWINDOW->isFullscreen() && PWINDOW->m_isFloating) { - const auto MINSIZE = PWINDOW->m_xdgSurface->toplevel->layoutMinSize(); - const auto MAXSIZE = PWINDOW->m_xdgSurface->toplevel->layoutMaxSize(); + const auto MINSIZE = PWINDOW->m_xdgSurface->m_toplevel->layoutMinSize(); + const auto MAXSIZE = PWINDOW->m_xdgSurface->m_toplevel->layoutMaxSize(); PWINDOW->clampWindowSize(MINSIZE, MAXSIZE > Vector2D{1, 1} ? std::optional{MAXSIZE} : std::nullopt); g_pHyprRenderer->damageWindow(PWINDOW); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index e107a9e1..b546c1f8 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -161,9 +161,9 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { // TODO: detect a popup in a more consistent way. if ((desiredGeometry.x == 0 && desiredGeometry.y == 0) || !visible || !pWindow->m_isX11) { // if the pos isn't set, fall back to the center placement if it's not a child, otherwise middle of parent if available - if (!pWindow->m_isX11 && pWindow->m_xdgSurface->toplevel->parent && validMapped(pWindow->m_xdgSurface->toplevel->parent->window)) - *pWindow->m_realPosition = pWindow->m_xdgSurface->toplevel->parent->window->m_realPosition->goal() + - pWindow->m_xdgSurface->toplevel->parent->window->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; + if (!pWindow->m_isX11 && pWindow->m_xdgSurface->m_toplevel->m_parent && validMapped(pWindow->m_xdgSurface->m_toplevel->m_parent->m_window)) + *pWindow->m_realPosition = pWindow->m_xdgSurface->m_toplevel->m_parent->m_window->m_realPosition->goal() + + pWindow->m_xdgSurface->m_toplevel->m_parent->m_window->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; else *pWindow->m_realPosition = PMONITOR->m_position + PMONITOR->m_size / 2.F - desiredGeometry.size() / 2.F; } else { @@ -933,7 +933,7 @@ Vector2D IHyprLayout::predictSizeForNewWindow(PHLWINDOW pWindow) { else sizePredicted = predictSizeForNewWindowFloating(pWindow); - Vector2D maxSize = pWindow->m_xdgSurface->toplevel->pending.maxSize; + Vector2D maxSize = pWindow->m_xdgSurface->m_toplevel->m_pending.maxSize; if ((maxSize.x > 0 && maxSize.x < sizePredicted.x) || (maxSize.y > 0 && maxSize.y < sizePredicted.y)) sizePredicted = {}; diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index 84261c45..eff5046b 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -136,7 +136,7 @@ SP CANRManager::dataFor(PHLWINDOW pWindow) { if (pWindow->m_xwaylandSurface) it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xwaylandSurface && data->xwaylandSurface == pWindow->m_xwaylandSurface; }); else if (pWindow->m_xdgSurface) - it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xdgBase && data->xdgBase == pWindow->m_xdgSurface->owner; }); + it = std::ranges::find_if(m_data, [&pWindow](const auto& data) { return data->xdgBase && data->xdgBase == pWindow->m_xdgSurface->m_owner; }); return it == m_data.end() ? nullptr : *it; } @@ -150,7 +150,8 @@ SP CANRManager::dataFor(SP pXwaylandSur return it == m_data.end() ? nullptr : *it; } -CANRManager::SANRData::SANRData(PHLWINDOW pWindow) : xwaylandSurface(pWindow->m_xwaylandSurface), xdgBase(pWindow->m_xdgSurface ? pWindow->m_xdgSurface->owner : WP{}) { +CANRManager::SANRData::SANRData(PHLWINDOW pWindow) : + xwaylandSurface(pWindow->m_xwaylandSurface), xdgBase(pWindow->m_xdgSurface ? pWindow->m_xdgSurface->m_owner : WP{}) { ; } @@ -201,7 +202,7 @@ bool CANRManager::SANRData::fitsWindow(PHLWINDOW pWindow) const { if (pWindow->m_xwaylandSurface) return pWindow->m_xwaylandSurface == xwaylandSurface; else if (pWindow->m_xdgSurface) - return pWindow->m_xdgSurface->owner == xdgBase && xdgBase; + return pWindow->m_xdgSurface->m_owner == xdgBase && xdgBase; return false; } diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 62852c2f..ec9e078c 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -48,8 +48,8 @@ void CHyprXWaylandManager::activateSurface(SP pSurface, bool } PWINDOW->m_xwaylandSurface->activate(activate); } - } else if (PWINDOW->m_xdgSurface && PWINDOW->m_xdgSurface->toplevel) - PWINDOW->m_xdgSurface->toplevel->setActive(activate); + } else if (PWINDOW->m_xdgSurface && PWINDOW->m_xdgSurface->m_toplevel) + PWINDOW->m_xdgSurface->m_toplevel->setActive(activate); } void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) { @@ -65,8 +65,8 @@ void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) { pWindow->m_xwaylandSurface->activate(activate); - } else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) - pWindow->m_xdgSurface->toplevel->setActive(activate); + } else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->m_toplevel) + pWindow->m_xdgSurface->m_toplevel->setActive(activate); if (activate) { g_pCompositor->m_lastFocus = getWindowSurface(pWindow); @@ -86,7 +86,7 @@ CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { if (pWindow->m_isX11) box = pWindow->m_xwaylandSurface->geometry; else if (pWindow->m_xdgSurface) - box = pWindow->m_xdgSurface->current.geometry; + box = pWindow->m_xdgSurface->m_current.geometry; return box; } @@ -94,8 +94,8 @@ CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { void CHyprXWaylandManager::sendCloseWindow(PHLWINDOW pWindow) { if (pWindow->m_isX11) pWindow->m_xwaylandSurface->close(); - else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) - pWindow->m_xdgSurface->toplevel->close(); + else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->m_toplevel) + pWindow->m_xdgSurface->m_toplevel->close(); } bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { @@ -124,11 +124,11 @@ bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { (SIZEHINTS && (SIZEHINTS->min_width == SIZEHINTS->max_width) && (SIZEHINTS->min_height == SIZEHINTS->max_height))) return true; } else { - if (!pWindow->m_xdgSurface || !pWindow->m_xdgSurface->toplevel) + if (!pWindow->m_xdgSurface || !pWindow->m_xdgSurface->m_toplevel) return false; - const auto PSTATE = pending ? &pWindow->m_xdgSurface->toplevel->pending : &pWindow->m_xdgSurface->toplevel->current; - if (pWindow->m_xdgSurface->toplevel->parent || + const auto PSTATE = pending ? &pWindow->m_xdgSurface->m_toplevel->m_pending : &pWindow->m_xdgSurface->m_toplevel->m_current; + if (pWindow->m_xdgSurface->m_toplevel->m_parent || (PSTATE->minSize.x != 0 && PSTATE->minSize.y != 0 && (PSTATE->minSize.x == PSTATE->maxSize.x || PSTATE->minSize.y == PSTATE->maxSize.y))) return true; } @@ -160,8 +160,8 @@ void CHyprXWaylandManager::setWindowFullscreen(PHLWINDOW pWindow, bool fullscree if (pWindow->m_isX11) pWindow->m_xwaylandSurface->setFullscreen(fullscreen); - else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->toplevel) - pWindow->m_xdgSurface->toplevel->setFullscreen(fullscreen); + else if (pWindow->m_xdgSurface && pWindow->m_xdgSurface->m_toplevel) + pWindow->m_xdgSurface->m_toplevel->setFullscreen(fullscreen); } Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& coord) { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index b3805ca2..ff2ddaf4 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -66,11 +66,11 @@ CInputManager::CInputManager() { }); m_listeners.newIdleInhibitor = PROTO::idleInhibit->m_events.newIdleInhibitor.registerListener([this](std::any data) { this->newIdleInhibitor(data); }); - m_listeners.newVirtualKeyboard = PROTO::virtualKeyboard->events.newKeyboard.registerListener([this](std::any data) { + m_listeners.newVirtualKeyboard = PROTO::virtualKeyboard->m_events.newKeyboard.registerListener([this](std::any data) { this->newVirtualKeyboard(std::any_cast>(data)); updateCapabilities(); }); - m_listeners.newVirtualMouse = PROTO::virtualPointer->events.newPointer.registerListener([this](std::any data) { + m_listeners.newVirtualMouse = PROTO::virtualPointer->m_events.newPointer.registerListener([this](std::any data) { this->newVirtualMouse(std::any_cast>(data)); updateCapabilities(); }); @@ -491,7 +491,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (pFoundWindow && !pFoundWindow->m_isX11 && surfacePos != Vector2D(-1337, -1337)) { // calc for oversized windows... fucking bullshit. - CBox geom = pFoundWindow->m_xdgSurface->current.geometry; + CBox geom = pFoundWindow->m_xdgSurface->m_current.geometry; surfaceLocal = mouseCoords - surfacePos + geom.pos(); } diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index 1f37f622..4cb37ff4 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -120,12 +120,12 @@ CLayerShellResource::CLayerShellResource(SP resource_, SPsetGetPopup([this](CZwlrLayerSurfaceV1* r, wl_resource* popup_) { auto popup = CXDGPopupResource::fromResource(popup_); - if (popup->taken) { + if (popup->m_taken) { r->error(-1, "Parent already exists!"); return; } - popup->taken = true; + popup->m_taken = true; m_events.newPopup.emit(popup); }); diff --git a/src/protocols/Viewporter.cpp b/src/protocols/Viewporter.cpp index 0b82603f..b7144814 100644 --- a/src/protocols/Viewporter.cpp +++ b/src/protocols/Viewporter.cpp @@ -2,23 +2,23 @@ #include "core/Compositor.hpp" #include -CViewportResource::CViewportResource(SP resource_, SP surface_) : surface(surface_), resource(resource_) { +CViewportResource::CViewportResource(SP resource_, SP surface_) : m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWpViewport* r) { PROTO::viewport->destroyResource(this); }); - resource->setOnDestroy([this](CWpViewport* r) { PROTO::viewport->destroyResource(this); }); + m_resource->setDestroy([this](CWpViewport* r) { PROTO::viewport->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpViewport* r) { PROTO::viewport->destroyResource(this); }); - resource->setSetDestination([this](CWpViewport* r, int32_t x, int32_t y) { - if UNLIKELY (!surface) { + m_resource->setSetDestination([this](CWpViewport* r, int32_t x, int32_t y) { + if UNLIKELY (!m_surface) { r->error(WP_VIEWPORT_ERROR_NO_SURFACE, "Surface is gone"); return; } - surface->m_pending.updated.viewport = true; + m_surface->m_pending.updated.viewport = true; if (x == -1 && y == -1) { - surface->m_pending.viewport.hasDestination = false; + m_surface->m_pending.viewport.hasDestination = false; return; } @@ -27,22 +27,22 @@ CViewportResource::CViewportResource(SP resource_, SPm_pending.viewport.hasDestination = true; - surface->m_pending.viewport.destination = {x, y}; + m_surface->m_pending.viewport.hasDestination = true; + m_surface->m_pending.viewport.destination = {x, y}; }); - resource->setSetSource([this](CWpViewport* r, wl_fixed_t fx, wl_fixed_t fy, wl_fixed_t fw, wl_fixed_t fh) { - if UNLIKELY (!surface) { + m_resource->setSetSource([this](CWpViewport* r, wl_fixed_t fx, wl_fixed_t fy, wl_fixed_t fw, wl_fixed_t fh) { + if UNLIKELY (!m_surface) { r->error(WP_VIEWPORT_ERROR_NO_SURFACE, "Surface is gone"); return; } - surface->m_pending.updated.viewport = true; + m_surface->m_pending.updated.viewport = true; double x = wl_fixed_to_double(fx), y = wl_fixed_to_double(fy), w = wl_fixed_to_double(fw), h = wl_fixed_to_double(fh); if (x == -1 && y == -1 && w == -1 && h == -1) { - surface->m_pending.viewport.hasSource = false; + m_surface->m_pending.viewport.hasSource = false; return; } @@ -51,20 +51,20 @@ CViewportResource::CViewportResource(SP resource_, SPm_pending.viewport.hasSource = true; - surface->m_pending.viewport.source = {x, y, w, h}; + m_surface->m_pending.viewport.hasSource = true; + m_surface->m_pending.viewport.source = {x, y, w, h}; }); - listeners.surfacePrecommit = surface->m_events.precommit.registerListener([this](std::any d) { - if (!surface || !surface->m_pending.buffer) + m_listeners.surfacePrecommit = m_surface->m_events.precommit.registerListener([this](std::any d) { + if (!m_surface || !m_surface->m_pending.buffer) return; - if (surface->m_pending.viewport.hasSource) { - auto& src = surface->m_pending.viewport.source; + if (m_surface->m_pending.viewport.hasSource) { + auto& src = m_surface->m_pending.viewport.source; - if (src.w + src.x > surface->m_pending.bufferSize.x || src.h + src.y > surface->m_pending.bufferSize.y) { - resource->error(WP_VIEWPORT_ERROR_BAD_VALUE, "Box doesn't fit"); - surface->m_pending.rejected = true; + if (src.w + src.x > m_surface->m_pending.bufferSize.x || src.h + src.y > m_surface->m_pending.bufferSize.y) { + m_resource->error(WP_VIEWPORT_ERROR_BAD_VALUE, "Box doesn't fit"); + m_surface->m_pending.rejected = true; return; } } @@ -72,38 +72,38 @@ CViewportResource::CViewportResource(SP resource_, SPm_pending.viewport.hasDestination = false; - surface->m_pending.viewport.hasSource = false; + m_surface->m_pending.viewport.hasDestination = false; + m_surface->m_pending.viewport.hasSource = false; } bool CViewportResource::good() { - return resource->resource(); + return m_resource->resource(); } -CViewporterResource::CViewporterResource(SP resource_) : resource(resource_) { +CViewporterResource::CViewporterResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CWpViewporter* r) { PROTO::viewport->destroyResource(this); }); - resource->setOnDestroy([this](CWpViewporter* r) { PROTO::viewport->destroyResource(this); }); + m_resource->setDestroy([this](CWpViewporter* r) { PROTO::viewport->destroyResource(this); }); + m_resource->setOnDestroy([this](CWpViewporter* r) { PROTO::viewport->destroyResource(this); }); - resource->setGetViewport([](CWpViewporter* r, uint32_t id, wl_resource* surf) { - const auto RESOURCE = PROTO::viewport->m_vViewports.emplace_back( + m_resource->setGetViewport([](CWpViewporter* r, uint32_t id, wl_resource* surf) { + const auto RESOURCE = PROTO::viewport->m_viewports.emplace_back( makeShared(makeShared(r->client(), r->version(), id), CWLSurfaceResource::fromResource(surf))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::viewport->m_vViewports.pop_back(); + PROTO::viewport->m_viewports.pop_back(); return; } }); } bool CViewporterResource::good() { - return resource->resource(); + return m_resource->resource(); } CViewporterProtocol::CViewporterProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -111,19 +111,19 @@ CViewporterProtocol::CViewporterProtocol(const wl_interface* iface, const int& v } void CViewporterProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CViewporterProtocol::destroyResource(CViewporterResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CViewporterProtocol::destroyResource(CViewportResource* resource) { - std::erase_if(m_vViewports, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_viewports, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/Viewporter.hpp b/src/protocols/Viewporter.hpp index 6824f2ae..d967da74 100644 --- a/src/protocols/Viewporter.hpp +++ b/src/protocols/Viewporter.hpp @@ -14,14 +14,14 @@ class CViewportResource { ~CViewportResource(); bool good(); - WP surface; + WP m_surface; private: - SP resource; + SP m_resource; struct { CHyprSignalListener surfacePrecommit; - } listeners; + } m_listeners; }; class CViewporterResource { @@ -31,7 +31,7 @@ class CViewporterResource { bool good(); private: - SP resource; + SP m_resource; }; class CViewporterProtocol : public IWaylandProtocol { @@ -45,8 +45,8 @@ class CViewporterProtocol : public IWaylandProtocol { void destroyResource(CViewportResource* resource); // - std::vector> m_vManagers; - std::vector> m_vViewports; + std::vector> m_managers; + std::vector> m_viewports; friend class CViewporterResource; friend class CViewportResource; diff --git a/src/protocols/VirtualKeyboard.cpp b/src/protocols/VirtualKeyboard.cpp index e57d66c8..48ed7eeb 100644 --- a/src/protocols/VirtualKeyboard.cpp +++ b/src/protocols/VirtualKeyboard.cpp @@ -4,47 +4,47 @@ #include "../helpers/time/Time.hpp" using namespace Hyprutils::OS; -CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP resource_) : resource(resource_) { +CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwpVirtualKeyboardV1* r) { + m_resource->setDestroy([this](CZwpVirtualKeyboardV1* r) { releasePressed(); - events.destroy.emit(); + m_events.destroy.emit(); PROTO::virtualKeyboard->destroyResource(this); }); - resource->setOnDestroy([this](CZwpVirtualKeyboardV1* r) { + m_resource->setOnDestroy([this](CZwpVirtualKeyboardV1* r) { releasePressed(); - events.destroy.emit(); + m_events.destroy.emit(); PROTO::virtualKeyboard->destroyResource(this); }); - resource->setKey([this](CZwpVirtualKeyboardV1* r, uint32_t timeMs, uint32_t key, uint32_t state) { - if UNLIKELY (!hasKeymap) { + m_resource->setKey([this](CZwpVirtualKeyboardV1* r, uint32_t timeMs, uint32_t key, uint32_t state) { + if UNLIKELY (!m_hasKeymap) { r->error(ZWP_VIRTUAL_KEYBOARD_V1_ERROR_NO_KEYMAP, "Key event received before a keymap was set"); return; } - events.key.emit(IKeyboard::SKeyEvent{ + m_events.key.emit(IKeyboard::SKeyEvent{ .timeMs = timeMs, .keycode = key, .state = (wl_keyboard_key_state)state, }); - const bool CONTAINS = std::find(pressed.begin(), pressed.end(), key) != pressed.end(); + const bool CONTAINS = std::find(m_pressed.begin(), m_pressed.end(), key) != m_pressed.end(); if (state && !CONTAINS) - pressed.emplace_back(key); + m_pressed.emplace_back(key); else if (!state && CONTAINS) - std::erase(pressed, key); + std::erase(m_pressed, key); }); - resource->setModifiers([this](CZwpVirtualKeyboardV1* r, uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { - if UNLIKELY (!hasKeymap) { + m_resource->setModifiers([this](CZwpVirtualKeyboardV1* r, uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) { + if UNLIKELY (!m_hasKeymap) { r->error(ZWP_VIRTUAL_KEYBOARD_V1_ERROR_NO_KEYMAP, "Mods event received before a keymap was set"); return; } - events.modifiers.emit(IKeyboard::SModifiersEvent{ + m_events.modifiers.emit(IKeyboard::SModifiersEvent{ .depressed = depressed, .latched = latched, .locked = locked, @@ -52,7 +52,7 @@ CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP }); }); - resource->setKeymap([this](CZwpVirtualKeyboardV1* r, uint32_t fmt, int32_t fd, uint32_t len) { + m_resource->setKeymap([this](CZwpVirtualKeyboardV1* r, uint32_t fmt, int32_t fd, uint32_t len) { auto xkbContext = xkb_context_new(XKB_CONTEXT_NO_FLAGS); CFileDescriptor keymapFd{fd}; if UNLIKELY (!xkbContext) { @@ -79,40 +79,40 @@ CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP return; } - events.keymap.emit(IKeyboard::SKeymapEvent{ + m_events.keymap.emit(IKeyboard::SKeymapEvent{ .keymap = xkbKeymap, }); - hasKeymap = true; + m_hasKeymap = true; xkb_keymap_unref(xkbKeymap); xkb_context_unref(xkbContext); }); - name = "hl-virtual-keyboard"; + m_name = "hl-virtual-keyboard"; } CVirtualKeyboardV1Resource::~CVirtualKeyboardV1Resource() { - events.destroy.emit(); + m_events.destroy.emit(); } bool CVirtualKeyboardV1Resource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CVirtualKeyboardV1Resource::client() { - return resource->resource() ? resource->client() : nullptr; + return m_resource->resource() ? m_resource->client() : nullptr; } void CVirtualKeyboardV1Resource::releasePressed() { - for (auto const& p : pressed) { - events.key.emit(IKeyboard::SKeyEvent{ + for (auto const& p : m_pressed) { + m_events.key.emit(IKeyboard::SKeyEvent{ .timeMs = Time::millis(Time::steadyNow()), .keycode = p, .state = WL_KEYBOARD_KEY_STATE_RELEASED, }); } - pressed.clear(); + m_pressed.clear(); } CVirtualKeyboardProtocol::CVirtualKeyboardProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -120,31 +120,31 @@ CVirtualKeyboardProtocol::CVirtualKeyboardProtocol(const wl_interface* iface, co } void CVirtualKeyboardProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwpVirtualKeyboardManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setCreateVirtualKeyboard([this](CZwpVirtualKeyboardManagerV1* pMgr, wl_resource* seat, uint32_t id) { this->onCreateKeeb(pMgr, seat, id); }); } void CVirtualKeyboardProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CVirtualKeyboardProtocol::destroyResource(CVirtualKeyboardV1Resource* keeb) { - std::erase_if(m_vKeyboards, [&](const auto& other) { return other.get() == keeb; }); + std::erase_if(m_keyboards, [&](const auto& other) { return other.get() == keeb; }); } void CVirtualKeyboardProtocol::onCreateKeeb(CZwpVirtualKeyboardManagerV1* pMgr, wl_resource* seat, uint32_t id) { - const auto RESOURCE = m_vKeyboards.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); + const auto RESOURCE = m_keyboards.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id))); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vKeyboards.pop_back(); + m_keyboards.pop_back(); return; } LOGM(LOG, "New VKeyboard at id {}", id); - events.newKeyboard.emit(RESOURCE); + m_events.newKeyboard.emit(RESOURCE); } diff --git a/src/protocols/VirtualKeyboard.hpp b/src/protocols/VirtualKeyboard.hpp index 0a13003b..ad2eccfa 100644 --- a/src/protocols/VirtualKeyboard.hpp +++ b/src/protocols/VirtualKeyboard.hpp @@ -17,21 +17,21 @@ class CVirtualKeyboardV1Resource { CSignal key; CSignal modifiers; CSignal keymap; - } events; + } m_events; bool good(); wl_client* client(); - std::string name = ""; + std::string m_name = ""; private: - SP resource; + SP m_resource; void releasePressed(); - bool hasKeymap = false; + bool m_hasKeymap = false; - std::vector pressed; + std::vector m_pressed; }; class CVirtualKeyboardProtocol : public IWaylandProtocol { @@ -42,7 +42,7 @@ class CVirtualKeyboardProtocol : public IWaylandProtocol { struct { CSignal newKeyboard; // SP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -50,8 +50,8 @@ class CVirtualKeyboardProtocol : public IWaylandProtocol { void onCreateKeeb(CZwpVirtualKeyboardManagerV1* pMgr, wl_resource* seat, uint32_t id); // - std::vector> m_vManagers; - std::vector> m_vKeyboards; + std::vector> m_managers; + std::vector> m_keyboards; friend class CVirtualKeyboardV1Resource; }; diff --git a/src/protocols/VirtualPointer.cpp b/src/protocols/VirtualPointer.cpp index ce64e1e5..e40d35f2 100644 --- a/src/protocols/VirtualPointer.cpp +++ b/src/protocols/VirtualPointer.cpp @@ -1,21 +1,21 @@ #include "VirtualPointer.hpp" #include "core/Output.hpp" -CVirtualPointerV1Resource::CVirtualPointerV1Resource(SP resource_, PHLMONITORREF boundOutput_) : boundOutput(boundOutput_), resource(resource_) { +CVirtualPointerV1Resource::CVirtualPointerV1Resource(SP resource_, PHLMONITORREF boundOutput_) : m_boundOutput(boundOutput_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CZwlrVirtualPointerV1* r) { - events.destroy.emit(); + m_resource->setDestroy([this](CZwlrVirtualPointerV1* r) { + m_events.destroy.emit(); PROTO::virtualPointer->destroyResource(this); }); - resource->setOnDestroy([this](CZwlrVirtualPointerV1* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CZwlrVirtualPointerV1* r) { + m_events.destroy.emit(); PROTO::virtualPointer->destroyResource(this); }); - resource->setMotion([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, wl_fixed_t dx, wl_fixed_t dy) { - events.move.emit(IPointer::SMotionEvent{ + m_resource->setMotion([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, wl_fixed_t dx, wl_fixed_t dy) { + m_events.move.emit(IPointer::SMotionEvent{ .timeMs = timeMs, .delta = {wl_fixed_to_double(dx), wl_fixed_to_double(dy)}, .unaccel = {wl_fixed_to_double(dx), wl_fixed_to_double(dy)}, @@ -23,84 +23,84 @@ CVirtualPointerV1Resource::CVirtualPointerV1Resource(SP r }); }); - resource->setMotionAbsolute([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t x, uint32_t y, uint32_t xExtent, uint32_t yExtent) { + m_resource->setMotionAbsolute([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t x, uint32_t y, uint32_t xExtent, uint32_t yExtent) { if (!xExtent || !yExtent) return; - events.warp.emit(IPointer::SMotionAbsoluteEvent{ + m_events.warp.emit(IPointer::SMotionAbsoluteEvent{ .timeMs = timeMs, .absolute = {(double)x / xExtent, (double)y / yExtent}, }); }); - resource->setButton([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t button, uint32_t state) { - events.button.emit(IPointer::SButtonEvent{ + m_resource->setButton([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t button, uint32_t state) { + m_events.button.emit(IPointer::SButtonEvent{ .timeMs = timeMs, .button = button, .state = (wl_pointer_button_state)state, }); }); - resource->setAxis([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_, wl_fixed_t value) { - if UNLIKELY (axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { + m_resource->setAxis([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_, wl_fixed_t value) { + if UNLIKELY (m_axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { r->error(ZWLR_VIRTUAL_POINTER_V1_ERROR_INVALID_AXIS, "Invalid axis"); return; } - axis = axis_; - axisEvents[axis] = IPointer::SAxisEvent{.timeMs = timeMs, .axis = (wl_pointer_axis)axis, .delta = wl_fixed_to_double(value)}; + m_axis = axis_; + m_axisEvents[m_axis] = IPointer::SAxisEvent{.timeMs = timeMs, .axis = (wl_pointer_axis)m_axis, .delta = wl_fixed_to_double(value)}; }); - resource->setFrame([this](CZwlrVirtualPointerV1* r) { - for (auto& e : axisEvents) { + m_resource->setFrame([this](CZwlrVirtualPointerV1* r) { + for (auto& e : m_axisEvents) { if (!e.timeMs) continue; - events.axis.emit(e); + m_events.axis.emit(e); e.timeMs = 0; } - events.frame.emit(); + m_events.frame.emit(); }); - resource->setAxisSource([this](CZwlrVirtualPointerV1* r, uint32_t source) { axisEvents[axis].source = (wl_pointer_axis_source)source; }); + m_resource->setAxisSource([this](CZwlrVirtualPointerV1* r, uint32_t source) { m_axisEvents[m_axis].source = (wl_pointer_axis_source)source; }); - resource->setAxisStop([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_) { - if UNLIKELY (axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { + m_resource->setAxisStop([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_) { + if UNLIKELY (m_axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { r->error(ZWLR_VIRTUAL_POINTER_V1_ERROR_INVALID_AXIS, "Invalid axis"); return; } - axis = axis_; - axisEvents[axis].timeMs = timeMs; - axisEvents[axis].axis = (wl_pointer_axis)axis; - axisEvents[axis].delta = 0; - axisEvents[axis].deltaDiscrete = 0; + m_axis = axis_; + m_axisEvents[m_axis].timeMs = timeMs; + m_axisEvents[m_axis].axis = (wl_pointer_axis)m_axis; + m_axisEvents[m_axis].delta = 0; + m_axisEvents[m_axis].deltaDiscrete = 0; }); - resource->setAxisDiscrete([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_, wl_fixed_t value, int32_t discrete) { - if UNLIKELY (axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { + m_resource->setAxisDiscrete([this](CZwlrVirtualPointerV1* r, uint32_t timeMs, uint32_t axis_, wl_fixed_t value, int32_t discrete) { + if UNLIKELY (m_axis > WL_POINTER_AXIS_HORIZONTAL_SCROLL) { r->error(ZWLR_VIRTUAL_POINTER_V1_ERROR_INVALID_AXIS, "Invalid axis"); return; } - axis = axis_; - axisEvents[axis].timeMs = timeMs; - axisEvents[axis].axis = (wl_pointer_axis)axis; - axisEvents[axis].delta = wl_fixed_to_double(value); - axisEvents[axis].deltaDiscrete = discrete * 120; + m_axis = axis_; + m_axisEvents[m_axis].timeMs = timeMs; + m_axisEvents[m_axis].axis = (wl_pointer_axis)m_axis; + m_axisEvents[m_axis].delta = wl_fixed_to_double(value); + m_axisEvents[m_axis].deltaDiscrete = discrete * 120; }); } CVirtualPointerV1Resource::~CVirtualPointerV1Resource() { - events.destroy.emit(); + m_events.destroy.emit(); } bool CVirtualPointerV1Resource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CVirtualPointerV1Resource::client() { - return resource->client(); + return m_resource->client(); } CVirtualPointerProtocol::CVirtualPointerProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -108,7 +108,7 @@ CVirtualPointerProtocol::CVirtualPointerProtocol(const wl_interface* iface, cons } void CVirtualPointerProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZwlrVirtualPointerManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZwlrVirtualPointerManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); @@ -128,24 +128,24 @@ void CVirtualPointerProtocol::bindManager(wl_client* client, void* data, uint32_ } void CVirtualPointerProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CVirtualPointerProtocol::destroyResource(CVirtualPointerV1Resource* pointer) { - std::erase_if(m_vPointers, [&](const auto& other) { return other.get() == pointer; }); + std::erase_if(m_pointers, [&](const auto& other) { return other.get() == pointer; }); } void CVirtualPointerProtocol::onCreatePointer(CZwlrVirtualPointerManagerV1* pMgr, wl_resource* seat, uint32_t id, PHLMONITORREF output) { - const auto RESOURCE = m_vPointers.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id), output)); + const auto RESOURCE = m_pointers.emplace_back(makeShared(makeShared(pMgr->client(), pMgr->version(), id), output)); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vPointers.pop_back(); + m_pointers.pop_back(); return; } LOGM(LOG, "New VPointer at id {}", id); - events.newPointer.emit(RESOURCE); + m_events.newPointer.emit(RESOURCE); } \ No newline at end of file diff --git a/src/protocols/VirtualPointer.hpp b/src/protocols/VirtualPointer.hpp index ac8bcae2..a608086a 100644 --- a/src/protocols/VirtualPointer.hpp +++ b/src/protocols/VirtualPointer.hpp @@ -32,21 +32,21 @@ class CVirtualPointerV1Resource { CSignal holdBegin; CSignal holdEnd; - } events; + } m_events; bool good(); wl_client* client(); - std::string name; + std::string m_name; - PHLMONITORREF boundOutput; + PHLMONITORREF m_boundOutput; private: - SP resource; + SP m_resource; - uint32_t axis = 0; + uint32_t m_axis = 0; - std::array axisEvents; + std::array m_axisEvents; }; class CVirtualPointerProtocol : public IWaylandProtocol { @@ -57,7 +57,7 @@ class CVirtualPointerProtocol : public IWaylandProtocol { struct { CSignal newPointer; // SP - } events; + } m_events; private: void onManagerResourceDestroy(wl_resource* res); @@ -65,8 +65,8 @@ class CVirtualPointerProtocol : public IWaylandProtocol { void onCreatePointer(CZwlrVirtualPointerManagerV1* pMgr, wl_resource* seat, uint32_t id, PHLMONITORREF output); // - std::vector> m_vManagers; - std::vector> m_vPointers; + std::vector> m_managers; + std::vector> m_pointers; friend class CVirtualPointerV1Resource; }; diff --git a/src/protocols/WaylandProtocol.cpp b/src/protocols/WaylandProtocol.cpp index 8eff80b0..8aa2c896 100644 --- a/src/protocols/WaylandProtocol.cpp +++ b/src/protocols/WaylandProtocol.cpp @@ -14,17 +14,17 @@ static void displayDestroyInternal(struct wl_listener* listener, void* data) { void IWaylandProtocol::onDisplayDestroy() { wl_list_remove(&m_liDisplayDestroy.listener.link); wl_list_init(&m_liDisplayDestroy.listener.link); - if (m_pGlobal) { - wl_global_destroy(m_pGlobal); - m_pGlobal = nullptr; + if (m_global) { + wl_global_destroy(m_global); + m_global = nullptr; } } IWaylandProtocol::IWaylandProtocol(const wl_interface* iface, const int& ver, const std::string& name) : - m_szName(name), m_pGlobal(wl_global_create(g_pCompositor->m_wlDisplay, iface, ver, this, &bindManagerInternal)) { + m_name(name), m_global(wl_global_create(g_pCompositor->m_wlDisplay, iface, ver, this, &bindManagerInternal)) { - if UNLIKELY (!m_pGlobal) { - LOGM(ERR, "could not create a global [{}]", m_szName); + if UNLIKELY (!m_global) { + LOGM(ERR, "could not create a global [{}]", m_name); return; } @@ -33,7 +33,7 @@ IWaylandProtocol::IWaylandProtocol(const wl_interface* iface, const int& ver, co m_liDisplayDestroy.parent = this; wl_display_add_destroy_listener(g_pCompositor->m_wlDisplay, &m_liDisplayDestroy.listener); - LOGM(LOG, "Registered global [{}]", m_szName); + LOGM(LOG, "Registered global [{}]", m_name); } IWaylandProtocol::~IWaylandProtocol() { @@ -41,10 +41,10 @@ IWaylandProtocol::~IWaylandProtocol() { } void IWaylandProtocol::removeGlobal() { - if (m_pGlobal) - wl_global_remove(m_pGlobal); + if (m_global) + wl_global_remove(m_global); } wl_global* IWaylandProtocol::getGlobal() { - return m_pGlobal; + return m_global; } diff --git a/src/protocols/WaylandProtocol.hpp b/src/protocols/WaylandProtocol.hpp index 918ac70f..d46d6aaf 100644 --- a/src/protocols/WaylandProtocol.hpp +++ b/src/protocols/WaylandProtocol.hpp @@ -61,6 +61,6 @@ class IWaylandProtocol { SIWaylandProtocolDestroyWrapper m_liDisplayDestroy; private: - std::string m_szName; - wl_global* m_pGlobal = nullptr; + std::string m_name; + wl_global* m_global = nullptr; }; diff --git a/src/protocols/XDGActivation.cpp b/src/protocols/XDGActivation.cpp index 4062847b..bae3acc3 100644 --- a/src/protocols/XDGActivation.cpp +++ b/src/protocols/XDGActivation.cpp @@ -4,43 +4,43 @@ #include "core/Compositor.hpp" #include -CXDGActivationToken::CXDGActivationToken(SP resource_) : resource(resource_) { +CXDGActivationToken::CXDGActivationToken(SP resource_) : m_resource(resource_) { if UNLIKELY (!resource_->resource()) return; - resource->setDestroy([this](CXdgActivationTokenV1* r) { PROTO::activation->destroyToken(this); }); - resource->setOnDestroy([this](CXdgActivationTokenV1* r) { PROTO::activation->destroyToken(this); }); + m_resource->setDestroy([this](CXdgActivationTokenV1* r) { PROTO::activation->destroyToken(this); }); + m_resource->setOnDestroy([this](CXdgActivationTokenV1* r) { PROTO::activation->destroyToken(this); }); - resource->setSetSerial([this](CXdgActivationTokenV1* r, uint32_t serial_, wl_resource* seat) { serial = serial_; }); + m_resource->setSetSerial([this](CXdgActivationTokenV1* r, uint32_t serial_, wl_resource* seat) { m_serial = serial_; }); - resource->setSetAppId([this](CXdgActivationTokenV1* r, const char* appid) { appID = appid; }); + m_resource->setSetAppId([this](CXdgActivationTokenV1* r, const char* appid) { m_appID = appid; }); - resource->setCommit([this](CXdgActivationTokenV1* r) { + m_resource->setCommit([this](CXdgActivationTokenV1* r) { // TODO: should we send a protocol error of already_used here // if it was used? the protocol spec doesn't say _when_ it should be sent... - if UNLIKELY (committed) { + if UNLIKELY (m_committed) { LOGM(WARN, "possible protocol error, two commits from one token. Ignoring."); return; } - committed = true; + m_committed = true; // send done with a new token - token = g_pTokenManager->registerNewToken({}, std::chrono::months{12}); + m_token = g_pTokenManager->registerNewToken({}, std::chrono::months{12}); - LOGM(LOG, "assigned new xdg-activation token {}", token); + LOGM(LOG, "assigned new xdg-activation token {}", m_token); - resource->sendDone(token.c_str()); + m_resource->sendDone(m_token.c_str()); - PROTO::activation->m_vSentTokens.push_back({token, resource->client()}); + PROTO::activation->m_sentTokens.push_back({m_token, m_resource->client()}); - auto count = std::count_if(PROTO::activation->m_vSentTokens.begin(), PROTO::activation->m_vSentTokens.end(), - [this](const auto& other) { return other.client == resource->client(); }); + auto count = std::count_if(PROTO::activation->m_sentTokens.begin(), PROTO::activation->m_sentTokens.end(), + [this](const auto& other) { return other.client == m_resource->client(); }); if UNLIKELY (count > 10) { // remove first token. Too many, dear app. - for (auto i = PROTO::activation->m_vSentTokens.begin(); i != PROTO::activation->m_vSentTokens.end(); ++i) { - if (i->client == resource->client()) { - PROTO::activation->m_vSentTokens.erase(i); + for (auto i = PROTO::activation->m_sentTokens.begin(); i != PROTO::activation->m_sentTokens.end(); ++i) { + if (i->client == m_resource->client()) { + PROTO::activation->m_sentTokens.erase(i); break; } } @@ -49,12 +49,12 @@ CXDGActivationToken::CXDGActivationToken(SP resource_) : } CXDGActivationToken::~CXDGActivationToken() { - if (committed) - g_pTokenManager->removeToken(g_pTokenManager->getToken(token)); + if (m_committed) + g_pTokenManager->removeToken(g_pTokenManager->getToken(m_token)); } bool CXDGActivationToken::good() { - return resource->resource(); + return m_resource->resource(); } CXDGActivationProtocol::CXDGActivationProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -62,21 +62,21 @@ CXDGActivationProtocol::CXDGActivationProtocol(const wl_interface* iface, const } void CXDGActivationProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CXdgActivationV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CXdgActivationV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); RESOURCE->setGetActivationToken([this](CXdgActivationV1* pMgr, uint32_t id) { this->onGetToken(pMgr, id); }); RESOURCE->setActivate([this](CXdgActivationV1* pMgr, const char* token, wl_resource* surface) { - auto TOKEN = std::find_if(m_vSentTokens.begin(), m_vSentTokens.end(), [token](const auto& t) { return t.token == token; }); + auto TOKEN = std::find_if(m_sentTokens.begin(), m_sentTokens.end(), [token](const auto& t) { return t.token == token; }); - if UNLIKELY (TOKEN == m_vSentTokens.end()) { + if UNLIKELY (TOKEN == m_sentTokens.end()) { LOGM(WARN, "activate event for non-existent token {}??", token); return; } // remove token. It's been now spent. - m_vSentTokens.erase(TOKEN); + m_sentTokens.erase(TOKEN); SP surf = CWLSurfaceResource::fromResource(surface); const auto PWINDOW = g_pCompositor->getWindowFromSurface(surf); @@ -91,20 +91,20 @@ void CXDGActivationProtocol::bindManager(wl_client* client, void* data, uint32_t } void CXDGActivationProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CXDGActivationProtocol::destroyToken(CXDGActivationToken* token) { - std::erase_if(m_vTokens, [&](const auto& other) { return other.get() == token; }); + std::erase_if(m_tokens, [&](const auto& other) { return other.get() == token; }); } void CXDGActivationProtocol::onGetToken(CXdgActivationV1* pMgr, uint32_t id) { const auto CLIENT = pMgr->client(); - const auto RESOURCE = m_vTokens.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); + const auto RESOURCE = m_tokens.emplace_back(makeUnique(makeShared(CLIENT, pMgr->version(), id))).get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_vTokens.pop_back(); + m_tokens.pop_back(); return; } } \ No newline at end of file diff --git a/src/protocols/XDGActivation.hpp b/src/protocols/XDGActivation.hpp index acc6fdb3..ae1bc07a 100644 --- a/src/protocols/XDGActivation.hpp +++ b/src/protocols/XDGActivation.hpp @@ -13,13 +13,13 @@ class CXDGActivationToken { bool good(); private: - SP resource; + SP m_resource; - uint32_t serial = 0; - std::string appID = ""; - bool committed = false; + uint32_t m_serial = 0; + std::string m_appID = ""; + bool m_committed = false; - std::string token = ""; + std::string m_token = ""; friend class CXDGActivationProtocol; }; @@ -39,11 +39,11 @@ class CXDGActivationProtocol : public IWaylandProtocol { std::string token; wl_client* client = nullptr; // READ-ONLY: can be dead }; - std::vector m_vSentTokens; + std::vector m_sentTokens; // - std::vector> m_vManagers; - std::vector> m_vTokens; + std::vector> m_managers; + std::vector> m_tokens; friend class CXDGActivationToken; }; diff --git a/src/protocols/XDGBell.cpp b/src/protocols/XDGBell.cpp index f2cedf66..bf46d3eb 100644 --- a/src/protocols/XDGBell.cpp +++ b/src/protocols/XDGBell.cpp @@ -59,7 +59,7 @@ CXDGSystemBellProtocol::CXDGSystemBellProtocol(const wl_interface* iface, const } void CXDGSystemBellProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = WP{m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; + const auto RESOURCE = WP{m_managers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); @@ -68,5 +68,5 @@ void CXDGSystemBellProtocol::bindManager(wl_client* client, void* data, uint32_t } void CXDGSystemBellProtocol::destroyResource(CXDGSystemBellManagerResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } diff --git a/src/protocols/XDGBell.hpp b/src/protocols/XDGBell.hpp index ff385059..f36315bd 100644 --- a/src/protocols/XDGBell.hpp +++ b/src/protocols/XDGBell.hpp @@ -24,7 +24,7 @@ class CXDGSystemBellProtocol : public IWaylandProtocol { void destroyResource(CXDGSystemBellManagerResource* res); // - std::vector> m_vManagers; + std::vector> m_managers; friend class CXDGSystemBellManagerResource; }; diff --git a/src/protocols/XDGDecoration.cpp b/src/protocols/XDGDecoration.cpp index f9dbf411..b093fbb8 100644 --- a/src/protocols/XDGDecoration.cpp +++ b/src/protocols/XDGDecoration.cpp @@ -1,14 +1,14 @@ #include "XDGDecoration.hpp" #include -CXDGDecoration::CXDGDecoration(SP resource_, wl_resource* toplevel) : resource(resource_), pToplevelResource(toplevel) { - if UNLIKELY (!resource->resource()) +CXDGDecoration::CXDGDecoration(SP resource_, wl_resource* toplevel) : m_resource(resource_), m_toplevelResource(toplevel) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([this](CZxdgToplevelDecorationV1* pMgr) { PROTO::xdgDecoration->destroyDecoration(this); }); - resource->setOnDestroy([this](CZxdgToplevelDecorationV1* pMgr) { PROTO::xdgDecoration->destroyDecoration(this); }); + m_resource->setDestroy([this](CZxdgToplevelDecorationV1* pMgr) { PROTO::xdgDecoration->destroyDecoration(this); }); + m_resource->setOnDestroy([this](CZxdgToplevelDecorationV1* pMgr) { PROTO::xdgDecoration->destroyDecoration(this); }); - resource->setSetMode([this](CZxdgToplevelDecorationV1*, zxdgToplevelDecorationV1Mode mode) { + m_resource->setSetMode([this](CZxdgToplevelDecorationV1*, zxdgToplevelDecorationV1Mode mode) { std::string modeString; switch (mode) { case ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE: modeString = "MODE_CLIENT_SIDE"; break; @@ -17,23 +17,23 @@ CXDGDecoration::CXDGDecoration(SP resource_, wl_resou } LOGM(LOG, "setMode: {}. {} MODE_SERVER_SIDE as reply.", modeString, (mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE ? "Sending" : "Ignoring and sending")); - resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + m_resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); }); - resource->setUnsetMode([this](CZxdgToplevelDecorationV1*) { + m_resource->setUnsetMode([this](CZxdgToplevelDecorationV1*) { LOGM(LOG, "unsetMode. Sending MODE_SERVER_SIDE."); - resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + m_resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); }); - resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + m_resource->sendConfigure(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); } bool CXDGDecoration::good() { - return resource->resource(); + return m_resource->resource(); } wl_resource* CXDGDecoration::toplevelResource() { - return pToplevelResource; + return m_toplevelResource; } CXDGDecorationProtocol::CXDGDecorationProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -41,7 +41,7 @@ CXDGDecorationProtocol::CXDGDecorationProtocol(const wl_interface* iface, const } void CXDGDecorationProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managers.emplace_back(makeUnique(client, ver, id)).get(); RESOURCE->setOnDestroy([this](CZxdgDecorationManagerV1* p) { this->onManagerResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CZxdgDecorationManagerV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); @@ -49,26 +49,26 @@ void CXDGDecorationProtocol::bindManager(wl_client* client, void* data, uint32_t } void CXDGDecorationProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other->resource() == res; }); } void CXDGDecorationProtocol::destroyDecoration(CXDGDecoration* decoration) { - m_mDecorations.erase(decoration->toplevelResource()); + m_decorations.erase(decoration->toplevelResource()); } void CXDGDecorationProtocol::onGetDecoration(CZxdgDecorationManagerV1* pMgr, uint32_t id, wl_resource* xdgToplevel) { - if UNLIKELY (m_mDecorations.contains(xdgToplevel)) { + if UNLIKELY (m_decorations.contains(xdgToplevel)) { pMgr->error(ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ALREADY_CONSTRUCTED, "Decoration object already exists"); return; } const auto CLIENT = pMgr->client(); const auto RESOURCE = - m_mDecorations.emplace(xdgToplevel, makeUnique(makeShared(CLIENT, pMgr->version(), id), xdgToplevel)).first->second.get(); + m_decorations.emplace(xdgToplevel, makeUnique(makeShared(CLIENT, pMgr->version(), id), xdgToplevel)).first->second.get(); if UNLIKELY (!RESOURCE->good()) { pMgr->noMemory(); - m_mDecorations.erase(xdgToplevel); + m_decorations.erase(xdgToplevel); return; } } \ No newline at end of file diff --git a/src/protocols/XDGDecoration.hpp b/src/protocols/XDGDecoration.hpp index 33a9b663..2bbf4bfb 100644 --- a/src/protocols/XDGDecoration.hpp +++ b/src/protocols/XDGDecoration.hpp @@ -13,8 +13,8 @@ class CXDGDecoration { wl_resource* toplevelResource(); private: - SP resource; - wl_resource* pToplevelResource = nullptr; // READ-ONLY. + SP m_resource; + wl_resource* m_toplevelResource = nullptr; // READ-ONLY. }; class CXDGDecorationProtocol : public IWaylandProtocol { @@ -29,8 +29,8 @@ class CXDGDecorationProtocol : public IWaylandProtocol { void onGetDecoration(CZxdgDecorationManagerV1* pMgr, uint32_t id, wl_resource* xdgToplevel); // - std::vector> m_vManagers; - std::unordered_map> m_mDecorations; // xdg_toplevel -> deco + std::vector> m_managers; + std::unordered_map> m_decorations; // xdg_toplevel -> deco friend class CXDGDecoration; }; diff --git a/src/protocols/XDGDialog.cpp b/src/protocols/XDGDialog.cpp index 675d4e78..c38a1077 100644 --- a/src/protocols/XDGDialog.cpp +++ b/src/protocols/XDGDialog.cpp @@ -4,29 +4,29 @@ #include "../Compositor.hpp" #include -CXDGDialogV1Resource::CXDGDialogV1Resource(SP resource_, SP toplevel_) : resource(resource_), toplevel(toplevel_) { +CXDGDialogV1Resource::CXDGDialogV1Resource(SP resource_, SP toplevel_) : m_resource(resource_), m_toplevel(toplevel_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CXdgDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); - resource->setOnDestroy([this](CXdgDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); + m_resource->setDestroy([this](CXdgDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); - resource->setSetModal([this](CXdgDialogV1* r) { + m_resource->setSetModal([this](CXdgDialogV1* r) { modal = true; updateWindow(); }); - resource->setUnsetModal([this](CXdgDialogV1* r) { + m_resource->setUnsetModal([this](CXdgDialogV1* r) { modal = false; updateWindow(); }); } void CXDGDialogV1Resource::updateWindow() { - if UNLIKELY (!toplevel || !toplevel->parent || !toplevel->parent->owner) + if UNLIKELY (!m_toplevel || !m_toplevel->m_parent || !m_toplevel->m_parent->m_owner) return; - auto HLSurface = CWLSurface::fromResource(toplevel->parent->owner->surface.lock()); + auto HLSurface = CWLSurface::fromResource(m_toplevel->m_parent->m_owner->m_surface.lock()); if UNLIKELY (!HLSurface || !HLSurface->getWindow()) return; @@ -34,36 +34,36 @@ void CXDGDialogV1Resource::updateWindow() { } bool CXDGDialogV1Resource::good() { - return resource->resource(); + return m_resource->resource(); } -CXDGWmDialogManagerResource::CXDGWmDialogManagerResource(SP resource_) : resource(resource_) { +CXDGWmDialogManagerResource::CXDGWmDialogManagerResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CXdgWmDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); - resource->setOnDestroy([this](CXdgWmDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); + m_resource->setDestroy([this](CXdgWmDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgWmDialogV1* r) { PROTO::xdgDialog->destroyResource(this); }); - resource->setGetXdgDialog([](CXdgWmDialogV1* r, uint32_t id, wl_resource* toplevel) { + m_resource->setGetXdgDialog([](CXdgWmDialogV1* r, uint32_t id, wl_resource* toplevel) { auto tl = CXDGToplevelResource::fromResource(toplevel); if UNLIKELY (!tl) { r->error(-1, "Toplevel inert"); return; } - const auto RESOURCE = PROTO::xdgDialog->m_vDialogs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), tl)); + const auto RESOURCE = PROTO::xdgDialog->m_dialogs.emplace_back(makeShared(makeShared(r->client(), r->version(), id), tl)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); return; } - tl->dialog = RESOURCE; + tl->m_dialog = RESOURCE; }); } bool CXDGWmDialogManagerResource::good() { - return resource->resource(); + return m_resource->resource(); } CXDGDialogProtocol::CXDGDialogProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -71,7 +71,7 @@ CXDGDialogProtocol::CXDGDialogProtocol(const wl_interface* iface, const int& ver } void CXDGDialogProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); @@ -80,9 +80,9 @@ void CXDGDialogProtocol::bindManager(wl_client* client, void* data, uint32_t ver } void CXDGDialogProtocol::destroyResource(CXDGWmDialogManagerResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } void CXDGDialogProtocol::destroyResource(CXDGDialogV1Resource* res) { - std::erase_if(m_vDialogs, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_dialogs, [&](const auto& other) { return other.get() == res; }); } diff --git a/src/protocols/XDGDialog.hpp b/src/protocols/XDGDialog.hpp index 1b29e692..316f1687 100644 --- a/src/protocols/XDGDialog.hpp +++ b/src/protocols/XDGDialog.hpp @@ -16,8 +16,8 @@ class CXDGDialogV1Resource { bool modal = false; private: - SP resource; - WP toplevel; + SP m_resource; + WP m_toplevel; void updateWindow(); }; @@ -29,7 +29,7 @@ class CXDGWmDialogManagerResource { bool good(); private: - SP resource; + SP m_resource; }; class CXDGDialogProtocol : public IWaylandProtocol { @@ -44,8 +44,8 @@ class CXDGDialogProtocol : public IWaylandProtocol { void destroyResource(CXDGDialogV1Resource* res); // - std::vector> m_vManagers; - std::vector> m_vDialogs; + std::vector> m_managers; + std::vector> m_dialogs; friend class CXDGWmDialogManagerResource; friend class CXDGDialogV1Resource; diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index 92aaefc9..93ac1c37 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -14,15 +14,15 @@ // void CXDGOutputProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagerResources, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_managerResources, [&](const auto& other) { return other->resource() == res; }); } void CXDGOutputProtocol::onOutputResourceDestroy(wl_resource* res) { - std::erase_if(m_vXDGOutputs, [&](const auto& other) { return other->resource->resource() == res; }); + std::erase_if(m_xdgOutputs, [&](const auto& other) { return other->m_resource->resource() == res; }); } void CXDGOutputProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagerResources.emplace_back(makeUnique(client, ver, id)).get(); + const auto RESOURCE = m_managerResources.emplace_back(makeUnique(client, ver, id)).get(); if UNLIKELY (!RESOURCE->resource()) { LOGM(LOG, "Couldn't bind XDGOutputMgr"); @@ -45,34 +45,34 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32 const auto PMONITOR = OUTPUT->m_monitor.lock(); const auto CLIENT = mgr->client(); - CXDGOutput* pXDGOutput = m_vXDGOutputs.emplace_back(makeUnique(makeShared(CLIENT, mgr->version(), id), PMONITOR)).get(); + CXDGOutput* pXDGOutput = m_xdgOutputs.emplace_back(makeUnique(makeShared(CLIENT, mgr->version(), id), PMONITOR)).get(); #ifndef NO_XWAYLAND if (g_pXWayland && g_pXWayland->pServer && g_pXWayland->pServer->xwaylandClient == CLIENT) - pXDGOutput->isXWayland = true; + pXDGOutput->m_isXWayland = true; #endif - pXDGOutput->client = CLIENT; + pXDGOutput->m_client = CLIENT; - pXDGOutput->outputProto = OUTPUT->m_owner; + pXDGOutput->m_outputProto = OUTPUT->m_owner; - if UNLIKELY (!pXDGOutput->resource->resource()) { - m_vXDGOutputs.pop_back(); + if UNLIKELY (!pXDGOutput->m_resource->resource()) { + m_xdgOutputs.pop_back(); mgr->noMemory(); return; } if UNLIKELY (!PMONITOR) { - LOGM(ERR, "New xdg_output from client {:x} ({}) has no CMonitor?!", (uintptr_t)CLIENT, pXDGOutput->isXWayland ? "xwayland" : "not xwayland"); + LOGM(ERR, "New xdg_output from client {:x} ({}) has no CMonitor?!", (uintptr_t)CLIENT, pXDGOutput->m_isXWayland ? "xwayland" : "not xwayland"); return; } - LOGM(LOG, "New xdg_output for {}: client {:x} ({})", PMONITOR->m_name, (uintptr_t)CLIENT, pXDGOutput->isXWayland ? "xwayland" : "not xwayland"); + LOGM(LOG, "New xdg_output for {}: client {:x} ({})", PMONITOR->m_name, (uintptr_t)CLIENT, pXDGOutput->m_isXWayland ? "xwayland" : "not xwayland"); - const auto XDGVER = pXDGOutput->resource->version(); + const auto XDGVER = pXDGOutput->m_resource->version(); if (XDGVER >= OUTPUT_NAME_SINCE_VERSION) - pXDGOutput->resource->sendName(PMONITOR->m_name.c_str()); + pXDGOutput->m_resource->sendName(PMONITOR->m_name.c_str()); if (XDGVER >= OUTPUT_DESCRIPTION_SINCE_VERSION && !PMONITOR->m_output->description.empty()) - pXDGOutput->resource->sendDescription(PMONITOR->m_output->description.c_str()); + pXDGOutput->m_resource->sendDescription(PMONITOR->m_output->description.c_str()); pXDGOutput->sendDetails(); @@ -84,40 +84,40 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32 void CXDGOutputProtocol::updateAllOutputs() { LOGM(LOG, "updating all xdg_output heads"); - for (auto const& o : m_vXDGOutputs) { - if (!o->monitor) + for (auto const& o : m_xdgOutputs) { + if (!o->m_monitor) continue; o->sendDetails(); - o->monitor->scheduleDone(); + o->m_monitor->scheduleDone(); } } // -CXDGOutput::CXDGOutput(SP resource_, PHLMONITOR monitor_) : monitor(monitor_), resource(resource_) { - if UNLIKELY (!resource->resource()) +CXDGOutput::CXDGOutput(SP resource_, PHLMONITOR monitor_) : m_monitor(monitor_), m_resource(resource_) { + if UNLIKELY (!m_resource->resource()) return; - resource->setDestroy([](CZxdgOutputV1* pMgr) { PROTO::xdgOutput->onOutputResourceDestroy(pMgr->resource()); }); - resource->setOnDestroy([](CZxdgOutputV1* pMgr) { PROTO::xdgOutput->onOutputResourceDestroy(pMgr->resource()); }); + m_resource->setDestroy([](CZxdgOutputV1* pMgr) { PROTO::xdgOutput->onOutputResourceDestroy(pMgr->resource()); }); + m_resource->setOnDestroy([](CZxdgOutputV1* pMgr) { PROTO::xdgOutput->onOutputResourceDestroy(pMgr->resource()); }); } void CXDGOutput::sendDetails() { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - if UNLIKELY (!monitor || !outputProto || outputProto->isDefunct()) + if UNLIKELY (!m_monitor || !m_outputProto || m_outputProto->isDefunct()) return; - const auto POS = isXWayland ? monitor->m_xwaylandPosition : monitor->m_position; - resource->sendLogicalPosition(POS.x, POS.y); + const auto POS = m_isXWayland ? m_monitor->m_xwaylandPosition : m_monitor->m_position; + m_resource->sendLogicalPosition(POS.x, POS.y); - if (*PXWLFORCESCALEZERO && isXWayland) - resource->sendLogicalSize(monitor->m_transformedSize.x, monitor->m_transformedSize.y); + if (*PXWLFORCESCALEZERO && m_isXWayland) + m_resource->sendLogicalSize(m_monitor->m_transformedSize.x, m_monitor->m_transformedSize.y); else - resource->sendLogicalSize(monitor->m_size.x, monitor->m_size.y); + m_resource->sendLogicalSize(m_monitor->m_size.x, m_monitor->m_size.y); - if (resource->version() < OUTPUT_DONE_DEPRECATED_SINCE_VERSION) - resource->sendDone(); + if (m_resource->version() < OUTPUT_DONE_DEPRECATED_SINCE_VERSION) + m_resource->sendDone(); } diff --git a/src/protocols/XDGOutput.hpp b/src/protocols/XDGOutput.hpp index 6a5be284..eccce837 100644 --- a/src/protocols/XDGOutput.hpp +++ b/src/protocols/XDGOutput.hpp @@ -15,14 +15,12 @@ class CXDGOutput { void sendDetails(); private: - PHLMONITORREF monitor; - SP resource; - WP outputProto; + PHLMONITORREF m_monitor; + SP m_resource; + WP m_outputProto; - std::optional overridePosition; - - wl_client* client = nullptr; - bool isXWayland = false; + wl_client* m_client = nullptr; + bool m_isXWayland = false; friend class CXDGOutputProtocol; }; @@ -40,8 +38,8 @@ class CXDGOutputProtocol : public IWaylandProtocol { void onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32_t id, wl_resource* outputResource); // - std::vector> m_vManagerResources; - std::vector> m_vXDGOutputs; + std::vector> m_managerResources; + std::vector> m_xdgOutputs; friend class CXDGOutput; }; diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index 6f58ef64..d3d5c18e 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -26,72 +26,72 @@ void SXDGPositionerState::setGravity(xdgPositionerGravity edges) { } CXDGPopupResource::CXDGPopupResource(SP resource_, SP owner_, SP surface_, SP positioner) : - surface(surface_), parent(owner_), resource(resource_), positionerRules(positioner) { + m_surface(surface_), m_parent(owner_), m_resource(resource_), m_positionerRules(positioner) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CXdgPopup* r) { - if (surface && surface->mapped) - surface->events.unmap.emit(); - PROTO::xdgShell->onPopupDestroy(self); - events.destroy.emit(); + m_resource->setDestroy([this](CXdgPopup* r) { + if (m_surface && m_surface->m_mapped) + m_surface->m_events.unmap.emit(); + PROTO::xdgShell->onPopupDestroy(m_self); + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - resource->setOnDestroy([this](CXdgPopup* r) { - if (surface && surface->mapped) - surface->events.unmap.emit(); - PROTO::xdgShell->onPopupDestroy(self); - events.destroy.emit(); + m_resource->setOnDestroy([this](CXdgPopup* r) { + if (m_surface && m_surface->m_mapped) + m_surface->m_events.unmap.emit(); + PROTO::xdgShell->onPopupDestroy(m_self); + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - resource->setReposition([this](CXdgPopup* r, wl_resource* positionerRes, uint32_t token) { + m_resource->setReposition([this](CXdgPopup* r, wl_resource* positionerRes, uint32_t token) { LOGM(LOG, "Popup {:x} asks for reposition", (uintptr_t)this); - lastRepositionToken = token; - auto pos = CXDGPositionerResource::fromResource(positionerRes); + m_lastRepositionToken = token; + auto pos = CXDGPositionerResource::fromResource(positionerRes); if (!pos) return; - positionerRules = CXDGPositionerRules{pos}; - events.reposition.emit(); + m_positionerRules = CXDGPositionerRules{pos}; + m_events.reposition.emit(); }); - resource->setGrab([this](CXdgPopup* r, wl_resource* seat, uint32_t serial) { + m_resource->setGrab([this](CXdgPopup* r, wl_resource* seat, uint32_t serial) { LOGM(LOG, "xdg_popup {:x} requests grab", (uintptr_t)this); - PROTO::xdgShell->addOrStartGrab(self.lock()); + PROTO::xdgShell->addOrStartGrab(m_self.lock()); }); - if (parent) - taken = true; + if (m_parent) + m_taken = true; } CXDGPopupResource::~CXDGPopupResource() { - PROTO::xdgShell->onPopupDestroy(self); - events.destroy.emit(); + PROTO::xdgShell->onPopupDestroy(m_self); + m_events.destroy.emit(); } void CXDGPopupResource::applyPositioning(const CBox& box, const Vector2D& t1coord) { - CBox constraint = box.copy().translate(surface->pending.geometry.pos()); + CBox constraint = box.copy().translate(m_surface->m_pending.geometry.pos()); - geometry = positionerRules.getPosition(constraint, accumulateParentOffset() + t1coord); + m_geometry = m_positionerRules.getPosition(constraint, accumulateParentOffset() + t1coord); - LOGM(LOG, "Popup {:x} gets unconstrained to {} {}", (uintptr_t)this, geometry.pos(), geometry.size()); + LOGM(LOG, "Popup {:x} gets unconstrained to {} {}", (uintptr_t)this, m_geometry.pos(), m_geometry.size()); - configure(geometry); + configure(m_geometry); - if UNLIKELY (lastRepositionToken) + if UNLIKELY (m_lastRepositionToken) repositioned(); } Vector2D CXDGPopupResource::accumulateParentOffset() { - SP current = parent.lock(); + SP current = m_parent.lock(); Vector2D off; while (current) { - off += current->current.geometry.pos(); - if (current->popup) { - off += current->popup->geometry.pos(); - current = current->popup->parent.lock(); + off += current->m_current.geometry.pos(); + if (current->m_popup) { + off += current->m_popup->m_geometry.pos(); + current = current->m_popup->m_parent.lock(); } else break; } @@ -100,399 +100,399 @@ Vector2D CXDGPopupResource::accumulateParentOffset() { SP CXDGPopupResource::fromResource(wl_resource* res) { auto data = (CXDGPopupResource*)(((CXdgPopup*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CXDGPopupResource::good() { - return resource->resource(); + return m_resource->resource(); } void CXDGPopupResource::configure(const CBox& box) { - resource->sendConfigure(box.x, box.y, box.w, box.h); - if (surface) - surface->scheduleConfigure(); + m_resource->sendConfigure(box.x, box.y, box.w, box.h); + if (m_surface) + m_surface->scheduleConfigure(); } void CXDGPopupResource::done() { - events.dismissed.emit(); - resource->sendPopupDone(); + m_events.dismissed.emit(); + m_resource->sendPopupDone(); } void CXDGPopupResource::repositioned() { - if LIKELY (!lastRepositionToken) + if LIKELY (!m_lastRepositionToken) return; - LOGM(LOG, "repositioned: sending reposition token {}", lastRepositionToken); + LOGM(LOG, "repositioned: sending reposition token {}", m_lastRepositionToken); - resource->sendRepositioned(lastRepositionToken); - lastRepositionToken = 0; + m_resource->sendRepositioned(m_lastRepositionToken); + m_lastRepositionToken = 0; } -CXDGToplevelResource::CXDGToplevelResource(SP resource_, SP owner_) : owner(owner_), resource(resource_) { +CXDGToplevelResource::CXDGToplevelResource(SP resource_, SP owner_) : m_owner(owner_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CXdgToplevel* r) { - events.destroy.emit(); + m_resource->setDestroy([this](CXdgToplevel* r) { + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - resource->setOnDestroy([this](CXdgToplevel* r) { - events.destroy.emit(); + m_resource->setOnDestroy([this](CXdgToplevel* r) { + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - if (resource->version() >= 5) { + if (m_resource->version() >= 5) { wl_array arr; wl_array_init(&arr); auto p = (uint32_t*)wl_array_add(&arr, sizeof(uint32_t)); *p = XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN; p = (uint32_t*)wl_array_add(&arr, sizeof(uint32_t)); *p = XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE; - resource->sendWmCapabilities(&arr); + m_resource->sendWmCapabilities(&arr); wl_array_release(&arr); } - if (resource->version() >= 2) { - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_LEFT); - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_RIGHT); - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_TOP); - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_BOTTOM); + if (m_resource->version() >= 2) { + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_LEFT); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_RIGHT); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_TOP); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_TILED_BOTTOM); } - resource->setSetTitle([this](CXdgToplevel* r, const char* t) { - state.title = t; - events.metadataChanged.emit(); + m_resource->setSetTitle([this](CXdgToplevel* r, const char* t) { + m_state.title = t; + m_events.metadataChanged.emit(); }); - resource->setSetAppId([this](CXdgToplevel* r, const char* id) { - state.appid = id; - events.metadataChanged.emit(); + m_resource->setSetAppId([this](CXdgToplevel* r, const char* id) { + m_state.appid = id; + m_events.metadataChanged.emit(); }); - resource->setSetMaxSize([this](CXdgToplevel* r, int32_t x, int32_t y) { - pending.maxSize = {x, y}; - events.sizeLimitsChanged.emit(); + m_resource->setSetMaxSize([this](CXdgToplevel* r, int32_t x, int32_t y) { + m_pending.maxSize = {x, y}; + m_events.sizeLimitsChanged.emit(); }); - resource->setSetMinSize([this](CXdgToplevel* r, int32_t x, int32_t y) { - pending.minSize = {x, y}; - events.sizeLimitsChanged.emit(); + m_resource->setSetMinSize([this](CXdgToplevel* r, int32_t x, int32_t y) { + m_pending.minSize = {x, y}; + m_events.sizeLimitsChanged.emit(); }); - resource->setSetMaximized([this](CXdgToplevel* r) { - state.requestsMaximize = true; - events.stateChanged.emit(); - state.requestsMaximize.reset(); + m_resource->setSetMaximized([this](CXdgToplevel* r) { + m_state.requestsMaximize = true; + m_events.stateChanged.emit(); + m_state.requestsMaximize.reset(); }); - resource->setUnsetMaximized([this](CXdgToplevel* r) { - state.requestsMaximize = false; - events.stateChanged.emit(); - state.requestsMaximize.reset(); + m_resource->setUnsetMaximized([this](CXdgToplevel* r) { + m_state.requestsMaximize = false; + m_events.stateChanged.emit(); + m_state.requestsMaximize.reset(); }); - resource->setSetFullscreen([this](CXdgToplevel* r, wl_resource* output) { + m_resource->setSetFullscreen([this](CXdgToplevel* r, wl_resource* output) { if (output) if (const auto PM = CWLOutputResource::fromResource(output)->m_monitor; PM) - state.requestsFullscreenMonitor = PM->m_id; + m_state.requestsFullscreenMonitor = PM->m_id; - state.requestsFullscreen = true; - events.stateChanged.emit(); - state.requestsFullscreen.reset(); - state.requestsFullscreenMonitor.reset(); + m_state.requestsFullscreen = true; + m_events.stateChanged.emit(); + m_state.requestsFullscreen.reset(); + m_state.requestsFullscreenMonitor.reset(); }); - resource->setUnsetFullscreen([this](CXdgToplevel* r) { - state.requestsFullscreen = false; - events.stateChanged.emit(); - state.requestsFullscreen.reset(); + m_resource->setUnsetFullscreen([this](CXdgToplevel* r) { + m_state.requestsFullscreen = false; + m_events.stateChanged.emit(); + m_state.requestsFullscreen.reset(); }); - resource->setSetMinimized([this](CXdgToplevel* r) { - state.requestsMinimize = true; - events.stateChanged.emit(); - state.requestsMinimize.reset(); + m_resource->setSetMinimized([this](CXdgToplevel* r) { + m_state.requestsMinimize = true; + m_events.stateChanged.emit(); + m_state.requestsMinimize.reset(); }); - resource->setSetParent([this](CXdgToplevel* r, wl_resource* parentR) { - auto oldParent = parent; + m_resource->setSetParent([this](CXdgToplevel* r, wl_resource* parentR) { + auto oldParent = m_parent; - if (parent) - std::erase(parent->children, self); + if (m_parent) + std::erase(m_parent->m_children, m_self); auto newp = parentR ? CXDGToplevelResource::fromResource(parentR) : nullptr; - parent = newp; + m_parent = newp; - if (parent) - parent->children.emplace_back(self); + if (m_parent) + m_parent->m_children.emplace_back(m_self); LOGM(LOG, "Toplevel {:x} sets parent to {:x}{}", (uintptr_t)this, (uintptr_t)newp.get(), (oldParent ? std::format(" (was {:x})", (uintptr_t)oldParent.get()) : "")); }); } CXDGToplevelResource::~CXDGToplevelResource() { - events.destroy.emit(); - if (parent) - std::erase_if(parent->children, [this](const auto& other) { return !other || other.get() == this; }); + m_events.destroy.emit(); + if (m_parent) + std::erase_if(m_parent->m_children, [this](const auto& other) { return !other || other.get() == this; }); } SP CXDGToplevelResource::fromResource(wl_resource* res) { auto data = (CXDGToplevelResource*)(((CXdgToplevel*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CXDGToplevelResource::good() { - return resource->resource(); + return m_resource->resource(); } bool CXDGToplevelResource::anyChildModal() { - return std::ranges::any_of(children, [](const auto& child) { return child && child->dialog && child->dialog->modal; }); + return std::ranges::any_of(m_children, [](const auto& child) { return child && child->m_dialog && child->m_dialog->modal; }); } uint32_t CXDGToplevelResource::setSize(const Vector2D& size) { - pendingApply.size = size; + m_pendingApply.size = size; applyState(); - return owner->scheduleConfigure(); + return m_owner->scheduleConfigure(); } uint32_t CXDGToplevelResource::setMaximized(bool maximized) { - bool set = std::find(pendingApply.states.begin(), pendingApply.states.end(), XDG_TOPLEVEL_STATE_MAXIMIZED) != pendingApply.states.end(); + bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_MAXIMIZED) != m_pendingApply.states.end(); if (maximized == set) - return owner->scheduledSerial; + return m_owner->m_scheduledSerial; if (maximized && !set) - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_MAXIMIZED); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_MAXIMIZED); else if (!maximized && set) - std::erase(pendingApply.states, XDG_TOPLEVEL_STATE_MAXIMIZED); + std::erase(m_pendingApply.states, XDG_TOPLEVEL_STATE_MAXIMIZED); applyState(); - return owner->scheduleConfigure(); + return m_owner->scheduleConfigure(); } uint32_t CXDGToplevelResource::setFullscreen(bool fullscreen) { - bool set = std::find(pendingApply.states.begin(), pendingApply.states.end(), XDG_TOPLEVEL_STATE_FULLSCREEN) != pendingApply.states.end(); + bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_FULLSCREEN) != m_pendingApply.states.end(); if (fullscreen == set) - return owner->scheduledSerial; + return m_owner->m_scheduledSerial; if (fullscreen && !set) - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_FULLSCREEN); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_FULLSCREEN); else if (!fullscreen && set) - std::erase(pendingApply.states, XDG_TOPLEVEL_STATE_FULLSCREEN); + std::erase(m_pendingApply.states, XDG_TOPLEVEL_STATE_FULLSCREEN); applyState(); - return owner->scheduleConfigure(); + return m_owner->scheduleConfigure(); } uint32_t CXDGToplevelResource::setActive(bool active) { - bool set = std::find(pendingApply.states.begin(), pendingApply.states.end(), XDG_TOPLEVEL_STATE_ACTIVATED) != pendingApply.states.end(); + bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_ACTIVATED) != m_pendingApply.states.end(); if (active == set) - return owner->scheduledSerial; + return m_owner->m_scheduledSerial; if (active && !set) - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_ACTIVATED); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_ACTIVATED); else if (!active && set) - std::erase(pendingApply.states, XDG_TOPLEVEL_STATE_ACTIVATED); + std::erase(m_pendingApply.states, XDG_TOPLEVEL_STATE_ACTIVATED); applyState(); - return owner->scheduleConfigure(); + return m_owner->scheduleConfigure(); } uint32_t CXDGToplevelResource::setSuspeneded(bool sus) { - if (resource->version() < 6) - return owner->scheduleConfigure(); // SUSPENDED is since 6 + if (m_resource->version() < 6) + return m_owner->scheduleConfigure(); // SUSPENDED is since 6 - bool set = std::find(pendingApply.states.begin(), pendingApply.states.end(), XDG_TOPLEVEL_STATE_SUSPENDED) != pendingApply.states.end(); + bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_SUSPENDED) != m_pendingApply.states.end(); if (sus == set) - return owner->scheduledSerial; + return m_owner->m_scheduledSerial; if (sus && !set) - pendingApply.states.push_back(XDG_TOPLEVEL_STATE_SUSPENDED); + m_pendingApply.states.push_back(XDG_TOPLEVEL_STATE_SUSPENDED); else if (!sus && set) - std::erase(pendingApply.states, XDG_TOPLEVEL_STATE_SUSPENDED); + std::erase(m_pendingApply.states, XDG_TOPLEVEL_STATE_SUSPENDED); applyState(); - return owner->scheduleConfigure(); + return m_owner->scheduleConfigure(); } void CXDGToplevelResource::applyState() { wl_array arr; wl_array_init(&arr); - if (!pendingApply.states.empty()) { - wl_array_add(&arr, pendingApply.states.size() * sizeof(int)); - memcpy(arr.data, pendingApply.states.data(), pendingApply.states.size() * sizeof(int)); + if (!m_pendingApply.states.empty()) { + wl_array_add(&arr, m_pendingApply.states.size() * sizeof(int)); + memcpy(arr.data, m_pendingApply.states.data(), m_pendingApply.states.size() * sizeof(int)); } - resource->sendConfigure(pendingApply.size.x, pendingApply.size.y, &arr); + m_resource->sendConfigure(m_pendingApply.size.x, m_pendingApply.size.y, &arr); wl_array_release(&arr); } void CXDGToplevelResource::close() { - resource->sendClose(); + m_resource->sendClose(); } Vector2D CXDGToplevelResource::layoutMinSize() { Vector2D minSize; - if (current.minSize.x > 1) - minSize.x = owner ? current.minSize.x + owner->current.geometry.pos().x : current.minSize.x; - if (current.minSize.y > 1) - minSize.y = owner ? current.minSize.y + owner->current.geometry.pos().y : current.minSize.y; + if (m_current.minSize.x > 1) + minSize.x = m_owner ? m_current.minSize.x + m_owner->m_current.geometry.pos().x : m_current.minSize.x; + if (m_current.minSize.y > 1) + minSize.y = m_owner ? m_current.minSize.y + m_owner->m_current.geometry.pos().y : m_current.minSize.y; return minSize; } Vector2D CXDGToplevelResource::layoutMaxSize() { Vector2D maxSize; - if (current.maxSize.x > 1) - maxSize.x = owner ? current.maxSize.x + owner->current.geometry.pos().x : current.maxSize.x; - if (current.maxSize.y > 1) - maxSize.y = owner ? current.maxSize.y + owner->current.geometry.pos().y : current.maxSize.y; + if (m_current.maxSize.x > 1) + maxSize.x = m_owner ? m_current.maxSize.x + m_owner->m_current.geometry.pos().x : m_current.maxSize.x; + if (m_current.maxSize.y > 1) + maxSize.y = m_owner ? m_current.maxSize.y + m_owner->m_current.geometry.pos().y : m_current.maxSize.y; return maxSize; } CXDGSurfaceResource::CXDGSurfaceResource(SP resource_, SP owner_, SP surface_) : - owner(owner_), surface(surface_), resource(resource_) { + m_owner(owner_), m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CXdgSurface* r) { - if (mapped) - events.unmap.emit(); - events.destroy.emit(); + m_resource->setDestroy([this](CXdgSurface* r) { + if (m_mapped) + m_events.unmap.emit(); + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - resource->setOnDestroy([this](CXdgSurface* r) { - if (mapped) - events.unmap.emit(); - events.destroy.emit(); + m_resource->setOnDestroy([this](CXdgSurface* r) { + if (m_mapped) + m_events.unmap.emit(); + m_events.destroy.emit(); PROTO::xdgShell->destroyResource(this); }); - listeners.surfaceDestroy = surface->m_events.destroy.registerListener([this](std::any d) { + m_listeners.surfaceDestroy = m_surface->m_events.destroy.registerListener([this](std::any d) { LOGM(WARN, "wl_surface destroyed before its xdg_surface role object"); - listeners.surfaceDestroy.reset(); - listeners.surfaceCommit.reset(); + m_listeners.surfaceDestroy.reset(); + m_listeners.surfaceCommit.reset(); - if (mapped) - events.unmap.emit(); + if (m_mapped) + m_events.unmap.emit(); - mapped = false; - surface.reset(); - events.destroy.emit(); + m_mapped = false; + m_surface.reset(); + m_events.destroy.emit(); }); - listeners.surfaceCommit = surface->m_events.commit.registerListener([this](std::any d) { - current = pending; - if (toplevel) - toplevel->current = toplevel->pending; + m_listeners.surfaceCommit = m_surface->m_events.commit.registerListener([this](std::any d) { + m_current = m_pending; + if (m_toplevel) + m_toplevel->m_current = m_toplevel->m_pending; - if UNLIKELY (initialCommit && surface->m_pending.buffer) { - resource->error(-1, "Buffer attached before initial commit"); + if UNLIKELY (m_initialCommit && m_surface->m_pending.buffer) { + m_resource->error(-1, "Buffer attached before initial commit"); return; } - if (surface->m_current.texture && !mapped) { + if (m_surface->m_current.texture && !m_mapped) { // this forces apps to not draw CSD. - if (toplevel) - toplevel->setMaximized(true); + if (m_toplevel) + m_toplevel->setMaximized(true); - mapped = true; - surface->map(); - events.map.emit(); + m_mapped = true; + m_surface->map(); + m_events.map.emit(); return; } - if (!surface->m_current.texture && mapped) { - mapped = false; - events.unmap.emit(); - surface->unmap(); + if (!m_surface->m_current.texture && m_mapped) { + m_mapped = false; + m_events.unmap.emit(); + m_surface->unmap(); return; } - events.commit.emit(); - initialCommit = false; + m_events.commit.emit(); + m_initialCommit = false; }); - resource->setGetToplevel([this](CXdgSurface* r, uint32_t id) { - const auto RESOURCE = PROTO::xdgShell->m_vToplevels.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + m_resource->setGetToplevel([this](CXdgSurface* r, uint32_t id) { + const auto RESOURCE = PROTO::xdgShell->m_toplevels.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xdgShell->m_vToplevels.pop_back(); + PROTO::xdgShell->m_toplevels.pop_back(); return; } - toplevel = RESOURCE; - toplevel->self = RESOURCE; + m_toplevel = RESOURCE; + m_toplevel->m_self = RESOURCE; - LOGM(LOG, "xdg_surface {:x} gets a toplevel {:x}", (uintptr_t)owner.get(), (uintptr_t)RESOURCE.get()); + LOGM(LOG, "xdg_surface {:x} gets a toplevel {:x}", (uintptr_t)m_owner.get(), (uintptr_t)RESOURCE.get()); - g_pCompositor->m_windows.emplace_back(CWindow::create(self.lock())); + g_pCompositor->m_windows.emplace_back(CWindow::create(m_self.lock())); - for (auto const& p : popups) { + for (auto const& p : m_popups) { if (!p) continue; - events.newPopup.emit(p); + m_events.newPopup.emit(p); } }); - resource->setGetPopup([this](CXdgSurface* r, uint32_t id, wl_resource* parentXDG, wl_resource* positionerRes) { + m_resource->setGetPopup([this](CXdgSurface* r, uint32_t id, wl_resource* parentXDG, wl_resource* positionerRes) { auto parent = parentXDG ? CXDGSurfaceResource::fromResource(parentXDG) : nullptr; auto positioner = CXDGPositionerResource::fromResource(positionerRes); const auto RESOURCE = - PROTO::xdgShell->m_vPopups.emplace_back(makeShared(makeShared(r->client(), r->version(), id), parent, self.lock(), positioner)); + PROTO::xdgShell->m_popups.emplace_back(makeShared(makeShared(r->client(), r->version(), id), parent, m_self.lock(), positioner)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xdgShell->m_vPopups.pop_back(); + PROTO::xdgShell->m_popups.pop_back(); return; } - popup = RESOURCE; - RESOURCE->self = RESOURCE; + m_popup = RESOURCE; + RESOURCE->m_self = RESOURCE; - LOGM(LOG, "xdg_surface {:x} gets a popup {:x} owner {:x}", (uintptr_t)self.get(), (uintptr_t)RESOURCE.get(), (uintptr_t)parent.get()); + LOGM(LOG, "xdg_surface {:x} gets a popup {:x} owner {:x}", (uintptr_t)m_self.get(), (uintptr_t)RESOURCE.get(), (uintptr_t)parent.get()); if (!parent) return; - parent->popups.emplace_back(RESOURCE); - if (parent->mapped) - parent->events.newPopup.emit(RESOURCE); + parent->m_popups.emplace_back(RESOURCE); + if (parent->m_mapped) + parent->m_events.newPopup.emit(RESOURCE); }); - resource->setAckConfigure([this](CXdgSurface* r, uint32_t serial) { - if (serial < lastConfigureSerial) + m_resource->setAckConfigure([this](CXdgSurface* r, uint32_t serial) { + if (serial < m_lastConfigureSerial) return; - lastConfigureSerial = serial; - events.ack.emit(serial); + m_lastConfigureSerial = serial; + m_events.ack.emit(serial); }); - resource->setSetWindowGeometry([this](CXdgSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { + m_resource->setSetWindowGeometry([this](CXdgSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { LOGM(LOG, "xdg_surface {:x} requests geometry {}x{} {}x{}", (uintptr_t)this, x, y, w, h); - pending.geometry = {x, y, w, h}; + m_pending.geometry = {x, y, w, h}; }); } CXDGSurfaceResource::~CXDGSurfaceResource() { - events.destroy.emit(); - if (configureSource) - wl_event_source_remove(configureSource); - if (surface) - surface->resetRole(); + m_events.destroy.emit(); + if (m_configureSource) + wl_event_source_remove(m_configureSource); + if (m_surface) + m_surface->resetRole(); } bool CXDGSurfaceResource::good() { - return resource->resource(); + return m_resource->resource(); } SP CXDGSurfaceResource::fromResource(wl_resource* res) { auto data = (CXDGSurfaceResource*)(((CXdgSurface*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } static void onConfigure(void* data) { @@ -500,54 +500,54 @@ static void onConfigure(void* data) { } uint32_t CXDGSurfaceResource::scheduleConfigure() { - if (configureSource) - return scheduledSerial; + if (m_configureSource) + return m_scheduledSerial; - configureSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, onConfigure, this); - scheduledSerial = wl_display_next_serial(g_pCompositor->m_wlDisplay); + m_configureSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, onConfigure, this); + m_scheduledSerial = wl_display_next_serial(g_pCompositor->m_wlDisplay); - return scheduledSerial; + return m_scheduledSerial; } void CXDGSurfaceResource::configure() { - configureSource = nullptr; - resource->sendConfigure(scheduledSerial); + m_configureSource = nullptr; + m_resource->sendConfigure(m_scheduledSerial); } -CXDGPositionerResource::CXDGPositionerResource(SP resource_, SP owner_) : owner(owner_), resource(resource_) { +CXDGPositionerResource::CXDGPositionerResource(SP resource_, SP owner_) : m_owner(owner_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setData(this); + m_resource->setData(this); - resource->setDestroy([this](CXdgPositioner* r) { PROTO::xdgShell->destroyResource(this); }); - resource->setOnDestroy([this](CXdgPositioner* r) { PROTO::xdgShell->destroyResource(this); }); + m_resource->setDestroy([this](CXdgPositioner* r) { PROTO::xdgShell->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgPositioner* r) { PROTO::xdgShell->destroyResource(this); }); - resource->setSetSize([this](CXdgPositioner* r, int32_t x, int32_t y) { + m_resource->setSetSize([this](CXdgPositioner* r, int32_t x, int32_t y) { if UNLIKELY (x <= 0 || y <= 0) { r->error(XDG_POSITIONER_ERROR_INVALID_INPUT, "Invalid size"); return; } - state.requestedSize = {x, y}; + m_state.requestedSize = {x, y}; }); - resource->setSetAnchorRect([this](CXdgPositioner* r, int32_t x, int32_t y, int32_t w, int32_t h) { + m_resource->setSetAnchorRect([this](CXdgPositioner* r, int32_t x, int32_t y, int32_t w, int32_t h) { if UNLIKELY (w <= 0 || h <= 0) { r->error(XDG_POSITIONER_ERROR_INVALID_INPUT, "Invalid box"); return; } - state.anchorRect = {x, y, w, h}; + m_state.anchorRect = {x, y, w, h}; }); - resource->setSetOffset([this](CXdgPositioner* r, int32_t x, int32_t y) { state.offset = {x, y}; }); + m_resource->setSetOffset([this](CXdgPositioner* r, int32_t x, int32_t y) { m_state.offset = {x, y}; }); - resource->setSetAnchor([this](CXdgPositioner* r, xdgPositionerAnchor a) { state.setAnchor(a); }); + m_resource->setSetAnchor([this](CXdgPositioner* r, xdgPositionerAnchor a) { m_state.setAnchor(a); }); - resource->setSetGravity([this](CXdgPositioner* r, xdgPositionerGravity g) { state.setGravity(g); }); + m_resource->setSetGravity([this](CXdgPositioner* r, xdgPositionerGravity g) { m_state.setGravity(g); }); - resource->setSetConstraintAdjustment([this](CXdgPositioner* r, xdgPositionerConstraintAdjustment a) { state.constraintAdjustment = (uint32_t)a; }); + m_resource->setSetConstraintAdjustment([this](CXdgPositioner* r, xdgPositionerConstraintAdjustment a) { m_state.constraintAdjustment = (uint32_t)a; }); // TODO: support this shit better. The current impl _works_, but is lacking and could be wrong in a few cases. // doesn't matter _that_ much for now, though. @@ -555,14 +555,14 @@ CXDGPositionerResource::CXDGPositionerResource(SP resource_, SP< SP CXDGPositionerResource::fromResource(wl_resource* res) { auto data = (CXDGPositionerResource*)(((CXdgPositioner*)wl_resource_get_user_data(res))->data()); - return data ? data->self.lock() : nullptr; + return data ? data->m_self.lock() : nullptr; } bool CXDGPositionerResource::good() { - return resource->resource(); + return m_resource->resource(); } -CXDGPositionerRules::CXDGPositionerRules(SP positioner) : state(positioner->state) { +CXDGPositionerRules::CXDGPositionerRules(SP positioner) : m_state(positioner->m_state) { ; } @@ -572,20 +572,20 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo // padding constraint.expand(-4); - auto anchorRect = state.anchorRect.copy().translate(parentCoord); + auto anchorRect = m_state.anchorRect.copy().translate(parentCoord); - auto width = state.requestedSize.x; - auto height = state.requestedSize.y; - auto gravity = state.gravity; + auto width = m_state.requestedSize.x; + auto height = m_state.requestedSize.y; + auto gravity = m_state.gravity; - auto anchorX = state.anchor.left() ? anchorRect.x : state.anchor.right() ? anchorRect.extent().x : anchorRect.middle().x; - auto anchorY = state.anchor.top() ? anchorRect.y : state.anchor.bottom() ? anchorRect.extent().y : anchorRect.middle().y; + auto anchorX = m_state.anchor.left() ? anchorRect.x : m_state.anchor.right() ? anchorRect.extent().x : anchorRect.middle().x; + auto anchorY = m_state.anchor.top() ? anchorRect.y : m_state.anchor.bottom() ? anchorRect.extent().y : anchorRect.middle().y; auto calcEffectiveX = [&](CEdges anchorGravity, double anchorX) { return anchorGravity.left() ? anchorX - width : anchorGravity.right() ? anchorX : anchorX - width / 2; }; auto calcEffectiveY = [&](CEdges anchorGravity, double anchorY) { return anchorGravity.top() ? anchorY - height : anchorGravity.bottom() ? anchorY : anchorY - height / 2; }; auto calcRemainingWidth = [&](double effectiveX) { - auto width = state.requestedSize.x; + auto width = m_state.requestedSize.x; if (effectiveX < constraint.x) { auto diff = constraint.x - effectiveX; effectiveX = constraint.x; @@ -600,7 +600,7 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo }; auto calcRemainingHeight = [&](double effectiveY) { - auto height = state.requestedSize.y; + auto height = m_state.requestedSize.y; if (effectiveY < constraint.y) { auto diff = constraint.y - effectiveY; effectiveY = constraint.y; @@ -621,12 +621,12 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo // It considers the offset when deciding whether or not to flip but does not actually flip the offset, instead // applying it after the flip step. - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X) { - auto flip = (gravity.left() && effectiveX + state.offset.x < constraint.x) || (gravity.right() && effectiveX + state.offset.x + width > constraint.extent().x); + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X) { + auto flip = (gravity.left() && effectiveX + m_state.offset.x < constraint.x) || (gravity.right() && effectiveX + m_state.offset.x + width > constraint.extent().x); if (flip) { auto newGravity = gravity ^ (CEdges::LEFT | CEdges::RIGHT); - auto newAnchorX = state.anchor.left() ? anchorRect.extent().x : state.anchor.right() ? anchorRect.x : anchorX; + auto newAnchorX = m_state.anchor.left() ? anchorRect.extent().x : m_state.anchor.right() ? anchorRect.x : anchorX; auto newEffectiveX = calcEffectiveX(newGravity, newAnchorX); if (calcRemainingWidth(newEffectiveX).second > calcRemainingWidth(effectiveX).second) { @@ -637,12 +637,13 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo } } - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y) { - auto flip = (state.gravity.top() && effectiveY + state.offset.y < constraint.y) || (state.gravity.bottom() && effectiveY + state.offset.y + height > constraint.extent().y); + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y) { + auto flip = + (m_state.gravity.top() && effectiveY + m_state.offset.y < constraint.y) || (m_state.gravity.bottom() && effectiveY + m_state.offset.y + height > constraint.extent().y); if (flip) { auto newGravity = gravity ^ (CEdges::TOP | CEdges::BOTTOM); - auto newAnchorY = state.anchor.top() ? anchorRect.extent().y : state.anchor.bottom() ? anchorRect.y : anchorY; + auto newAnchorY = m_state.anchor.top() ? anchorRect.extent().y : m_state.anchor.bottom() ? anchorRect.y : anchorY; auto newEffectiveY = calcEffectiveY(newGravity, newAnchorY); if (calcRemainingHeight(newEffectiveY).second > calcRemainingHeight(effectiveY).second) { @@ -653,12 +654,12 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo } } - effectiveX += state.offset.x; - effectiveY += state.offset.y; + effectiveX += m_state.offset.x; + effectiveY += m_state.offset.y; // Slide order is important for the case where the window is too large to fit on screen. - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X) { + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X) { if (effectiveX + width > constraint.extent().x) effectiveX = constraint.extent().x - width; @@ -666,7 +667,7 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo effectiveX = constraint.x; } - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y) { + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y) { if (effectiveY + height > constraint.extent().y) effectiveY = constraint.extent().y - height; @@ -674,13 +675,13 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo effectiveY = constraint.y; } - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X) { + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X) { auto [newX, newWidth] = calcRemainingWidth(effectiveX); effectiveX = newX; width = newWidth; } - if (state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y) { + if (m_state.constraintAdjustment & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y) { auto [newY, newHeight] = calcRemainingHeight(effectiveY); effectiveY = newY; height = newHeight; @@ -689,33 +690,33 @@ CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& parentCoo return {effectiveX - parentCoord.x, effectiveY - parentCoord.y, width, height}; } -CXDGWMBase::CXDGWMBase(SP resource_) : resource(resource_) { +CXDGWMBase::CXDGWMBase(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CXdgWmBase* r) { PROTO::xdgShell->destroyResource(this); }); - resource->setOnDestroy([this](CXdgWmBase* r) { PROTO::xdgShell->destroyResource(this); }); + m_resource->setDestroy([this](CXdgWmBase* r) { PROTO::xdgShell->destroyResource(this); }); + m_resource->setOnDestroy([this](CXdgWmBase* r) { PROTO::xdgShell->destroyResource(this); }); - pClient = resource->client(); + m_client = m_resource->client(); - resource->setCreatePositioner([this](CXdgWmBase* r, uint32_t id) { + m_resource->setCreatePositioner([this](CXdgWmBase* r, uint32_t id) { const auto RESOURCE = - PROTO::xdgShell->m_vPositioners.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock())); + PROTO::xdgShell->m_positioners.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock())); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xdgShell->m_vPositioners.pop_back(); + PROTO::xdgShell->m_positioners.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; - positioners.emplace_back(RESOURCE); + m_positioners.emplace_back(RESOURCE); LOGM(LOG, "New xdg_positioner at {:x}", (uintptr_t)RESOURCE.get()); }); - resource->setGetXdgSurface([this](CXdgWmBase* r, uint32_t id, wl_resource* surf) { + m_resource->setGetXdgSurface([this](CXdgWmBase* r, uint32_t id, wl_resource* surf) { auto SURF = CWLSurfaceResource::fromResource(surf); if UNLIKELY (!SURF) { @@ -728,123 +729,124 @@ CXDGWMBase::CXDGWMBase(SP resource_) : resource(resource_) { return; } - const auto RESOURCE = PROTO::xdgShell->m_vSurfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), self.lock(), SURF)); + const auto RESOURCE = + PROTO::xdgShell->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), m_self.lock(), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xdgShell->m_vSurfaces.pop_back(); + PROTO::xdgShell->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; - RESOURCE->surface = SURF; - SURF->m_role = makeShared(RESOURCE); + RESOURCE->m_self = RESOURCE; + RESOURCE->m_surface = SURF; + SURF->m_role = makeShared(RESOURCE); - surfaces.emplace_back(RESOURCE); + m_surfaces.emplace_back(RESOURCE); LOGM(LOG, "New xdg_surface at {:x}", (uintptr_t)RESOURCE.get()); }); - resource->setPong([this](CXdgWmBase* r, uint32_t serial) { - g_pANRManager->onResponse(self.lock()); - events.pong.emit(); + m_resource->setPong([this](CXdgWmBase* r, uint32_t serial) { + g_pANRManager->onResponse(m_self.lock()); + m_events.pong.emit(); }); } bool CXDGWMBase::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CXDGWMBase::client() { - return pClient; + return m_client; } void CXDGWMBase::ping() { - resource->sendPing(1337); + m_resource->sendPing(1337); } CXDGShellProtocol::CXDGShellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { - grab = makeShared(); - grab->m_keyboard = true; - grab->m_pointer = true; - grab->setCallback([this]() { - for (auto const& g : grabbed) { + m_grab = makeShared(); + m_grab->m_keyboard = true; + m_grab->m_pointer = true; + m_grab->setCallback([this]() { + for (auto const& g : m_grabbed) { g->done(); } - grabbed.clear(); + m_grabbed.clear(); }); } void CXDGShellProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vWMBases.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_wmBases.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vWMBases.pop_back(); + m_wmBases.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; LOGM(LOG, "New xdg_wm_base at {:x}", (uintptr_t)RESOURCE.get()); } void CXDGShellProtocol::destroyResource(CXDGWMBase* resource) { - std::erase_if(m_vWMBases, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_wmBases, [&](const auto& other) { return other.get() == resource; }); } void CXDGShellProtocol::destroyResource(CXDGPositionerResource* resource) { - std::erase_if(m_vPositioners, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_positioners, [&](const auto& other) { return other.get() == resource; }); } void CXDGShellProtocol::destroyResource(CXDGSurfaceResource* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } void CXDGShellProtocol::destroyResource(CXDGToplevelResource* resource) { - std::erase_if(m_vToplevels, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_toplevels, [&](const auto& other) { return other.get() == resource; }); } void CXDGShellProtocol::destroyResource(CXDGPopupResource* resource) { - std::erase_if(m_vPopups, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_popups, [&](const auto& other) { return other.get() == resource; }); } void CXDGShellProtocol::addOrStartGrab(SP popup) { - if (!grabOwner) { - grabOwner = popup; - grabbed.clear(); - grab->clear(); - grab->add(popup->surface->surface.lock()); - if (popup->parent) - grab->add(popup->parent->surface.lock()); - g_pSeatManager->setGrab(grab); - grabbed.emplace_back(popup); + if (!m_grabOwner) { + m_grabOwner = popup; + m_grabbed.clear(); + m_grab->clear(); + m_grab->add(popup->m_surface->m_surface.lock()); + if (popup->m_parent) + m_grab->add(popup->m_parent->m_surface.lock()); + g_pSeatManager->setGrab(m_grab); + m_grabbed.emplace_back(popup); return; } - grabbed.emplace_back(popup); + m_grabbed.emplace_back(popup); - grab->add(popup->surface->surface.lock()); + m_grab->add(popup->m_surface->m_surface.lock()); - if (popup->parent) - grab->add(popup->parent->surface.lock()); + if (popup->m_parent) + m_grab->add(popup->m_parent->m_surface.lock()); } void CXDGShellProtocol::onPopupDestroy(WP popup) { - if (popup == grabOwner) { + if (popup == m_grabOwner) { g_pSeatManager->setGrab(nullptr); - for (auto const& g : grabbed) { + for (auto const& g : m_grabbed) { g->done(); } - grabbed.clear(); + m_grabbed.clear(); return; } - std::erase(grabbed, popup); - if (popup->surface) - grab->remove(popup->surface->surface.lock()); + std::erase(m_grabbed, popup); + if (popup->m_surface) + m_grab->remove(popup->m_surface->m_surface.lock()); } -CXDGSurfaceRole::CXDGSurfaceRole(SP xdg) : xdgSurface(xdg) { +CXDGSurfaceRole::CXDGSurfaceRole(SP xdg) : m_xdgSurface(xdg) { ; } diff --git a/src/protocols/XDGShell.hpp b/src/protocols/XDGShell.hpp index 12f76774..632467ec 100644 --- a/src/protocols/XDGShell.hpp +++ b/src/protocols/XDGShell.hpp @@ -40,7 +40,7 @@ class CXDGPositionerRules { CBox getPosition(CBox constraint, const Vector2D& parentPos); private: - SXDGPositionerState state; + SXDGPositionerState m_state; }; class CXDGPopupResource { @@ -54,19 +54,19 @@ class CXDGPopupResource { void applyPositioning(const CBox& availableBox, const Vector2D& t1coord /* relative to box */); - WP surface; - WP parent; - WP self; + WP m_surface; + WP m_parent; + WP m_self; - bool taken = false; + bool m_taken = false; - CBox geometry; + CBox m_geometry; struct { CSignal reposition; CSignal dismissed; CSignal destroy; // only the role - } events; + } m_events; // schedules a configure event void configure(const CBox& box); @@ -75,13 +75,13 @@ class CXDGPopupResource { void repositioned(); private: - SP resource; + SP m_resource; - uint32_t lastRepositionToken = 0; + uint32_t m_lastRepositionToken = 0; Vector2D accumulateParentOffset(); - CXDGPositionerRules positionerRules; + CXDGPositionerRules m_positionerRules; }; class CXDGToplevelResource { @@ -91,10 +91,10 @@ class CXDGToplevelResource { static SP fromResource(wl_resource*); - WP owner; - WP self; + WP m_owner; + WP m_self; - PHLWINDOWREF window; + PHLWINDOWREF m_window; bool good(); @@ -115,7 +115,7 @@ class CXDGToplevelResource { CSignal stateChanged; // maximized, fs, minimized, etc. CSignal metadataChanged; // title, appid CSignal destroy; // only the role - } events; + } m_events; struct { std::string title; @@ -126,29 +126,30 @@ class CXDGToplevelResource { std::optional requestsFullscreen; std::optional requestsFullscreenMonitor; std::optional requestsMinimize; - } state; + } m_state; struct { Vector2D size; std::vector states; - } pendingApply; + } m_pendingApply; struct { Vector2D minSize = {1, 1}; Vector2D maxSize = {1337420, 694200}; - } pending, current; + } m_pending, m_current; - WP parent; - WP dialog; + WP m_parent; + WP m_dialog; - std::optional m_toplevelTag, m_toplevelDescription; + std::optional m_toplevelTag; + std::optional m_toplevelDescription; bool anyChildModal(); - std::vector> children; + std::vector> m_children; private: - SP resource; + SP m_resource; void applyState(); }; @@ -160,7 +161,7 @@ class CXDGSurfaceRole : public ISurfaceRole { return SURFACE_ROLE_XDG_SHELL; } - WP xdgSurface; + WP m_xdgSurface; }; class CXDGSurfaceResource { @@ -172,17 +173,17 @@ class CXDGSurfaceResource { bool good(); - WP owner; - WP surface; + WP m_owner; + WP m_surface; - WP toplevel; - WP popup; + WP m_toplevel; + WP m_popup; - WP self; + WP m_self; struct { CBox geometry; - } pending, current; + } m_pending, m_current; struct { CSignal ack; @@ -191,30 +192,30 @@ class CXDGSurfaceResource { CSignal unmap; CSignal destroy; CSignal newPopup; // SP - } events; + } m_events; - bool initialCommit = true; - bool mapped = false; + bool m_initialCommit = true; + bool m_mapped = false; uint32_t scheduleConfigure(); // do not call directly void configure(); private: - SP resource; + SP m_resource; - uint32_t lastConfigureSerial = 0; - uint32_t scheduledSerial = 0; + uint32_t m_lastConfigureSerial = 0; + uint32_t m_scheduledSerial = 0; - wl_event_source* configureSource = nullptr; + wl_event_source* m_configureSource = nullptr; // - std::vector> popups; + std::vector> m_popups; struct { CHyprSignalListener surfaceDestroy; CHyprSignalListener surfaceCommit; - } listeners; + } m_listeners; friend class CXDGPopupResource; friend class CXDGToplevelResource; @@ -228,13 +229,13 @@ class CXDGPositionerResource { bool good(); - SXDGPositionerState state; + SXDGPositionerState m_state; - WP owner; - WP self; + WP m_owner; + WP m_self; private: - SP resource; + SP m_resource; }; class CXDGWMBase { @@ -245,18 +246,18 @@ class CXDGWMBase { wl_client* client(); void ping(); - std::vector> positioners; - std::vector> surfaces; + std::vector> m_positioners; + std::vector> m_surfaces; - WP self; + WP m_self; struct { CSignal pong; - } events; + } m_events; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; }; class CXDGShellProtocol : public IWaylandProtocol { @@ -273,16 +274,16 @@ class CXDGShellProtocol : public IWaylandProtocol { void destroyResource(CXDGPopupResource* resource); // - std::vector> m_vWMBases; - std::vector> m_vPositioners; - std::vector> m_vSurfaces; - std::vector> m_vToplevels; - std::vector> m_vPopups; + std::vector> m_wmBases; + std::vector> m_positioners; + std::vector> m_surfaces; + std::vector> m_toplevels; + std::vector> m_popups; // current popup grab - WP grabOwner; - SP grab; - std::vector> grabbed; + WP m_grabOwner; + SP m_grab; + std::vector> m_grabbed; void addOrStartGrab(SP popup); void onPopupDestroy(WP popup); diff --git a/src/protocols/XDGTag.cpp b/src/protocols/XDGTag.cpp index 1b62918d..2966ac90 100644 --- a/src/protocols/XDGTag.cpp +++ b/src/protocols/XDGTag.cpp @@ -41,7 +41,7 @@ CXDGToplevelTagProtocol::CXDGToplevelTagProtocol(const wl_interface* iface, cons void CXDGToplevelTagProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { const auto RESOURCE = - WP{m_vManagers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; + WP{m_managers.emplace_back(makeUnique(makeUnique(client, ver, id)))}; if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); @@ -50,5 +50,5 @@ void CXDGToplevelTagProtocol::bindManager(wl_client* client, void* data, uint32_ } void CXDGToplevelTagProtocol::destroyResource(CXDGToplevelTagManagerResource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == res; }); } diff --git a/src/protocols/XDGTag.hpp b/src/protocols/XDGTag.hpp index cff4da03..920d5030 100644 --- a/src/protocols/XDGTag.hpp +++ b/src/protocols/XDGTag.hpp @@ -26,7 +26,7 @@ class CXDGToplevelTagProtocol : public IWaylandProtocol { void destroyResource(CXDGToplevelTagManagerResource* res); // - std::vector> m_vManagers; + std::vector> m_managers; friend class CXDGToplevelTagManagerResource; }; diff --git a/src/protocols/XWaylandShell.cpp b/src/protocols/XWaylandShell.cpp index b4615e19..9bb75a3e 100644 --- a/src/protocols/XWaylandShell.cpp +++ b/src/protocols/XWaylandShell.cpp @@ -2,24 +2,24 @@ #include "core/Compositor.hpp" #include -CXWaylandSurfaceResource::CXWaylandSurfaceResource(SP resource_, SP surface_) : surface(surface_), resource(resource_) { +CXWaylandSurfaceResource::CXWaylandSurfaceResource(SP resource_, SP surface_) : m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CXwaylandSurfaceV1* r) { + m_resource->setDestroy([this](CXwaylandSurfaceV1* r) { events.destroy.emit(); PROTO::xwaylandShell->destroyResource(this); }); - resource->setOnDestroy([this](CXwaylandSurfaceV1* r) { + m_resource->setOnDestroy([this](CXwaylandSurfaceV1* r) { events.destroy.emit(); PROTO::xwaylandShell->destroyResource(this); }); - pClient = resource->client(); + m_client = m_resource->client(); - resource->setSetSerial([this](CXwaylandSurfaceV1* r, uint32_t lo, uint32_t hi) { - serial = (((uint64_t)hi) << 32) + lo; - PROTO::xwaylandShell->events.newSurface.emit(self.lock()); + m_resource->setSetSerial([this](CXwaylandSurfaceV1* r, uint32_t lo, uint32_t hi) { + m_serial = (((uint64_t)hi) << 32) + lo; + PROTO::xwaylandShell->m_events.newSurface.emit(m_self.lock()); }); } @@ -28,36 +28,36 @@ CXWaylandSurfaceResource::~CXWaylandSurfaceResource() { } bool CXWaylandSurfaceResource::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CXWaylandSurfaceResource::client() { - return pClient; + return m_client; } -CXWaylandShellResource::CXWaylandShellResource(SP resource_) : resource(resource_) { +CXWaylandShellResource::CXWaylandShellResource(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->setDestroy([this](CXwaylandShellV1* r) { PROTO::xwaylandShell->destroyResource(this); }); - resource->setOnDestroy([this](CXwaylandShellV1* r) { PROTO::xwaylandShell->destroyResource(this); }); + m_resource->setDestroy([this](CXwaylandShellV1* r) { PROTO::xwaylandShell->destroyResource(this); }); + m_resource->setOnDestroy([this](CXwaylandShellV1* r) { PROTO::xwaylandShell->destroyResource(this); }); - resource->setGetXwaylandSurface([](CXwaylandShellV1* r, uint32_t id, wl_resource* surface) { - const auto RESOURCE = PROTO::xwaylandShell->m_vSurfaces.emplace_back( + m_resource->setGetXwaylandSurface([](CXwaylandShellV1* r, uint32_t id, wl_resource* surface) { + const auto RESOURCE = PROTO::xwaylandShell->m_surfaces.emplace_back( makeShared(makeShared(r->client(), r->version(), id), CWLSurfaceResource::fromResource(surface))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xwaylandShell->m_vSurfaces.pop_back(); + PROTO::xwaylandShell->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); } bool CXWaylandShellResource::good() { - return resource->resource(); + return m_resource->resource(); } CXWaylandShellProtocol::CXWaylandShellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -65,19 +65,19 @@ CXWaylandShellProtocol::CXWaylandShellProtocol(const wl_interface* iface, const } void CXWaylandShellProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } } void CXWaylandShellProtocol::destroyResource(CXWaylandShellResource* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CXWaylandShellProtocol::destroyResource(CXWaylandSurfaceResource* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/XWaylandShell.hpp b/src/protocols/XWaylandShell.hpp index f6f91c49..a83f258e 100644 --- a/src/protocols/XWaylandShell.hpp +++ b/src/protocols/XWaylandShell.hpp @@ -20,14 +20,14 @@ class CXWaylandSurfaceResource { CSignal destroy; } events; - uint64_t serial = 0; - WP surface; + uint64_t m_serial = 0; + WP m_surface; - WP self; + WP m_self; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; }; class CXWaylandShellResource { @@ -37,7 +37,7 @@ class CXWaylandShellResource { bool good(); private: - SP resource; + SP m_resource; }; class CXWaylandShellProtocol : public IWaylandProtocol { @@ -48,15 +48,15 @@ class CXWaylandShellProtocol : public IWaylandProtocol { struct { CSignal newSurface; // SP. Fired when it sets a serial, otherwise it's useless - } events; + } m_events; private: void destroyResource(CXWaylandSurfaceResource* resource); void destroyResource(CXWaylandShellResource* resource); // - std::vector> m_vManagers; - std::vector> m_vSurfaces; + std::vector> m_managers; + std::vector> m_surfaces; friend class CXWaylandSurfaceResource; friend class CXWaylandShellResource; diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index e0a9b61d..5a345f40 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -31,54 +31,54 @@ static wpColorManagerV1Primaries getWPPrimaries(xxColorManagerV4Primaries primar return (wpColorManagerV1Primaries)(primaries + 1); } -CXXColorManager::CXXColorManager(SP resource_) : resource(resource_) { +CXXColorManager::CXXColorManager(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_PARAMETRIC); - resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_EXTENDED_TARGET_VOLUME); - resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_MASTERING_DISPLAY_PRIMARIES); - resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_PRIMARIES); - resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_LUMINANCES); + m_resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_PARAMETRIC); + m_resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_EXTENDED_TARGET_VOLUME); + m_resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_MASTERING_DISPLAY_PRIMARIES); + m_resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_PRIMARIES); + m_resource->sendSupportedFeature(XX_COLOR_MANAGER_V4_FEATURE_SET_LUMINANCES); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_SRGB); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_PAL_M); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_PAL); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_NTSC); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_GENERIC_FILM); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_BT2020); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_SRGB); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_PAL_M); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_PAL); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_NTSC); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_GENERIC_FILM); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_BT2020); // resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_CIE1931_XYZ); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_DCI_P3); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_DISPLAY_P3); - resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_ADOBE_RGB); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_DCI_P3); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_DISPLAY_P3); + m_resource->sendSupportedPrimariesNamed(XX_COLOR_MANAGER_V4_PRIMARIES_ADOBE_RGB); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA22); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA28); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_HLG); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ); - resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_LINEAR); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA22); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA28); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_HLG); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ); + m_resource->sendSupportedTfNamed(XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_LINEAR); - resource->sendSupportedIntent(XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); + m_resource->sendSupportedIntent(XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); // resource->sendSupportedIntent(XX_COLOR_MANAGER_V4_RENDER_INTENT_RELATIVE); // resource->sendSupportedIntent(XX_COLOR_MANAGER_V4_RENDER_INTENT_ABSOLUTE); // resource->sendSupportedIntent(XX_COLOR_MANAGER_V4_RENDER_INTENT_RELATIVE_BPC); - resource->setDestroy([](CXxColorManagerV4* r) { LOGM(TRACE, "Destroy xx_color_manager at {:x} (generated default)", (uintptr_t)r); }); - resource->setGetOutput([](CXxColorManagerV4* r, uint32_t id, wl_resource* output) { + m_resource->setDestroy([](CXxColorManagerV4* r) { LOGM(TRACE, "Destroy xx_color_manager at {:x} (generated default)", (uintptr_t)r); }); + m_resource->setGetOutput([](CXxColorManagerV4* r, uint32_t id, wl_resource* output) { LOGM(TRACE, "Get output for id={}, output={}", id, (uintptr_t)output); const auto RESOURCE = - PROTO::xxColorManagement->m_vOutputs.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); + PROTO::xxColorManagement->m_outputs.emplace_back(makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vOutputs.pop_back(); + PROTO::xxColorManagement->m_outputs.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); - resource->setGetSurface([](CXxColorManagerV4* r, uint32_t id, wl_resource* surface) { + m_resource->setGetSurface([](CXxColorManagerV4* r, uint32_t id, wl_resource* surface) { LOGM(TRACE, "Get surface for id={}, surface={}", id, (uintptr_t)surface); auto SURF = CWLSurfaceResource::fromResource(surface); @@ -94,16 +94,16 @@ CXXColorManager::CXXColorManager(SP resource_) : resource(res } const auto RESOURCE = - PROTO::xxColorManagement->m_vSurfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF)); + PROTO::xxColorManagement->m_surfaces.emplace_back(makeShared(makeShared(r->client(), r->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vSurfaces.pop_back(); + PROTO::xxColorManagement->m_surfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); - resource->setGetFeedbackSurface([](CXxColorManagerV4* r, uint32_t id, wl_resource* surface) { + m_resource->setGetFeedbackSurface([](CXxColorManagerV4* r, uint32_t id, wl_resource* surface) { LOGM(TRACE, "Get feedback surface for id={}, surface={}", id, (uintptr_t)surface); auto SURF = CWLSurfaceResource::fromResource(surface); @@ -113,118 +113,118 @@ CXXColorManager::CXXColorManager(SP resource_) : resource(res return; } - const auto RESOURCE = PROTO::xxColorManagement->m_vFeedbackSurfaces.emplace_back( + const auto RESOURCE = PROTO::xxColorManagement->m_feedbackSurfaces.emplace_back( makeShared(makeShared(r->client(), r->version(), id), SURF)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vFeedbackSurfaces.pop_back(); + PROTO::xxColorManagement->m_feedbackSurfaces.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); - resource->setNewIccCreator([](CXxColorManagerV4* r, uint32_t id) { + m_resource->setNewIccCreator([](CXxColorManagerV4* r, uint32_t id) { LOGM(WARN, "New ICC creator for id={} (unsupported)", id); r->error(XX_COLOR_MANAGER_V4_ERROR_UNSUPPORTED_FEATURE, "ICC profiles are not supported"); }); - resource->setNewParametricCreator([](CXxColorManagerV4* r, uint32_t id) { + m_resource->setNewParametricCreator([](CXxColorManagerV4* r, uint32_t id) { LOGM(TRACE, "New parametric creator for id={}", id); - const auto RESOURCE = PROTO::xxColorManagement->m_vParametricCreators.emplace_back( + const auto RESOURCE = PROTO::xxColorManagement->m_parametricCreators.emplace_back( makeShared(makeShared(r->client(), r->version(), id))); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vParametricCreators.pop_back(); + PROTO::xxColorManagement->m_parametricCreators.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); - resource->setOnDestroy([this](CXxColorManagerV4* r) { PROTO::xxColorManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CXxColorManagerV4* r) { PROTO::xxColorManagement->destroyResource(this); }); } bool CXXColorManager::good() { - return resource->resource(); + return m_resource->resource(); } -CXXColorManagementOutput::CXXColorManagementOutput(SP resource_) : resource(resource_) { +CXXColorManagementOutput::CXXColorManagementOutput(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setDestroy([this](CXxColorManagementOutputV4* r) { PROTO::xxColorManagement->destroyResource(this); }); - resource->setOnDestroy([this](CXxColorManagementOutputV4* r) { PROTO::xxColorManagement->destroyResource(this); }); + m_resource->setDestroy([this](CXxColorManagementOutputV4* r) { PROTO::xxColorManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CXxColorManagementOutputV4* r) { PROTO::xxColorManagement->destroyResource(this); }); - resource->setGetImageDescription([this](CXxColorManagementOutputV4* r, uint32_t id) { + m_resource->setGetImageDescription([this](CXxColorManagementOutputV4* r, uint32_t id) { LOGM(TRACE, "Get image description for output={}, id={}", (uintptr_t)r, id); - if (imageDescription.valid()) - PROTO::xxColorManagement->destroyResource(imageDescription.get()); + if (m_imageDescription.valid()) + PROTO::xxColorManagement->destroyResource(m_imageDescription.get()); - const auto RESOURCE = PROTO::xxColorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::xxColorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), true)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vImageDescriptions.pop_back(); + PROTO::xxColorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; }); } bool CXXColorManagementOutput::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CXXColorManagementOutput::client() { - return pClient; + return m_client; } -CXXColorManagementSurface::CXXColorManagementSurface(SP surface_) : surface(surface_) { +CXXColorManagementSurface::CXXColorManagementSurface(SP surface_) : m_surface(surface_) { // only for frog cm untill wayland cm is adopted } -CXXColorManagementSurface::CXXColorManagementSurface(SP resource_, SP surface_) : surface(surface_), resource(resource_) { +CXXColorManagementSurface::CXXColorManagementSurface(SP resource_, SP surface_) : m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - if (!surface->m_colorManagement.valid()) { + if (!m_surface->m_colorManagement.valid()) { const auto RESOURCE = PROTO::colorManagement->m_surfaces.emplace_back(makeShared(surface_)); if UNLIKELY (!RESOURCE) { - resource->noMemory(); + m_resource->noMemory(); PROTO::colorManagement->m_surfaces.pop_back(); return; } RESOURCE->m_self = RESOURCE; - surface->m_colorManagement = RESOURCE; + m_surface->m_colorManagement = RESOURCE; - resource->setOnDestroy([this](CXxColorManagementSurfaceV4* r) { - LOGM(TRACE, "Destroy wp cm and xx cm for surface {}", (uintptr_t)surface); - if (surface.valid()) - PROTO::colorManagement->destroyResource(surface->m_colorManagement.get()); + m_resource->setOnDestroy([this](CXxColorManagementSurfaceV4* r) { + LOGM(TRACE, "Destroy wp cm and xx cm for surface {}", (uintptr_t)m_surface); + if (m_surface.valid()) + PROTO::colorManagement->destroyResource(m_surface->m_colorManagement.get()); PROTO::xxColorManagement->destroyResource(this); }); } else - resource->setOnDestroy([this](CXxColorManagementSurfaceV4* r) { - LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)surface); + m_resource->setOnDestroy([this](CXxColorManagementSurfaceV4* r) { + LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)m_surface); PROTO::xxColorManagement->destroyResource(this); }); - resource->setDestroy([this](CXxColorManagementSurfaceV4* r) { - LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)surface); + m_resource->setDestroy([this](CXxColorManagementSurfaceV4* r) { + LOGM(TRACE, "Destroy xx cm surface {}", (uintptr_t)m_surface); PROTO::xxColorManagement->destroyResource(this); }); - resource->setSetImageDescription([this](CXxColorManagementSurfaceV4* r, wl_resource* image_description, uint32_t render_intent) { + m_resource->setSetImageDescription([this](CXxColorManagementSurfaceV4* r, wl_resource* image_description, uint32_t render_intent) { LOGM(TRACE, "Set image description for surface={}, desc={}, intent={}", (uintptr_t)r, (uintptr_t)image_description, render_intent); const auto PO = (CXxImageDescriptionV4*)wl_resource_get_user_data(image_description); @@ -237,35 +237,35 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPm_vImageDescriptions.begin(), PROTO::xxColorManagement->m_vImageDescriptions.end(), + const auto imageDescription = std::find_if(PROTO::xxColorManagement->m_imageDescriptions.begin(), PROTO::xxColorManagement->m_imageDescriptions.end(), [&](const auto& other) { return other->resource()->resource() == image_description; }); - if (imageDescription == PROTO::xxColorManagement->m_vImageDescriptions.end()) { + if (imageDescription == PROTO::xxColorManagement->m_imageDescriptions.end()) { r->error(XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_IMAGE_DESCRIPTION, "Image description not found"); return; } - if (surface.valid()) { - surface->m_colorManagement->m_imageDescription = imageDescription->get()->settings; - surface->m_colorManagement->setHasImageDescription(true); + if (m_surface.valid()) { + m_surface->m_colorManagement->m_imageDescription = imageDescription->get()->m_settings; + m_surface->m_colorManagement->setHasImageDescription(true); } else LOGM(ERR, "Set image description for invalid surface"); }); - resource->setUnsetImageDescription([this](CXxColorManagementSurfaceV4* r) { + m_resource->setUnsetImageDescription([this](CXxColorManagementSurfaceV4* r) { LOGM(TRACE, "Unset image description for surface={}", (uintptr_t)r); - if (surface.valid()) { - surface->m_colorManagement->m_imageDescription = SImageDescription{}; - surface->m_colorManagement->setHasImageDescription(false); + if (m_surface.valid()) { + m_surface->m_colorManagement->m_imageDescription = SImageDescription{}; + m_surface->m_colorManagement->setHasImageDescription(false); } else LOGM(ERR, "Unset image description for invalid surface"); }); } bool CXXColorManagementSurface::good() { - return resource && resource->resource(); + return m_resource && m_resource->resource(); } wl_client* CXXColorManagementSurface::client() { - return pClient; + return m_client; } const SImageDescription& CXXColorManagementSurface::imageDescription() { @@ -297,104 +297,104 @@ bool CXXColorManagementSurface::needsHdrMetadataUpdate() { } CXXColorManagementFeedbackSurface::CXXColorManagementFeedbackSurface(SP resource_, SP surface_) : - surface(surface_), resource(resource_) { + m_surface(surface_), m_resource(resource_) { if UNLIKELY (!good()) return; - pClient = resource->client(); + m_client = m_resource->client(); - resource->setDestroy([this](CXxColorManagementFeedbackSurfaceV4* r) { - LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)surface); + m_resource->setDestroy([this](CXxColorManagementFeedbackSurfaceV4* r) { + LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)m_surface); if (m_currentPreferred.valid()) PROTO::xxColorManagement->destroyResource(m_currentPreferred.get()); PROTO::xxColorManagement->destroyResource(this); }); - resource->setOnDestroy([this](CXxColorManagementFeedbackSurfaceV4* r) { - LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)surface); + m_resource->setOnDestroy([this](CXxColorManagementFeedbackSurfaceV4* r) { + LOGM(TRACE, "Destroy xx cm feedback surface {}", (uintptr_t)m_surface); if (m_currentPreferred.valid()) PROTO::xxColorManagement->destroyResource(m_currentPreferred.get()); PROTO::xxColorManagement->destroyResource(this); }); - resource->setGetPreferred([this](CXxColorManagementFeedbackSurfaceV4* r, uint32_t id) { + m_resource->setGetPreferred([this](CXxColorManagementFeedbackSurfaceV4* r, uint32_t id) { LOGM(TRACE, "Get preferred for id {}", id); if (m_currentPreferred.valid()) PROTO::xxColorManagement->destroyResource(m_currentPreferred.get()); - const auto RESOURCE = PROTO::xxColorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::xxColorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), true)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vImageDescriptions.pop_back(); + PROTO::xxColorManagement->m_imageDescriptions.pop_back(); return; } - RESOURCE->self = RESOURCE; + RESOURCE->m_self = RESOURCE; m_currentPreferred = RESOURCE; - m_currentPreferred->settings = g_pCompositor->getPreferredImageDescription(); + m_currentPreferred->m_settings = g_pCompositor->getPreferredImageDescription(); RESOURCE->resource()->sendReady(id); }); } bool CXXColorManagementFeedbackSurface::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CXXColorManagementFeedbackSurface::client() { - return pClient; + return m_client; } -CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SP resource_) : resource(resource_) { +CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SP resource_) : m_resource(resource_) { if UNLIKELY (!good()) return; // - pClient = resource->client(); + m_client = m_resource->client(); - resource->setOnDestroy([this](CXxImageDescriptionCreatorParamsV4* r) { PROTO::xxColorManagement->destroyResource(this); }); + m_resource->setOnDestroy([this](CXxImageDescriptionCreatorParamsV4* r) { PROTO::xxColorManagement->destroyResource(this); }); - resource->setCreate([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t id) { + m_resource->setCreate([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t id) { LOGM(TRACE, "Create image description from params for id {}", id); // FIXME actually check completeness - if (!valuesSet) { + if (!m_valuesSet) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INCOMPLETE_SET, "Missing required settings"); return; } // FIXME actually check consistency - if (!valuesSet) { + if (!m_valuesSet) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INCONSISTENT_SET, "Set is not consistent"); return; } - const auto RESOURCE = PROTO::xxColorManagement->m_vImageDescriptions.emplace_back( + const auto RESOURCE = PROTO::xxColorManagement->m_imageDescriptions.emplace_back( makeShared(makeShared(r->client(), r->version(), id), false)); if UNLIKELY (!RESOURCE->good()) { r->noMemory(); - PROTO::xxColorManagement->m_vImageDescriptions.pop_back(); + PROTO::xxColorManagement->m_imageDescriptions.pop_back(); return; } // FIXME actually check support - if (!valuesSet) { + if (!m_valuesSet) { RESOURCE->resource()->sendFailed(XX_IMAGE_DESCRIPTION_V4_CAUSE_UNSUPPORTED, "unsupported"); return; } - RESOURCE->self = RESOURCE; - RESOURCE->settings = settings; + RESOURCE->m_self = RESOURCE; + RESOURCE->m_settings = m_settings; RESOURCE->resource()->sendReady(id); PROTO::xxColorManagement->destroyResource(this); }); - resource->setSetTfNamed([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t tf) { + m_resource->setSetTfNamed([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t tf) { LOGM(TRACE, "Set image description transfer function to {}", tf); - if (valuesSet & PC_TF) { + if (m_valuesSet & PC_TF) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Transfer function already set"); return; } @@ -409,21 +409,21 @@ CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SPerror(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_TF, "Unsupported transfer function"); return; } - settings.transferFunction = convertTransferFunction(getWPTransferFunction((xxColorManagerV4TransferFunction)tf)); - valuesSet |= PC_TF; + m_settings.transferFunction = convertTransferFunction(getWPTransferFunction((xxColorManagerV4TransferFunction)tf)); + m_valuesSet |= PC_TF; }); - resource->setSetTfPower([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t eexp) { + m_resource->setSetTfPower([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t eexp) { LOGM(TRACE, "Set image description tf power to {}", eexp); - if (valuesSet & PC_TF_POWER) { + if (m_valuesSet & PC_TF_POWER) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Transfer function power already set"); return; } - settings.transferFunctionPower = eexp / 10000.0f; - valuesSet |= PC_TF_POWER; + m_settings.transferFunctionPower = eexp / 10000.0f; + m_valuesSet |= PC_TF_POWER; }); - resource->setSetPrimariesNamed([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t primaries) { + m_resource->setSetPrimariesNamed([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t primaries) { LOGM(TRACE, "Set image description primaries by name {}", primaries); - if (valuesSet & PC_PRIMARIES) { + if (m_valuesSet & PC_PRIMARIES) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Primaries already set"); return; } @@ -438,29 +438,29 @@ CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SPerror(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_PRIMARIES, "Unsupported primaries"); } }); - resource->setSetPrimaries( + m_resource->setSetPrimaries( [this](CXxImageDescriptionCreatorParamsV4* r, int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y, int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y) { LOGM(TRACE, "Set image description primaries by values r:{},{} g:{},{} b:{},{} w:{},{}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y); - if (valuesSet & PC_PRIMARIES) { + if (m_valuesSet & PC_PRIMARIES) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Primaries already set"); return; } - settings.primariesNameSet = false; - settings.primaries = SPCPRimaries{.red = {.x = r_x, .y = r_y}, .green = {.x = g_x, .y = g_y}, .blue = {.x = b_x, .y = b_y}, .white = {.x = w_x, .y = w_y}}; - valuesSet |= PC_PRIMARIES; + m_settings.primariesNameSet = false; + m_settings.primaries = SPCPRimaries{.red = {.x = r_x, .y = r_y}, .green = {.x = g_x, .y = g_y}, .blue = {.x = b_x, .y = b_y}, .white = {.x = w_x, .y = w_y}}; + m_valuesSet |= PC_PRIMARIES; }); - resource->setSetLuminances([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t min_lum, uint32_t max_lum, uint32_t reference_lum) { + m_resource->setSetLuminances([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t min_lum, uint32_t max_lum, uint32_t reference_lum) { auto min = min_lum / 10000.0f; LOGM(TRACE, "Set image description luminances to {} - {} ({})", min, max_lum, reference_lum); - if (valuesSet & PC_LUMINANCES) { + if (m_valuesSet & PC_LUMINANCES) { r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Luminances already set"); return; } @@ -468,20 +468,20 @@ CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SPerror(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_LUMINANCE, "Invalid luminances"); return; } - settings.luminances = SImageDescription::SPCLuminances{.min = min, .max = max_lum, .reference = reference_lum}; - valuesSet |= PC_LUMINANCES; + m_settings.luminances = SImageDescription::SPCLuminances{.min = min, .max = max_lum, .reference = reference_lum}; + m_valuesSet |= PC_LUMINANCES; }); - resource->setSetMasteringDisplayPrimaries( + m_resource->setSetMasteringDisplayPrimaries( [this](CXxImageDescriptionCreatorParamsV4* r, int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y, int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y) { LOGM(TRACE, "Set image description mastering primaries by values r:{},{} g:{},{} b:{},{} w:{},{}", r_x, r_y, g_x, g_y, b_x, b_y, w_x, w_y); // if (valuesSet & PC_MASTERING_PRIMARIES) { // r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Mastering primaries already set"); // return; // } - settings.masteringPrimaries = SPCPRimaries{.red = {.x = r_x, .y = r_y}, .green = {.x = g_x, .y = g_y}, .blue = {.x = b_x, .y = b_y}, .white = {.x = w_x, .y = w_y}}; - valuesSet |= PC_MASTERING_PRIMARIES; + m_settings.masteringPrimaries = SPCPRimaries{.red = {.x = r_x, .y = r_y}, .green = {.x = g_x, .y = g_y}, .blue = {.x = b_x, .y = b_y}, .white = {.x = w_x, .y = w_y}}; + m_valuesSet |= PC_MASTERING_PRIMARIES; }); - resource->setSetMasteringLuminance([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t min_lum, uint32_t max_lum) { + m_resource->setSetMasteringLuminance([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t min_lum, uint32_t max_lum) { auto min = min_lum / 10000.0f; LOGM(TRACE, "Set image description mastering luminances to {} - {}", min, max_lum); // if (valuesSet & PC_MASTERING_LUMINANCES) { @@ -492,35 +492,35 @@ CXXColorManagementParametricCreator::CXXColorManagementParametricCreator(SPerror(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_LUMINANCE, "Invalid luminances"); return; } - settings.masteringLuminances = SImageDescription::SPCMasteringLuminances{.min = min, .max = max_lum}; - valuesSet |= PC_MASTERING_LUMINANCES; + m_settings.masteringLuminances = SImageDescription::SPCMasteringLuminances{.min = min, .max = max_lum}; + m_valuesSet |= PC_MASTERING_LUMINANCES; }); - resource->setSetMaxCll([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t max_cll) { + m_resource->setSetMaxCll([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t max_cll) { LOGM(TRACE, "Set image description max content light level to {}", max_cll); // if (valuesSet & PC_CLL) { // r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Max CLL already set"); // return; // } - settings.maxCLL = max_cll; - valuesSet |= PC_CLL; + m_settings.maxCLL = max_cll; + m_valuesSet |= PC_CLL; }); - resource->setSetMaxFall([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t max_fall) { + m_resource->setSetMaxFall([this](CXxImageDescriptionCreatorParamsV4* r, uint32_t max_fall) { LOGM(TRACE, "Set image description max frame-average light level to {}", max_fall); // if (valuesSet & PC_FALL) { // r->error(XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, "Max FALL already set"); // return; // } - settings.maxFALL = max_fall; - valuesSet |= PC_FALL; + m_settings.maxFALL = max_fall; + m_valuesSet |= PC_FALL; }); } bool CXXColorManagementParametricCreator::good() { - return resource->resource(); + return m_resource->resource(); } wl_client* CXXColorManagementParametricCreator::client() { - return pClient; + return m_client; } CXXColorManagementImageDescription::CXXColorManagementImageDescription(SP resource_, bool allowGetInformation) : @@ -528,7 +528,7 @@ CXXColorManagementImageDescription::CXXColorManagementImageDescription(SPclient(); + m_client = m_resource->client(); m_resource->setDestroy([this](CXxImageDescriptionV4* r) { PROTO::xxColorManagement->destroyResource(this); }); m_resource->setOnDestroy([this](CXxImageDescriptionV4* r) { PROTO::xxColorManagement->destroyResource(this); }); @@ -540,7 +540,7 @@ CXXColorManagementImageDescription::CXXColorManagementImageDescription(SP(makeShared(r->client(), r->version(), id), settings); + auto RESOURCE = makeShared(makeShared(r->client(), r->version(), id), m_settings); if UNLIKELY (!RESOURCE->good()) r->noMemory(); @@ -555,7 +555,7 @@ bool CXXColorManagementImageDescription::good() { } wl_client* CXXColorManagementImageDescription::client() { - return pClient; + return m_client; } SP CXXColorManagementImageDescription::resource() { @@ -563,33 +563,34 @@ SP CXXColorManagementImageDescription::resource() { } CXXColorManagementImageDescriptionInfo::CXXColorManagementImageDescriptionInfo(SP resource_, const SImageDescription& settings_) : - m_resource(resource_), settings(settings_) { + m_resource(resource_), m_settings(settings_) { if UNLIKELY (!good()) return; - pClient = m_resource->client(); + m_client = m_resource->client(); const auto toProto = [](float value) { return int32_t(std::round(value * 10000)); }; - if (settings.icc.fd >= 0) - m_resource->sendIccFile(settings.icc.fd, settings.icc.length); + if (m_settings.icc.fd >= 0) + m_resource->sendIccFile(m_settings.icc.fd, m_settings.icc.length); // send preferred client paramateres - m_resource->sendPrimaries(toProto(settings.primaries.red.x), toProto(settings.primaries.red.y), toProto(settings.primaries.green.x), toProto(settings.primaries.green.y), - toProto(settings.primaries.blue.x), toProto(settings.primaries.blue.y), toProto(settings.primaries.white.x), toProto(settings.primaries.white.y)); - if (settings.primariesNameSet) - m_resource->sendPrimariesNamed(settings.primariesNamed); - m_resource->sendTfPower(std::round(settings.transferFunctionPower * 10000)); - m_resource->sendTfNamed(settings.transferFunction); - m_resource->sendLuminances(std::round(settings.luminances.min * 10000), settings.luminances.max, settings.luminances.reference); + m_resource->sendPrimaries(toProto(m_settings.primaries.red.x), toProto(m_settings.primaries.red.y), toProto(m_settings.primaries.green.x), + toProto(m_settings.primaries.green.y), toProto(m_settings.primaries.blue.x), toProto(m_settings.primaries.blue.y), + toProto(m_settings.primaries.white.x), toProto(m_settings.primaries.white.y)); + if (m_settings.primariesNameSet) + m_resource->sendPrimariesNamed(m_settings.primariesNamed); + m_resource->sendTfPower(std::round(m_settings.transferFunctionPower * 10000)); + m_resource->sendTfNamed(m_settings.transferFunction); + m_resource->sendLuminances(std::round(m_settings.luminances.min * 10000), m_settings.luminances.max, m_settings.luminances.reference); // send expexted display paramateres - m_resource->sendTargetPrimaries(toProto(settings.masteringPrimaries.red.x), toProto(settings.masteringPrimaries.red.y), toProto(settings.masteringPrimaries.green.x), - toProto(settings.masteringPrimaries.green.y), toProto(settings.masteringPrimaries.blue.x), toProto(settings.masteringPrimaries.blue.y), - toProto(settings.masteringPrimaries.white.x), toProto(settings.masteringPrimaries.white.y)); - m_resource->sendTargetLuminance(std::round(settings.masteringLuminances.min * 10000), settings.masteringLuminances.max); - m_resource->sendTargetMaxCll(settings.maxCLL); - m_resource->sendTargetMaxFall(settings.maxFALL); + m_resource->sendTargetPrimaries(toProto(m_settings.masteringPrimaries.red.x), toProto(m_settings.masteringPrimaries.red.y), toProto(m_settings.masteringPrimaries.green.x), + toProto(m_settings.masteringPrimaries.green.y), toProto(m_settings.masteringPrimaries.blue.x), toProto(m_settings.masteringPrimaries.blue.y), + toProto(m_settings.masteringPrimaries.white.x), toProto(m_settings.masteringPrimaries.white.y)); + m_resource->sendTargetLuminance(std::round(m_settings.masteringLuminances.min * 10000), m_settings.masteringLuminances.max); + m_resource->sendTargetMaxCll(m_settings.maxCLL); + m_resource->sendTargetMaxFall(m_settings.maxFALL); m_resource->sendDone(); } @@ -599,7 +600,7 @@ bool CXXColorManagementImageDescriptionInfo::good() { } wl_client* CXXColorManagementImageDescriptionInfo::client() { - return pClient; + return m_client; } CXXColorManagementProtocol::CXXColorManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { @@ -607,11 +608,11 @@ CXXColorManagementProtocol::CXXColorManagementProtocol(const wl_interface* iface } void CXXColorManagementProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { - const auto RESOURCE = m_vManagers.emplace_back(makeShared(makeShared(client, ver, id))); + const auto RESOURCE = m_managers.emplace_back(makeShared(makeShared(client, ver, id))); if UNLIKELY (!RESOURCE->good()) { wl_client_post_no_memory(client); - m_vManagers.pop_back(); + m_managers.pop_back(); return; } @@ -619,31 +620,31 @@ void CXXColorManagementProtocol::bindManager(wl_client* client, void* data, uint } void CXXColorManagementProtocol::onImagePreferredChanged() { - for (auto const& feedback : m_vFeedbackSurfaces) { - feedback->resource->sendPreferredChanged(); + for (auto const& feedback : m_feedbackSurfaces) { + feedback->m_resource->sendPreferredChanged(); } } void CXXColorManagementProtocol::destroyResource(CXXColorManager* resource) { - std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_managers, [&](const auto& other) { return other.get() == resource; }); } void CXXColorManagementProtocol::destroyResource(CXXColorManagementOutput* resource) { - std::erase_if(m_vOutputs, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_outputs, [&](const auto& other) { return other.get() == resource; }); } void CXXColorManagementProtocol::destroyResource(CXXColorManagementSurface* resource) { - std::erase_if(m_vSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_surfaces, [&](const auto& other) { return other.get() == resource; }); } void CXXColorManagementProtocol::destroyResource(CXXColorManagementFeedbackSurface* resource) { - std::erase_if(m_vFeedbackSurfaces, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_feedbackSurfaces, [&](const auto& other) { return other.get() == resource; }); } void CXXColorManagementProtocol::destroyResource(CXXColorManagementParametricCreator* resource) { - std::erase_if(m_vParametricCreators, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_parametricCreators, [&](const auto& other) { return other.get() == resource; }); } void CXXColorManagementProtocol::destroyResource(CXXColorManagementImageDescription* resource) { - std::erase_if(m_vImageDescriptions, [&](const auto& other) { return other.get() == resource; }); + std::erase_if(m_imageDescriptions, [&](const auto& other) { return other.get() == resource; }); } diff --git a/src/protocols/XXColorManagement.hpp b/src/protocols/XXColorManagement.hpp index 96e99752..0407730a 100644 --- a/src/protocols/XXColorManagement.hpp +++ b/src/protocols/XXColorManagement.hpp @@ -20,7 +20,7 @@ class CXXColorManager { bool good(); private: - SP resource; + SP m_resource; }; class CXXColorManagementOutput { @@ -30,12 +30,12 @@ class CXXColorManagementOutput { bool good(); wl_client* client(); - WP self; - WP imageDescription; + WP m_self; + WP m_imageDescription; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; friend class CXXColorManagementProtocol; friend class CXXColorManagementImageDescription; @@ -49,8 +49,8 @@ class CXXColorManagementSurface { bool good(); wl_client* client(); - WP self; - WP surface; + WP m_self; + WP m_surface; const NColorManagement::SImageDescription& imageDescription(); bool hasImageDescription(); @@ -60,8 +60,8 @@ class CXXColorManagementSurface { bool needsHdrMetadataUpdate(); private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; NColorManagement::SImageDescription m_imageDescription; bool m_hasImageDescription = false; bool m_needsNewMetadata = false; @@ -77,12 +77,12 @@ class CXXColorManagementFeedbackSurface { bool good(); wl_client* client(); - WP self; - WP surface; + WP m_self; + WP m_surface; private: - SP resource; - wl_client* pClient = nullptr; + SP m_resource; + wl_client* m_client = nullptr; WP m_currentPreferred; @@ -96,9 +96,9 @@ class CXXColorManagementParametricCreator { bool good(); wl_client* client(); - WP self; + WP m_self; - NColorManagement::SImageDescription settings; + NColorManagement::SImageDescription m_settings; private: enum eValuesSet : uint32_t { // NOLINT @@ -112,9 +112,9 @@ class CXXColorManagementParametricCreator { PC_FALL = (1 << 7), }; - SP resource; - wl_client* pClient = nullptr; - uint32_t valuesSet = 0; // enum eValuesSet + SP m_resource; + wl_client* m_client = nullptr; + uint32_t m_valuesSet = 0; // enum eValuesSet }; class CXXColorManagementImageDescription { @@ -125,13 +125,13 @@ class CXXColorManagementImageDescription { wl_client* client(); SP resource(); - WP self; + WP m_self; - NColorManagement::SImageDescription settings; + NColorManagement::SImageDescription m_settings; private: SP m_resource; - wl_client* pClient = nullptr; + wl_client* m_client = nullptr; bool m_allowGetInformation = false; friend class CXXColorManagementOutput; @@ -146,8 +146,8 @@ class CXXColorManagementImageDescriptionInfo { private: SP m_resource; - wl_client* pClient = nullptr; - NColorManagement::SImageDescription settings; + wl_client* m_client = nullptr; + NColorManagement::SImageDescription m_settings; }; class CXXColorManagementProtocol : public IWaylandProtocol { @@ -166,12 +166,12 @@ class CXXColorManagementProtocol : public IWaylandProtocol { void destroyResource(CXXColorManagementParametricCreator* resource); void destroyResource(CXXColorManagementImageDescription* resource); - std::vector> m_vManagers; - std::vector> m_vOutputs; - std::vector> m_vSurfaces; - std::vector> m_vFeedbackSurfaces; - std::vector> m_vParametricCreators; - std::vector> m_vImageDescriptions; + std::vector> m_managers; + std::vector> m_outputs; + std::vector> m_surfaces; + std::vector> m_feedbackSurfaces; + std::vector> m_parametricCreators; + std::vector> m_imageDescriptions; friend class CXXColorManager; friend class CXXColorManagementOutput; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 74f4192f..205e206a 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -623,7 +623,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (mode == RENDER_PASS_ALL || mode == RENDER_PASS_POPUP) { if (!pWindow->m_isX11) { - CBox geom = pWindow->m_xdgSurface->current.geometry; + CBox geom = pWindow->m_xdgSurface->m_current.geometry; renderdata.pos -= geom.pos(); renderdata.dontRound = true; // don't round popups @@ -1108,7 +1108,7 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_xdgSurface->current.geometry; + CBox geom = pWindow->m_xdgSurface->m_current.geometry; // ignore X and Y, adjust uv if (geom.x != 0 || geom.y != 0 || geom.width > projSizeUnscaled.x || geom.height > projSizeUnscaled.y) { diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 6a0b1c84..c62758c5 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -361,10 +361,10 @@ void CXWM::handleClientMessage(xcb_client_message_event_t* e) { if (!res) continue; - if (res->serial != XSURF->wlSerial || !XSURF->wlSerial) + if (res->m_serial != XSURF->wlSerial || !XSURF->wlSerial) continue; - associate(XSURF, res->surface.lock()); + associate(XSURF, res->m_surface.lock()); break; } @@ -958,7 +958,7 @@ CXWM::CXWM() : connection(g_pXWayland->pServer->xwmFDs[0].get()) { initSelection(); listeners.newWLSurface = PROTO::compositor->m_events.newSurface.registerListener([this](std::any d) { onNewSurface(std::any_cast>(d)); }); - listeners.newXShellSurface = PROTO::xwaylandShell->events.newSurface.registerListener([this](std::any d) { onNewResource(std::any_cast>(d)); }); + listeners.newXShellSurface = PROTO::xwaylandShell->m_events.newSurface.registerListener([this](std::any d) { onNewResource(std::any_cast>(d)); }); createWMWindow(); @@ -1067,10 +1067,10 @@ void CXWM::onNewResource(SP resource) { shellResources.emplace_back(resource); for (auto const& surf : surfaces) { - if (surf->resource || surf->wlSerial != resource->serial) + if (surf->resource || surf->wlSerial != resource->m_serial) continue; - associate(surf, resource->surface.lock()); + associate(surf, resource->m_surface.lock()); break; } } From 1c530cbc66dbff585d55e435efd5e6a6e5614f88 Mon Sep 17 00:00:00 2001 From: s1dd <140317709+nots1dd@users.noreply.github.com> Date: Mon, 5 May 2025 07:52:22 +0530 Subject: [PATCH 0154/1077] hyprpm: Minor optimizations and refactor of helpers and progress bar (#10246) * hyprpm: optimize sys.cpp * hyprpm: refine progress bar logic * chore: fix fetchSuperuserBins * chore: modify one line if/else statements * chore: fix if/else statements * chore: follow naming convention for const vars * chore: revert shell escape logic --- hyprpm/src/helpers/Sys.cpp | 84 ++++++++++++---------- hyprpm/src/main.cpp | 1 - hyprpm/src/progress/CProgressBar.cpp | 100 +++++++++++++-------------- 3 files changed, 96 insertions(+), 89 deletions(-) diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index 3c6501ee..8a6bb687 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -1,59 +1,72 @@ #include "Sys.hpp" #include "Die.hpp" #include "StringUtils.hpp" + #include #include #include #include +#include #include #include + using namespace Hyprutils::OS; using namespace Hyprutils::String; -static const std::vector SUPERUSER_BINARIES = { +inline constexpr std::array SUPERUSER_BINARIES = { "sudo", "doas", "run0", }; +static std::string fetchSuperuserBins() { + std::ostringstream oss; + auto it = SUPERUSER_BINARIES.begin(); + if (it != SUPERUSER_BINARIES.end()) { + oss << *it++; + for (; it != SUPERUSER_BINARIES.end(); ++it) + oss << ", " << *it; + } + + return oss.str(); +} + static bool executableExistsInPath(const std::string& exe) { - if (!getenv("PATH")) + const char* PATHENV = std::getenv("PATH"); + if (!PATHENV) return false; - static CVarList paths(getenv("PATH"), 0, ':', true); + CVarList paths(PATHENV, 0, ':', true); + std::error_code ec; - for (auto& p : paths) { - std::string path = p + std::string{"/"} + exe; - std::error_code ec; - if (!std::filesystem::exists(path, ec) || ec) + for (const auto& PATH : paths) { + std::filesystem::path candidate = std::filesystem::path(PATH) / exe; + if (!std::filesystem::exists(candidate, ec) || ec) continue; - - if (!std::filesystem::is_regular_file(path, ec) || ec) + if (!std::filesystem::is_regular_file(candidate, ec) || ec) continue; - - auto stat = std::filesystem::status(path, ec); + auto perms = std::filesystem::status(candidate, ec).permissions(); if (ec) continue; - - auto perms = stat.permissions(); - - return std::filesystem::perms::none != (perms & std::filesystem::perms::others_exec); + if ((perms & std::filesystem::perms::others_exec) != std::filesystem::perms::none) + return true; } return false; } -static std::pair execAndGet(std::string cmd, bool noRedirect = false) { +static std::optional> execAndGet(std::string_view cmd, bool noRedirect = false) { + std::string command = std::string{cmd}; if (!noRedirect) - cmd += " 2>&1"; - - CProcess proc("/bin/sh", {"-c", cmd}); + command += " 2>&1"; + CProcess proc("/bin/sh", {"-c", command}); if (!proc.runSync()) - return {"error", 1}; + // optional handles nullopt gracefully + return std::nullopt; - return {proc.stdOut(), proc.exitCode()}; + return {{proc.stdOut(), proc.exitCode()}}; } int NSys::getUID() { @@ -69,23 +82,22 @@ int NSys::getEUID() { } bool NSys::isSuperuser() { - return getuid() != geteuid() || !geteuid(); + return getuid() != geteuid() || geteuid() == 0; } std::string NSys::runAsSuperuser(const std::string& cmd) { - for (const auto& SB : SUPERUSER_BINARIES) { - if (!executableExistsInPath(SB)) + for (const auto& BIN : SUPERUSER_BINARIES) { + if (!executableExistsInPath(std::string{BIN})) continue; - const auto RESULT = execAndGet(std::string{SB} + " /bin/sh -c \"" + cmd + "\"", true); - - if (RESULT.second != 0) + const auto result = execAndGet(std::string{BIN} + " /bin/sh -c " + cmd, true); + if (!result.has_value() || result->second != 0) Debug::die("Failed to run a command as sudo. This could be due to an invalid password, or a hyprpm bug."); - return RESULT.first; + return result->first; } - Debug::die("Failed to find a superuser binary. Supported: sudo, doas, run0."); + Debug::die("{} {}", "Failed to find a superuser binary. Supported: ", fetchSuperuserBins()); return ""; } @@ -96,15 +108,15 @@ void NSys::cacheSudo() { } void NSys::dropSudo() { - for (const auto& SB : SUPERUSER_BINARIES) { - if (!executableExistsInPath(SB)) + for (const auto& BIN : SUPERUSER_BINARIES) { + if (!executableExistsInPath(std::string{BIN})) continue; - if (SB == std::string_view{"sudo"}) + if (BIN == "sudo") execAndGet("sudo -k"); - else - std::println("{}", infoString("Don't know how to drop timestamp for {}, ignoring.", SB)); - - return; + else { + // note the superuser binary that is being dropped + std::println("{}", infoString("Don't know how to drop timestamp for '{}', ignoring.", BIN)); + } } } diff --git a/hyprpm/src/main.cpp b/hyprpm/src/main.cpp index 6d0cda40..a70a0c0b 100644 --- a/hyprpm/src/main.cpp +++ b/hyprpm/src/main.cpp @@ -4,7 +4,6 @@ #include "core/DataState.hpp" #include "helpers/Sys.hpp" -#include #include #include #include diff --git a/hyprpm/src/progress/CProgressBar.cpp b/hyprpm/src/progress/CProgressBar.cpp index 9f2df08a..819a3f4f 100644 --- a/hyprpm/src/progress/CProgressBar.cpp +++ b/hyprpm/src/progress/CProgressBar.cpp @@ -1,82 +1,78 @@ #include "CProgressBar.hpp" #include -#include +#include #include #include - #include -#include -#include +#include + +#include +#include #include "../helpers/Colors.hpp" -void CProgressBar::printMessageAbove(const std::string& msg) { - struct winsize w; +static winsize getTerminalSize() { + winsize w{}; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + return w; +} - std::string spaces; - spaces.reserve(w.ws_col); - for (size_t i = 0; i < w.ws_col; ++i) { - spaces += ' '; - } +static void clearCurrentLine() { + std::print("\r\33[2K"); // ansi escape sequence to clear entire line +} - std::println("\r{}\r{}", spaces, msg); - print(); +void CProgressBar::printMessageAbove(const std::string& msg) { + clearCurrentLine(); + std::print("\r{}\n", msg); + + print(); // reprint bar underneath } void CProgressBar::print() { - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + const auto w = getTerminalSize(); - if (m_bFirstPrint) + if (m_bFirstPrint) { std::print("\n"); - m_bFirstPrint = false; - - std::string spaces; - spaces.reserve(w.ws_col); - for (size_t i = 0; i < w.ws_col; ++i) { - spaces += ' '; + m_bFirstPrint = false; } - std::print("\r{}\r", spaces); + clearCurrentLine(); - std::string message = ""; - - float percentDone = 0; - if (m_fPercentage >= 0) + float percentDone = 0.0f; + if (m_fPercentage >= 0.0f) percentDone = m_fPercentage; - else - percentDone = (float)m_iSteps / (float)m_iMaxSteps; - - const auto BARWIDTH = std::clamp(w.ws_col - static_cast(m_szCurrentMessage.length()) - 2, 0UL, 50UL); - - // draw bar - message += std::string{" "} + Colors::GREEN; - size_t i = 0; - for (; i < std::floor(percentDone * BARWIDTH); ++i) { - message += "━"; + else { + // check for divide-by-zero + percentDone = m_iMaxSteps > 0 ? static_cast(m_iSteps) / m_iMaxSteps : 0.0f; } + // clamp to ensure no overflows (sanity check) + percentDone = std::clamp(percentDone, 0.0f, 1.0f); + + const size_t BARWIDTH = std::clamp(w.ws_col - m_szCurrentMessage.length() - 2, 0, 50); + + std::ostringstream oss; + oss << ' ' << Colors::GREEN; + + size_t filled = static_cast(std::floor(percentDone * BARWIDTH)); + size_t i = 0; + + for (; i < filled; ++i) + oss << "━"; if (i < BARWIDTH) { - i++; - - message += std::string{"╍"} + Colors::RESET; - - for (; i < BARWIDTH; ++i) { - message += "━"; - } + oss << "╍" << Colors::RESET; + ++i; + for (; i < BARWIDTH; ++i) + oss << "━"; } else - message += Colors::RESET; + oss << Colors::RESET; - // draw progress - if (m_fPercentage >= 0) - message += " " + std::format("{}%", static_cast(percentDone * 100.0)) + " "; + if (m_fPercentage >= 0.0f) + oss << " " << std::format("{}%", static_cast(percentDone * 100.0)) << ' '; else - message += " " + std::format("{} / {}", m_iSteps, m_iMaxSteps) + " "; - - // draw message - std::print("{} {}", message, m_szCurrentMessage); + oss << " " << std::format("{} / {}", m_iSteps, m_iMaxSteps) << ' '; + std::print("{} {}", oss.str(), m_szCurrentMessage); std::fflush(stdout); } From 1f50cdfa8be87502c555d29bcfa327fb6bea551d Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 5 May 2025 13:09:00 +0100 Subject: [PATCH 0155/1077] hyprpm: wrap sudo cmd in quotes ref #10288 --- hyprpm/src/helpers/Sys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index 8a6bb687..70564ab8 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -90,7 +90,7 @@ std::string NSys::runAsSuperuser(const std::string& cmd) { if (!executableExistsInPath(std::string{BIN})) continue; - const auto result = execAndGet(std::string{BIN} + " /bin/sh -c " + cmd, true); + const auto result = execAndGet(std::string{BIN} + " /bin/sh -c \"" + cmd + "\"", true); if (!result.has_value() || result->second != 0) Debug::die("Failed to run a command as sudo. This could be due to an invalid password, or a hyprpm bug."); From c7eb14109865aa6a057b6cd2e36312da80da9caa Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Mon, 5 May 2025 23:40:37 +0200 Subject: [PATCH 0156/1077] renderer: always try to apply a mode if pixel size is invalid (#10291) --- src/helpers/Monitor.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 5b76e390..3228a690 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -124,13 +124,6 @@ void CMonitor::onConnect(bool noRule) { m_tearingState.canTear = m_output->getBackend()->type() == Aquamarine::AQ_BACKEND_DRM; - if (m_enabled) { - m_output->state->resetExplicitFences(); - m_output->state->setEnabled(true); - m_state.commit(); - return; - } - m_name = m_output->name; m_description = m_output->description; @@ -147,6 +140,15 @@ void CMonitor::onConnect(bool noRule) { // get monitor rule that matches SMonitorRule monitorRule = g_pConfigManager->getMonitorRuleFor(m_self.lock()); + if (m_enabled && !monitorRule.disabled) { + applyMonitorRule(&monitorRule, m_pixelSize == Vector2D{}); + + m_output->state->resetExplicitFences(); + m_output->state->setEnabled(true); + m_state.commit(); + return; + } + // if it's disabled, disable and ignore if (monitorRule.disabled) { @@ -437,10 +439,15 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { // Check if the rule isn't already applied // TODO: clean this up lol - if (!force && DELTALESSTHAN(m_pixelSize.x, RULE->resolution.x, 1) && DELTALESSTHAN(m_pixelSize.y, RULE->resolution.y, 1) && - DELTALESSTHAN(m_refreshRate, RULE->refreshRate, 1) && m_setScale == RULE->scale && - ((DELTALESSTHAN(m_position.x, RULE->offset.x, 1) && DELTALESSTHAN(m_position.y, RULE->offset.y, 1)) || RULE->offset == Vector2D(-INT32_MAX, -INT32_MAX)) && - m_transform == RULE->transform && RULE->enable10bit == m_enabled10bit && RULE->cmType == m_cmType && RULE->sdrSaturation == m_sdrSaturation && + if (!force && DELTALESSTHAN(m_pixelSize.x, RULE->resolution.x, 1) /* ↓ */ + && DELTALESSTHAN(m_pixelSize.y, RULE->resolution.y, 1) /* Resolution is the same */ + && m_pixelSize.x > 1 && m_pixelSize.y > 1 /* Active resolution is not invalid */ + && DELTALESSTHAN(m_refreshRate, RULE->refreshRate, 1) /* Refresh rate is the same */ + && m_setScale == RULE->scale /* Scale is the same */ + /* position is set correctly */ + && ((DELTALESSTHAN(m_position.x, RULE->offset.x, 1) && DELTALESSTHAN(m_position.y, RULE->offset.y, 1)) || RULE->offset == Vector2D(-INT32_MAX, -INT32_MAX)) + /* other properties hadnt changed */ + && m_transform == RULE->transform && RULE->enable10bit == m_enabled10bit && RULE->cmType == m_cmType && RULE->sdrSaturation == m_sdrSaturation && RULE->sdrBrightness == m_sdrBrightness && !std::memcmp(&m_customDrmMode, &RULE->drmMode, sizeof(m_customDrmMode))) { Debug::log(LOG, "Not applying a new rule to {} because it's already applied!", m_name); From 997fefbc1113323ed2bf5d782bdafc0d17532647 Mon Sep 17 00:00:00 2001 From: davc0n Date: Mon, 5 May 2025 23:44:49 +0200 Subject: [PATCH 0157/1077] render: refactor class member vars (#10292) * render: refactor class member vars * render: fix clang format --- src/Compositor.cpp | 28 +- src/Compositor.hpp | 8 +- src/config/ConfigManager.cpp | 6 +- src/debug/HyprCtl.cpp | 8 +- src/debug/HyprDebugOverlay.cpp | 6 +- src/debug/HyprNotificationOverlay.cpp | 4 +- src/desktop/LayerSurface.cpp | 2 +- src/desktop/WLSurface.cpp | 4 +- src/desktop/Window.cpp | 6 +- src/helpers/Monitor.cpp | 8 +- src/hyprerror/HyprError.cpp | 6 +- src/layout/IHyprLayout.cpp | 2 +- src/main.cpp | 4 +- src/managers/AnimationManager.cpp | 2 +- src/managers/PointerManager.cpp | 20 +- src/protocols/Screencopy.cpp | 22 +- src/protocols/SinglePixel.cpp | 2 +- src/protocols/ToplevelExport.cpp | 16 +- src/protocols/core/Compositor.cpp | 2 +- src/protocols/core/DataDevice.cpp | 2 +- src/protocols/types/DMABuffer.cpp | 2 +- src/protocols/types/SurfaceState.cpp | 2 +- src/render/Framebuffer.cpp | 72 +- src/render/Framebuffer.hpp | 10 +- src/render/OpenGL.cpp | 998 +++++++++--------- src/render/OpenGL.hpp | 65 +- src/render/Renderbuffer.cpp | 44 +- src/render/Renderbuffer.hpp | 14 +- src/render/Renderer.cpp | 321 +++--- src/render/Renderer.hpp | 40 +- src/render/Shader.hpp | 3 - src/render/Texture.cpp | 66 +- src/render/Texture.hpp | 20 +- .../decorations/CHyprBorderDecoration.cpp | 74 +- .../decorations/CHyprBorderDecoration.hpp | 13 +- .../decorations/CHyprDropShadowDecoration.cpp | 66 +- .../decorations/CHyprDropShadowDecoration.hpp | 14 +- .../decorations/CHyprGroupBarDecoration.cpp | 136 +-- .../decorations/CHyprGroupBarDecoration.hpp | 20 +- .../decorations/DecorationPositioner.cpp | 42 +- .../decorations/DecorationPositioner.hpp | 4 +- .../decorations/IHyprWindowDecoration.cpp | 2 +- .../decorations/IHyprWindowDecoration.hpp | 2 +- src/render/pass/BorderPassElement.cpp | 8 +- src/render/pass/BorderPassElement.hpp | 2 +- src/render/pass/ClearPassElement.cpp | 4 +- src/render/pass/ClearPassElement.hpp | 2 +- src/render/pass/FramebufferElement.cpp | 26 +- src/render/pass/FramebufferElement.hpp | 2 +- src/render/pass/Pass.cpp | 126 +-- src/render/pass/Pass.hpp | 12 +- src/render/pass/RectPassElement.cpp | 30 +- src/render/pass/RectPassElement.hpp | 2 +- src/render/pass/RendererHintsPassElement.cpp | 6 +- src/render/pass/RendererHintsPassElement.hpp | 2 +- src/render/pass/ShadowPassElement.cpp | 4 +- src/render/pass/ShadowPassElement.hpp | 2 +- src/render/pass/SurfacePassElement.cpp | 174 +-- src/render/pass/SurfacePassElement.hpp | 2 +- src/render/pass/TexPassElement.cpp | 24 +- src/render/pass/TexPassElement.hpp | 2 +- src/render/pass/TextureMatteElement.cpp | 8 +- src/render/pass/TextureMatteElement.hpp | 2 +- 63 files changed, 1307 insertions(+), 1321 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index c5b1e2b3..dd098df2 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -136,21 +136,21 @@ static void aqLog(Aquamarine::eBackendLogLevel level, std::string msg) { } void CCompositor::bumpNofile() { - if (!getrlimit(RLIMIT_NOFILE, &m_sOriginalNofile)) - Debug::log(LOG, "Old rlimit: soft -> {}, hard -> {}", m_sOriginalNofile.rlim_cur, m_sOriginalNofile.rlim_max); + if (!getrlimit(RLIMIT_NOFILE, &m_originalNofile)) + Debug::log(LOG, "Old rlimit: soft -> {}, hard -> {}", m_originalNofile.rlim_cur, m_originalNofile.rlim_max); else { Debug::log(ERR, "Failed to get NOFILE rlimits"); - m_sOriginalNofile.rlim_max = 0; + m_originalNofile.rlim_max = 0; return; } - rlimit newLimit = m_sOriginalNofile; + rlimit newLimit = m_originalNofile; newLimit.rlim_cur = newLimit.rlim_max; if (setrlimit(RLIMIT_NOFILE, &newLimit) < 0) { Debug::log(ERR, "Failed bumping NOFILE limits higher"); - m_sOriginalNofile.rlim_max = 0; + m_originalNofile.rlim_max = 0; return; } @@ -159,10 +159,10 @@ void CCompositor::bumpNofile() { } void CCompositor::restoreNofile() { - if (m_sOriginalNofile.rlim_max <= 0) + if (m_originalNofile.rlim_max <= 0) return; - if (setrlimit(RLIMIT_NOFILE, &m_sOriginalNofile) < 0) + if (setrlimit(RLIMIT_NOFILE, &m_originalNofile) < 0) Debug::log(ERR, "Failed restoring NOFILE limits"); } @@ -176,7 +176,7 @@ void CCompositor::setMallocThreshold() { #endif } -CCompositor::CCompositor(bool onlyConfig) : m_onlyConfigVerification(onlyConfig), m_iHyprlandPID(getpid()) { +CCompositor::CCompositor(bool onlyConfig) : m_onlyConfigVerification(onlyConfig), m_hyprlandPID(getpid()) { if (onlyConfig) return; @@ -225,7 +225,7 @@ CCompositor::CCompositor(bool onlyConfig) : m_onlyConfigVerification(onlyConfig) Debug::log(LOG, "Runtime directory: {}", m_instancePath); - Debug::log(LOG, "Hyprland PID: {}", m_iHyprlandPID); + Debug::log(LOG, "Hyprland PID: {}", m_hyprlandPID); Debug::log(LOG, "===== SYSTEM INFO: ====="); @@ -710,7 +710,7 @@ void CCompositor::createLockFile() { std::ofstream ofs(PATH, std::ios::trunc); - ofs << m_iHyprlandPID << "\n" << m_wlDisplaySocket << "\n"; + ofs << m_hyprlandPID << "\n" << m_wlDisplaySocket << "\n"; ofs.close(); } @@ -2706,9 +2706,9 @@ void CCompositor::performUserChecks() { } } - if (g_pHyprOpenGL->failedAssetsNo > 0) { + if (g_pHyprOpenGL->m_failedAssetsNo > 0) { g_pHyprNotificationOverlay->addNotification(std::format("Hyprland failed to load {} essential asset{}, blame your distro's packager for doing a bad job at packaging!", - g_pHyprOpenGL->failedAssetsNo, g_pHyprOpenGL->failedAssetsNo > 1 ? "s" : ""), + g_pHyprOpenGL->m_failedAssetsNo, g_pHyprOpenGL->m_failedAssetsNo > 1 ? "s" : ""), CHyprColor{1.0, 0.1, 0.1, 1.0}, 15000, ICON_ERROR); } } @@ -3033,8 +3033,8 @@ void CCompositor::onNewMonitor(SP output) { // ready to process if we have a real monitor - if ((!g_pHyprRenderer->m_pMostHzMonitor || PNEWMONITOR->m_refreshRate > g_pHyprRenderer->m_pMostHzMonitor->m_refreshRate) && PNEWMONITOR->m_enabled) - g_pHyprRenderer->m_pMostHzMonitor = PNEWMONITOR; + if ((!g_pHyprRenderer->m_mostHzMonitor || PNEWMONITOR->m_refreshRate > g_pHyprRenderer->m_mostHzMonitor->m_refreshRate) && PNEWMONITOR->m_enabled) + g_pHyprRenderer->m_mostHzMonitor = PNEWMONITOR; g_pCompositor->m_readyToProcess = true; diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 7c81c777..b4a0c51c 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -152,7 +152,7 @@ class CCompositor { NColorManagement::SImageDescription getPreferredImageDescription(); bool shouldChangePreferredImageDescription(); - std::string explicitConfigPath; + std::string m_explicitConfigPath; private: void initAllSignals(); @@ -165,9 +165,9 @@ class CCompositor { void removeLockFile(); void setMallocThreshold(); - uint64_t m_iHyprlandPID = 0; - wl_event_source* m_critSigSource = nullptr; - rlimit m_sOriginalNofile = {}; + uint64_t m_hyprlandPID = 0; + wl_event_source* m_critSigSource = nullptr; + rlimit m_originalNofile = {}; }; inline UP g_pCompositor; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 08024e80..90e4fe12 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -857,8 +857,8 @@ std::optional CConfigManager::generateConfig(std::string configPath std::string CConfigManager::getMainConfigPath() { static std::string CONFIG_PATH = [this]() -> std::string { - if (!g_pCompositor->explicitConfigPath.empty()) - return g_pCompositor->explicitConfigPath; + if (!g_pCompositor->m_explicitConfigPath.empty()) + return g_pCompositor->m_explicitConfigPath; if (const auto CFG_ENV = getenv("HYPRLAND_CONFIG"); CFG_ENV) return CFG_ENV; @@ -1025,7 +1025,7 @@ void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { g_pInputManager->setTouchDeviceConfigs(); g_pInputManager->setTabletConfigs(); - g_pHyprOpenGL->m_bReloadScreenShader = true; + g_pHyprOpenGL->m_reloadScreenShader = true; g_pHyprOpenGL->ensureBackgroundTexturePresence(); } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 87546279..d3f9efa1 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1128,10 +1128,10 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) g_pLayoutManager->switchToLayout(*PLAYOUT); // update layout if (COMMAND.contains("decoration:screen_shader") || COMMAND == "source") - g_pHyprOpenGL->m_bReloadScreenShader = true; + g_pHyprOpenGL->m_reloadScreenShader = true; if (COMMAND.contains("blur") || COMMAND == "source") { - for (auto& [m, rd] : g_pHyprOpenGL->m_mMonitorRenderResources) { + for (auto& [m, rd] : g_pHyprOpenGL->m_monitorRenderResources) { rd.blurFBDirty = true; } } @@ -1821,9 +1821,9 @@ std::string CHyprCtl::getReply(std::string request) { g_pLayoutManager->switchToLayout(*PLAYOUT); // update layout - g_pHyprOpenGL->m_bReloadScreenShader = true; + g_pHyprOpenGL->m_reloadScreenShader = true; - for (auto& [m, rd] : g_pHyprOpenGL->m_mMonitorRenderResources) { + for (auto& [m, rd] : g_pHyprOpenGL->m_monitorRenderResources) { rd.blurFBDirty = true; } diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index e5714f4f..522b3a83 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -57,7 +57,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) { m_monitor = pMonitor; // anim data too - const auto PMONITORFORTICKS = g_pHyprRenderer->m_pMostHzMonitor ? g_pHyprRenderer->m_pMostHzMonitor.lock() : g_pCompositor->m_lastMonitor.lock(); + const auto PMONITORFORTICKS = g_pHyprRenderer->m_mostHzMonitor ? g_pHyprRenderer->m_mostHzMonitor.lock() : g_pCompositor->m_lastMonitor.lock(); if (PMONITORFORTICKS) { if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->m_refreshRate) m_lastAnimationTicks.pop_front(); @@ -260,7 +260,7 @@ void CHyprDebugOverlay::draw() { // copy the data to an OpenGL texture we have const auto DATA = cairo_image_surface_get_data(m_cairoSurface); m_texture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); + glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -274,5 +274,5 @@ void CHyprDebugOverlay::draw() { CTexPassElement::SRenderData data; data.tex = m_texture; data.box = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y}; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index 1dc6e167..f8dd69ab 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -235,7 +235,7 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { // copy the data to an OpenGL texture we have const auto DATA = cairo_image_surface_get_data(m_cairoSurface); m_texture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); + glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -251,7 +251,7 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { data.box = {0, 0, MONSIZE.x, MONSIZE.y}; data.a = 1.F; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } bool CHyprNotificationOverlay::hasAny() { diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 61cca488..a5d9067a 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -74,7 +74,7 @@ CLayerSurface::~CLayerSurface() { if (m_surface) m_surface->unassign(); g_pHyprRenderer->makeEGLCurrent(); - std::erase_if(g_pHyprOpenGL->m_mLayerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == m_self.lock(); }); + std::erase_if(g_pHyprOpenGL->m_layerFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.lock() == m_self.lock(); }); for (auto const& mon : g_pCompositor->m_realMonitors) { for (auto& lsl : mon->m_layerSurfaceLayers) { diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp index 853f14c0..a7b9e620 100644 --- a/src/desktop/WLSurface.cpp +++ b/src/desktop/WLSurface.cpp @@ -143,8 +143,8 @@ void CWLSurface::destroy() { m_subsurfaceOwner = nullptr; m_inert = true; - if (g_pHyprRenderer && g_pHyprRenderer->m_sLastCursorData.surf && g_pHyprRenderer->m_sLastCursorData.surf->get() == this) - g_pHyprRenderer->m_sLastCursorData.surf.reset(); + if (g_pHyprRenderer && g_pHyprRenderer->m_lastCursorData.surf && g_pHyprRenderer->m_lastCursorData.surf->get() == this) + g_pHyprRenderer->m_lastCursorData.surf.reset(); m_resource.reset(); diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index a8fcf3a1..6e6e51a1 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -126,7 +126,7 @@ CWindow::~CWindow() { return; g_pHyprRenderer->makeEGLCurrent(); - std::erase_if(g_pHyprOpenGL->m_mWindowFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.get() == this; }); + std::erase_if(g_pHyprOpenGL->m_windowFramebuffers, [&](const auto& other) { return other.first.expired() || other.first.get() == this; }); } SBoxExtents CWindow::getFullWindowExtents() { @@ -1160,7 +1160,7 @@ bool CWindow::opaque() { return false; if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->surface && m_xwaylandSurface->surface->m_current.texture) - return m_xwaylandSurface->surface->m_current.texture->m_bOpaque; + return m_xwaylandSurface->surface->m_current.texture->m_opaque; if (!m_wlSurface->resource() || !m_wlSurface->resource()->m_current.texture) return false; @@ -1170,7 +1170,7 @@ bool CWindow::opaque() { if (EXTENTS.w >= m_xdgSurface->m_surface->m_current.bufferSize.x && EXTENTS.h >= m_xdgSurface->m_surface->m_current.bufferSize.y) return true; - return m_wlSurface->resource()->m_current.texture->m_bOpaque; + return m_wlSurface->resource()->m_current.texture->m_opaque; } float CWindow::rounding() { diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 3228a690..dab29544 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -388,7 +388,7 @@ void CMonitor::onDisconnect(bool destroy) { if (g_pCompositor->m_lastMonitor == m_self) g_pCompositor->setActiveMonitor(BACKUPMON ? BACKUPMON : g_pCompositor->m_unsafeOutput.lock()); - if (g_pHyprRenderer->m_pMostHzMonitor == m_self) { + if (g_pHyprRenderer->m_mostHzMonitor == m_self) { int mostHz = 0; PHLMONITOR pMonitorMostHz = nullptr; @@ -399,7 +399,7 @@ void CMonitor::onDisconnect(bool destroy) { } } - g_pHyprRenderer->m_pMostHzMonitor = pMonitorMostHz; + g_pHyprRenderer->m_mostHzMonitor = pMonitorMostHz; } std::erase_if(g_pCompositor->m_monitors, [&](PHLMONITOR& el) { return el.get() == this; }); } @@ -1362,7 +1362,7 @@ void CMonitor::setCTM(const Mat3x3& ctm_) { } bool CMonitor::attemptDirectScanout() { - if (!m_mirrors.empty() || isMirror() || g_pHyprRenderer->m_bDirectScanoutBlocked) + if (!m_mirrors.empty() || isMirror() || g_pHyprRenderer->m_directScanoutBlocked) return false; // do not DS if this monitor is being mirrored. Will break the functionality. if (g_pPointerManager->softwareLockedFor(m_self.lock())) @@ -1383,7 +1383,7 @@ bool CMonitor::attemptDirectScanout() { // we can't scanout shm buffers. const auto params = PSURFACE->m_current.buffer->dmabuf(); - if (!params.success || !PSURFACE->m_current.texture->m_pEglImage /* dmabuf */) + if (!params.success || !PSURFACE->m_current.texture->m_eglImage /* dmabuf */) return false; Debug::log(TRACE, "attemptDirectScanout: surface {:x} passed, will attempt, buffer {}", (uintptr_t)PSURFACE.get(), (uintptr_t)PSURFACE->m_current.buffer.m_buffer.get()); diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 9dd26e2c..d9f50db3 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -143,7 +143,7 @@ void CHyprError::createQueued() { // copy the data to an OpenGL texture we have const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); m_texture->allocate(); - glBindTexture(GL_TEXTURE_2D, m_texture->m_iTexID); + glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -194,7 +194,7 @@ void CHyprError::draw() { } } - const auto PMONITOR = g_pHyprOpenGL->m_RenderData.pMonitor; + const auto PMONITOR = g_pHyprOpenGL->m_renderData.pMonitor; CBox monbox = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y}; @@ -211,7 +211,7 @@ void CHyprError::draw() { data.box = monbox; data.a = m_fadeOpacity->value(); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } void CHyprError::destroy() { diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index b546c1f8..e1077a93 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -553,7 +553,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { const auto TIMERDELTA = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - TIMER).count(); const auto MSDELTA = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - MSTIMER).count(); - const auto MSMONITOR = 1000.0 / g_pHyprRenderer->m_pMostHzMonitor->m_refreshRate; + const auto MSMONITOR = 1000.0 / g_pHyprRenderer->m_mostHzMonitor->m_refreshRate; static int totalMs = 0; bool canSkipUpdate = true; diff --git a/src/main.cpp b/src/main.cpp index 0cb5585e..d7624c4e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -160,8 +160,8 @@ int main(int argc, char** argv) { // let's init the compositor. // it initializes basic Wayland stuff in the constructor. try { - g_pCompositor = makeUnique(verifyConfig); - g_pCompositor->explicitConfigPath = configPath; + g_pCompositor = makeUnique(verifyConfig); + g_pCompositor->m_explicitConfigPath = configPath; } catch (const std::exception& e) { std::println(stderr, "Hyprland threw in ctor: {}\nCannot continue.", e.what()); return 1; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index d49b4790..d12b91a5 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -255,7 +255,7 @@ void CHyprAnimationManager::scheduleTick() { m_tickScheduled = true; - const auto PMOSTHZ = g_pHyprRenderer->m_pMostHzMonitor; + const auto PMOSTHZ = g_pHyprRenderer->m_mostHzMonitor; if (!PMOSTHZ) { m_animationTimer->updateTimeout(std::chrono::milliseconds(16)); diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index d9dd602e..5415e7be 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -471,11 +471,11 @@ SP CPointerManager::renderHWCursorBuffer(SPm_current.texture) { - Debug::log(TRACE, "Cursor CPU surface: format {}, expecting AR24", NFormatUtils::drmFormatName(SURFACE->m_current.texture->m_iDrmFormat)); - if (SURFACE->m_current.texture->m_iDrmFormat == DRM_FORMAT_ABGR8888) { + Debug::log(TRACE, "Cursor CPU surface: format {}, expecting AR24", NFormatUtils::drmFormatName(SURFACE->m_current.texture->m_drmFormat)); + if (SURFACE->m_current.texture->m_drmFormat == DRM_FORMAT_ABGR8888) { Debug::log(TRACE, "Cursor CPU surface format AB24, will flip. WARNING: this will break on big endian!"); flipRB = true; - } else if (SURFACE->m_current.texture->m_iDrmFormat != DRM_FORMAT_ARGB8888) { + } else if (SURFACE->m_current.texture->m_drmFormat != DRM_FORMAT_ARGB8888) { Debug::log(TRACE, "Cursor CPU surface format rejected, falling back to sw"); return nullptr; } @@ -484,7 +484,7 @@ SP CPointerManager::renderHWCursorBuffer(SPm_vSize.x * 4 * texture->m_vSize.y); + texData.resize(texture->m_size.x * 4 * texture->m_size.y); memset(texData.data(), 0x00, texData.size()); } @@ -506,13 +506,13 @@ SP CPointerManager::renderHWCursorBuffer(SPm_vSize.x, texture->m_vSize.y, texture->m_vSize.x * 4); + cairo_image_surface_create_for_data((unsigned char*)texData.data(), CAIRO_FORMAT_ARGB32, texture->m_size.x, texture->m_size.y, texture->m_size.x * 4); auto CAIRO = cairo_create(CAIROSURFACE); cairo_set_operator(CAIRO, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(CAIRO, 0, 0, 0, 0); - cairo_rectangle(CAIRO, 0, 0, texture->m_vSize.x, texture->m_vSize.y); + cairo_rectangle(CAIRO, 0, 0, texture->m_size.x, texture->m_size.y); cairo_fill(CAIRO); const auto PATTERNPRE = cairo_pattern_create_for_surface(CAIRODATASURFACE); @@ -523,7 +523,7 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->m_transform; // we need to scale the cursor to the right size, because it might not be (esp with XCursor) - const auto SCALE = texture->m_vSize / (m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale); + const auto SCALE = texture->m_size / (m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale); cairo_matrix_scale(&matrixPre, SCALE.x, SCALE.y); if (TR) { @@ -564,7 +564,7 @@ SP CPointerManager::renderHWCursorBuffer(SPmakeEGLCurrent(); - g_pHyprOpenGL->m_RenderData.pMonitor = state->monitor; + g_pHyprOpenGL->m_renderData.pMonitor = state->monitor; auto RBO = g_pHyprRenderer->getOrCreateRenderbuffer(buf, state->monitor->m_cursorSwapchain->currentOptions().format); if (!RBO) { @@ -585,7 +585,7 @@ SP CPointerManager::renderHWCursorBuffer(SPend(); glFlush(); - g_pHyprOpenGL->m_RenderData.pMonitor.reset(); + g_pHyprOpenGL->m_renderData.pMonitor.reset(); g_pHyprRenderer->onRenderbufferDestroy(RBO.get()); @@ -625,7 +625,7 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: data.tex = texture; data.box = box.round(); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); if (m_currentCursorImage.surface) m_currentCursorImage.surface->resource()->frame(now); diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 2c84fe93..e0ef6783 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -146,7 +146,7 @@ void CScreencopyFrame::copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer_ PROTO::screencopy->m_framesAwaitingWrite.emplace_back(m_self); - g_pHyprRenderer->m_bDirectScanoutBlocked = true; + g_pHyprRenderer->m_directScanoutBlocked = true; if (!m_withDamage) g_pHyprRenderer->damageMonitor(m_monitor.lock()); @@ -215,12 +215,11 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); - CBox texbox = - CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + CBox texbox = CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_screencopyDeniedTexture->m_size}.translate(-g_pHyprOpenGL->m_screencopyDeniedTexture->m_size / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_screencopyDeniedTexture, texbox, 1); } - g_pHyprOpenGL->m_RenderData.blockScreenShader = true; + g_pHyprOpenGL->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender([callback]() { LOGM(TRACE, "Copied frame via dma"); @@ -261,9 +260,8 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->clear(Colors::BLACK); else { g_pHyprOpenGL->clear(Colors::BLACK); - CBox texbox = - CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + CBox texbox = CBox{m_monitor->m_transformedSize / 2.F, g_pHyprOpenGL->m_screencopyDeniedTexture->m_size}.translate(-g_pHyprOpenGL->m_screencopyDeniedTexture->m_size / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_screencopyDeniedTexture, texbox, 1); } #ifndef GLES2 @@ -281,11 +279,11 @@ bool CScreencopyFrame::copyShm() { auto glFormat = PFORMAT->flipRB ? GL_BGRA_EXT : GL_RGBA; - g_pHyprOpenGL->m_RenderData.blockScreenShader = true; + g_pHyprOpenGL->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); g_pHyprRenderer->makeEGLCurrent(); - g_pHyprOpenGL->m_RenderData.pMonitor = m_monitor; + g_pHyprOpenGL->m_renderData.pMonitor = m_monitor; fb.bind(); glPixelStorei(GL_PACK_ALIGNMENT, 1); @@ -304,7 +302,7 @@ bool CScreencopyFrame::copyShm() { } } - g_pHyprOpenGL->m_RenderData.pMonitor.reset(); + g_pHyprOpenGL->m_renderData.pMonitor.reset(); #ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); @@ -414,7 +412,7 @@ void CScreencopyProtocol::destroyResource(CScreencopyFrame* frame) { void CScreencopyProtocol::onOutputCommit(PHLMONITOR pMonitor) { if (m_framesAwaitingWrite.empty()) { - g_pHyprRenderer->m_bDirectScanoutBlocked = false; + g_pHyprRenderer->m_directScanoutBlocked = false; return; // nothing to share } diff --git a/src/protocols/SinglePixel.cpp b/src/protocols/SinglePixel.cpp index 7baddfd9..d069da0d 100644 --- a/src/protocols/SinglePixel.cpp +++ b/src/protocols/SinglePixel.cpp @@ -16,7 +16,7 @@ CSinglePixelBuffer::CSinglePixelBuffer(uint32_t id, wl_client* client, CHyprColo m_resource = CWLBufferResource::create(makeShared(client, 1, id)); - m_success = m_texture->m_iTexID; + m_success = m_texture->m_texID; size = {1, 1}; diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 04781a9b..498bcba9 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -264,9 +264,8 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { - CBox texbox = - CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + CBox texbox = CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_screencopyDeniedTexture->m_size}.translate(-g_pHyprOpenGL->m_screencopyDeniedTexture->m_size / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_screencopyDeniedTexture, texbox, 1); } const auto PFORMAT = NFormatUtils::getPixelFormatFromDRM(shm.format); @@ -275,11 +274,11 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { return false; } - g_pHyprOpenGL->m_RenderData.blockScreenShader = true; + g_pHyprOpenGL->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); g_pHyprRenderer->makeEGLCurrent(); - g_pHyprOpenGL->m_RenderData.pMonitor = PMONITOR; + g_pHyprOpenGL->m_renderData.pMonitor = PMONITOR; outFB.bind(); #ifndef GLES2 @@ -352,12 +351,11 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { - CBox texbox = - CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize}.translate(-g_pHyprOpenGL->m_pScreencopyDeniedTexture->m_vSize / 2.F); - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pScreencopyDeniedTexture, texbox, 1); + CBox texbox = CBox{PMONITOR->m_transformedSize / 2.F, g_pHyprOpenGL->m_screencopyDeniedTexture->m_size}.translate(-g_pHyprOpenGL->m_screencopyDeniedTexture->m_size / 2.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_screencopyDeniedTexture, texbox, 1); } - g_pHyprOpenGL->m_RenderData.blockScreenShader = true; + g_pHyprOpenGL->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); if (overlayCursor) { diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index e6390dbf..07bad77b 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -495,7 +495,7 @@ void CWLSurfaceResource::commitState(SSurfaceState& state) { } if (m_current.texture) - m_current.texture->m_eTransform = wlTransformToHyprutils(m_current.transform); + m_current.texture->m_transform = wlTransformToHyprutils(m_current.transform); if (m_role->role() == SURFACE_ROLE_SUBSURFACE) { auto subsurface = ((CSubsurfaceRole*)m_role.get())->m_subsurface.lock(); diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 63523cd9..67c16e43 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -814,7 +814,7 @@ void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, const Time::steady_tp CTexPassElement::SRenderData data; data.tex = m_dnd.dndSurface->m_current.texture; data.box = box; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); CBox damageBox = CBox{surfacePos, m_dnd.dndSurface->m_current.size}.expand(5); g_pHyprRenderer->damageBox(damageBox); diff --git a/src/protocols/types/DMABuffer.cpp b/src/protocols/types/DMABuffer.cpp index d8e41959..326c0736 100644 --- a/src/protocols/types/DMABuffer.cpp +++ b/src/protocols/types/DMABuffer.cpp @@ -37,7 +37,7 @@ CDMABuffer::CDMABuffer(uint32_t id, wl_client* client, Aquamarine::SDMABUFAttrs m_texture = makeShared(m_attrs, eglImage); // texture takes ownership of the eglImage m_opaque = NFormatUtils::isFormatOpaque(m_attrs.format); - m_success = m_texture->m_iTexID; + m_success = m_texture->m_texID; if UNLIKELY (!m_success) Debug::log(ERR, "Failed to create a dmabuf: texture is null"); diff --git a/src/protocols/types/SurfaceState.cpp b/src/protocols/types/SurfaceState.cpp index 7d1f5702..be1160fb 100644 --- a/src/protocols/types/SurfaceState.cpp +++ b/src/protocols/types/SurfaceState.cpp @@ -39,7 +39,7 @@ void SSurfaceState::updateSynchronousTexture(SP lastTexture) { if (dataPtr) { auto drmFmt = NFormatUtils::shmToDRM(fmt); auto stride = bufferSize.y ? size / bufferSize.y : 0; - if (lastTexture && lastTexture->m_isSynchronous && lastTexture->m_vSize == bufferSize) { + if (lastTexture && lastTexture->m_isSynchronous && lastTexture->m_size == bufferSize) { texture = lastTexture; texture->update(drmFmt, dataPtr, stride, accumulateBufferDamage()); } else diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index c35b9600..ae2ce2a6 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -12,10 +12,10 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { uint32_t glFormat = NFormatUtils::drmFormatToGL(drmFormat); uint32_t glType = NFormatUtils::glFormatToType(glFormat); - if (!m_cTex) { - m_cTex = makeShared(); - m_cTex->allocate(); - glBindTexture(GL_TEXTURE_2D, m_cTex->m_iTexID); + if (!m_tex) { + m_tex = makeShared(); + m_tex->allocate(); + glBindTexture(GL_TEXTURE_2D, m_tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); @@ -23,24 +23,24 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { firstAlloc = true; } - if (!m_iFbAllocated) { - glGenFramebuffers(1, &m_iFb); - m_iFbAllocated = true; - firstAlloc = true; + if (!m_fbAllocated) { + glGenFramebuffers(1, &m_fb); + m_fbAllocated = true; + firstAlloc = true; } - if (firstAlloc || m_vSize != Vector2D(w, h)) { - glBindTexture(GL_TEXTURE_2D, m_cTex->m_iTexID); + if (firstAlloc || m_size != Vector2D(w, h)) { + glBindTexture(GL_TEXTURE_2D, m_tex->m_texID); glTexImage2D(GL_TEXTURE_2D, 0, glFormat, w, h, 0, GL_RGBA, glType, nullptr); - glBindFramebuffer(GL_FRAMEBUFFER, m_iFb); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_cTex->m_iTexID, 0); + glBindFramebuffer(GL_FRAMEBUFFER, m_fb); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_tex->m_texID, 0); // TODO: Allow this with gles2 #ifndef GLES2 - if (m_pStencilTex) { - glBindTexture(GL_TEXTURE_2D, m_pStencilTex->m_iTexID); + if (m_stencilTex) { + glBindTexture(GL_TEXTURE_2D, m_stencilTex->m_texID); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, w, h, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_pStencilTex->m_iTexID, 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_stencilTex->m_texID, 0); } #endif @@ -53,7 +53,7 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0); - m_vSize = Vector2D(w, h); + m_size = Vector2D(w, h); return true; } @@ -61,13 +61,13 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { void CFramebuffer::addStencil(SP tex) { // TODO: Allow this with gles2 #ifndef GLES2 - m_pStencilTex = tex; - glBindTexture(GL_TEXTURE_2D, m_pStencilTex->m_iTexID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, m_vSize.x, m_vSize.y, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); + m_stencilTex = tex; + glBindTexture(GL_TEXTURE_2D, m_stencilTex->m_texID); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, m_size.x, m_size.y, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); - glBindFramebuffer(GL_FRAMEBUFFER, m_iFb); + glBindFramebuffer(GL_FRAMEBUFFER, m_fb); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_pStencilTex->m_iTexID, 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_stencilTex->m_texID, 0); auto status = glCheckFramebufferStatus(GL_FRAMEBUFFER); RASSERT((status == GL_FRAMEBUFFER_COMPLETE), "Failed adding a stencil to fbo!", status); @@ -79,15 +79,15 @@ void CFramebuffer::addStencil(SP tex) { void CFramebuffer::bind() { #ifndef GLES2 - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_iFb); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fb); #else glBindFramebuffer(GL_FRAMEBUFFER, m_iFb); #endif if (g_pHyprOpenGL) - glViewport(0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.y); + glViewport(0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.y); else - glViewport(0, 0, m_vSize.x, m_vSize.y); + glViewport(0, 0, m_size.x, m_size.y); } void CFramebuffer::unbind() { @@ -99,20 +99,20 @@ void CFramebuffer::unbind() { } void CFramebuffer::release() { - if (m_iFbAllocated) { - glBindFramebuffer(GL_FRAMEBUFFER, m_iFb); + if (m_fbAllocated) { + glBindFramebuffer(GL_FRAMEBUFFER, m_fb); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0); - glDeleteFramebuffers(1, &m_iFb); - m_iFbAllocated = false; - m_iFb = 0; + glDeleteFramebuffers(1, &m_fb); + m_fbAllocated = false; + m_fb = 0; } - if (m_cTex) - m_cTex.reset(); + if (m_tex) + m_tex.reset(); - m_vSize = Vector2D(); + m_size = Vector2D(); } CFramebuffer::~CFramebuffer() { @@ -120,17 +120,17 @@ CFramebuffer::~CFramebuffer() { } bool CFramebuffer::isAllocated() { - return m_iFbAllocated && m_cTex; + return m_fbAllocated && m_tex; } SP CFramebuffer::getTexture() { - return m_cTex; + return m_tex; } GLuint CFramebuffer::getFBID() { - return m_iFbAllocated ? m_iFb : 0; + return m_fbAllocated ? m_fb : 0; } SP CFramebuffer::getStencilTex() { - return m_pStencilTex; + return m_stencilTex; } diff --git a/src/render/Framebuffer.hpp b/src/render/Framebuffer.hpp index 092e548e..4e041573 100644 --- a/src/render/Framebuffer.hpp +++ b/src/render/Framebuffer.hpp @@ -19,14 +19,14 @@ class CFramebuffer { SP getStencilTex(); GLuint getFBID(); - Vector2D m_vSize; + Vector2D m_size; private: - SP m_cTex; - GLuint m_iFb = -1; - bool m_iFbAllocated = false; + SP m_tex; + GLuint m_fb = -1; + bool m_fbAllocated = false; - SP m_pStencilTex; + SP m_stencilTex; friend class CRenderbuffer; }; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index c213f860..6a568ed8 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -124,37 +124,37 @@ static int openRenderNode(int drmFd) { void CHyprOpenGLImpl::initEGL(bool gbm) { std::vector attrs; - if (m_sExts.KHR_display_reference) { + if (m_exts.KHR_display_reference) { attrs.push_back(EGL_TRACK_REFERENCES_KHR); attrs.push_back(EGL_TRUE); } attrs.push_back(EGL_NONE); - m_pEglDisplay = m_sProc.eglGetPlatformDisplayEXT(gbm ? EGL_PLATFORM_GBM_KHR : EGL_PLATFORM_DEVICE_EXT, gbm ? m_pGbmDevice : m_pEglDevice, attrs.data()); - if (m_pEglDisplay == EGL_NO_DISPLAY) + m_eglDisplay = m_proc.eglGetPlatformDisplayEXT(gbm ? EGL_PLATFORM_GBM_KHR : EGL_PLATFORM_DEVICE_EXT, gbm ? m_gbmDevice : m_eglDevice, attrs.data()); + if (m_eglDisplay == EGL_NO_DISPLAY) RASSERT(false, "EGL: failed to create a platform display"); attrs.clear(); EGLint major, minor; - if (eglInitialize(m_pEglDisplay, &major, &minor) == EGL_FALSE) + if (eglInitialize(m_eglDisplay, &major, &minor) == EGL_FALSE) RASSERT(false, "EGL: failed to initialize a platform display"); - const std::string EGLEXTENSIONS = (const char*)eglQueryString(m_pEglDisplay, EGL_EXTENSIONS); + const std::string EGLEXTENSIONS = (const char*)eglQueryString(m_eglDisplay, EGL_EXTENSIONS); - m_sExts.IMG_context_priority = EGLEXTENSIONS.contains("IMG_context_priority"); - m_sExts.EXT_create_context_robustness = EGLEXTENSIONS.contains("EXT_create_context_robustness"); - m_sExts.EXT_image_dma_buf_import = EGLEXTENSIONS.contains("EXT_image_dma_buf_import"); - m_sExts.EXT_image_dma_buf_import_modifiers = EGLEXTENSIONS.contains("EXT_image_dma_buf_import_modifiers"); + m_exts.IMG_context_priority = EGLEXTENSIONS.contains("IMG_context_priority"); + m_exts.EXT_create_context_robustness = EGLEXTENSIONS.contains("EXT_create_context_robustness"); + m_exts.EXT_image_dma_buf_import = EGLEXTENSIONS.contains("EXT_image_dma_buf_import"); + m_exts.EXT_image_dma_buf_import_modifiers = EGLEXTENSIONS.contains("EXT_image_dma_buf_import_modifiers"); - if (m_sExts.IMG_context_priority) { + if (m_exts.IMG_context_priority) { Debug::log(LOG, "EGL: IMG_context_priority supported, requesting high"); attrs.push_back(EGL_CONTEXT_PRIORITY_LEVEL_IMG); attrs.push_back(EGL_CONTEXT_PRIORITY_HIGH_IMG); } - if (m_sExts.EXT_create_context_robustness) { + if (m_exts.EXT_create_context_robustness) { Debug::log(LOG, "EGL: EXT_create_context_robustness supported, requesting lose on reset"); attrs.push_back(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT); attrs.push_back(EGL_LOSE_CONTEXT_ON_RESET_EXT); @@ -175,8 +175,8 @@ void CHyprOpenGLImpl::initEGL(bool gbm) { attrs.push_back(EGL_NONE); - m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); - if (m_pEglContext == EGL_NO_CONTEXT) { + m_eglContext = eglCreateContext(m_eglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); + if (m_eglContext == EGL_NO_CONTEXT) { #ifdef GLES2 RASSERT(false, "EGL: failed to create a context with GLES2.0"); #endif @@ -189,23 +189,23 @@ void CHyprOpenGLImpl::initEGL(bool gbm) { attrs.push_back(0); attrs.push_back(EGL_NONE); - m_pEglContext = eglCreateContext(m_pEglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); + m_eglContext = eglCreateContext(m_eglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); m_eglContextVersion = EGL_CONTEXT_GLES_3_0; - if (m_pEglContext == EGL_NO_CONTEXT) + if (m_eglContext == EGL_NO_CONTEXT) RASSERT(false, "EGL: failed to create a context with either GLES3.2 or 3.0"); } - if (m_sExts.IMG_context_priority) { + if (m_exts.IMG_context_priority) { EGLint priority = EGL_CONTEXT_PRIORITY_MEDIUM_IMG; - eglQueryContext(m_pEglDisplay, m_pEglContext, EGL_CONTEXT_PRIORITY_LEVEL_IMG, &priority); + eglQueryContext(m_eglDisplay, m_eglContext, EGL_CONTEXT_PRIORITY_LEVEL_IMG, &priority); if (priority != EGL_CONTEXT_PRIORITY_HIGH_IMG) Debug::log(ERR, "EGL: Failed to obtain a high priority context"); else Debug::log(LOG, "EGL: Got a high priority context"); } - eglMakeCurrent(m_pEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, m_pEglContext); + eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, m_eglContext); } static bool drmDeviceHasName(const drmDevice* device, const std::string& name) { @@ -221,7 +221,7 @@ static bool drmDeviceHasName(const drmDevice* device, const std::string& name) { EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { EGLint nDevices = 0; - if (!m_sProc.eglQueryDevicesEXT(0, nullptr, &nDevices)) { + if (!m_proc.eglQueryDevicesEXT(0, nullptr, &nDevices)) { Debug::log(ERR, "eglDeviceFromDRMFD: eglQueryDevicesEXT failed"); return EGL_NO_DEVICE_EXT; } @@ -234,7 +234,7 @@ EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { std::vector devices; devices.resize(nDevices); - if (!m_sProc.eglQueryDevicesEXT(nDevices, devices.data(), &nDevices)) { + if (!m_proc.eglQueryDevicesEXT(nDevices, devices.data(), &nDevices)) { Debug::log(ERR, "eglDeviceFromDRMFD: eglQueryDevicesEXT failed (2)"); return EGL_NO_DEVICE_EXT; } @@ -246,7 +246,7 @@ EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { } for (auto const& d : devices) { - auto devName = m_sProc.eglQueryDeviceStringEXT(d, EGL_DRM_DEVICE_FILE_EXT); + auto devName = m_proc.eglQueryDeviceStringEXT(d, EGL_DRM_DEVICE_FILE_EXT); if (!devName) continue; @@ -262,53 +262,53 @@ EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { return EGL_NO_DEVICE_EXT; } -CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_drmFD) { +CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmFD) { const std::string EGLEXTENSIONS = (const char*)eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); Debug::log(LOG, "Supported EGL extensions: ({}) {}", std::count(EGLEXTENSIONS.begin(), EGLEXTENSIONS.end(), ' '), EGLEXTENSIONS); - m_sExts.KHR_display_reference = EGLEXTENSIONS.contains("KHR_display_reference"); + m_exts.KHR_display_reference = EGLEXTENSIONS.contains("KHR_display_reference"); - loadGLProc(&m_sProc.glEGLImageTargetRenderbufferStorageOES, "glEGLImageTargetRenderbufferStorageOES"); - loadGLProc(&m_sProc.eglCreateImageKHR, "eglCreateImageKHR"); - loadGLProc(&m_sProc.eglDestroyImageKHR, "eglDestroyImageKHR"); - loadGLProc(&m_sProc.eglQueryDmaBufFormatsEXT, "eglQueryDmaBufFormatsEXT"); - loadGLProc(&m_sProc.eglQueryDmaBufModifiersEXT, "eglQueryDmaBufModifiersEXT"); - loadGLProc(&m_sProc.glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES"); - loadGLProc(&m_sProc.eglDebugMessageControlKHR, "eglDebugMessageControlKHR"); - loadGLProc(&m_sProc.eglGetPlatformDisplayEXT, "eglGetPlatformDisplayEXT"); - loadGLProc(&m_sProc.eglCreateSyncKHR, "eglCreateSyncKHR"); - loadGLProc(&m_sProc.eglDestroySyncKHR, "eglDestroySyncKHR"); - loadGLProc(&m_sProc.eglDupNativeFenceFDANDROID, "eglDupNativeFenceFDANDROID"); - loadGLProc(&m_sProc.eglWaitSyncKHR, "eglWaitSyncKHR"); + loadGLProc(&m_proc.glEGLImageTargetRenderbufferStorageOES, "glEGLImageTargetRenderbufferStorageOES"); + loadGLProc(&m_proc.eglCreateImageKHR, "eglCreateImageKHR"); + loadGLProc(&m_proc.eglDestroyImageKHR, "eglDestroyImageKHR"); + loadGLProc(&m_proc.eglQueryDmaBufFormatsEXT, "eglQueryDmaBufFormatsEXT"); + loadGLProc(&m_proc.eglQueryDmaBufModifiersEXT, "eglQueryDmaBufModifiersEXT"); + loadGLProc(&m_proc.glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES"); + loadGLProc(&m_proc.eglDebugMessageControlKHR, "eglDebugMessageControlKHR"); + loadGLProc(&m_proc.eglGetPlatformDisplayEXT, "eglGetPlatformDisplayEXT"); + loadGLProc(&m_proc.eglCreateSyncKHR, "eglCreateSyncKHR"); + loadGLProc(&m_proc.eglDestroySyncKHR, "eglDestroySyncKHR"); + loadGLProc(&m_proc.eglDupNativeFenceFDANDROID, "eglDupNativeFenceFDANDROID"); + loadGLProc(&m_proc.eglWaitSyncKHR, "eglWaitSyncKHR"); - RASSERT(m_sProc.eglCreateSyncKHR, "Display driver doesn't support eglCreateSyncKHR"); - RASSERT(m_sProc.eglDupNativeFenceFDANDROID, "Display driver doesn't support eglDupNativeFenceFDANDROID"); - RASSERT(m_sProc.eglWaitSyncKHR, "Display driver doesn't support eglWaitSyncKHR"); + RASSERT(m_proc.eglCreateSyncKHR, "Display driver doesn't support eglCreateSyncKHR"); + RASSERT(m_proc.eglDupNativeFenceFDANDROID, "Display driver doesn't support eglDupNativeFenceFDANDROID"); + RASSERT(m_proc.eglWaitSyncKHR, "Display driver doesn't support eglWaitSyncKHR"); if (EGLEXTENSIONS.contains("EGL_EXT_device_base") || EGLEXTENSIONS.contains("EGL_EXT_device_enumeration")) - loadGLProc(&m_sProc.eglQueryDevicesEXT, "eglQueryDevicesEXT"); + loadGLProc(&m_proc.eglQueryDevicesEXT, "eglQueryDevicesEXT"); if (EGLEXTENSIONS.contains("EGL_EXT_device_base") || EGLEXTENSIONS.contains("EGL_EXT_device_query")) { - loadGLProc(&m_sProc.eglQueryDeviceStringEXT, "eglQueryDeviceStringEXT"); - loadGLProc(&m_sProc.eglQueryDisplayAttribEXT, "eglQueryDisplayAttribEXT"); + loadGLProc(&m_proc.eglQueryDeviceStringEXT, "eglQueryDeviceStringEXT"); + loadGLProc(&m_proc.eglQueryDisplayAttribEXT, "eglQueryDisplayAttribEXT"); } if (EGLEXTENSIONS.contains("EGL_KHR_debug")) { - loadGLProc(&m_sProc.eglDebugMessageControlKHR, "eglDebugMessageControlKHR"); + loadGLProc(&m_proc.eglDebugMessageControlKHR, "eglDebugMessageControlKHR"); static const EGLAttrib debugAttrs[] = { EGL_DEBUG_MSG_CRITICAL_KHR, EGL_TRUE, EGL_DEBUG_MSG_ERROR_KHR, EGL_TRUE, EGL_DEBUG_MSG_WARN_KHR, EGL_TRUE, EGL_DEBUG_MSG_INFO_KHR, EGL_TRUE, EGL_NONE, }; - m_sProc.eglDebugMessageControlKHR(::eglLog, debugAttrs); + m_proc.eglDebugMessageControlKHR(::eglLog, debugAttrs); } RASSERT(eglBindAPI(EGL_OPENGL_ES_API) != EGL_FALSE, "Couldn't bind to EGL's opengl ES API. This means your gpu driver f'd up. This is not a hyprland issue."); bool success = false; - if (EGLEXTENSIONS.contains("EXT_platform_device") || !m_sProc.eglQueryDevicesEXT || !m_sProc.eglQueryDeviceStringEXT) { - m_pEglDevice = eglDeviceFromDRMFD(m_iDRMFD); + if (EGLEXTENSIONS.contains("EXT_platform_device") || !m_proc.eglQueryDevicesEXT || !m_proc.eglQueryDeviceStringEXT) { + m_eglDevice = eglDeviceFromDRMFD(m_drmFD); - if (m_pEglDevice != EGL_NO_DEVICE_EXT) { + if (m_eglDevice != EGL_NO_DEVICE_EXT) { success = true; initEGL(false); } @@ -317,13 +317,13 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_drmFD) { if (!success) { Debug::log(WARN, "EGL: EXT_platform_device or EGL_EXT_device_query not supported, using gbm"); if (EGLEXTENSIONS.contains("KHR_platform_gbm")) { - success = true; - m_iGBMFD = CFileDescriptor{openRenderNode(m_iDRMFD)}; - if (!m_iGBMFD.isValid()) + success = true; + m_gbmFD = CFileDescriptor{openRenderNode(m_drmFD)}; + if (!m_gbmFD.isValid()) RASSERT(false, "Couldn't open a gbm fd"); - m_pGbmDevice = gbm_create_device(m_iGBMFD.get()); - if (!m_pGbmDevice) + m_gbmDevice = gbm_create_device(m_gbmFD.get()); + if (!m_gbmDevice) RASSERT(false, "Couldn't open a gbm device"); initEGL(true); @@ -335,21 +335,21 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_drmFD) { auto* const EXTENSIONS = (const char*)glGetString(GL_EXTENSIONS); RASSERT(EXTENSIONS, "Couldn't retrieve openGL extensions!"); - m_szExtensions = EXTENSIONS; + m_extensions = EXTENSIONS; Debug::log(LOG, "Creating the Hypr OpenGL Renderer!"); Debug::log(LOG, "Using: {}", (char*)glGetString(GL_VERSION)); Debug::log(LOG, "Vendor: {}", (char*)glGetString(GL_VENDOR)); Debug::log(LOG, "Renderer: {}", (char*)glGetString(GL_RENDERER)); - Debug::log(LOG, "Supported extensions: ({}) {}", std::count(m_szExtensions.begin(), m_szExtensions.end(), ' '), m_szExtensions); + Debug::log(LOG, "Supported extensions: ({}) {}", std::count(m_extensions.begin(), m_extensions.end(), ' '), m_extensions); - m_sExts.EXT_read_format_bgra = m_szExtensions.contains("GL_EXT_read_format_bgra"); + m_exts.EXT_read_format_bgra = m_extensions.contains("GL_EXT_read_format_bgra"); - RASSERT(m_szExtensions.contains("GL_EXT_texture_format_BGRA8888"), "GL_EXT_texture_format_BGRA8888 support by the GPU driver is required"); + RASSERT(m_extensions.contains("GL_EXT_texture_format_BGRA8888"), "GL_EXT_texture_format_BGRA8888 support by the GPU driver is required"); - if (!m_sExts.EXT_read_format_bgra) + if (!m_exts.EXT_read_format_bgra) Debug::log(WARN, "Your GPU does not support GL_EXT_read_format_bgra, this may cause issues with texture importing"); - if (!m_sExts.EXT_image_dma_buf_import || !m_sExts.EXT_image_dma_buf_import_modifiers) + if (!m_exts.EXT_image_dma_buf_import || !m_exts.EXT_image_dma_buf_import_modifiers) Debug::log(WARN, "Your GPU does not support DMABUFs, this will possibly cause issues and will take a hit on the performance."); #ifdef USE_TRACY_GPU @@ -372,32 +372,32 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_iDRMFD(g_pCompositor->m_drmFD) { static auto P = g_pHookSystem->hookDynamic("preRender", [&](void* self, SCallbackInfo& info, std::any data) { preRender(std::any_cast(data)); }); - RASSERT(eglMakeCurrent(m_pEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT), "Couldn't unset current EGL!"); + RASSERT(eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT), "Couldn't unset current EGL!"); - m_tGlobalTimer.reset(); + m_globalTimer.reset(); } CHyprOpenGLImpl::~CHyprOpenGLImpl() { - if (m_pEglDisplay && m_pEglContext != EGL_NO_CONTEXT) - eglDestroyContext(m_pEglDisplay, m_pEglContext); + if (m_eglDisplay && m_eglContext != EGL_NO_CONTEXT) + eglDestroyContext(m_eglDisplay, m_eglContext); - if (m_pEglDisplay) - eglTerminate(m_pEglDisplay); + if (m_eglDisplay) + eglTerminate(m_eglDisplay); eglReleaseThread(); - if (m_pGbmDevice) - gbm_device_destroy(m_pGbmDevice); + if (m_gbmDevice) + gbm_device_destroy(m_gbmDevice); } std::optional> CHyprOpenGLImpl::getModsForFormat(EGLint format) { // TODO: return std::expected when clang supports it - if (!m_sExts.EXT_image_dma_buf_import_modifiers) + if (!m_exts.EXT_image_dma_buf_import_modifiers) return std::nullopt; EGLint len = 0; - if (!m_sProc.eglQueryDmaBufModifiersEXT(m_pEglDisplay, format, 0, nullptr, nullptr, &len)) { + if (!m_proc.eglQueryDmaBufModifiersEXT(m_eglDisplay, format, 0, nullptr, nullptr, &len)) { Debug::log(ERR, "EGL: Failed to query mods"); return std::nullopt; } @@ -411,7 +411,7 @@ std::optional> CHyprOpenGLImpl::getModsForFormat(EGLint fo mods.resize(len); external.resize(len); - m_sProc.eglQueryDmaBufModifiersEXT(m_pEglDisplay, format, len, mods.data(), external.data(), &len); + m_proc.eglQueryDmaBufModifiersEXT(m_eglDisplay, format, len, mods.data(), external.data(), &len); std::vector result; // reserve number of elements to avoid reallocations @@ -440,22 +440,22 @@ void CHyprOpenGLImpl::initDRMFormats() { if (DISABLE_MODS) Debug::log(WARN, "HYPRLAND_EGL_NO_MODIFIERS set, disabling modifiers"); - if (!m_sExts.EXT_image_dma_buf_import) { + if (!m_exts.EXT_image_dma_buf_import) { Debug::log(ERR, "EGL: No dmabuf import, DMABufs will not work."); return; } std::vector formats; - if (!m_sExts.EXT_image_dma_buf_import_modifiers || !m_sProc.eglQueryDmaBufFormatsEXT) { + if (!m_exts.EXT_image_dma_buf_import_modifiers || !m_proc.eglQueryDmaBufFormatsEXT) { formats.push_back(DRM_FORMAT_ARGB8888); formats.push_back(DRM_FORMAT_XRGB8888); Debug::log(WARN, "EGL: No mod support"); } else { EGLint len = 0; - m_sProc.eglQueryDmaBufFormatsEXT(m_pEglDisplay, 0, nullptr, &len); + m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, 0, nullptr, &len); formats.resize(len); - m_sProc.eglQueryDmaBufFormatsEXT(m_pEglDisplay, len, formats.data(), &len); + m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, len, formats.data(), &len); } if (formats.size() == 0) { @@ -480,7 +480,7 @@ void CHyprOpenGLImpl::initDRMFormats() { } else mods = {DRM_FORMAT_MOD_LINEAR}; - m_bHasModifiers = m_bHasModifiers || mods.size() > 0; + m_hasModifiers = m_hasModifiers || mods.size() > 0; // EGL can always do implicit modifiers. mods.push_back(DRM_FORMAT_MOD_INVALID); @@ -524,7 +524,7 @@ void CHyprOpenGLImpl::initDRMFormats() { Debug::log(WARN, "EGL: WARNING: No dmabuf formats were found, dmabuf will be disabled. This will degrade performance, but is most likely a driver issue or a very old GPU."); - drmFormats = dmaFormats; + m_drmFormats = dmaFormats; } EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAttrs& attrs) { @@ -556,7 +556,7 @@ EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAttrs& attr attribs.push_back(attrs.offsets[i]); attribs.push_back(attrNames[i].pitch); attribs.push_back(attrs.strides[i]); - if (m_bHasModifiers && attrs.modifier != DRM_FORMAT_MOD_INVALID) { + if (m_hasModifiers && attrs.modifier != DRM_FORMAT_MOD_INVALID) { attribs.push_back(attrNames[i].modlo); attribs.push_back(attrs.modifier & 0xFFFFFFFF); attribs.push_back(attrNames[i].modhi); @@ -569,7 +569,7 @@ EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAttrs& attr attribs.push_back(EGL_NONE); - EGLImageKHR image = m_sProc.eglCreateImageKHR(m_pEglDisplay, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, (int*)attribs.data()); + EGLImageKHR image = m_proc.eglCreateImageKHR(m_eglDisplay, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, (int*)attribs.data()); if (image == EGL_NO_IMAGE_KHR) { Debug::log(ERR, "EGL: EGLCreateImageKHR failed: {}", eglGetError()); return EGL_NO_IMAGE_KHR; @@ -667,7 +667,7 @@ GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool } void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP rb, CFramebuffer* fb) { - m_RenderData.pMonitor = pMonitor; + m_renderData.pMonitor = pMonitor; #ifndef GLES2 const GLenum RESETSTATUS = glGetGraphicsResetStatus(); @@ -690,36 +690,36 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP glViewport(0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); - m_RenderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); + m_renderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); - m_RenderData.monitorProjection = Mat3x3::identity(); + m_renderData.monitorProjection = Mat3x3::identity(); if (pMonitor->m_transform != WL_OUTPUT_TRANSFORM_NORMAL) { - const Vector2D tfmd = pMonitor->m_transform % 2 == 1 ? Vector2D{FBO->m_vSize.y, FBO->m_vSize.x} : FBO->m_vSize; - m_RenderData.monitorProjection.translate(FBO->m_vSize / 2.0).transform(wlTransformToHyprutils(pMonitor->m_transform)).translate(-tfmd / 2.0); + const Vector2D tfmd = pMonitor->m_transform % 2 == 1 ? Vector2D{FBO->m_size.y, FBO->m_size.x} : FBO->m_size; + m_renderData.monitorProjection.translate(FBO->m_size / 2.0).transform(wlTransformToHyprutils(pMonitor->m_transform)).translate(-tfmd / 2.0); } - m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; + m_renderData.pCurrentMonData = &m_monitorRenderResources[pMonitor]; - if (!m_bShadersInitialized) + if (!m_shadersInitialized) initShaders(); - m_RenderData.damage.set(damage); - m_RenderData.finalDamage.set(damage); + m_renderData.damage.set(damage); + m_renderData.finalDamage.set(damage); - m_bFakeFrame = true; + m_fakeFrame = true; - m_RenderData.currentFB = FBO; + m_renderData.currentFB = FBO; FBO->bind(); - m_bOffloadedFramebuffer = false; + m_offloadedFramebuffer = false; - m_RenderData.mainFB = m_RenderData.currentFB; - m_RenderData.outFB = FBO; + m_renderData.mainFB = m_renderData.currentFB; + m_renderData.outFB = FBO; - m_RenderData.simplePass = true; + m_renderData.simplePass = true; } void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb, std::optional finalDamage) { - m_RenderData.pMonitor = pMonitor; + m_renderData.pMonitor = pMonitor; #ifndef GLES2 const GLenum RESETSTATUS = glGetGraphicsResetStatus(); @@ -740,51 +740,51 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb glViewport(0, 0, pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y); - m_RenderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); + m_renderData.projection = Mat3x3::outputProjection(pMonitor->m_pixelSize, HYPRUTILS_TRANSFORM_NORMAL); - m_RenderData.monitorProjection = pMonitor->m_projMatrix; + m_renderData.monitorProjection = pMonitor->m_projMatrix; - if (m_mMonitorRenderResources.contains(pMonitor) && m_mMonitorRenderResources.at(pMonitor).offloadFB.m_vSize != pMonitor->m_pixelSize) + if (m_monitorRenderResources.contains(pMonitor) && m_monitorRenderResources.at(pMonitor).offloadFB.m_size != pMonitor->m_pixelSize) destroyMonitorResources(pMonitor); - m_RenderData.pCurrentMonData = &m_mMonitorRenderResources[pMonitor]; + m_renderData.pCurrentMonData = &m_monitorRenderResources[pMonitor]; - if (!m_bShadersInitialized) + if (!m_shadersInitialized) initShaders(); // ensure a framebuffer for the monitor exists - if (m_RenderData.pCurrentMonData->offloadFB.m_vSize != pMonitor->m_pixelSize) { - m_RenderData.pCurrentMonData->stencilTex->allocate(); + if (m_renderData.pCurrentMonData->offloadFB.m_size != pMonitor->m_pixelSize) { + m_renderData.pCurrentMonData->stencilTex->allocate(); - m_RenderData.pCurrentMonData->offloadFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->mirrorFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_renderData.pCurrentMonData->offloadFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_renderData.pCurrentMonData->mirrorFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_renderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->offloadFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); - m_RenderData.pCurrentMonData->mirrorFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); - m_RenderData.pCurrentMonData->mirrorSwapFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); + m_renderData.pCurrentMonData->offloadFB.addStencil(m_renderData.pCurrentMonData->stencilTex); + m_renderData.pCurrentMonData->mirrorFB.addStencil(m_renderData.pCurrentMonData->stencilTex); + m_renderData.pCurrentMonData->mirrorSwapFB.addStencil(m_renderData.pCurrentMonData->stencilTex); } - if (m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated() && m_RenderData.pMonitor->m_mirrors.empty()) - m_RenderData.pCurrentMonData->monitorMirrorFB.release(); + if (m_renderData.pCurrentMonData->monitorMirrorFB.isAllocated() && m_renderData.pMonitor->m_mirrors.empty()) + m_renderData.pCurrentMonData->monitorMirrorFB.release(); - m_RenderData.damage.set(damage_); - m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); + m_renderData.damage.set(damage_); + m_renderData.finalDamage.set(finalDamage.value_or(damage_)); - m_bFakeFrame = fb; + m_fakeFrame = fb; - if (m_bReloadScreenShader) { - m_bReloadScreenShader = false; - static auto PSHADER = CConfigValue("decoration:screen_shader"); + if (m_reloadScreenShader) { + m_reloadScreenShader = false; + static auto PSHADER = CConfigValue("decoration:screen_shader"); applyScreenShader(*PSHADER); } - m_RenderData.pCurrentMonData->offloadFB.bind(); - m_RenderData.currentFB = &m_RenderData.pCurrentMonData->offloadFB; - m_bOffloadedFramebuffer = true; + m_renderData.pCurrentMonData->offloadFB.bind(); + m_renderData.currentFB = &m_renderData.pCurrentMonData->offloadFB; + m_offloadedFramebuffer = true; - m_RenderData.mainFB = m_RenderData.currentFB; - m_RenderData.outFB = fb ? fb : g_pHyprRenderer->getCurrentRBO()->getFB(); + m_renderData.mainFB = m_renderData.currentFB; + m_renderData.outFB = fb ? fb : g_pHyprRenderer->getCurrentRBO()->getFB(); } void CHyprOpenGLImpl::end() { @@ -793,67 +793,67 @@ void CHyprOpenGLImpl::end() { TRACY_GPU_ZONE("RenderEnd"); // end the render, copy the data to the main framebuffer - if (m_bOffloadedFramebuffer) { - m_RenderData.damage = m_RenderData.finalDamage; - m_bEndFrame = true; + if (m_offloadedFramebuffer) { + m_renderData.damage = m_renderData.finalDamage; + m_endFrame = true; - CBox monbox = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; + CBox monbox = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; - if (m_RenderData.mouseZoomFactor != 1.f) { - const auto ZOOMCENTER = m_RenderData.mouseZoomUseMouse ? - (g_pInputManager->getMouseCoordsInternal() - m_RenderData.pMonitor->m_position) * m_RenderData.pMonitor->m_scale : - m_RenderData.pMonitor->m_transformedSize / 2.f; + if (m_renderData.mouseZoomFactor != 1.f) { + const auto ZOOMCENTER = m_renderData.mouseZoomUseMouse ? + (g_pInputManager->getMouseCoordsInternal() - m_renderData.pMonitor->m_position) * m_renderData.pMonitor->m_scale : + m_renderData.pMonitor->m_transformedSize / 2.f; - monbox.translate(-ZOOMCENTER).scale(m_RenderData.mouseZoomFactor).translate(*PZOOMRIGID ? m_RenderData.pMonitor->m_transformedSize / 2.0 : ZOOMCENTER); + monbox.translate(-ZOOMCENTER).scale(m_renderData.mouseZoomFactor).translate(*PZOOMRIGID ? m_renderData.pMonitor->m_transformedSize / 2.0 : ZOOMCENTER); if (monbox.x > 0) monbox.x = 0; if (monbox.y > 0) monbox.y = 0; - if (monbox.x + monbox.width < m_RenderData.pMonitor->m_transformedSize.x) - monbox.x = m_RenderData.pMonitor->m_transformedSize.x - monbox.width; - if (monbox.y + monbox.height < m_RenderData.pMonitor->m_transformedSize.y) - monbox.y = m_RenderData.pMonitor->m_transformedSize.y - monbox.height; + if (monbox.x + monbox.width < m_renderData.pMonitor->m_transformedSize.x) + monbox.x = m_renderData.pMonitor->m_transformedSize.x - monbox.width; + if (monbox.y + monbox.height < m_renderData.pMonitor->m_transformedSize.y) + monbox.y = m_renderData.pMonitor->m_transformedSize.y - monbox.height; } - m_bApplyFinalShader = !m_RenderData.blockScreenShader; - if (m_RenderData.mouseZoomUseMouse) - m_RenderData.useNearestNeighbor = true; + m_applyFinalShader = !m_renderData.blockScreenShader; + if (m_renderData.mouseZoomUseMouse) + m_renderData.useNearestNeighbor = true; // copy the damaged areas into the mirror buffer // we can't use the offloadFB for mirroring, as it contains artifacts from blurring - if (!m_RenderData.pMonitor->m_mirrors.empty() && !m_bFakeFrame) + if (!m_renderData.pMonitor->m_mirrors.empty() && !m_fakeFrame) saveBufferForMirror(monbox); - m_RenderData.outFB->bind(); + m_renderData.outFB->bind(); blend(false); - if (m_sFinalScreenShader.program < 1 && !g_pHyprRenderer->m_bCrashingInProgress) - renderTexturePrimitive(m_RenderData.pCurrentMonData->offloadFB.getTexture(), monbox); + if (m_finalScreenShader.program < 1 && !g_pHyprRenderer->m_crashingInProgress) + renderTexturePrimitive(m_renderData.pCurrentMonData->offloadFB.getTexture(), monbox); else - renderTexture(m_RenderData.pCurrentMonData->offloadFB.getTexture(), monbox, 1.f); + renderTexture(m_renderData.pCurrentMonData->offloadFB.getTexture(), monbox, 1.f); blend(true); - m_RenderData.useNearestNeighbor = false; - m_bApplyFinalShader = false; - m_bEndFrame = false; + m_renderData.useNearestNeighbor = false; + m_applyFinalShader = false; + m_endFrame = false; } // reset our data - m_RenderData.pMonitor.reset(); - m_RenderData.mouseZoomFactor = 1.f; - m_RenderData.mouseZoomUseMouse = true; - m_RenderData.blockScreenShader = false; - m_RenderData.currentFB = nullptr; - m_RenderData.mainFB = nullptr; - m_RenderData.outFB = nullptr; + m_renderData.pMonitor.reset(); + m_renderData.mouseZoomFactor = 1.f; + m_renderData.mouseZoomUseMouse = true; + m_renderData.blockScreenShader = false; + m_renderData.currentFB = nullptr; + m_renderData.mainFB = nullptr; + m_renderData.outFB = nullptr; // if we dropped to offMain, release it now. // if there is a plugin constantly using it, this might be a bit slow, // but I havent seen a single plugin yet use these, so it's better to drop a bit of vram. - if (m_RenderData.pCurrentMonData->offMainFB.isAllocated()) - m_RenderData.pCurrentMonData->offMainFB.release(); + if (m_renderData.pCurrentMonData->offMainFB.isAllocated()) + m_renderData.pCurrentMonData->offMainFB.release(); // check for gl errors const GLenum ERR = glGetError(); @@ -867,8 +867,8 @@ void CHyprOpenGLImpl::end() { } void CHyprOpenGLImpl::setDamage(const CRegion& damage_, std::optional finalDamage) { - m_RenderData.damage.set(damage_); - m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); + m_renderData.damage.set(damage_); + m_renderData.finalDamage.set(finalDamage.value_or(damage_)); } // TODO notify user if bundled shader is newer than ~/.config override @@ -931,7 +931,7 @@ static void getRoundingShaderUniforms(CShader& shader) { bool CHyprOpenGLImpl::initShaders() { auto shaders = makeShared(); - const bool isDynamic = m_bShadersInitialized; + const bool isDynamic = m_shadersInitialized; static const auto PCM = CConfigValue("render:cm_enabled"); try { @@ -948,16 +948,16 @@ bool CHyprOpenGLImpl::initShaders() { m_bCMSupported = false; #else if (!*PCM) - m_bCMSupported = false; + m_cmSupported = false; else { const auto TEXFRAGSRCCM = processShader("CM.frag", includes); prog = createProgram(shaders->TEXVERTSRC300, TEXFRAGSRCCM, true, true); - if (m_bShadersInitialized && m_bCMSupported && prog == 0) + if (m_shadersInitialized && m_cmSupported && prog == 0) g_pHyprNotificationOverlay->addNotification("CM shader reload failed, falling back to rgba/rgbx", CHyprColor{}, 15000, ICON_WARNING); - m_bCMSupported = prog > 0; - if (m_bCMSupported) { + m_cmSupported = prog > 0; + if (m_cmSupported) { shaders->m_shCM.program = prog; getCMShaderUniforms(shaders->m_shCM); getRoundingShaderUniforms(shaders->m_shCM); @@ -982,10 +982,10 @@ bool CHyprOpenGLImpl::initShaders() { } #endif - const auto FRAGSHADOW = processShader(m_bCMSupported ? "shadow.frag" : "shadow_legacy.frag", includes); - const auto FRAGBORDER1 = processShader(m_bCMSupported ? "border.frag" : "border_legacy.frag", includes); - const auto FRAGBLURPREPARE = processShader(m_bCMSupported ? "blurprepare.frag" : "blurprepare_legacy.frag", includes); - const auto FRAGBLURFINISH = processShader(m_bCMSupported ? "blurfinish.frag" : "blurfinish_legacy.frag", includes); + const auto FRAGSHADOW = processShader(m_cmSupported ? "shadow.frag" : "shadow_legacy.frag", includes); + const auto FRAGBORDER1 = processShader(m_cmSupported ? "border.frag" : "border_legacy.frag", includes); + const auto FRAGBLURPREPARE = processShader(m_cmSupported ? "blurprepare.frag" : "blurprepare_legacy.frag", includes); + const auto FRAGBLURFINISH = processShader(m_cmSupported ? "blurfinish.frag" : "blurfinish_legacy.frag", includes); const auto QUADFRAGSRC = processShader("quad.frag", includes); const auto TEXFRAGSRCRGBA = processShader("rgba.frag", includes); const auto TEXFRAGSRCRGBAPASSTHRU = processShader("passthru.frag", includes); @@ -1114,11 +1114,11 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLUR2.radius = glGetUniformLocation(prog, "radius"); shaders->m_shBLUR2.halfpixel = glGetUniformLocation(prog, "halfpixel"); - prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURPREPARE, isDynamic); + prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURPREPARE, isDynamic); if (!prog) return false; shaders->m_shBLURPREPARE.program = prog; - if (m_bCMSupported) + if (m_cmSupported) getCMShaderUniforms(shaders->m_shBLURPREPARE); shaders->m_shBLURPREPARE.tex = glGetUniformLocation(prog, "tex"); @@ -1128,7 +1128,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLURPREPARE.contrast = glGetUniformLocation(prog, "contrast"); shaders->m_shBLURPREPARE.brightness = glGetUniformLocation(prog, "brightness"); - prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURFINISH, isDynamic); + prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURFINISH, isDynamic); if (!prog) return false; shaders->m_shBLURFINISH.program = prog; @@ -1141,10 +1141,10 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLURFINISH.brightness = glGetUniformLocation(prog, "brightness"); shaders->m_shBLURFINISH.noise = glGetUniformLocation(prog, "noise"); - prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGSHADOW, isDynamic); + prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGSHADOW, isDynamic); if (!prog) return false; - if (m_bCMSupported) + if (m_cmSupported) shaders->m_shSHADOW.program = prog; getCMShaderUniforms(shaders->m_shSHADOW); getRoundingShaderUniforms(shaders->m_shSHADOW); @@ -1156,11 +1156,11 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shSHADOW.shadowPower = glGetUniformLocation(prog, "shadowPower"); shaders->m_shSHADOW.color = glGetUniformLocation(prog, "color"); - prog = createProgram(m_bCMSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBORDER1, isDynamic); + prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBORDER1, isDynamic); if (!prog) return false; shaders->m_shBORDER1.program = prog; - if (m_bCMSupported) + if (m_cmSupported) getCMShaderUniforms(shaders->m_shBORDER1); getRoundingShaderUniforms(shaders->m_shBORDER1); @@ -1180,15 +1180,15 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBORDER1.gradientLerp = glGetUniformLocation(prog, "gradientLerp"); shaders->m_shBORDER1.alpha = glGetUniformLocation(prog, "alpha"); } catch (const std::exception& e) { - if (!m_bShadersInitialized) + if (!m_shadersInitialized) throw e; Debug::log(ERR, "Shaders update failed: {}", e.what()); return false; } - m_shaders = shaders; - m_bShadersInitialized = true; + m_shaders = shaders; + m_shadersInitialized = true; Debug::log(LOG, "Shaders initialized successfully."); g_pHyprError->destroy(); @@ -1199,7 +1199,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { static auto PDT = CConfigValue("debug:damage_tracking"); - m_sFinalScreenShader.destroy(); + m_finalScreenShader.destroy(); if (path == "" || path == STRVAL_EMPTY) return; @@ -1213,7 +1213,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { std::string fragmentShader((std::istreambuf_iterator(infile)), (std::istreambuf_iterator())); - m_sFinalScreenShader.program = createProgram( // + m_finalScreenShader.program = createProgram( // fragmentShader.starts_with("#version 320 es") // do not break existing custom shaders ? m_shaders->TEXVERTSRC320 : @@ -1223,39 +1223,39 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { m_shaders->TEXVERTSRC), fragmentShader, true); - if (!m_sFinalScreenShader.program) { + if (!m_finalScreenShader.program) { // Error will have been sent by now by the underlying cause return; } - m_sFinalScreenShader.proj = glGetUniformLocation(m_sFinalScreenShader.program, "proj"); - m_sFinalScreenShader.tex = glGetUniformLocation(m_sFinalScreenShader.program, "tex"); - m_sFinalScreenShader.time = glGetUniformLocation(m_sFinalScreenShader.program, "time"); - if (m_sFinalScreenShader.time != -1) - m_sFinalScreenShader.initialTime = m_tGlobalTimer.getSeconds(); - m_sFinalScreenShader.wl_output = glGetUniformLocation(m_sFinalScreenShader.program, "wl_output"); - m_sFinalScreenShader.fullSize = glGetUniformLocation(m_sFinalScreenShader.program, "screen_size"); - if (m_sFinalScreenShader.fullSize == -1) - m_sFinalScreenShader.fullSize = glGetUniformLocation(m_sFinalScreenShader.program, "screenSize"); - if (m_sFinalScreenShader.time != -1 && *PDT != 0 && !g_pHyprRenderer->m_bCrashingInProgress) { + m_finalScreenShader.proj = glGetUniformLocation(m_finalScreenShader.program, "proj"); + m_finalScreenShader.tex = glGetUniformLocation(m_finalScreenShader.program, "tex"); + m_finalScreenShader.time = glGetUniformLocation(m_finalScreenShader.program, "time"); + if (m_finalScreenShader.time != -1) + m_finalScreenShader.initialTime = m_globalTimer.getSeconds(); + m_finalScreenShader.wl_output = glGetUniformLocation(m_finalScreenShader.program, "wl_output"); + m_finalScreenShader.fullSize = glGetUniformLocation(m_finalScreenShader.program, "screen_size"); + if (m_finalScreenShader.fullSize == -1) + m_finalScreenShader.fullSize = glGetUniformLocation(m_finalScreenShader.program, "screenSize"); + if (m_finalScreenShader.time != -1 && *PDT != 0 && !g_pHyprRenderer->m_crashingInProgress) { // The screen shader uses the "time" uniform // Since the screen shader could change every frame, damage tracking *needs* to be disabled g_pConfigManager->addParseError("Screen shader: Screen shader uses uniform 'time', which requires debug:damage_tracking to be switched off.\n" "WARNING: Disabling damage tracking will *massively* increase GPU utilization!"); } - m_sFinalScreenShader.texAttrib = glGetAttribLocation(m_sFinalScreenShader.program, "texcoord"); - m_sFinalScreenShader.posAttrib = glGetAttribLocation(m_sFinalScreenShader.program, "pos"); + m_finalScreenShader.texAttrib = glGetAttribLocation(m_finalScreenShader.program, "texcoord"); + m_finalScreenShader.posAttrib = glGetAttribLocation(m_finalScreenShader.program, "pos"); } void CHyprOpenGLImpl::clear(const CHyprColor& color) { - RASSERT(m_RenderData.pMonitor, "Tried to render without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render without begin()!"); TRACY_GPU_ZONE("RenderClear"); glClearColor(color.r, color.g, color.b, color.a); - if (!m_RenderData.damage.empty()) { - for (auto const& RECT : m_RenderData.damage.getRects()) { + if (!m_renderData.damage.empty()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glClear(GL_COLOR_BUFFER_BIT); } @@ -1271,16 +1271,16 @@ void CHyprOpenGLImpl::blend(bool enabled) { } else glDisable(GL_BLEND); - m_bBlend = enabled; + m_blend = enabled; } void CHyprOpenGLImpl::scissor(const CBox& originalBox, bool transform) { - RASSERT(m_RenderData.pMonitor, "Tried to scissor without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to scissor without begin()!"); if (transform) { CBox box = originalBox; - const auto TR = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); - box.transform(TR, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y); + const auto TR = wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)); + box.transform(TR, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y); glScissor(box.x, box.y, box.width, box.height); glEnable(GL_SCISSOR_TEST); return; @@ -1291,7 +1291,7 @@ void CHyprOpenGLImpl::scissor(const CBox& originalBox, bool transform) { } void CHyprOpenGLImpl::scissor(const pixman_box32* pBox, bool transform) { - RASSERT(m_RenderData.pMonitor, "Tried to scissor without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to scissor without begin()!"); if (!pBox) { glDisable(GL_SCISSOR_TEST); @@ -1309,20 +1309,20 @@ void CHyprOpenGLImpl::scissor(const int x, const int y, const int w, const int h } void CHyprOpenGLImpl::renderRect(const CBox& box, const CHyprColor& col, int round, float roundingPower) { - if (!m_RenderData.damage.empty()) - renderRectWithDamage(box, col, m_RenderData.damage, round, roundingPower); + if (!m_renderData.damage.empty()) + renderRectWithDamage(box, col, m_renderData.damage, round, roundingPower); } void CHyprOpenGLImpl::renderRectWithBlur(const CBox& box, const CHyprColor& col, int round, float roundingPower, float blurA, bool xray) { - if (m_RenderData.damage.empty()) + if (m_renderData.damage.empty()) return; - CRegion damage{m_RenderData.damage}; + CRegion damage{m_renderData.damage}; damage.intersect(box); - CFramebuffer* POUTFB = xray ? &m_RenderData.pCurrentMonData->blurFB : blurMainFramebufferWithDamage(blurA, &damage); + CFramebuffer* POUTFB = xray ? &m_renderData.pCurrentMonData->blurFB : blurMainFramebufferWithDamage(blurA, &damage); - m_RenderData.currentFB->bind(); + m_renderData.currentFB->bind(); // make a stencil for rounded corners to work with blur scissor(nullptr); // allow the entire window and stencil to render @@ -1342,13 +1342,13 @@ void CHyprOpenGLImpl::renderRectWithBlur(const CBox& box, const CHyprColor& col, glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); scissor(box); - CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; - m_bEndFrame = true; // fix transformed - const auto SAVEDRENDERMODIF = m_RenderData.renderModif; - m_RenderData.renderModif = {}; // fix shit + CBox MONITORBOX = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; + m_endFrame = true; // fix transformed + const auto SAVEDRENDERMODIF = m_renderData.renderModif; + m_renderData.renderModif = {}; // fix shit renderTextureInternalWithDamage(POUTFB->getTexture(), MONITORBOX, blurA, damage, 0, 2.0f, false, false, false); - m_bEndFrame = false; - m_RenderData.renderModif = SAVEDRENDERMODIF; + m_endFrame = false; + m_renderData.renderModif = SAVEDRENDERMODIF; glClearStencil(0); glClear(GL_STENCIL_BUFFER_BIT); @@ -1357,21 +1357,21 @@ void CHyprOpenGLImpl::renderRectWithBlur(const CBox& box, const CHyprColor& col, glStencilFunc(GL_ALWAYS, 1, 0xFF); scissor(nullptr); - renderRectWithDamage(box, col, m_RenderData.damage, round, roundingPower); + renderRectWithDamage(box, col, m_renderData.damage, round, roundingPower); } void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& col, const CRegion& damage, int round, float roundingPower) { RASSERT((box.width > 0 && box.height > 0), "Tried to render rect with width/height < 0!"); - RASSERT(m_RenderData.pMonitor, "Tried to render rect without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render rect without begin()!"); TRACY_GPU_ZONE("RenderRectWithDamage"); CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox( + newBox, wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)), newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); glUseProgram(m_shaders->m_shQUAD.program); @@ -1386,8 +1386,8 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co glUniform4f(m_shaders->m_shQUAD.color, col.r * col.a, col.g * col.a, col.b * col.a, col.a); CBox transformedBox = box; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -1402,8 +1402,8 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co glEnableVertexAttribArray(m_shaders->m_shQUAD.posAttrib); - if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { - CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; + if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { + CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; damageClip.intersect(damage); if (!damageClip.empty()) { @@ -1425,16 +1425,16 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co } void CHyprOpenGLImpl::renderTexture(SP tex, const CBox& box, float alpha, int round, float roundingPower, bool discardActive, bool allowCustomUV) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); - renderTextureInternalWithDamage(tex, box, alpha, m_RenderData.damage, round, roundingPower, discardActive, false, allowCustomUV, true); + renderTextureInternalWithDamage(tex, box, alpha, m_renderData.damage, round, roundingPower, discardActive, false, allowCustomUV, true); scissor(nullptr); } void CHyprOpenGLImpl::renderTextureWithDamage(SP tex, const CBox& box, const CRegion& damage, float alpha, int round, float roundingPower, bool discardActive, bool allowCustomUV) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); renderTextureInternalWithDamage(tex, box, alpha, damage, round, roundingPower, discardActive, false, allowCustomUV, true); @@ -1466,12 +1466,12 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme glUniform1f(shader.dstMaxLuminance, targetImageDescription.luminances.max > 0 ? targetImageDescription.luminances.max : 10000); glUniform1f(shader.dstRefLuminance, targetImageDescription.luminances.reference); glUniform1f(shader.sdrSaturation, - modifySDR && m_RenderData.pMonitor->m_sdrSaturation > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->m_sdrSaturation : + modifySDR && m_renderData.pMonitor->m_sdrSaturation > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_renderData.pMonitor->m_sdrSaturation : 1.0f); glUniform1f(shader.sdrBrightness, - modifySDR && m_RenderData.pMonitor->m_sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->m_sdrBrightness : + modifySDR && m_renderData.pMonitor->m_sdrBrightness > 0 && targetImageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_renderData.pMonitor->m_sdrBrightness : 1.0f); const auto cacheKey = std::make_pair(imageDescription.getId(), targetImageDescription.getId()); @@ -1488,13 +1488,13 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme } void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const SImageDescription& imageDescription) { - passCMUniforms(shader, imageDescription, m_RenderData.pMonitor->m_imageDescription, true); + passCMUniforms(shader, imageDescription, m_renderData.pMonitor->m_imageDescription, true); } void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CBox& box, float alpha, const CRegion& damage, int round, float roundingPower, bool discardActive, bool noAA, bool allowCustomUV, bool allowDim) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); - RASSERT((tex->m_iTexID > 0), "Attempted to draw nullptr texture!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); + RASSERT((tex->m_texID > 0), "Attempted to draw nullptr texture!"); TRACY_GPU_ZONE("RenderTextureInternalWithDamage"); @@ -1504,41 +1504,41 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB return; CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); static const auto PDT = CConfigValue("debug:damage_tracking"); static const auto PPASS = CConfigValue("render:cm_fs_passthrough"); static const auto PENABLECM = CConfigValue("render:cm_enabled"); // get the needed transform for this texture - const bool TRANSFORMS_MATCH = wlTransformToHyprutils(m_RenderData.pMonitor->m_transform) == tex->m_eTransform; // FIXME: combine them properly!!! + const bool TRANSFORMS_MATCH = wlTransformToHyprutils(m_renderData.pMonitor->m_transform) == tex->m_transform; // FIXME: combine them properly!!! eTransform TRANSFORM = HYPRUTILS_TRANSFORM_NORMAL; - if (m_bEndFrame || TRANSFORMS_MATCH) - TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); + if (m_endFrame || TRANSFORMS_MATCH) + TRANSFORM = wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)); - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); CShader* shader = nullptr; bool usingFinalShader = false; - const bool CRASHING = m_bApplyFinalShader && g_pHyprRenderer->m_bCrashingInProgress; + const bool CRASHING = m_applyFinalShader && g_pHyprRenderer->m_crashingInProgress; - auto texType = tex->m_iType; + auto texType = tex->m_type; if (CRASHING) { shader = &m_shaders->m_shGLITCH; usingFinalShader = true; - } else if (m_bApplyFinalShader && m_sFinalScreenShader.program) { - shader = &m_sFinalScreenShader; + } else if (m_applyFinalShader && m_finalScreenShader.program) { + shader = &m_finalScreenShader; usingFinalShader = true; } else { - if (m_bApplyFinalShader) { + if (m_applyFinalShader) { shader = &m_shaders->m_shPASSTHRURGBA; usingFinalShader = true; } else { - switch (tex->m_iType) { + switch (tex->m_type) { case TEXTURE_RGBA: shader = &m_shaders->m_shRGBA; break; case TEXTURE_RGBX: shader = &m_shaders->m_shRGBX; break; @@ -1548,33 +1548,33 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } } - if (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.RGBX.valueOrDefault()) { + if (m_renderData.currentWindow && m_renderData.currentWindow->m_windowData.RGBX.valueOrDefault()) { shader = &m_shaders->m_shRGBX; texType = TEXTURE_RGBX; } glActiveTexture(GL_TEXTURE0); - glBindTexture(tex->m_iTarget, tex->m_iTexID); + glBindTexture(tex->m_target, tex->m_texID); - glTexParameteri(tex->m_iTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(tex->m_iTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - if (m_RenderData.useNearestNeighbor) { - glTexParameteri(tex->m_iTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(tex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + if (m_renderData.useNearestNeighbor) { + glTexParameteri(tex->m_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(tex->m_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } else { - glTexParameteri(tex->m_iTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(tex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(tex->m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(tex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } const auto imageDescription = - m_RenderData.surface.valid() && m_RenderData.surface->m_colorManagement.valid() ? m_RenderData.surface->m_colorManagement->imageDescription() : SImageDescription{}; + m_renderData.surface.valid() && m_renderData.surface->m_colorManagement.valid() ? m_renderData.surface->m_colorManagement->imageDescription() : SImageDescription{}; - const bool skipCM = !*PENABLECM || !m_bCMSupported /* CM unsupported or disabled */ - || (imageDescription == m_RenderData.pMonitor->m_imageDescription) /* Source and target have the same image description */ - || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_RenderData.pMonitor->m_activeWorkspace && - m_RenderData.pMonitor->m_activeWorkspace->m_hasFullscreenWindow && - m_RenderData.pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; + const bool skipCM = !*PENABLECM || !m_cmSupported /* CM unsupported or disabled */ + || (imageDescription == m_renderData.pMonitor->m_imageDescription) /* Source and target have the same image description */ + || ((*PPASS == 1 || (*PPASS == 2 && imageDescription.transferFunction == CM_TRANSFER_FUNCTION_ST2084_PQ)) && m_renderData.pMonitor->m_activeWorkspace && + m_renderData.pMonitor->m_activeWorkspace->m_hasFullscreenWindow && + m_renderData.pMonitor->m_activeWorkspace->m_fullscreenMode == FSMODE_FULLSCREEN) /* Fullscreen window with pass cm enabled */; if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) shader = &m_shaders->m_shCM; @@ -1595,29 +1595,29 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glUniform1i(shader->tex, 0); if ((usingFinalShader && *PDT == 0) || CRASHING) { - glUniform1f(shader->time, m_tGlobalTimer.getSeconds() - shader->initialTime); + glUniform1f(shader->time, m_globalTimer.getSeconds() - shader->initialTime); } else if (usingFinalShader && shader->time != -1) { // Don't let time be unitialised glUniform1f(shader->time, 0.f); } if (usingFinalShader && shader->wl_output != -1) - glUniform1i(shader->wl_output, m_RenderData.pMonitor->m_id); + glUniform1i(shader->wl_output, m_renderData.pMonitor->m_id); if (usingFinalShader && shader->fullSize != -1) - glUniform2f(shader->fullSize, m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y); + glUniform2f(shader->fullSize, m_renderData.pMonitor->m_pixelSize.x, m_renderData.pMonitor->m_pixelSize.y); if (CRASHING) { - glUniform1f(shader->distort, g_pHyprRenderer->m_fCrashingDistort); - glUniform2f(shader->fullSize, m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y); + glUniform1f(shader->distort, g_pHyprRenderer->m_crashingDistort); + glUniform2f(shader->fullSize, m_renderData.pMonitor->m_pixelSize.x, m_renderData.pMonitor->m_pixelSize.y); } if (!usingFinalShader) { glUniform1f(shader->alpha, alpha); if (discardActive) { - glUniform1i(shader->discardOpaque, !!(m_RenderData.discardMode & DISCARD_OPAQUE)); - glUniform1i(shader->discardAlpha, !!(m_RenderData.discardMode & DISCARD_ALPHA)); - glUniform1f(shader->discardAlphaValue, m_RenderData.discardOpacity); + glUniform1i(shader->discardOpaque, !!(m_renderData.discardMode & DISCARD_OPAQUE)); + glUniform1i(shader->discardAlpha, !!(m_renderData.discardMode & DISCARD_ALPHA)); + glUniform1f(shader->discardAlphaValue, m_renderData.discardOpacity); } else { glUniform1i(shader->discardOpaque, 0); glUniform1i(shader->discardAlpha, 0); @@ -1625,8 +1625,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -1638,14 +1638,14 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glUniform1f(shader->radius, round); glUniform1f(shader->roundingPower, roundingPower); - if (allowDim && m_RenderData.currentWindow) { - if (m_RenderData.currentWindow->m_notRespondingTint->value() > 0) { - const auto DIM = m_RenderData.currentWindow->m_notRespondingTint->value(); + if (allowDim && m_renderData.currentWindow) { + if (m_renderData.currentWindow->m_notRespondingTint->value() > 0) { + const auto DIM = m_renderData.currentWindow->m_notRespondingTint->value(); glUniform1i(shader->applyTint, 1); glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM); - } else if (m_RenderData.currentWindow->m_dimPercent->value() > 0) { + } else if (m_renderData.currentWindow->m_dimPercent->value() > 0) { glUniform1i(shader->applyTint, 1); - const auto DIM = m_RenderData.currentWindow->m_dimPercent->value(); + const auto DIM = m_renderData.currentWindow->m_dimPercent->value(); glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM); } else glUniform1i(shader->applyTint, 0); @@ -1654,15 +1654,15 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } const float verts[] = { - m_RenderData.primarySurfaceUVBottomRight.x, m_RenderData.primarySurfaceUVTopLeft.y, // top right - m_RenderData.primarySurfaceUVTopLeft.x, m_RenderData.primarySurfaceUVTopLeft.y, // top left - m_RenderData.primarySurfaceUVBottomRight.x, m_RenderData.primarySurfaceUVBottomRight.y, // bottom right - m_RenderData.primarySurfaceUVTopLeft.x, m_RenderData.primarySurfaceUVBottomRight.y, // bottom left + m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVTopLeft.y, // top right + m_renderData.primarySurfaceUVTopLeft.x, m_renderData.primarySurfaceUVTopLeft.y, // top left + m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVBottomRight.y, // bottom right + m_renderData.primarySurfaceUVTopLeft.x, m_renderData.primarySurfaceUVBottomRight.y, // bottom left }; glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - if (allowCustomUV && m_RenderData.primarySurfaceUVTopLeft != Vector2D(-1, -1)) + if (allowCustomUV && m_renderData.primarySurfaceUVTopLeft != Vector2D(-1, -1)) glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, verts); else glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); @@ -1670,14 +1670,14 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glEnableVertexAttribArray(shader->posAttrib); glEnableVertexAttribArray(shader->texAttrib); - if (!m_RenderData.clipBox.empty() || !m_RenderData.clipRegion.empty()) { - CRegion damageClip = m_RenderData.clipBox; + if (!m_renderData.clipBox.empty() || !m_renderData.clipRegion.empty()) { + CRegion damageClip = m_renderData.clipBox; - if (!m_RenderData.clipRegion.empty()) { - if (m_RenderData.clipBox.empty()) - damageClip = m_RenderData.clipRegion; + if (!m_renderData.clipRegion.empty()) { + if (m_renderData.clipBox.empty()) + damageClip = m_renderData.clipRegion; else - damageClip.intersect(m_RenderData.clipRegion); + damageClip.intersect(m_renderData.clipRegion); } if (!damageClip.empty()) { @@ -1696,30 +1696,30 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glDisableVertexAttribArray(shader->posAttrib); glDisableVertexAttribArray(shader->texAttrib); - glBindTexture(tex->m_iTarget, 0); + glBindTexture(tex->m_target, 0); } void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); - RASSERT((tex->m_iTexID > 0), "Attempted to draw nullptr texture!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); + RASSERT((tex->m_texID > 0), "Attempted to draw nullptr texture!"); TRACY_GPU_ZONE("RenderTexturePrimitive"); - if (m_RenderData.damage.empty()) + if (m_renderData.damage.empty()) return; CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); // get transform - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)); - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); CShader* shader = &m_shaders->m_shPASSTHRURGBA; glActiveTexture(GL_TEXTURE0); - glBindTexture(tex->m_iTarget, tex->m_iTexID); + glBindTexture(tex->m_target, tex->m_texID); glUseProgram(shader->program); @@ -1737,7 +1737,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) glEnableVertexAttribArray(shader->posAttrib); glEnableVertexAttribArray(shader->texAttrib); - for (auto const& RECT : m_RenderData.damage.getRects()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -1747,25 +1747,25 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) glDisableVertexAttribArray(shader->posAttrib); glDisableVertexAttribArray(shader->texAttrib); - glBindTexture(tex->m_iTarget, 0); + glBindTexture(tex->m_target, 0); } void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFramebuffer& matte) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture without begin()!"); - RASSERT((tex->m_iTexID > 0), "Attempted to draw nullptr texture!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); + RASSERT((tex->m_texID > 0), "Attempted to draw nullptr texture!"); TRACY_GPU_ZONE("RenderTextureMatte"); - if (m_RenderData.damage.empty()) + if (m_renderData.damage.empty()) return; CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); // get transform - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)); - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); CShader* shader = &m_shaders->m_shMATTE; @@ -1781,11 +1781,11 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra glUniform1i(shader->alphaMatte, 1); glActiveTexture(GL_TEXTURE0); - glBindTexture(tex->m_iTarget, tex->m_iTexID); + glBindTexture(tex->m_target, tex->m_texID); glActiveTexture(GL_TEXTURE0 + 1); auto matteTex = matte.getTexture(); - glBindTexture(matteTex->m_iTarget, matteTex->m_iTexID); + glBindTexture(matteTex->m_target, matteTex->m_texID); glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); @@ -1793,7 +1793,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra glEnableVertexAttribArray(shader->posAttrib); glEnableVertexAttribArray(shader->texAttrib); - for (auto const& RECT : m_RenderData.damage.getRects()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -1803,7 +1803,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra glDisableVertexAttribArray(shader->posAttrib); glDisableVertexAttribArray(shader->texAttrib); - glBindTexture(tex->m_iTarget, 0); + glBindTexture(tex->m_target, 0); } // This probably isn't the fastest @@ -1812,22 +1812,22 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra // Dual (or more) kawase blur CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* originalDamage) { - if (!m_RenderData.currentFB->getTexture()) { + if (!m_renderData.currentFB->getTexture()) { Debug::log(ERR, "BUG THIS: null fb texture while attempting to blur main fb?! (introspection off?!)"); - return &m_RenderData.pCurrentMonData->mirrorFB; // return something to sample from at least + return &m_renderData.pCurrentMonData->mirrorFB; // return something to sample from at least } TRACY_GPU_ZONE("RenderBlurMainFramebufferWithDamage"); - const auto BLENDBEFORE = m_bBlend; + const auto BLENDBEFORE = m_blend; blend(false); glDisable(GL_STENCIL_TEST); // get transforms for the full monitor - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)); - CBox MONITORBOX = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox(MONITORBOX, TRANSFORM); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + const auto TRANSFORM = wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)); + CBox MONITORBOX = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; + Mat3x3 matrix = m_renderData.monitorProjection.projectBox(MONITORBOX, TRANSFORM); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); // get the config settings static auto PBLURSIZE = CConfigValue("decoration:blur:size"); @@ -1837,13 +1837,13 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o // prep damage CRegion damage{*originalDamage}; - damage.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + damage.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); damage.expand(*PBLURPASSES > 10 ? pow(2, 15) : std::clamp(*PBLURSIZE, (int64_t)1, (int64_t)40) * pow(2, *PBLURPASSES)); // helper - const auto PMIRRORFB = &m_RenderData.pCurrentMonData->mirrorFB; - const auto PMIRRORSWAPFB = &m_RenderData.pCurrentMonData->mirrorSwapFB; + const auto PMIRRORFB = &m_renderData.pCurrentMonData->mirrorFB; + const auto PMIRRORSWAPFB = &m_renderData.pCurrentMonData->mirrorSwapFB; CFramebuffer* currentRenderToFB = PMIRRORFB; @@ -1857,28 +1857,28 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glActiveTexture(GL_TEXTURE0); - auto currentTex = m_RenderData.currentFB->getTexture(); + auto currentTex = m_renderData.currentFB->getTexture(); - glBindTexture(currentTex->m_iTarget, currentTex->m_iTexID); + glBindTexture(currentTex->m_target, currentTex->m_texID); - glTexParameteri(currentTex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glUseProgram(m_shaders->m_shBLURPREPARE.program); // From FB to sRGB - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; + const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shBLURPREPARE.skipCM, skipCM); if (!skipCM) { - passCMUniforms(m_shaders->m_shBLURPREPARE, m_RenderData.pMonitor->m_imageDescription, SImageDescription{}); + passCMUniforms(m_shaders->m_shBLURPREPARE, m_renderData.pMonitor->m_imageDescription, SImageDescription{}); glUniform1f(m_shaders->m_shBLURPREPARE.sdrSaturation, - m_RenderData.pMonitor->m_sdrSaturation > 0 && - m_RenderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->m_sdrSaturation : + m_renderData.pMonitor->m_sdrSaturation > 0 && + m_renderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_renderData.pMonitor->m_sdrSaturation : 1.0f); glUniform1f(m_shaders->m_shBLURPREPARE.sdrBrightness, - m_RenderData.pMonitor->m_sdrBrightness > 0 && - m_RenderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? - m_RenderData.pMonitor->m_sdrBrightness : + m_renderData.pMonitor->m_sdrBrightness > 0 && + m_renderData.pMonitor->m_imageDescription.transferFunction == NColorManagement::CM_TRANSFER_FUNCTION_ST2084_PQ ? + m_renderData.pMonitor->m_sdrBrightness : 1.0f); } @@ -1922,9 +1922,9 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o auto currentTex = currentRenderToFB->getTexture(); - glBindTexture(currentTex->m_iTarget, currentTex->m_iTexID); + glBindTexture(currentTex->m_target, currentTex->m_texID); - glTexParameteri(currentTex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glUseProgram(pShader->program); @@ -1937,12 +1937,12 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o #endif glUniform1f(pShader->radius, *PBLURSIZE * a); // this makes the blursize change with a if (pShader == &m_shaders->m_shBLUR1) { - glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_RenderData.pMonitor->m_pixelSize.x / 2.f), 0.5f / (m_RenderData.pMonitor->m_pixelSize.y / 2.f)); + glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_renderData.pMonitor->m_pixelSize.x / 2.f), 0.5f / (m_renderData.pMonitor->m_pixelSize.y / 2.f)); glUniform1i(m_shaders->m_shBLUR1.passes, *PBLURPASSES); glUniform1f(m_shaders->m_shBLUR1.vibrancy, *PBLURVIBRANCY); glUniform1f(m_shaders->m_shBLUR1.vibrancy_darkness, *PBLURVIBRANCYDARKNESS); } else - glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_RenderData.pMonitor->m_pixelSize.x * 2.f), 0.5f / (m_RenderData.pMonitor->m_pixelSize.y * 2.f)); + glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_renderData.pMonitor->m_pixelSize.x * 2.f), 0.5f / (m_renderData.pMonitor->m_pixelSize.y * 2.f)); glUniform1i(pShader->tex, 0); glVertexAttribPointer(pShader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); @@ -1970,7 +1970,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o // draw the things. // first draw is swap -> mirr PMIRRORFB->bind(); - glBindTexture(PMIRRORSWAPFB->getTexture()->m_iTarget, PMIRRORSWAPFB->getTexture()->m_iTexID); + glBindTexture(PMIRRORSWAPFB->getTexture()->m_target, PMIRRORSWAPFB->getTexture()->m_texID); // damage region will be scaled, make a temp CRegion tempDamage{damage}; @@ -2000,9 +2000,9 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o auto currentTex = currentRenderToFB->getTexture(); - glBindTexture(currentTex->m_iTarget, currentTex->m_iTexID); + glBindTexture(currentTex->m_target, currentTex->m_texID); - glTexParameteri(currentTex->m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glUseProgram(m_shaders->m_shBLURFINISH.program); @@ -2040,7 +2040,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o } // finish - glBindTexture(PMIRRORFB->getTexture()->m_iTarget, 0); + glBindTexture(PMIRRORFB->getTexture()->m_target, 0); blend(BLENDBEFORE); @@ -2048,7 +2048,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o } void CHyprOpenGLImpl::markBlurDirtyForMonitor(PHLMONITOR pMonitor) { - m_mMonitorRenderResources[pMonitor].blurFBDirty = true; + m_monitorRenderResources[pMonitor].blurFBDirty = true; } void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { @@ -2056,7 +2056,7 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { static auto PBLURXRAY = CConfigValue("decoration:blur:xray"); static auto PBLUR = CConfigValue("decoration:blur:enabled"); - if (!*PBLURNEWOPTIMIZE || !m_mMonitorRenderResources[pMonitor].blurFBDirty || !*PBLUR) + if (!*PBLURNEWOPTIMIZE || !m_monitorRenderResources[pMonitor].blurFBDirty || !*PBLUR) return; // ignore if solitary present, nothing to blur @@ -2131,60 +2131,60 @@ void CHyprOpenGLImpl::preRender(PHLMONITOR pMonitor) { return; g_pHyprRenderer->damageMonitor(pMonitor); - m_mMonitorRenderResources[pMonitor].blurFBShouldRender = true; + m_monitorRenderResources[pMonitor].blurFBShouldRender = true; } void CHyprOpenGLImpl::preBlurForCurrentMonitor() { TRACY_GPU_ZONE("RenderPreBlurForCurrentMonitor"); - const auto SAVEDRENDERMODIF = m_RenderData.renderModif; - m_RenderData.renderModif = {}; // fix shit + const auto SAVEDRENDERMODIF = m_renderData.renderModif; + m_renderData.renderModif = {}; // fix shit // make the fake dmg - CRegion fakeDamage{0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; + CRegion fakeDamage{0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; const auto POUTFB = blurMainFramebufferWithDamage(1, &fakeDamage); // render onto blurFB - m_RenderData.pCurrentMonData->blurFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, - m_RenderData.pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->blurFB.bind(); + m_renderData.pCurrentMonData->blurFB.alloc(m_renderData.pMonitor->m_pixelSize.x, m_renderData.pMonitor->m_pixelSize.y, + m_renderData.pMonitor->m_output->state->state().drmFormat); + m_renderData.pCurrentMonData->blurFB.bind(); clear(CHyprColor(0, 0, 0, 0)); - m_bEndFrame = true; // fix transformed - renderTextureInternalWithDamage(POUTFB->getTexture(), CBox{0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}, 1, fakeDamage, 0, + m_endFrame = true; // fix transformed + renderTextureInternalWithDamage(POUTFB->getTexture(), CBox{0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}, 1, fakeDamage, 0, 2.0f, false, true, false); - m_bEndFrame = false; + m_endFrame = false; - m_RenderData.currentFB->bind(); + m_renderData.currentFB->bind(); - m_RenderData.pCurrentMonData->blurFBDirty = false; + m_renderData.pCurrentMonData->blurFBDirty = false; - m_RenderData.renderModif = SAVEDRENDERMODIF; + m_renderData.renderModif = SAVEDRENDERMODIF; - m_mMonitorRenderResources[m_RenderData.pMonitor].blurFBShouldRender = false; + m_monitorRenderResources[m_renderData.pMonitor].blurFBShouldRender = false; } void CHyprOpenGLImpl::preWindowPass() { if (!preBlurQueued()) return; - g_pHyprRenderer->m_sRenderPass.add(makeShared()); + g_pHyprRenderer->m_renderPass.add(makeShared()); } bool CHyprOpenGLImpl::preBlurQueued() { static auto PBLURNEWOPTIMIZE = CConfigValue("decoration:blur:new_optimizations"); static auto PBLUR = CConfigValue("decoration:blur:enabled"); - return m_RenderData.pCurrentMonData->blurFBDirty && *PBLURNEWOPTIMIZE && *PBLUR && m_RenderData.pCurrentMonData->blurFBShouldRender; + return m_renderData.pCurrentMonData->blurFBDirty && *PBLURNEWOPTIMIZE && *PBLUR && m_renderData.pCurrentMonData->blurFBShouldRender; } bool CHyprOpenGLImpl::shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWindow) { static auto PBLURNEWOPTIMIZE = CConfigValue("decoration:blur:new_optimizations"); static auto PBLURXRAY = CConfigValue("decoration:blur:xray"); - if (!m_RenderData.pCurrentMonData->blurFB.getTexture()) + if (!m_renderData.pCurrentMonData->blurFB.getTexture()) return false; if (pWindow && pWindow->m_windowData.xray.hasValue() && !pWindow->m_windowData.xray.valueOrDefault()) @@ -2204,28 +2204,28 @@ bool CHyprOpenGLImpl::shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWin void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, float a, SP pSurface, int round, float roundingPower, bool blockBlurOptimization, float blurA, float overallA) { - RASSERT(m_RenderData.pMonitor, "Tried to render texture with blur without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render texture with blur without begin()!"); TRACY_GPU_ZONE("RenderTextureWithBlur"); // make a damage region for this window - CRegion texDamage{m_RenderData.damage}; + CRegion texDamage{m_renderData.damage}; texDamage.intersect(box.x, box.y, box.width, box.height); // While renderTextureInternalWithDamage will clip the blur as well, // clipping texDamage here allows blur generation to be optimized. - if (!m_RenderData.clipRegion.empty()) - texDamage.intersect(m_RenderData.clipRegion); + if (!m_renderData.clipRegion.empty()) + texDamage.intersect(m_renderData.clipRegion); if (texDamage.empty()) return; - m_RenderData.renderModif.applyToRegion(texDamage); + m_renderData.renderModif.applyToRegion(texDamage); // amazing hack: the surface has an opaque region! CRegion inverseOpaque; - if (a >= 1.f && std::round(pSurface->m_current.size.x * m_RenderData.pMonitor->m_scale) == box.w && - std::round(pSurface->m_current.size.y * m_RenderData.pMonitor->m_scale) == box.h) { + if (a >= 1.f && std::round(pSurface->m_current.size.x * m_renderData.pMonitor->m_scale) == box.w && + std::round(pSurface->m_current.size.y * m_renderData.pMonitor->m_scale) == box.h) { pixman_box32_t surfbox = {0, 0, pSurface->m_current.size.x * pSurface->m_current.scale, pSurface->m_current.size.y * pSurface->m_current.scale}; inverseOpaque = pSurface->m_current.opaque; inverseOpaque.invert(&surfbox).intersect(0, 0, pSurface->m_current.size.x * pSurface->m_current.scale, pSurface->m_current.size.y * pSurface->m_current.scale); @@ -2237,22 +2237,22 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f } else inverseOpaque = {0, 0, box.width, box.height}; - inverseOpaque.scale(m_RenderData.pMonitor->m_scale); + inverseOpaque.scale(m_renderData.pMonitor->m_scale); // vvv TODO: layered blur fbs? - const bool USENEWOPTIMIZE = shouldUseNewBlurOptimizations(m_RenderData.currentLS.lock(), m_RenderData.currentWindow.lock()) && !blockBlurOptimization; + const bool USENEWOPTIMIZE = shouldUseNewBlurOptimizations(m_renderData.currentLS.lock(), m_renderData.currentWindow.lock()) && !blockBlurOptimization; CFramebuffer* POUTFB = nullptr; if (!USENEWOPTIMIZE) { inverseOpaque.translate(box.pos()); - m_RenderData.renderModif.applyToRegion(inverseOpaque); + m_renderData.renderModif.applyToRegion(inverseOpaque); inverseOpaque.intersect(texDamage); POUTFB = blurMainFramebufferWithDamage(a, &inverseOpaque); } else - POUTFB = &m_RenderData.pCurrentMonData->blurFB; + POUTFB = &m_renderData.pCurrentMonData->blurFB; - m_RenderData.currentFB->bind(); + m_renderData.currentFB->bind(); // make a stencil for rounded corners to work with blur scissor(nullptr); // allow the entire window and stencil to render @@ -2265,7 +2265,7 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - if (USENEWOPTIMIZE && !(m_RenderData.discardMode & DISCARD_ALPHA)) + if (USENEWOPTIMIZE && !(m_renderData.discardMode & DISCARD_ALPHA)) renderRect(box, CHyprColor(0, 0, 0, 0), round, roundingPower); else renderTexture(tex, box, a, round, roundingPower, true, true); // discard opaque @@ -2275,20 +2275,20 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); // stencil done. Render everything. - const auto LASTTL = m_RenderData.primarySurfaceUVTopLeft; - const auto LASTBR = m_RenderData.primarySurfaceUVBottomRight; + const auto LASTTL = m_renderData.primarySurfaceUVTopLeft; + const auto LASTBR = m_renderData.primarySurfaceUVBottomRight; CBox transformedBox = box; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); - CBox monitorSpaceBox = {transformedBox.pos().x / m_RenderData.pMonitor->m_pixelSize.x * m_RenderData.pMonitor->m_transformedSize.x, - transformedBox.pos().y / m_RenderData.pMonitor->m_pixelSize.y * m_RenderData.pMonitor->m_transformedSize.y, - transformedBox.width / m_RenderData.pMonitor->m_pixelSize.x * m_RenderData.pMonitor->m_transformedSize.x, - transformedBox.height / m_RenderData.pMonitor->m_pixelSize.y * m_RenderData.pMonitor->m_transformedSize.y}; + CBox monitorSpaceBox = {transformedBox.pos().x / m_renderData.pMonitor->m_pixelSize.x * m_renderData.pMonitor->m_transformedSize.x, + transformedBox.pos().y / m_renderData.pMonitor->m_pixelSize.y * m_renderData.pMonitor->m_transformedSize.y, + transformedBox.width / m_renderData.pMonitor->m_pixelSize.x * m_renderData.pMonitor->m_transformedSize.x, + transformedBox.height / m_renderData.pMonitor->m_pixelSize.y * m_renderData.pMonitor->m_transformedSize.y}; - m_RenderData.primarySurfaceUVTopLeft = monitorSpaceBox.pos() / m_RenderData.pMonitor->m_transformedSize; - m_RenderData.primarySurfaceUVBottomRight = (monitorSpaceBox.pos() + monitorSpaceBox.size()) / m_RenderData.pMonitor->m_transformedSize; + m_renderData.primarySurfaceUVTopLeft = monitorSpaceBox.pos() / m_renderData.pMonitor->m_transformedSize; + m_renderData.primarySurfaceUVBottomRight = (monitorSpaceBox.pos() + monitorSpaceBox.size()) / m_renderData.pMonitor->m_transformedSize; static auto PBLURIGNOREOPACITY = CConfigValue("decoration:blur:ignore_opacity"); setMonitorTransformEnabled(true); @@ -2299,8 +2299,8 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f setRenderModifEnabled(true); setMonitorTransformEnabled(false); - m_RenderData.primarySurfaceUVTopLeft = LASTTL; - m_RenderData.primarySurfaceUVBottomRight = LASTBR; + m_renderData.primarySurfaceUVTopLeft = LASTTL; + m_renderData.primarySurfaceUVBottomRight = LASTBR; // render the window, but clear stencil glClearStencil(0); @@ -2317,21 +2317,21 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& grad, int round, float roundingPower, int borderSize, float a, int outerRound) { RASSERT((box.width > 0 && box.height > 0), "Tried to render rect with width/height < 0!"); - RASSERT(m_RenderData.pMonitor, "Tried to render rect without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render rect without begin()!"); TRACY_GPU_ZONE("RenderBorder"); - if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.noBorder.valueOrDefault())) + if (m_renderData.damage.empty() || (m_renderData.currentWindow && m_renderData.currentWindow->m_windowData.noBorder.valueOrDefault())) return; CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); if (borderSize < 1) return; - int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->m_scale); - scaledBorderSize = std::round(scaledBorderSize * m_RenderData.renderModif.combinedScale()); + int scaledBorderSize = std::round(borderSize * m_renderData.pMonitor->m_scale); + scaledBorderSize = std::round(scaledBorderSize * m_renderData.renderModif.combinedScale()); // adjust box newBox.x -= scaledBorderSize; @@ -2341,16 +2341,16 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr round += round == 0 ? 0 : scaledBorderSize; - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox( + newBox, wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)), newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - const auto BLEND = m_bBlend; + const auto BLEND = m_blend; blend(true); glUseProgram(m_shaders->m_shBORDER1.program); - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; + const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shBORDER1.skipCM, skipCM); if (!skipCM) passCMUniforms(m_shaders->m_shBORDER1, SImageDescription{}); @@ -2369,8 +2369,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1i(m_shaders->m_shBORDER1.gradient2Length, 0); CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -2389,9 +2389,9 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); - if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { - CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; - damageClip.intersect(m_RenderData.damage); + if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { + CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; + damageClip.intersect(m_renderData.damage); if (!damageClip.empty()) { for (auto const& RECT : damageClip.getRects()) { @@ -2400,7 +2400,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } } else { - for (auto const& RECT : m_RenderData.damage.getRects()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -2415,21 +2415,21 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& grad1, const CGradientValueData& grad2, float lerp, int round, float roundingPower, int borderSize, float a, int outerRound) { RASSERT((box.width > 0 && box.height > 0), "Tried to render rect with width/height < 0!"); - RASSERT(m_RenderData.pMonitor, "Tried to render rect without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render rect without begin()!"); TRACY_GPU_ZONE("RenderBorder2"); - if (m_RenderData.damage.empty() || (m_RenderData.currentWindow && m_RenderData.currentWindow->m_windowData.noBorder.valueOrDefault())) + if (m_renderData.damage.empty() || (m_renderData.currentWindow && m_renderData.currentWindow->m_windowData.noBorder.valueOrDefault())) return; CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); if (borderSize < 1) return; - int scaledBorderSize = std::round(borderSize * m_RenderData.pMonitor->m_scale); - scaledBorderSize = std::round(scaledBorderSize * m_RenderData.renderModif.combinedScale()); + int scaledBorderSize = std::round(borderSize * m_renderData.pMonitor->m_scale); + scaledBorderSize = std::round(scaledBorderSize * m_renderData.renderModif.combinedScale()); // adjust box newBox.x -= scaledBorderSize; @@ -2439,11 +2439,11 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr round += round == 0 ? 0 : scaledBorderSize; - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox( + newBox, wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)), newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - const auto BLEND = m_bBlend; + const auto BLEND = m_blend; blend(true); glUseProgram(m_shaders->m_shBORDER1.program); @@ -2466,8 +2466,8 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1f(m_shaders->m_shBORDER1.gradientLerp, lerp); CBox transformedBox = newBox; - transformedBox.transform(wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->m_transform)), m_RenderData.pMonitor->m_transformedSize.x, - m_RenderData.pMonitor->m_transformedSize.y); + transformedBox.transform(wlTransformToHyprutils(invertTransform(m_renderData.pMonitor->m_transform)), m_renderData.pMonitor->m_transformedSize.x, + m_renderData.pMonitor->m_transformedSize.y); const auto TOPLEFT = Vector2D(transformedBox.x, transformedBox.y); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); @@ -2486,9 +2486,9 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); - if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { - CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; - damageClip.intersect(m_RenderData.damage); + if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { + CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; + damageClip.intersect(m_renderData.damage); if (!damageClip.empty()) { for (auto const& RECT : damageClip.getRects()) { @@ -2497,7 +2497,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } } else { - for (auto const& RECT : m_RenderData.damage.getRects()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -2510,17 +2510,17 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roundingPower, int range, const CHyprColor& color, float a) { - RASSERT(m_RenderData.pMonitor, "Tried to render shadow without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render shadow without begin()!"); RASSERT((box.width > 0 && box.height > 0), "Tried to render shadow with width/height < 0!"); - RASSERT(m_RenderData.currentWindow, "Tried to render shadow without a window!"); + RASSERT(m_renderData.currentWindow, "Tried to render shadow without a window!"); - if (m_RenderData.damage.empty()) + if (m_renderData.damage.empty()) return; TRACY_GPU_ZONE("RenderShadow"); CBox newBox = box; - m_RenderData.renderModif.applyToBox(newBox); + m_renderData.renderModif.applyToBox(newBox); static auto PSHADOWPOWER = CConfigValue("decoration:shadow:render_power"); @@ -2528,14 +2528,14 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun const auto col = color; - Mat3x3 matrix = m_RenderData.monitorProjection.projectBox( - newBox, wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->m_transform)), newBox.rot); - Mat3x3 glMatrix = m_RenderData.projection.copy().multiply(matrix); + Mat3x3 matrix = m_renderData.monitorProjection.projectBox( + newBox, wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)), newBox.rot); + Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); blend(true); glUseProgram(m_shaders->m_shSHADOW.program); - const bool skipCM = !m_bCMSupported || m_RenderData.pMonitor->m_imageDescription == SImageDescription{}; + const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shSHADOW.skipCM, skipCM); if (!skipCM) passCMUniforms(m_shaders->m_shSHADOW, SImageDescription{}); @@ -2567,9 +2567,9 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun glEnableVertexAttribArray(m_shaders->m_shSHADOW.posAttrib); glEnableVertexAttribArray(m_shaders->m_shSHADOW.texAttrib); - if (m_RenderData.clipBox.width != 0 && m_RenderData.clipBox.height != 0) { - CRegion damageClip{m_RenderData.clipBox.x, m_RenderData.clipBox.y, m_RenderData.clipBox.width, m_RenderData.clipBox.height}; - damageClip.intersect(m_RenderData.damage); + if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { + CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; + damageClip.intersect(m_renderData.damage); if (!damageClip.empty()) { for (auto const& RECT : damageClip.getRects()) { @@ -2578,7 +2578,7 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun } } } else { - for (auto const& RECT : m_RenderData.damage.getRects()) { + for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -2590,24 +2590,24 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun void CHyprOpenGLImpl::saveBufferForMirror(const CBox& box) { - if (!m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated()) - m_RenderData.pCurrentMonData->monitorMirrorFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, - m_RenderData.pMonitor->m_output->state->state().drmFormat); + if (!m_renderData.pCurrentMonData->monitorMirrorFB.isAllocated()) + m_renderData.pCurrentMonData->monitorMirrorFB.alloc(m_renderData.pMonitor->m_pixelSize.x, m_renderData.pMonitor->m_pixelSize.y, + m_renderData.pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->monitorMirrorFB.bind(); + m_renderData.pCurrentMonData->monitorMirrorFB.bind(); blend(false); - renderTexture(m_RenderData.currentFB->getTexture(), box, 1.f, 0, 2.0f, false, false); + renderTexture(m_renderData.currentFB->getTexture(), box, 1.f, 0, 2.0f, false, false); blend(true); - m_RenderData.currentFB->bind(); + m_renderData.currentFB->bind(); } void CHyprOpenGLImpl::renderMirrored() { - auto monitor = m_RenderData.pMonitor; + auto monitor = m_renderData.pMonitor; auto mirrored = monitor->m_mirrorOf; const double scale = std::min(monitor->m_transformedSize.x / mirrored->m_transformedSize.x, monitor->m_transformedSize.y / mirrored->m_transformedSize.y); @@ -2619,11 +2619,11 @@ void CHyprOpenGLImpl::renderMirrored() { monbox.x = (monitor->m_transformedSize.x - monbox.w) / 2; monbox.y = (monitor->m_transformedSize.y - monbox.h) / 2; - const auto PFB = &m_mMonitorRenderResources[mirrored].monitorMirrorFB; + const auto PFB = &m_monitorRenderResources[mirrored].monitorMirrorFB; if (!PFB->isAllocated() || !PFB->getTexture()) return; - g_pHyprRenderer->m_sRenderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(0, 0, 0, 0)})); + g_pHyprRenderer->m_renderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(0, 0, 0, 0)})); CTexPassElement::SRenderData data; data.tex = PFB->getTexture(); @@ -2634,7 +2634,7 @@ void CHyprOpenGLImpl::renderMirrored() { .transform(wlTransformToHyprutils(invertTransform(mirrored->m_transform))) .translate(-monitor->m_transformedSize / 2.0); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } void CHyprOpenGLImpl::renderSplash(cairo_t* const CAIRO, cairo_surface_t* const CAIROSURFACE, double offsetY, const Vector2D& size) { @@ -2686,24 +2686,24 @@ SP CHyprOpenGLImpl::loadAsset(const std::string& filename) { } if (fullPath.empty()) { - failedAssetsNo++; + m_failedAssetsNo++; Debug::log(ERR, "loadAsset: looking for {} failed (no provider found)", filename); - return m_pMissingAssetTexture; + return m_missingAssetTexture; } const auto CAIROSURFACE = cairo_image_surface_create_from_png(fullPath.c_str()); if (!CAIROSURFACE) { - failedAssetsNo++; + m_failedAssetsNo++; Debug::log(ERR, "loadAsset: failed to load {} (corrupt / inaccessible / not png)", fullPath); - return m_pMissingAssetTexture; + return m_missingAssetTexture; } const auto CAIROFORMAT = cairo_image_surface_get_format(CAIROSURFACE); auto tex = makeShared(); tex->allocate(); - tex->m_vSize = {cairo_image_surface_get_width(CAIROSURFACE), cairo_image_surface_get_height(CAIROSURFACE)}; + tex->m_size = {cairo_image_surface_get_width(CAIROSURFACE), cairo_image_surface_get_height(CAIROSURFACE)}; const GLint glIFormat = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? #ifdef GLES2 @@ -2716,7 +2716,7 @@ SP CHyprOpenGLImpl::loadAsset(const std::string& filename) { const GLint glType = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_FLOAT : GL_UNSIGNED_BYTE; const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); - glBindTexture(GL_TEXTURE_2D, tex->m_iTexID); + glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #ifndef GLES2 @@ -2725,7 +2725,7 @@ SP CHyprOpenGLImpl::loadAsset(const std::string& filename) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); } #endif - glTexImage2D(GL_TEXTURE_2D, 0, glIFormat, tex->m_vSize.x, tex->m_vSize.y, 0, glFormat, glType, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, glIFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); @@ -2796,17 +2796,17 @@ SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col cairo_surface_flush(CAIROSURFACE); tex->allocate(); - tex->m_vSize = {cairo_image_surface_get_width(CAIROSURFACE), cairo_image_surface_get_height(CAIROSURFACE)}; + tex->m_size = {cairo_image_surface_get_width(CAIROSURFACE), cairo_image_surface_get_height(CAIROSURFACE)}; const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); - glBindTexture(GL_TEXTURE_2D, tex->m_iTexID); + glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); #endif - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->m_vSize.x, tex->m_vSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->m_size.x, tex->m_size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); cairo_destroy(CAIRO); cairo_surface_destroy(CAIROSURFACE); @@ -2835,40 +2835,40 @@ void CHyprOpenGLImpl::initMissingAssetTexture() { cairo_surface_flush(CAIROSURFACE); - tex->m_vSize = {512, 512}; + tex->m_size = {512, 512}; // copy the data to an OpenGL texture we have const GLint glFormat = GL_RGBA; const GLint glType = GL_UNSIGNED_BYTE; const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); - glBindTexture(GL_TEXTURE_2D, tex->m_iTexID); + glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); #endif - glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_vSize.x, tex->m_vSize.y, 0, glFormat, glType, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); cairo_destroy(CAIRO); - m_pMissingAssetTexture = tex; + m_missingAssetTexture = tex; } void CHyprOpenGLImpl::initAssets() { initMissingAssetTexture(); - m_pLockDeadTexture = loadAsset("lockdead.png"); - m_pLockDead2Texture = loadAsset("lockdead2.png"); + m_lockDeadTexture = loadAsset("lockdead.png"); + m_lockDead2Texture = loadAsset("lockdead2.png"); - m_pLockTtyTextTexture = renderText( + m_lockTtyTextTexture = renderText( std::format("Running on tty {}", g_pCompositor->m_aqBackend->hasSession() && g_pCompositor->m_aqBackend->session->vt > 0 ? std::to_string(g_pCompositor->m_aqBackend->session->vt) : "unknown"), CHyprColor{0.9F, 0.9F, 0.9F, 0.7F}, 20, true); - m_pScreencopyDeniedTexture = renderText("Permission denied to share screen", Colors::WHITE, 20); + m_screencopyDeniedTexture = renderText("Permission denied to share screen", Colors::WHITE, 20); ensureBackgroundTexturePresence(); } @@ -2880,8 +2880,8 @@ void CHyprOpenGLImpl::ensureBackgroundTexturePresence() { const auto FORCEWALLPAPER = std::clamp(*PFORCEWALLPAPER, static_cast(-1L), static_cast(2L)); if (*PNOWALLPAPER) - m_pBackgroundTexture.reset(); - else if (!m_pBackgroundTexture) { + m_backgroundTexture.reset(); + else if (!m_backgroundTexture) { // create the default background texture std::string texPath = "wall"; @@ -2896,12 +2896,12 @@ void CHyprOpenGLImpl::ensureBackgroundTexturePresence() { texPath += ".png"; - m_pBackgroundTexture = loadAsset(texPath); + m_backgroundTexture = loadAsset(texPath); } } void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { - RASSERT(m_RenderData.pMonitor, "Tried to createBGTex without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to createBGTex without begin()!"); Debug::log(LOG, "Creating a texture for BGTex"); @@ -2912,12 +2912,12 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { return; // release the last tex if exists - const auto PFB = &m_mMonitorBGFBs[pMonitor]; + const auto PFB = &m_monitorBGFBs[pMonitor]; PFB->release(); PFB->alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - if (!m_pBackgroundTexture) // ?!?!?! + if (!m_backgroundTexture) // ?!?!?! return; // create a new one with cairo @@ -2940,21 +2940,21 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { cairo_surface_flush(CAIROSURFACE); - tex->m_vSize = pMonitor->m_pixelSize; + tex->m_size = pMonitor->m_pixelSize; // copy the data to an OpenGL texture we have const GLint glFormat = GL_RGBA; const GLint glType = GL_UNSIGNED_BYTE; const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); - glBindTexture(GL_TEXTURE_2D, tex->m_iTexID); + glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); #endif - glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_vSize.x, tex->m_vSize.y, 0, glFormat, glType, DATA); + glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); cairo_destroy(CAIRO); @@ -2967,50 +2967,50 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { clear(CHyprColor{0, 0, 0, 1}); // first render the background - if (m_pBackgroundTexture) { - const double MONRATIO = m_RenderData.pMonitor->m_transformedSize.x / m_RenderData.pMonitor->m_transformedSize.y; - const double WPRATIO = m_pBackgroundTexture->m_vSize.x / m_pBackgroundTexture->m_vSize.y; + if (m_backgroundTexture) { + const double MONRATIO = m_renderData.pMonitor->m_transformedSize.x / m_renderData.pMonitor->m_transformedSize.y; + const double WPRATIO = m_backgroundTexture->m_size.x / m_backgroundTexture->m_size.y; Vector2D origin; double scale = 1.0; if (MONRATIO > WPRATIO) { - scale = m_RenderData.pMonitor->m_transformedSize.x / m_pBackgroundTexture->m_vSize.x; - origin.y = (m_RenderData.pMonitor->m_transformedSize.y - m_pBackgroundTexture->m_vSize.y * scale) / 2.0; + scale = m_renderData.pMonitor->m_transformedSize.x / m_backgroundTexture->m_size.x; + origin.y = (m_renderData.pMonitor->m_transformedSize.y - m_backgroundTexture->m_size.y * scale) / 2.0; } else { - scale = m_RenderData.pMonitor->m_transformedSize.y / m_pBackgroundTexture->m_vSize.y; - origin.x = (m_RenderData.pMonitor->m_transformedSize.x - m_pBackgroundTexture->m_vSize.x * scale) / 2.0; + scale = m_renderData.pMonitor->m_transformedSize.y / m_backgroundTexture->m_size.y; + origin.x = (m_renderData.pMonitor->m_transformedSize.x - m_backgroundTexture->m_size.x * scale) / 2.0; } - CBox texbox = CBox{origin, m_pBackgroundTexture->m_vSize * scale}; - renderTextureInternalWithDamage(m_pBackgroundTexture, texbox, 1.0, fakeDamage); + CBox texbox = CBox{origin, m_backgroundTexture->m_size * scale}; + renderTextureInternalWithDamage(m_backgroundTexture, texbox, 1.0, fakeDamage); } CBox monbox = {{}, pMonitor->m_pixelSize}; renderTextureInternalWithDamage(tex, monbox, 1.0, fakeDamage); // bind back - if (m_RenderData.currentFB) - m_RenderData.currentFB->bind(); + if (m_renderData.currentFB) + m_renderData.currentFB->bind(); Debug::log(LOG, "Background created for monitor {}", pMonitor->m_name); } void CHyprOpenGLImpl::clearWithTex() { - RASSERT(m_RenderData.pMonitor, "Tried to render BGtex without begin()!"); + RASSERT(m_renderData.pMonitor, "Tried to render BGtex without begin()!"); - auto TEXIT = m_mMonitorBGFBs.find(m_RenderData.pMonitor); + auto TEXIT = m_monitorBGFBs.find(m_renderData.pMonitor); - if (TEXIT == m_mMonitorBGFBs.end()) { - createBGTextureForMonitor(m_RenderData.pMonitor.lock()); - TEXIT = m_mMonitorBGFBs.find(m_RenderData.pMonitor); + if (TEXIT == m_monitorBGFBs.end()) { + createBGTextureForMonitor(m_renderData.pMonitor.lock()); + TEXIT = m_monitorBGFBs.find(m_renderData.pMonitor); } - if (TEXIT != m_mMonitorBGFBs.end()) { + if (TEXIT != m_monitorBGFBs.end()) { CTexPassElement::SRenderData data; - data.box = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; + data.box = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; data.flipEndFrame = true; data.tex = TEXIT->second.getTexture(); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } } @@ -3020,8 +3020,8 @@ void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITORREF pMonitor) { if (!g_pHyprOpenGL) return; - auto RESIT = g_pHyprOpenGL->m_mMonitorRenderResources.find(pMonitor); - if (RESIT != g_pHyprOpenGL->m_mMonitorRenderResources.end()) { + auto RESIT = g_pHyprOpenGL->m_monitorRenderResources.find(pMonitor); + if (RESIT != g_pHyprOpenGL->m_monitorRenderResources.end()) { RESIT->second.mirrorFB.release(); RESIT->second.offloadFB.release(); RESIT->second.mirrorSwapFB.release(); @@ -3029,13 +3029,13 @@ void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITORREF pMonitor) { RESIT->second.blurFB.release(); RESIT->second.offMainFB.release(); RESIT->second.stencilTex->destroyTexture(); - g_pHyprOpenGL->m_mMonitorRenderResources.erase(RESIT); + g_pHyprOpenGL->m_monitorRenderResources.erase(RESIT); } - auto TEXIT = g_pHyprOpenGL->m_mMonitorBGFBs.find(pMonitor); - if (TEXIT != g_pHyprOpenGL->m_mMonitorBGFBs.end()) { + auto TEXIT = g_pHyprOpenGL->m_monitorBGFBs.find(pMonitor); + if (TEXIT != g_pHyprOpenGL->m_monitorBGFBs.end()) { TEXIT->second.release(); - g_pHyprOpenGL->m_mMonitorBGFBs.erase(TEXIT); + g_pHyprOpenGL->m_monitorBGFBs.erase(TEXIT); } if (pMonitor) @@ -3043,46 +3043,46 @@ void CHyprOpenGLImpl::destroyMonitorResources(PHLMONITORREF pMonitor) { } void CHyprOpenGLImpl::saveMatrix() { - m_RenderData.savedProjection = m_RenderData.projection; + m_renderData.savedProjection = m_renderData.projection; } void CHyprOpenGLImpl::setMatrixScaleTranslate(const Vector2D& translate, const float& scale) { - m_RenderData.projection.scale(scale).translate(translate); + m_renderData.projection.scale(scale).translate(translate); } void CHyprOpenGLImpl::restoreMatrix() { - m_RenderData.projection = m_RenderData.savedProjection; + m_renderData.projection = m_renderData.savedProjection; } void CHyprOpenGLImpl::bindOffMain() { - if (!m_RenderData.pCurrentMonData->offMainFB.isAllocated()) { - m_RenderData.pCurrentMonData->offMainFB.alloc(m_RenderData.pMonitor->m_pixelSize.x, m_RenderData.pMonitor->m_pixelSize.y, - m_RenderData.pMonitor->m_output->state->state().drmFormat); + if (!m_renderData.pCurrentMonData->offMainFB.isAllocated()) { + m_renderData.pCurrentMonData->offMainFB.alloc(m_renderData.pMonitor->m_pixelSize.x, m_renderData.pMonitor->m_pixelSize.y, + m_renderData.pMonitor->m_output->state->state().drmFormat); - m_RenderData.pCurrentMonData->offMainFB.addStencil(m_RenderData.pCurrentMonData->stencilTex); + m_renderData.pCurrentMonData->offMainFB.addStencil(m_renderData.pCurrentMonData->stencilTex); } - m_RenderData.pCurrentMonData->offMainFB.bind(); + m_renderData.pCurrentMonData->offMainFB.bind(); clear(CHyprColor(0, 0, 0, 0)); - m_RenderData.currentFB = &m_RenderData.pCurrentMonData->offMainFB; + m_renderData.currentFB = &m_renderData.pCurrentMonData->offMainFB; } void CHyprOpenGLImpl::renderOffToMain(CFramebuffer* off) { - CBox monbox = {0, 0, m_RenderData.pMonitor->m_transformedSize.x, m_RenderData.pMonitor->m_transformedSize.y}; + CBox monbox = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y}; renderTexturePrimitive(off->getTexture(), monbox); } void CHyprOpenGLImpl::bindBackOnMain() { - m_RenderData.mainFB->bind(); - m_RenderData.currentFB = m_RenderData.mainFB; + m_renderData.mainFB->bind(); + m_renderData.currentFB = m_renderData.mainFB; } void CHyprOpenGLImpl::setMonitorTransformEnabled(bool enabled) { - m_bEndFrame = enabled; + m_endFrame = enabled; } void CHyprOpenGLImpl::setRenderModifEnabled(bool enabled) { - m_RenderData.renderModif.enabled = enabled; + m_renderData.renderModif.enabled = enabled; } uint32_t CHyprOpenGLImpl::getPreferredReadFormat(PHLMONITOR pMonitor) { @@ -3090,7 +3090,7 @@ uint32_t CHyprOpenGLImpl::getPreferredReadFormat(PHLMONITOR pMonitor) { } std::vector CHyprOpenGLImpl::getDRMFormats() { - return drmFormats; + return m_drmFormats; } void SRenderModifData::applyToBox(CBox& box) { @@ -3155,7 +3155,7 @@ float SRenderModifData::combinedScale() { } UP CEGLSync::create() { - EGLSyncKHR sync = g_pHyprOpenGL->m_sProc.eglCreateSyncKHR(g_pHyprOpenGL->m_pEglDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, nullptr); + EGLSyncKHR sync = g_pHyprOpenGL->m_proc.eglCreateSyncKHR(g_pHyprOpenGL->m_eglDisplay, EGL_SYNC_NATIVE_FENCE_ANDROID, nullptr); if (sync == EGL_NO_SYNC_KHR) { Debug::log(ERR, "eglCreateSyncKHR failed"); @@ -3165,7 +3165,7 @@ UP CEGLSync::create() { // we need to flush otherwise we might not get a valid fd glFlush(); - int fd = g_pHyprOpenGL->m_sProc.eglDupNativeFenceFDANDROID(g_pHyprOpenGL->m_pEglDisplay, sync); + int fd = g_pHyprOpenGL->m_proc.eglDupNativeFenceFDANDROID(g_pHyprOpenGL->m_eglDisplay, sync); if (fd == EGL_NO_NATIVE_FENCE_FD_ANDROID) { Debug::log(ERR, "eglDupNativeFenceFDANDROID failed"); return nullptr; @@ -3183,7 +3183,7 @@ CEGLSync::~CEGLSync() { if (m_sync == EGL_NO_SYNC_KHR) return; - if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, m_sync) != EGL_TRUE) + if (g_pHyprOpenGL && g_pHyprOpenGL->m_proc.eglDestroySyncKHR(g_pHyprOpenGL->m_eglDisplay, m_sync) != EGL_TRUE) Debug::log(ERR, "eglDestroySyncKHR failed"); } diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 21602d07..f4e9bdc4 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -239,24 +239,24 @@ class CHyprOpenGLImpl { EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); bool initShaders(); - bool m_bShadersInitialized = false; + bool m_shadersInitialized = false; SP m_shaders; - SCurrentRenderData m_RenderData; + SCurrentRenderData m_renderData; - Hyprutils::OS::CFileDescriptor m_iGBMFD; - gbm_device* m_pGbmDevice = nullptr; - EGLContext m_pEglContext = nullptr; - EGLDisplay m_pEglDisplay = nullptr; - EGLDeviceEXT m_pEglDevice = nullptr; - uint failedAssetsNo = 0; + Hyprutils::OS::CFileDescriptor m_gbmFD; + gbm_device* m_gbmDevice = nullptr; + EGLContext m_eglContext = nullptr; + EGLDisplay m_eglDisplay = nullptr; + EGLDeviceEXT m_eglDevice = nullptr; + uint m_failedAssetsNo = 0; - bool m_bReloadScreenShader = true; // at launch it can be set + bool m_reloadScreenShader = true; // at launch it can be set - std::map m_mWindowFramebuffers; - std::map m_mLayerFramebuffers; - std::map m_mMonitorRenderResources; - std::map m_mMonitorBGFBs; + std::map m_windowFramebuffers; + std::map m_layerFramebuffers; + std::map m_monitorRenderResources; + std::map m_monitorBGFBs; struct { PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glEGLImageTargetRenderbufferStorageOES = nullptr; @@ -274,7 +274,7 @@ class CHyprOpenGLImpl { PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR = nullptr; PFNEGLDUPNATIVEFENCEFDANDROIDPROC eglDupNativeFenceFDANDROID = nullptr; PFNEGLWAITSYNCKHRPROC eglWaitSyncKHR = nullptr; - } m_sProc; + } m_proc; struct { bool EXT_read_format_bgra = false; @@ -283,9 +283,9 @@ class CHyprOpenGLImpl { bool KHR_display_reference = false; bool IMG_context_priority = false; bool EXT_create_context_robustness = false; - } m_sExts; + } m_exts; - SP m_pScreencopyDeniedTexture; + SP m_screencopyDeniedTexture; private: enum eEGLContextVersion : uint8_t { @@ -296,26 +296,27 @@ class CHyprOpenGLImpl { eEGLContextVersion m_eglContextVersion = EGL_CONTEXT_GLES_3_2; - std::list m_lBuffers; - std::list m_lTextures; + std::vector m_drmFormats; + bool m_hasModifiers = false; - std::vector drmFormats; - bool m_bHasModifiers = false; + int m_drmFD = -1; + std::string m_extensions; - int m_iDRMFD = -1; - std::string m_szExtensions; + bool m_fakeFrame = false; + bool m_endFrame = false; + bool m_applyFinalShader = false; + bool m_blend = false; + bool m_offloadedFramebuffer = false; + bool m_cmSupported = true; - bool m_bFakeFrame = false; - bool m_bEndFrame = false; - bool m_bApplyFinalShader = false; - bool m_bBlend = false; - bool m_bOffloadedFramebuffer = false; - bool m_bCMSupported = true; + CShader m_finalScreenShader; + CTimer m_globalTimer; - CShader m_sFinalScreenShader; - CTimer m_tGlobalTimer; - - SP m_pMissingAssetTexture, m_pBackgroundTexture, m_pLockDeadTexture, m_pLockDead2Texture, m_pLockTtyTextTexture; // TODO: don't always load lock + SP m_missingAssetTexture; + SP m_backgroundTexture; + SP m_lockDeadTexture; + SP m_lockDead2Texture; + SP m_lockTtyTextTexture; // TODO: don't always load lock void logShaderError(const GLuint&, bool program = false, bool silent = false); GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false); diff --git a/src/render/Renderbuffer.cpp b/src/render/Renderbuffer.cpp index c5e3b3a4..addc99a8 100644 --- a/src/render/Renderbuffer.cpp +++ b/src/render/Renderbuffer.cpp @@ -15,62 +15,62 @@ CRenderbuffer::~CRenderbuffer() { g_pHyprRenderer->makeEGLCurrent(); unbind(); - m_sFramebuffer.release(); - glDeleteRenderbuffers(1, &m_iRBO); + m_framebuffer.release(); + glDeleteRenderbuffers(1, &m_rbo); - g_pHyprOpenGL->m_sProc.eglDestroyImageKHR(g_pHyprOpenGL->m_pEglDisplay, m_iImage); + g_pHyprOpenGL->m_proc.eglDestroyImageKHR(g_pHyprOpenGL->m_eglDisplay, m_image); } -CRenderbuffer::CRenderbuffer(SP buffer, uint32_t format) : m_pHLBuffer(buffer), m_uDrmFormat(format) { +CRenderbuffer::CRenderbuffer(SP buffer, uint32_t format) : m_hlBuffer(buffer), m_drmFormat(format) { auto dma = buffer->dmabuf(); - m_iImage = g_pHyprOpenGL->createEGLImage(dma); - if (m_iImage == EGL_NO_IMAGE_KHR) { + m_image = g_pHyprOpenGL->createEGLImage(dma); + if (m_image == EGL_NO_IMAGE_KHR) { Debug::log(ERR, "rb: createEGLImage failed"); return; } - glGenRenderbuffers(1, &m_iRBO); - glBindRenderbuffer(GL_RENDERBUFFER, m_iRBO); - g_pHyprOpenGL->m_sProc.glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, (GLeglImageOES)m_iImage); + glGenRenderbuffers(1, &m_rbo); + glBindRenderbuffer(GL_RENDERBUFFER, m_rbo); + g_pHyprOpenGL->m_proc.glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, (GLeglImageOES)m_image); glBindRenderbuffer(GL_RENDERBUFFER, 0); - glGenFramebuffers(1, &m_sFramebuffer.m_iFb); - m_sFramebuffer.m_iFbAllocated = true; - m_sFramebuffer.m_vSize = buffer->size; - m_sFramebuffer.bind(); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_iRBO); + glGenFramebuffers(1, &m_framebuffer.m_fb); + m_framebuffer.m_fbAllocated = true; + m_framebuffer.m_size = buffer->size; + m_framebuffer.bind(); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_rbo); if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { Debug::log(ERR, "rbo: glCheckFramebufferStatus failed"); return; } - m_sFramebuffer.unbind(); + m_framebuffer.unbind(); - listeners.destroyBuffer = buffer->events.destroy.registerListener([this](std::any d) { g_pHyprRenderer->onRenderbufferDestroy(this); }); + m_listeners.destroyBuffer = buffer->events.destroy.registerListener([this](std::any d) { g_pHyprRenderer->onRenderbufferDestroy(this); }); - m_bGood = true; + m_good = true; } bool CRenderbuffer::good() { - return m_bGood; + return m_good; } void CRenderbuffer::bind() { - glBindRenderbuffer(GL_RENDERBUFFER, m_iRBO); + glBindRenderbuffer(GL_RENDERBUFFER, m_rbo); bindFB(); } void CRenderbuffer::bindFB() { - m_sFramebuffer.bind(); + m_framebuffer.bind(); } void CRenderbuffer::unbind() { glBindRenderbuffer(GL_RENDERBUFFER, 0); - m_sFramebuffer.unbind(); + m_framebuffer.unbind(); } CFramebuffer* CRenderbuffer::getFB() { - return &m_sFramebuffer; + return &m_framebuffer; } diff --git a/src/render/Renderbuffer.hpp b/src/render/Renderbuffer.hpp index ff06bd5a..c0924141 100644 --- a/src/render/Renderbuffer.hpp +++ b/src/render/Renderbuffer.hpp @@ -19,16 +19,16 @@ class CRenderbuffer { CFramebuffer* getFB(); uint32_t getFormat(); - WP m_pHLBuffer; + WP m_hlBuffer; private: - void* m_iImage = nullptr; - GLuint m_iRBO = 0; - CFramebuffer m_sFramebuffer; - uint32_t m_uDrmFormat = 0; - bool m_bGood = false; + void* m_image = nullptr; + GLuint m_rbo = 0; + CFramebuffer m_framebuffer; + uint32_t m_drmFormat = 0; + bool m_good = false; struct { CHyprSignalListener destroyBuffer; - } listeners; + } m_listeners; }; \ No newline at end of file diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 205e206a..ed767cbd 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -48,7 +48,7 @@ extern "C" { static int cursorTicker(void* data) { g_pHyprRenderer->ensureCursorRenderingMode(); - wl_event_source_timer_update(g_pHyprRenderer->m_pCursorTicker, 500); + wl_event_source_timer_update(g_pHyprRenderer->m_cursorTicker, 500); return 0; } @@ -62,7 +62,7 @@ CHyprRenderer::CHyprRenderer() { std::transform(name.begin(), name.end(), name.begin(), tolower); if (name.contains("nvidia")) - m_bNvidia = true; + m_nvidia = true; Debug::log(LOG, "DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor, DRMV->version_patchlevel, std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len}); @@ -79,7 +79,7 @@ CHyprRenderer::CHyprRenderer() { std::transform(name.begin(), name.end(), name.begin(), tolower); if (name.contains("nvidia")) - m_bNvidia = true; + m_nvidia = true; Debug::log(LOG, "Primary DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor, DRMV->version_patchlevel, std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len}); @@ -90,27 +90,26 @@ CHyprRenderer::CHyprRenderer() { drmFreeVersion(DRMV); } - if (m_bNvidia) + if (m_nvidia) Debug::log(WARN, "NVIDIA detected, please remember to follow nvidia instructions on the wiki"); // cursor hiding stuff static auto P = g_pHookSystem->hookDynamic("keyPress", [&](void* self, SCallbackInfo& info, std::any param) { - if (m_sCursorHiddenConditions.hiddenOnKeyboard) + if (m_cursorHiddenConditions.hiddenOnKeyboard) return; - m_sCursorHiddenConditions.hiddenOnKeyboard = true; + m_cursorHiddenConditions.hiddenOnKeyboard = true; ensureCursorRenderingMode(); }); static auto P2 = g_pHookSystem->hookDynamic("mouseMove", [&](void* self, SCallbackInfo& info, std::any param) { - if (!m_sCursorHiddenConditions.hiddenOnKeyboard && m_sCursorHiddenConditions.hiddenOnTouch == g_pInputManager->m_lastInputTouch && - !m_sCursorHiddenConditions.hiddenOnTimeout) + if (!m_cursorHiddenConditions.hiddenOnKeyboard && m_cursorHiddenConditions.hiddenOnTouch == g_pInputManager->m_lastInputTouch && !m_cursorHiddenConditions.hiddenOnTimeout) return; - m_sCursorHiddenConditions.hiddenOnKeyboard = false; - m_sCursorHiddenConditions.hiddenOnTimeout = false; - m_sCursorHiddenConditions.hiddenOnTouch = g_pInputManager->m_lastInputTouch; + m_cursorHiddenConditions.hiddenOnKeyboard = false; + m_cursorHiddenConditions.hiddenOnTimeout = false; + m_cursorHiddenConditions.hiddenOnTouch = g_pInputManager->m_lastInputTouch; ensureCursorRenderingMode(); }); @@ -124,19 +123,19 @@ CHyprRenderer::CHyprRenderer() { }); }); - m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, cursorTicker, nullptr); - wl_event_source_timer_update(m_pCursorTicker, 500); + m_cursorTicker = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, cursorTicker, nullptr); + wl_event_source_timer_update(m_cursorTicker, 500); - m_tRenderUnfocusedTimer = makeShared( + m_renderUnfocusedTimer = makeShared( std::nullopt, [this](SP self, void* data) { static auto PFPS = CConfigValue("misc:render_unfocused_fps"); - if (m_vRenderUnfocused.empty()) + if (m_renderUnfocused.empty()) return; bool dirty = false; - for (auto& w : m_vRenderUnfocused) { + for (auto& w : m_renderUnfocused) { if (!w) { dirty = true; continue; @@ -153,19 +152,19 @@ CHyprRenderer::CHyprRenderer() { } if (dirty) - std::erase_if(m_vRenderUnfocused, [](const auto& e) { return !e || !e->m_windowData.renderUnfocused.valueOr(false); }); + std::erase_if(m_renderUnfocused, [](const auto& e) { return !e || !e->m_windowData.renderUnfocused.valueOr(false); }); - if (!m_vRenderUnfocused.empty()) - m_tRenderUnfocusedTimer->updateTimeout(std::chrono::milliseconds(1000 / *PFPS)); + if (!m_renderUnfocused.empty()) + m_renderUnfocusedTimer->updateTimeout(std::chrono::milliseconds(1000 / *PFPS)); }, nullptr); - g_pEventLoopManager->addTimer(m_tRenderUnfocusedTimer); + g_pEventLoopManager->addTimer(m_renderUnfocusedTimer); } CHyprRenderer::~CHyprRenderer() { - if (m_pCursorTicker) - wl_event_source_remove(m_pCursorTicker); + if (m_cursorTicker) + wl_event_source_remove(m_cursorTicker); } bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { @@ -521,11 +520,11 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW); if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) { - CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.y}; + CBox monbox = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y}; CRectPassElement::SRectData data; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * renderdata.alpha * renderdata.fadeAlpha); data.box = monbox; - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); } renderdata.pos.x += pWindow->m_floatingOffset.x; @@ -581,7 +580,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T data.blur = true; data.blurA = renderdata.fadeAlpha; data.xray = g_pHyprOpenGL->shouldUseNewBlurOptimizations(nullptr, pWindow); - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); renderdata.blur = false; } @@ -592,7 +591,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pWindow->m_wlSurface->resource(); - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, nullptr); @@ -609,7 +608,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } if (TRANSFORMERSPRESENT) { - CFramebuffer* last = g_pHyprOpenGL->m_RenderData.currentFB; + CFramebuffer* last = g_pHyprOpenGL->m_renderData.currentFB; for (auto const& t : pWindow->m_transformers) { last = t->transform(last); } @@ -619,7 +618,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } } - g_pHyprOpenGL->m_RenderData.clipBox = CBox(); + g_pHyprOpenGL->m_renderData.clipBox = CBox(); if (mode == RENDER_PASS_ALL || mode == RENDER_PASS_POPUP) { if (!pWindow->m_isX11) { @@ -660,7 +659,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = false; - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, data); @@ -681,11 +680,11 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T } // for plugins - g_pHyprOpenGL->m_RenderData.currentWindow = pWindow; + g_pHyprOpenGL->m_renderData.currentWindow = pWindow; EMIT_HOOK_EVENT("render", RENDER_POST_WINDOW); - g_pHyprOpenGL->m_RenderData.currentWindow.reset(); + g_pHyprOpenGL->m_renderData.currentWindow.reset(); } void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups, bool lockscreen) { @@ -700,9 +699,9 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s if (*PDIMAROUND && pLayer->m_dimAround && !m_bRenderingSnapshot && !popups) { CRectPassElement::SRectData data; - data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize.y}; + data.box = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y}; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pLayer->m_alpha->value()); - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); } if (pLayer->m_fadingOut) { @@ -742,7 +741,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pLayer->m_surface->resource(); - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, &renderdata); @@ -763,7 +762,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s renderdata.texture = popup->m_wlSurface->resource()->m_current.texture; renderdata.surface = popup->m_wlSurface->resource(); renderdata.mainSurface = false; - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, &renderdata); @@ -798,7 +797,7 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, con renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == SURF; - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, &renderdata); @@ -819,7 +818,7 @@ void CHyprRenderer::renderSessionLockSurface(WP pSurface, P renderdata.texture = s->m_current.texture; renderdata.surface = s; renderdata.mainSurface = s == pSurface->surface->surface(); - m_sRenderPass.add(makeShared(renderdata)); + m_renderPass.add(makeShared(renderdata)); renderdata.surfaceCounter++; }, &renderdata); @@ -853,12 +852,12 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_SCALE, scale)); if (!RENDERMODIFDATA.modifs.empty()) { - g_pHyprRenderer->m_sRenderPass.add(makeShared(CRendererHintsPassElement::SData{RENDERMODIFDATA})); + g_pHyprRenderer->m_renderPass.add(makeShared(CRendererHintsPassElement::SData{RENDERMODIFDATA})); } CScopeGuard x([&RENDERMODIFDATA] { if (!RENDERMODIFDATA.modifs.empty()) { - g_pHyprRenderer->m_sRenderPass.add(makeShared(CRendererHintsPassElement::SData{SRenderModifData{}})); + g_pHyprRenderer->m_renderPass.add(makeShared(CRendererHintsPassElement::SData{SRenderModifData{}})); } }); @@ -866,7 +865,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA // allow rendering without a workspace. In this case, just render layers. if (*PRENDERTEX /* inverted cfg flag */) - m_sRenderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)})); + m_renderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)})); else g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper" @@ -888,7 +887,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA if (!*PXPMODE) { if (*PRENDERTEX /* inverted cfg flag */) - m_sRenderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)})); + m_renderPass.add(makeShared(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)})); else g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper" @@ -919,7 +918,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale}; data.color = CHyprColor(0, 0, 0, *PDIMSPECIAL * (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS)); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } if (*PBLURSPECIAL && *PBLUR) { @@ -929,7 +928,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA data.blur = true; data.blurA = (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS); - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } break; @@ -1027,15 +1026,15 @@ void CHyprRenderer::renderSessionLockMissing(PHLMONITOR pMonitor) { if (ANY_PRESENT) { // render image2, without instructions. Lock still "alive", unless texture dead - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pLockDead2Texture, monbox, ALPHA); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_lockDead2Texture, monbox, ALPHA); } else { // render image, with instructions. Lock is gone. - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pLockDeadTexture, monbox, ALPHA); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_lockDeadTexture, monbox, ALPHA); // also render text for the tty number - if (g_pHyprOpenGL->m_pLockTtyTextTexture) { - CBox texbox = {{}, g_pHyprOpenGL->m_pLockTtyTextTexture->m_vSize}; - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_pLockTtyTextTexture, texbox, 1.F); + if (g_pHyprOpenGL->m_lockTtyTextTexture) { + CBox texbox = {{}, g_pHyprOpenGL->m_lockTtyTextTexture->m_size}; + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_lockTtyTextTexture, texbox, 1.F); } } @@ -1096,13 +1095,13 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_RenderData.primarySurfaceUVTopLeft = uvTL; - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = uvBR; + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = uvTL; + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = uvBR; - if (g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft == Vector2D() && g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight == Vector2D(1, 1)) { + if (g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft == Vector2D() && g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight == Vector2D(1, 1)) { // No special UV mods needed - g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); } if (!main || !pWindow) @@ -1132,17 +1131,17 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_RenderData.primarySurfaceUVTopLeft = uvTL; - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = uvBR; + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = uvTL; + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = uvBR; - if (g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft == Vector2D() && g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight == Vector2D(1, 1)) { + if (g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft == Vector2D() && g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight == Vector2D(1, 1)) { // No special UV mods needed - g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); } } else { - g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); } } @@ -1173,15 +1172,15 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (firstLaunch) { firstLaunch = false; - m_tRenderTimer.reset(); + m_renderTimer.reset(); } - if (m_tRenderTimer.getSeconds() < 1.5f && firstLaunchAnimActive) { // TODO: make the animation system more damage-flexible so that this can be migrated to there + if (m_renderTimer.getSeconds() < 1.5f && firstLaunchAnimActive) { // TODO: make the animation system more damage-flexible so that this can be migrated to there if (!*PANIMENABLED) { zoomInFactorFirstLaunch = 1.f; firstLaunchAnimActive = false; } else { - zoomInFactorFirstLaunch = 2.f - g_pAnimationManager->getBezier("default")->getYForPoint(m_tRenderTimer.getSeconds() / 1.5); + zoomInFactorFirstLaunch = 2.f - g_pAnimationManager->getBezier("default")->getYForPoint(m_renderTimer.getSeconds() / 1.5); damageMonitor(pMonitor); } } else { @@ -1196,7 +1195,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (!g_pCompositor->m_sessionActive) return; - if (pMonitor->m_id == m_pMostHzMonitor->m_id || + if (pMonitor->m_id == m_mostHzMonitor->m_id || *PVFR == 1) { // unfortunately with VFR we don't have the guarantee mostHz is going to be updated all the time, so we have to ignore that g_pCompositor->sanityCheckWorkspaces(); @@ -1224,7 +1223,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { return; } - if (g_pHyprOpenGL->m_RenderData.mouseZoomFactor != 1.0) { + if (g_pHyprOpenGL->m_renderData.mouseZoomFactor != 1.0) { Debug::log(WARN, "Tearing commit requested but scale factor is not 1, ignoring"); return; } @@ -1295,14 +1294,14 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { } if (pMonitor == g_pCompositor->getMonitorFromCursor()) - g_pHyprOpenGL->m_RenderData.mouseZoomFactor = std::clamp(*PZOOMFACTOR, 1.f, INFINITY); + g_pHyprOpenGL->m_renderData.mouseZoomFactor = std::clamp(*PZOOMFACTOR, 1.f, INFINITY); else - g_pHyprOpenGL->m_RenderData.mouseZoomFactor = 1.f; + g_pHyprOpenGL->m_renderData.mouseZoomFactor = 1.f; if (zoomInFactorFirstLaunch > 1.f) { - g_pHyprOpenGL->m_RenderData.mouseZoomFactor = zoomInFactorFirstLaunch; - g_pHyprOpenGL->m_RenderData.mouseZoomUseMouse = false; - g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false; + g_pHyprOpenGL->m_renderData.mouseZoomFactor = zoomInFactorFirstLaunch; + g_pHyprOpenGL->m_renderData.mouseZoomUseMouse = false; + g_pHyprOpenGL->m_renderData.useNearestNeighbor = false; pMonitor->m_forceFullFrames = 10; } @@ -1361,7 +1360,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { CRectPassElement::SRectData data; data.box = {0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y}; data.color = CHyprColor(1.0, 0.0, 1.0, 100.0 / 255.0); - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); damageBlinkCleanup = 1; } else if (*PDAMAGEBLINK) { damageBlinkCleanup++; @@ -1381,7 +1380,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { if (renderCursor) { TRACY_GPU_ZONE("RenderCursor"); - g_pPointerManager->renderSoftwareCursorsFor(pMonitor->m_self.lock(), NOW, g_pHyprOpenGL->m_RenderData.damage); + g_pPointerManager->renderSoftwareCursorsFor(pMonitor->m_self.lock(), NOW, g_pHyprOpenGL->m_renderData.damage); } EMIT_HOOK_EVENT("render", RENDER_LAST_MOMENT); @@ -1390,7 +1389,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor) { TRACY_GPU_COLLECT; - CRegion frameDamage{g_pHyprOpenGL->m_RenderData.damage}; + CRegion frameDamage{g_pHyprOpenGL->m_renderData.damage}; const auto TRANSFORM = invertTransform(pMonitor->m_transform); frameDamage.transform(wlTransformToHyprutils(TRANSFORM), pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y); @@ -1964,29 +1963,29 @@ void CHyprRenderer::renderDragIcon(PHLMONITOR pMonitor, const Time::steady_tp& t } void CHyprRenderer::setCursorSurface(SP surf, int hotspotX, int hotspotY, bool force) { - m_bCursorHasSurface = surf; + m_cursorHasSurface = surf; - m_sLastCursorData.name = ""; - m_sLastCursorData.surf = surf; - m_sLastCursorData.hotspotX = hotspotX; - m_sLastCursorData.hotspotY = hotspotY; + m_lastCursorData.name = ""; + m_lastCursorData.surf = surf; + m_lastCursorData.hotspotX = hotspotX; + m_lastCursorData.hotspotY = hotspotY; - if (m_bCursorHidden && !force) + if (m_cursorHidden && !force) return; g_pCursorManager->setCursorSurface(surf, {hotspotX, hotspotY}); } void CHyprRenderer::setCursorFromName(const std::string& name, bool force) { - m_bCursorHasSurface = true; + m_cursorHasSurface = true; - if (name == m_sLastCursorData.name && !force) + if (name == m_lastCursorData.name && !force) return; - m_sLastCursorData.name = name; - m_sLastCursorData.surf.reset(); + m_lastCursorData.name = name; + m_lastCursorData.surf.reset(); - if (m_bCursorHidden && !force) + if (m_cursorHidden && !force) return; g_pCursorManager->setCursorFromName(name); @@ -1998,18 +1997,18 @@ void CHyprRenderer::ensureCursorRenderingMode() { static auto PHIDEONKEY = CConfigValue("cursor:hide_on_key_press"); if (*PCURSORTIMEOUT <= 0) - m_sCursorHiddenConditions.hiddenOnTimeout = false; + m_cursorHiddenConditions.hiddenOnTimeout = false; if (*PHIDEONTOUCH == 0) - m_sCursorHiddenConditions.hiddenOnTouch = false; + m_cursorHiddenConditions.hiddenOnTouch = false; if (*PHIDEONKEY == 0) - m_sCursorHiddenConditions.hiddenOnKeyboard = false; + m_cursorHiddenConditions.hiddenOnKeyboard = false; if (*PCURSORTIMEOUT > 0) - m_sCursorHiddenConditions.hiddenOnTimeout = *PCURSORTIMEOUT < g_pInputManager->m_lastCursorMovement.getSeconds(); + m_cursorHiddenConditions.hiddenOnTimeout = *PCURSORTIMEOUT < g_pInputManager->m_lastCursorMovement.getSeconds(); - const bool HIDE = m_sCursorHiddenConditions.hiddenOnTimeout || m_sCursorHiddenConditions.hiddenOnTouch || m_sCursorHiddenConditions.hiddenOnKeyboard; + const bool HIDE = m_cursorHiddenConditions.hiddenOnTimeout || m_cursorHiddenConditions.hiddenOnTouch || m_cursorHiddenConditions.hiddenOnKeyboard; - if (HIDE == m_bCursorHidden) + if (HIDE == m_cursorHidden) return; if (HIDE) { @@ -2040,26 +2039,26 @@ void CHyprRenderer::ensureCursorRenderingMode() { void CHyprRenderer::setCursorHidden(bool hide) { - if (hide == m_bCursorHidden) + if (hide == m_cursorHidden) return; - m_bCursorHidden = hide; + m_cursorHidden = hide; if (hide) { g_pPointerManager->resetCursorImage(); return; } - if (m_sLastCursorData.surf.has_value()) - setCursorSurface(m_sLastCursorData.surf.value(), m_sLastCursorData.hotspotX, m_sLastCursorData.hotspotY, true); - else if (!m_sLastCursorData.name.empty()) - setCursorFromName(m_sLastCursorData.name, true); + if (m_lastCursorData.surf.has_value()) + setCursorSurface(m_lastCursorData.surf.value(), m_lastCursorData.hotspotX, m_lastCursorData.hotspotY, true); + else if (!m_lastCursorData.name.empty()) + setCursorFromName(m_lastCursorData.name, true); else setCursorFromName("left_ptr", true); } bool CHyprRenderer::shouldRenderCursor() { - return !m_bCursorHidden && m_bCursorHasSurface; + return !m_cursorHidden && m_cursorHasSurface; } std::tuple CHyprRenderer::getRenderTimes(PHLMONITOR pMonitor) { @@ -2082,15 +2081,15 @@ std::tuple CHyprRenderer::getRenderTimes(PHLMONITOR pMonito static int handleCrashLoop(void* data) { - g_pHyprNotificationOverlay->addNotification("Hyprland will crash in " + std::to_string(10 - (int)(g_pHyprRenderer->m_fCrashingDistort * 2.f)) + "s.", CHyprColor(0), 5000, + g_pHyprNotificationOverlay->addNotification("Hyprland will crash in " + std::to_string(10 - (int)(g_pHyprRenderer->m_crashingDistort * 2.f)) + "s.", CHyprColor(0), 5000, ICON_INFO); - g_pHyprRenderer->m_fCrashingDistort += 0.5f; + g_pHyprRenderer->m_crashingDistort += 0.5f; - if (g_pHyprRenderer->m_fCrashingDistort >= 5.5f) + if (g_pHyprRenderer->m_crashingDistort >= 5.5f) raise(SIGABRT); - wl_event_source_timer_update(g_pHyprRenderer->m_pCrashingLoop, 1000); + wl_event_source_timer_update(g_pHyprRenderer->m_crashingLoop, 1000); return 1; } @@ -2098,13 +2097,13 @@ static int handleCrashLoop(void* data) { void CHyprRenderer::initiateManualCrash() { g_pHyprNotificationOverlay->addNotification("Manual crash initiated. Farewell...", CHyprColor(0), 5000, ICON_INFO); - m_pCrashingLoop = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, handleCrashLoop, nullptr); - wl_event_source_timer_update(m_pCrashingLoop, 1000); + m_crashingLoop = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, handleCrashLoop, nullptr); + wl_event_source_timer_update(m_crashingLoop, 1000); - m_bCrashingInProgress = true; - m_fCrashingDistort = 0.5; + m_crashingInProgress = true; + m_crashingDistort = 0.5; - g_pHyprOpenGL->m_tGlobalTimer.reset(); + g_pHyprOpenGL->m_globalTimer.reset(); static auto PDT = (Hyprlang::INT* const*)(g_pConfigManager->getConfigValuePtr("debug:damage_tracking")); @@ -2169,9 +2168,9 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { } SP CHyprRenderer::getOrCreateRenderbuffer(SP buffer, uint32_t fmt) { - auto it = std::find_if(m_vRenderbuffers.begin(), m_vRenderbuffers.end(), [&](const auto& other) { return other->m_pHLBuffer == buffer; }); + auto it = std::find_if(m_renderbuffers.begin(), m_renderbuffers.end(), [&](const auto& other) { return other->m_hlBuffer == buffer; }); - if (it != m_vRenderbuffers.end()) + if (it != m_renderbuffers.end()) return *it; auto buf = makeShared(buffer, fmt); @@ -2179,7 +2178,7 @@ SP CHyprRenderer::getOrCreateRenderbuffer(SP if (!buf->good()) return nullptr; - m_vRenderbuffers.emplace_back(buf); + m_renderbuffers.emplace_back(buf); return buf; } @@ -2187,26 +2186,26 @@ void CHyprRenderer::makeEGLCurrent() { if (!g_pCompositor || !g_pHyprOpenGL) return; - if (eglGetCurrentContext() != g_pHyprOpenGL->m_pEglContext) - eglMakeCurrent(g_pHyprOpenGL->m_pEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, g_pHyprOpenGL->m_pEglContext); + if (eglGetCurrentContext() != g_pHyprOpenGL->m_eglContext) + eglMakeCurrent(g_pHyprOpenGL->m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, g_pHyprOpenGL->m_eglContext); } void CHyprRenderer::unsetEGL() { if (!g_pHyprOpenGL) return; - eglMakeCurrent(g_pHyprOpenGL->m_pEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglMakeCurrent(g_pHyprOpenGL->m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); } bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMode mode, SP buffer, CFramebuffer* fb, bool simple) { makeEGLCurrent(); - m_sRenderPass.clear(); + m_renderPass.clear(); - m_eRenderMode = mode; + m_renderMode = mode; - g_pHyprOpenGL->m_RenderData.pMonitor = pMonitor; // has to be set cuz allocs + g_pHyprOpenGL->m_renderData.pMonitor = pMonitor; // has to be set cuz allocs if (mode == RENDER_MODE_FULL_FAKE) { RASSERT(fb, "Cannot render FULL_FAKE without a provided fb!"); @@ -2223,22 +2222,22 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod static constexpr const int HL_BUFFER_AGE = 2; if (!buffer) { - m_pCurrentBuffer = pMonitor->m_output->swapchain->next(nullptr); - if (!m_pCurrentBuffer) { + m_currentBuffer = pMonitor->m_output->swapchain->next(nullptr); + if (!m_currentBuffer) { Debug::log(ERR, "Failed to acquire swapchain buffer for {}", pMonitor->m_name); return false; } } else - m_pCurrentBuffer = buffer; + m_currentBuffer = buffer; try { - m_pCurrentRenderbuffer = getOrCreateRenderbuffer(m_pCurrentBuffer, pMonitor->m_output->state->state().drmFormat); + m_currentRenderbuffer = getOrCreateRenderbuffer(m_currentBuffer, pMonitor->m_output->state->state().drmFormat); } catch (std::exception& e) { Debug::log(ERR, "getOrCreateRenderbuffer failed for {}", pMonitor->m_name); return false; } - if (!m_pCurrentRenderbuffer) { + if (!m_currentRenderbuffer) { Debug::log(ERR, "failed to start a render pass for output {}, no RBO could be obtained", pMonitor->m_name); return false; } @@ -2248,9 +2247,9 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod pMonitor->m_damage.rotate(); } - m_pCurrentRenderbuffer->bind(); + m_currentRenderbuffer->bind(); if (simple) - g_pHyprOpenGL->beginSimple(pMonitor, damage, m_pCurrentRenderbuffer); + g_pHyprOpenGL->beginSimple(pMonitor, damage, m_currentRenderbuffer); else g_pHyprOpenGL->begin(pMonitor, damage); @@ -2258,55 +2257,55 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod } void CHyprRenderer::endRender(const std::function& renderingDoneCallback) { - const auto PMONITOR = g_pHyprOpenGL->m_RenderData.pMonitor; + const auto PMONITOR = g_pHyprOpenGL->m_renderData.pMonitor; static auto PNVIDIAANTIFLICKER = CConfigValue("opengl:nvidia_anti_flicker"); - g_pHyprOpenGL->m_RenderData.damage = m_sRenderPass.render(g_pHyprOpenGL->m_RenderData.damage); + g_pHyprOpenGL->m_renderData.damage = m_renderPass.render(g_pHyprOpenGL->m_renderData.damage); auto cleanup = CScopeGuard([this]() { - if (m_pCurrentRenderbuffer) - m_pCurrentRenderbuffer->unbind(); - m_pCurrentRenderbuffer = nullptr; - m_pCurrentBuffer = nullptr; + if (m_currentRenderbuffer) + m_currentRenderbuffer->unbind(); + m_currentRenderbuffer = nullptr; + m_currentBuffer = nullptr; }); - if (m_eRenderMode != RENDER_MODE_TO_BUFFER_READ_ONLY) + if (m_renderMode != RENDER_MODE_TO_BUFFER_READ_ONLY) g_pHyprOpenGL->end(); else { - g_pHyprOpenGL->m_RenderData.pMonitor.reset(); - g_pHyprOpenGL->m_RenderData.mouseZoomFactor = 1.f; - g_pHyprOpenGL->m_RenderData.mouseZoomUseMouse = true; + g_pHyprOpenGL->m_renderData.pMonitor.reset(); + g_pHyprOpenGL->m_renderData.mouseZoomFactor = 1.f; + g_pHyprOpenGL->m_renderData.mouseZoomUseMouse = true; } // send all queued opengl commands so rendering starts happening immediately glFlush(); - if (m_eRenderMode == RENDER_MODE_FULL_FAKE) + if (m_renderMode == RENDER_MODE_FULL_FAKE) return; - if (m_eRenderMode == RENDER_MODE_NORMAL) - PMONITOR->m_output->state->setBuffer(m_pCurrentBuffer); + if (m_renderMode == RENDER_MODE_NORMAL) + PMONITOR->m_output->state->setBuffer(m_currentBuffer); UP eglSync = CEGLSync::create(); if (eglSync && eglSync->isValid()) { - for (auto const& buf : usedAsyncBuffers) { + for (auto const& buf : m_usedAsyncBuffers) { for (const auto& releaser : buf->m_syncReleasers) { releaser->addSyncFileFd(eglSync->fd()); } } // release buffer refs with release points now, since syncReleaser handles actual buffer release based on EGLSync - std::erase_if(usedAsyncBuffers, [](const auto& buf) { return !buf->m_syncReleasers.empty(); }); + std::erase_if(m_usedAsyncBuffers, [](const auto& buf) { return !buf->m_syncReleasers.empty(); }); // release buffer refs without release points when EGLSync sync_file/fence is signalled - g_pEventLoopManager->doOnReadable(eglSync->fd().duplicate(), [renderingDoneCallback, prevbfs = std::move(usedAsyncBuffers)]() mutable { + g_pEventLoopManager->doOnReadable(eglSync->fd().duplicate(), [renderingDoneCallback, prevbfs = std::move(m_usedAsyncBuffers)]() mutable { prevbfs.clear(); if (renderingDoneCallback) renderingDoneCallback(); }); - usedAsyncBuffers.clear(); + m_usedAsyncBuffers.clear(); - if (m_eRenderMode == RENDER_MODE_NORMAL) { + if (m_renderMode == RENDER_MODE_NORMAL) { PMONITOR->m_inFence = eglSync->takeFd(); PMONITOR->m_output->state->setExplicitInFence(PMONITOR->m_inFence.get()); } @@ -2317,22 +2316,22 @@ void CHyprRenderer::endRender(const std::function& renderingDoneCallback if (isNvidia() && *PNVIDIAANTIFLICKER) glFinish(); - usedAsyncBuffers.clear(); // release all buffer refs and hope implicit sync works + m_usedAsyncBuffers.clear(); // release all buffer refs and hope implicit sync works if (renderingDoneCallback) renderingDoneCallback(); } } void CHyprRenderer::onRenderbufferDestroy(CRenderbuffer* rb) { - std::erase_if(m_vRenderbuffers, [&](const auto& rbo) { return rbo.get() == rb; }); + std::erase_if(m_renderbuffers, [&](const auto& rbo) { return rbo.get() == rb; }); } SP CHyprRenderer::getCurrentRBO() { - return m_pCurrentRenderbuffer; + return m_currentRenderbuffer; } bool CHyprRenderer::isNvidia() { - return m_bNvidia; + return m_nvidia; } SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings(SP output) { @@ -2353,7 +2352,7 @@ SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings(SP("misc:render_unfocused_fps"); - if (std::find(m_vRenderUnfocused.begin(), m_vRenderUnfocused.end(), window) != m_vRenderUnfocused.end()) + if (std::find(m_renderUnfocused.begin(), m_renderUnfocused.end(), window) != m_renderUnfocused.end()) return; - m_vRenderUnfocused.emplace_back(window); + m_renderUnfocused.emplace_back(window); - if (!m_tRenderUnfocusedTimer->armed()) - m_tRenderUnfocusedTimer->updateTimeout(std::chrono::milliseconds(1000 / *PFPS)); + if (!m_renderUnfocusedTimer->armed()) + m_renderUnfocusedTimer->updateTimeout(std::chrono::milliseconds(1000 / *PFPS)); } void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFramebuffer) { @@ -2389,7 +2388,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram makeEGLCurrent(); pFramebuffer->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); - pFramebuffer->addStencil(g_pHyprOpenGL->m_RenderData.pCurrentMonData->stencilTex); + pFramebuffer->addStencil(g_pHyprOpenGL->m_renderData.pCurrentMonData->stencilTex); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, pFramebuffer); @@ -2407,7 +2406,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram // TODO: how can we make this the size of the window? setting it to window's size makes the entire screen render with the wrong res forever more. odd. glViewport(0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y); - g_pHyprOpenGL->m_RenderData.currentFB = pFramebuffer; + g_pHyprOpenGL->m_renderData.currentFB = pFramebuffer; g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC @@ -2437,7 +2436,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { makeEGLCurrent(); - const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_mWindowFramebuffers[ref]; + const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_windowFramebuffers[ref]; PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); @@ -2481,7 +2480,7 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { makeEGLCurrent(); - const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_mLayerFramebuffers[pLayer]; + const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_layerFramebuffers[pLayer]; PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); @@ -2509,10 +2508,10 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { PHLWINDOWREF ref{pWindow}; - if (!g_pHyprOpenGL->m_mWindowFramebuffers.contains(ref)) + if (!g_pHyprOpenGL->m_windowFramebuffers.contains(ref)) return; - const auto FBDATA = &g_pHyprOpenGL->m_mWindowFramebuffers.at(ref); + const auto FBDATA = &g_pHyprOpenGL->m_windowFramebuffers.at(ref); if (!FBDATA->getTexture()) return; @@ -2536,10 +2535,10 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { CRectPassElement::SRectData data; - data.box = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize.y}; + data.box = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.y}; data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_alpha->value()); - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); damageMonitor(PMONITOR); } @@ -2550,14 +2549,14 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { data.a = pWindow->m_alpha->value(); data.damage = fakeDamage; - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); } void CHyprRenderer::renderSnapshot(PHLLS pLayer) { - if (!g_pHyprOpenGL->m_mLayerFramebuffers.contains(pLayer)) + if (!g_pHyprOpenGL->m_layerFramebuffers.contains(pLayer)) return; - const auto FBDATA = &g_pHyprOpenGL->m_mLayerFramebuffers.at(pLayer); + const auto FBDATA = &g_pHyprOpenGL->m_layerFramebuffers.at(pLayer); if (!FBDATA->getTexture()) return; @@ -2586,5 +2585,5 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) { data.a = pLayer->m_alpha->value(); data.damage = fakeDamage; - m_sRenderPass.add(makeShared(data)); + m_renderPass.add(makeShared(data)); } diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 37e1e91f..29d7464b 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -91,29 +91,29 @@ class CHyprRenderer { bool m_bBlockSurfaceFeedback = false; bool m_bRenderingSnapshot = false; - PHLMONITORREF m_pMostHzMonitor; - bool m_bDirectScanoutBlocked = false; + PHLMONITORREF m_mostHzMonitor; + bool m_directScanoutBlocked = false; void setSurfaceScanoutMode(SP surface, PHLMONITOR monitor); // nullptr monitor resets void initiateManualCrash(); - bool m_bCrashingInProgress = false; - float m_fCrashingDistort = 0.5f; - wl_event_source* m_pCrashingLoop = nullptr; - wl_event_source* m_pCursorTicker = nullptr; + bool m_crashingInProgress = false; + float m_crashingDistort = 0.5f; + wl_event_source* m_crashingLoop = nullptr; + wl_event_source* m_cursorTicker = nullptr; - CTimer m_tRenderTimer; + CTimer m_renderTimer; - std::vector usedAsyncBuffers; + std::vector m_usedAsyncBuffers; struct { int hotspotX = 0; int hotspotY = 0; std::optional> surf; std::string name; - } m_sLastCursorData; + } m_lastCursorData; - CRenderPass m_sRenderPass = {}; + CRenderPass m_renderPass = {}; private: void arrangeLayerArray(PHLMONITOR, const std::vector&, bool, CBox*); @@ -131,23 +131,23 @@ class CHyprRenderer { bool commitPendingAndDoExplicitSync(PHLMONITOR pMonitor); - bool m_bCursorHidden = false; - bool m_bCursorHasSurface = false; - SP m_pCurrentRenderbuffer = nullptr; - SP m_pCurrentBuffer = nullptr; - eRenderMode m_eRenderMode = RENDER_MODE_NORMAL; - bool m_bNvidia = false; + bool m_cursorHidden = false; + bool m_cursorHasSurface = false; + SP m_currentRenderbuffer = nullptr; + SP m_currentBuffer = nullptr; + eRenderMode m_renderMode = RENDER_MODE_NORMAL; + bool m_nvidia = false; struct { bool hiddenOnTouch = false; bool hiddenOnTimeout = false; bool hiddenOnKeyboard = false; - } m_sCursorHiddenConditions; + } m_cursorHiddenConditions; SP getOrCreateRenderbuffer(SP buffer, uint32_t fmt); - std::vector> m_vRenderbuffers; - std::vector m_vRenderUnfocused; - SP m_tRenderUnfocusedTimer; + std::vector> m_renderbuffers; + std::vector m_renderUnfocused; + SP m_renderUnfocusedTimer; friend class CHyprOpenGLImpl; friend class CToplevelExportFrame; diff --git a/src/render/Shader.hpp b/src/render/Shader.hpp index cd9b6f22..0ccc8c45 100644 --- a/src/render/Shader.hpp +++ b/src/render/Shader.hpp @@ -78,7 +78,4 @@ class CShader { GLint noise = -1; void destroy(); - - private: - std::unordered_map m_muUniforms; }; diff --git a/src/render/Texture.cpp b/src/render/Texture.cpp index 8c25bf30..74770cb9 100644 --- a/src/render/Texture.cpp +++ b/src/render/Texture.cpp @@ -15,7 +15,7 @@ CTexture::~CTexture() { destroyTexture(); } -CTexture::CTexture(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size_, bool keepDataCopy) : m_iDrmFormat(drmFormat), m_bKeepDataCopy(keepDataCopy) { +CTexture::CTexture(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size_, bool keepDataCopy) : m_drmFormat(drmFormat), m_keepDataCopy(keepDataCopy) { createFromShm(drmFormat, pixels, stride, size_); } @@ -23,11 +23,11 @@ CTexture::CTexture(const Aquamarine::SDMABUFAttrs& attrs, void* image) { createFromDma(attrs, image); } -CTexture::CTexture(const SP buffer, bool keepDataCopy) : m_bKeepDataCopy(keepDataCopy) { +CTexture::CTexture(const SP buffer, bool keepDataCopy) : m_keepDataCopy(keepDataCopy) { if (!buffer) return; - m_bOpaque = buffer->opaque; + m_opaque = buffer->opaque; auto attrs = buffer->dmabuf(); @@ -42,7 +42,7 @@ CTexture::CTexture(const SP buffer, bool keepDataCopy) : m_ auto [pixelData, fmt, bufLen] = buffer->beginDataPtr(0); - m_iDrmFormat = fmt; + m_drmFormat = fmt; createFromShm(fmt, pixelData, bufLen, shm.size); return; @@ -64,12 +64,12 @@ void CTexture::createFromShm(uint32_t drmFormat, uint8_t* pixels, uint32_t strid const auto format = NFormatUtils::getPixelFormatFromDRM(drmFormat); ASSERT(format); - m_iType = format->withAlpha ? TEXTURE_RGBA : TEXTURE_RGBX; - m_vSize = size_; + m_type = format->withAlpha ? TEXTURE_RGBA : TEXTURE_RGBX; + m_size = size_; m_isSynchronous = true; allocate(); - GLCALL(glBindTexture(GL_TEXTURE_2D, m_iTexID)); + GLCALL(glBindTexture(GL_TEXTURE_2D, m_texID)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); #ifndef GLES2 @@ -83,30 +83,30 @@ void CTexture::createFromShm(uint32_t drmFormat, uint8_t* pixels, uint32_t strid GLCALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, 0)); GLCALL(glBindTexture(GL_TEXTURE_2D, 0)); - if (m_bKeepDataCopy) { - m_vDataCopy.resize(stride * size_.y); - memcpy(m_vDataCopy.data(), pixels, stride * size_.y); + if (m_keepDataCopy) { + m_dataCopy.resize(stride * size_.y); + memcpy(m_dataCopy.data(), pixels, stride * size_.y); } } void CTexture::createFromDma(const Aquamarine::SDMABUFAttrs& attrs, void* image) { - if (!g_pHyprOpenGL->m_sProc.glEGLImageTargetTexture2DOES) { + if (!g_pHyprOpenGL->m_proc.glEGLImageTargetTexture2DOES) { Debug::log(ERR, "Cannot create a dmabuf texture: no glEGLImageTargetTexture2DOES"); return; } - m_bOpaque = NFormatUtils::isFormatOpaque(attrs.format); - m_iTarget = GL_TEXTURE_2D; - m_iType = TEXTURE_RGBA; - m_vSize = attrs.size; - m_iType = NFormatUtils::isFormatOpaque(attrs.format) ? TEXTURE_RGBX : TEXTURE_RGBA; + m_opaque = NFormatUtils::isFormatOpaque(attrs.format); + m_target = GL_TEXTURE_2D; + m_type = TEXTURE_RGBA; + m_size = attrs.size; + m_type = NFormatUtils::isFormatOpaque(attrs.format) ? TEXTURE_RGBX : TEXTURE_RGBA; allocate(); - m_pEglImage = image; + m_eglImage = image; - GLCALL(glBindTexture(GL_TEXTURE_2D, m_iTexID)); + GLCALL(glBindTexture(GL_TEXTURE_2D, m_texID)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); - GLCALL(g_pHyprOpenGL->m_sProc.glEGLImageTargetTexture2DOES(m_iTarget, image)); + GLCALL(g_pHyprOpenGL->m_proc.glEGLImageTargetTexture2DOES(m_target, image)); GLCALL(glBindTexture(GL_TEXTURE_2D, 0)); } @@ -116,9 +116,9 @@ void CTexture::update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, cons const auto format = NFormatUtils::getPixelFormatFromDRM(drmFormat); ASSERT(format); - glBindTexture(GL_TEXTURE_2D, m_iTexID); + glBindTexture(GL_TEXTURE_2D, m_texID); - auto rects = damage.copy().intersect(CBox{{}, m_vSize}).getRects(); + auto rects = damage.copy().intersect(CBox{{}, m_size}).getRects(); #ifndef GLES2 if (format->flipRB) { @@ -143,28 +143,28 @@ void CTexture::update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, cons glBindTexture(GL_TEXTURE_2D, 0); - if (m_bKeepDataCopy) { - m_vDataCopy.resize(stride * m_vSize.y); - memcpy(m_vDataCopy.data(), pixels, stride * m_vSize.y); + if (m_keepDataCopy) { + m_dataCopy.resize(stride * m_size.y); + memcpy(m_dataCopy.data(), pixels, stride * m_size.y); } } void CTexture::destroyTexture() { - if (m_iTexID) { - GLCALL(glDeleteTextures(1, &m_iTexID)); - m_iTexID = 0; + if (m_texID) { + GLCALL(glDeleteTextures(1, &m_texID)); + m_texID = 0; } - if (m_pEglImage) - g_pHyprOpenGL->m_sProc.eglDestroyImageKHR(g_pHyprOpenGL->m_pEglDisplay, m_pEglImage); - m_pEglImage = nullptr; + if (m_eglImage) + g_pHyprOpenGL->m_proc.eglDestroyImageKHR(g_pHyprOpenGL->m_eglDisplay, m_eglImage); + m_eglImage = nullptr; } void CTexture::allocate() { - if (!m_iTexID) - GLCALL(glGenTextures(1, &m_iTexID)); + if (!m_texID) + GLCALL(glGenTextures(1, &m_texID)); } const std::vector& CTexture::dataCopy() { - return m_vDataCopy; + return m_dataCopy; } diff --git a/src/render/Texture.hpp b/src/render/Texture.hpp index 039b5247..0446f9be 100644 --- a/src/render/Texture.hpp +++ b/src/render/Texture.hpp @@ -35,21 +35,21 @@ class CTexture { void update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const CRegion& damage); const std::vector& dataCopy(); - eTextureType m_iType = TEXTURE_RGBA; - GLenum m_iTarget = GL_TEXTURE_2D; - GLuint m_iTexID = 0; - Vector2D m_vSize = {}; - void* m_pEglImage = nullptr; - eTransform m_eTransform = HYPRUTILS_TRANSFORM_NORMAL; - bool m_bOpaque = false; - uint32_t m_iDrmFormat = 0; // for shm + eTextureType m_type = TEXTURE_RGBA; + GLenum m_target = GL_TEXTURE_2D; + GLuint m_texID = 0; + Vector2D m_size = {}; + void* m_eglImage = nullptr; + eTransform m_transform = HYPRUTILS_TRANSFORM_NORMAL; + bool m_opaque = false; + uint32_t m_drmFormat = 0; // for shm bool m_isSynchronous = false; private: void createFromShm(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size); void createFromDma(const Aquamarine::SDMABUFAttrs&, void* image); - bool m_bKeepDataCopy = false; + bool m_keepDataCopy = false; - std::vector m_vDataCopy; + std::vector m_dataCopy; }; \ No newline at end of file diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 75990896..b34c9243 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -6,42 +6,42 @@ #include "../Renderer.hpp" #include "../../managers/HookSystemManager.hpp" -CHyprBorderDecoration::CHyprBorderDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_pWindow(pWindow) { +CHyprBorderDecoration::CHyprBorderDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_window(pWindow) { ; } SDecorationPositioningInfo CHyprBorderDecoration::getPositioningInfo() { - const auto BORDERSIZE = m_pWindow->getRealBorderSize(); - m_seExtents = {{BORDERSIZE, BORDERSIZE}, {BORDERSIZE, BORDERSIZE}}; + const auto BORDERSIZE = m_window->getRealBorderSize(); + m_extents = {{BORDERSIZE, BORDERSIZE}, {BORDERSIZE, BORDERSIZE}}; if (doesntWantBorders()) - m_seExtents = {{}, {}}; + m_extents = {{}, {}}; SDecorationPositioningInfo info; info.priority = 10000; info.policy = DECORATION_POSITION_STICKY; - info.desiredExtents = m_seExtents; + info.desiredExtents = m_extents; info.reserved = true; info.edges = DECORATION_EDGE_BOTTOM | DECORATION_EDGE_LEFT | DECORATION_EDGE_RIGHT | DECORATION_EDGE_TOP; - m_seReportedExtents = m_seExtents; + m_reportedExtents = m_extents; return info; } void CHyprBorderDecoration::onPositioningReply(const SDecorationPositioningReply& reply) { - m_bAssignedGeometry = reply.assignedGeometry; + m_assignedGeometry = reply.assignedGeometry; } CBox CHyprBorderDecoration::assignedBoxGlobal() { - CBox box = m_bAssignedGeometry; - box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_BOTTOM | DECORATION_EDGE_LEFT | DECORATION_EDGE_RIGHT | DECORATION_EDGE_TOP, m_pWindow.lock())); + CBox box = m_assignedGeometry; + box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_BOTTOM | DECORATION_EDGE_LEFT | DECORATION_EDGE_RIGHT | DECORATION_EDGE_TOP, m_window.lock())); - const auto PWORKSPACE = m_pWindow->m_workspace; + const auto PWORKSPACE = m_window->m_workspace; if (!PWORKSPACE) return box; - const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); + const auto WORKSPACEOFFSET = PWORKSPACE && !m_window->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); return box.translate(WORKSPACEOFFSET); } @@ -49,30 +49,30 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (doesntWantBorders()) return; - if (m_bAssignedGeometry.width < m_seExtents.topLeft.x + 1 || m_bAssignedGeometry.height < m_seExtents.topLeft.y + 1) + if (m_assignedGeometry.width < m_extents.topLeft.x + 1 || m_assignedGeometry.height < m_extents.topLeft.y + 1) return; - CBox windowBox = assignedBoxGlobal().translate(-pMonitor->m_position + m_pWindow->m_floatingOffset).expand(-m_pWindow->getRealBorderSize()).scale(pMonitor->m_scale).round(); + CBox windowBox = assignedBoxGlobal().translate(-pMonitor->m_position + m_window->m_floatingOffset).expand(-m_window->getRealBorderSize()).scale(pMonitor->m_scale).round(); if (windowBox.width < 1 || windowBox.height < 1) return; - auto grad = m_pWindow->m_realBorderColor; - const bool ANIMATED = m_pWindow->m_borderFadeAnimationProgress->isBeingAnimated(); + auto grad = m_window->m_realBorderColor; + const bool ANIMATED = m_window->m_borderFadeAnimationProgress->isBeingAnimated(); - if (m_pWindow->m_borderAngleAnimationProgress->enabled()) { - grad.m_angle += m_pWindow->m_borderAngleAnimationProgress->value() * M_PI * 2; + if (m_window->m_borderAngleAnimationProgress->enabled()) { + grad.m_angle += m_window->m_borderAngleAnimationProgress->value() * M_PI * 2; grad.m_angle = normalizeAngleRad(grad.m_angle); // When borderangle is animated, it is counterintuitive to fade between inactive/active gradient angles. // Instead we sync the angles to avoid fading between them and additionally rotating the border angle. if (ANIMATED) - m_pWindow->m_realBorderColorPrevious.m_angle = grad.m_angle; + m_window->m_realBorderColorPrevious.m_angle = grad.m_angle; } - int borderSize = m_pWindow->getRealBorderSize(); - const auto ROUNDING = m_pWindow->rounding() * pMonitor->m_scale; - const auto ROUNDINGPOWER = m_pWindow->roundingPower(); + int borderSize = m_window->getRealBorderSize(); + const auto ROUNDING = m_window->rounding() * pMonitor->m_scale; + const auto ROUNDINGPOWER = m_window->roundingPower(); CBorderPassElement::SBorderData data; data.box = windowBox; @@ -84,12 +84,12 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (ANIMATED) { data.hasGrad2 = true; - data.grad1 = m_pWindow->m_realBorderColorPrevious; + data.grad1 = m_window->m_realBorderColorPrevious; data.grad2 = grad; - data.lerp = m_pWindow->m_borderFadeAnimationProgress->value(); + data.lerp = m_window->m_borderFadeAnimationProgress->value(); } - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } eDecorationType CHyprBorderDecoration::getDecorationType() { @@ -97,32 +97,32 @@ eDecorationType CHyprBorderDecoration::getDecorationType() { } void CHyprBorderDecoration::updateWindow(PHLWINDOW) { - auto borderSize = m_pWindow->getRealBorderSize(); + auto borderSize = m_window->getRealBorderSize(); - if (borderSize == m_iLastBorderSize) + if (borderSize == m_lastBorderSize) return; - if (borderSize <= 0 && m_iLastBorderSize <= 0) + if (borderSize <= 0 && m_lastBorderSize <= 0) return; - m_iLastBorderSize = borderSize; + m_lastBorderSize = borderSize; g_pDecorationPositioner->repositionDeco(this); } void CHyprBorderDecoration::damageEntire() { - if (!validMapped(m_pWindow)) + if (!validMapped(m_window)) return; - auto surfaceBox = m_pWindow->getWindowMainSurfaceBox(); - const auto ROUNDING = m_pWindow->rounding(); + auto surfaceBox = m_window->getWindowMainSurfaceBox(); + const auto ROUNDING = m_window->rounding(); const auto ROUNDINGSIZE = ROUNDING - M_SQRT1_2 * ROUNDING + 2; - const auto BORDERSIZE = m_pWindow->getRealBorderSize() + 1; + const auto BORDERSIZE = m_window->getRealBorderSize() + 1; - const auto PWINDOWWORKSPACE = m_pWindow->m_workspace; - if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !m_pWindow->m_pinned) + const auto PWINDOWWORKSPACE = m_window->m_workspace; + if (PWINDOWWORKSPACE && PWINDOWWORKSPACE->m_renderOffset->isBeingAnimated() && !m_window->m_pinned) surfaceBox.translate(PWINDOWWORKSPACE->m_renderOffset->value()); - surfaceBox.translate(m_pWindow->m_floatingOffset); + surfaceBox.translate(m_window->m_floatingOffset); CBox surfaceBoxExpandedBorder = surfaceBox; surfaceBoxExpandedBorder.expand(BORDERSIZE); @@ -133,7 +133,7 @@ void CHyprBorderDecoration::damageEntire() { borderRegion.subtract(surfaceBoxShrunkRounding); for (auto const& m : g_pCompositor->m_monitors) { - if (!g_pHyprRenderer->shouldRenderWindow(m_pWindow.lock(), m)) { + if (!g_pHyprRenderer->shouldRenderWindow(m_window.lock(), m)) { const CRegion monitorRegion({m->m_position, m->m_size}); borderRegion.subtract(monitorRegion); } @@ -157,5 +157,5 @@ std::string CHyprBorderDecoration::getDisplayName() { } bool CHyprBorderDecoration::doesntWantBorders() { - return m_pWindow->m_windowData.noBorder.valueOrDefault() || m_pWindow->m_X11DoesntWantBorders || m_pWindow->getRealBorderSize() == 0; + return m_window->m_windowData.noBorder.valueOrDefault() || m_window->m_X11DoesntWantBorders || m_window->getRealBorderSize() == 0; } diff --git a/src/render/decorations/CHyprBorderDecoration.hpp b/src/render/decorations/CHyprBorderDecoration.hpp index 332c08b7..607c12cc 100644 --- a/src/render/decorations/CHyprBorderDecoration.hpp +++ b/src/render/decorations/CHyprBorderDecoration.hpp @@ -26,17 +26,14 @@ class CHyprBorderDecoration : public IHyprWindowDecoration { virtual std::string getDisplayName(); private: - SBoxExtents m_seExtents; - SBoxExtents m_seReportedExtents; + SBoxExtents m_extents; + SBoxExtents m_reportedExtents; - PHLWINDOWREF m_pWindow; + PHLWINDOWREF m_window; - Vector2D m_vLastWindowPos; - Vector2D m_vLastWindowSize; + CBox m_assignedGeometry = {0}; - CBox m_bAssignedGeometry = {0}; - - int m_iLastBorderSize = -1; + int m_lastBorderSize = -1; CBox assignedBoxGlobal(); bool doesntWantBorders(); diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index 198a9c96..7721f84b 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -5,7 +5,7 @@ #include "../pass/ShadowPassElement.hpp" #include "../Renderer.hpp" -CHyprDropShadowDecoration::CHyprDropShadowDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_pWindow(pWindow) { +CHyprDropShadowDecoration::CHyprDropShadowDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_window(pWindow) { ; } @@ -16,15 +16,15 @@ eDecorationType CHyprDropShadowDecoration::getDecorationType() { SDecorationPositioningInfo CHyprDropShadowDecoration::getPositioningInfo() { SDecorationPositioningInfo info; info.policy = DECORATION_POSITION_ABSOLUTE; - info.desiredExtents = m_seExtents; + info.desiredExtents = m_extents; info.edges = DECORATION_EDGE_BOTTOM | DECORATION_EDGE_LEFT | DECORATION_EDGE_RIGHT | DECORATION_EDGE_TOP; - m_seReportedExtents = m_seExtents; + m_reportedExtents = m_extents; return info; } void CHyprDropShadowDecoration::onPositioningReply(const SDecorationPositioningReply& reply) { - updateWindow(m_pWindow.lock()); + updateWindow(m_window.lock()); } uint64_t CHyprDropShadowDecoration::getDecorationFlags() { @@ -41,11 +41,11 @@ void CHyprDropShadowDecoration::damageEntire() { if (*PSHADOWS != 1) return; // disabled - const auto PWINDOW = m_pWindow.lock(); + const auto PWINDOW = m_window.lock(); - CBox shadowBox = {PWINDOW->m_realPosition->value().x - m_seExtents.topLeft.x, PWINDOW->m_realPosition->value().y - m_seExtents.topLeft.y, - PWINDOW->m_realSize->value().x + m_seExtents.topLeft.x + m_seExtents.bottomRight.x, - PWINDOW->m_realSize->value().y + m_seExtents.topLeft.y + m_seExtents.bottomRight.y}; + CBox shadowBox = {PWINDOW->m_realPosition->value().x - m_extents.topLeft.x, PWINDOW->m_realPosition->value().y - m_extents.topLeft.y, + PWINDOW->m_realSize->value().x + m_extents.topLeft.x + m_extents.bottomRight.x, + PWINDOW->m_realSize->value().y + m_extents.topLeft.y + m_extents.bottomRight.y}; const auto PWORKSPACE = PWINDOW->m_workspace; if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned) @@ -77,24 +77,24 @@ void CHyprDropShadowDecoration::damageEntire() { } void CHyprDropShadowDecoration::updateWindow(PHLWINDOW pWindow) { - const auto PWINDOW = m_pWindow.lock(); + const auto PWINDOW = m_window.lock(); - m_vLastWindowPos = PWINDOW->m_realPosition->value(); - m_vLastWindowSize = PWINDOW->m_realSize->value(); + m_lastWindowPos = PWINDOW->m_realPosition->value(); + m_lastWindowSize = PWINDOW->m_realSize->value(); - m_bLastWindowBox = {m_vLastWindowPos.x, m_vLastWindowPos.y, m_vLastWindowSize.x, m_vLastWindowSize.y}; - m_bLastWindowBoxWithDecos = g_pDecorationPositioner->getBoxWithIncludedDecos(pWindow); + m_lastWindowBox = {m_lastWindowPos.x, m_lastWindowPos.y, m_lastWindowSize.x, m_lastWindowSize.y}; + m_lastWindowBoxWithDecos = g_pDecorationPositioner->getBoxWithIncludedDecos(pWindow); } void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) { CShadowPassElement::SShadowData data; data.deco = this; data.a = a; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { - const auto PWINDOW = m_pWindow.lock(); + const auto PWINDOW = m_window.lock(); if (!validMapped(PWINDOW)) return; @@ -124,7 +124,7 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_pinned ? PWORKSPACE->m_renderOffset->value() : Vector2D(); // draw the shadow - CBox fullBox = m_bLastWindowBoxWithDecos; + CBox fullBox = m_lastWindowBoxWithDecos; fullBox.translate(-pMonitor->m_position + WORKSPACEOFFSET); fullBox.x -= *PSHADOWSIZE; fullBox.y -= *PSHADOWSIZE; @@ -137,10 +137,10 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { fullBox.scaleFromCenter(SHADOWSCALE).translate({(*PSHADOWOFFSET).x, (*PSHADOWOFFSET).y}); updateWindow(PWINDOW); - m_vLastWindowPos += WORKSPACEOFFSET; - m_seExtents = {{m_vLastWindowPos.x - fullBox.x - pMonitor->m_position.x + 2, m_vLastWindowPos.y - fullBox.y - pMonitor->m_position.y + 2}, - {fullBox.x + fullBox.width + pMonitor->m_position.x - m_vLastWindowPos.x - m_vLastWindowSize.x + 2, - fullBox.y + fullBox.height + pMonitor->m_position.y - m_vLastWindowPos.y - m_vLastWindowSize.y + 2}}; + m_lastWindowPos += WORKSPACEOFFSET; + m_extents = {{m_lastWindowPos.x - fullBox.x - pMonitor->m_position.x + 2, m_lastWindowPos.y - fullBox.y - pMonitor->m_position.y + 2}, + {fullBox.x + fullBox.width + pMonitor->m_position.x - m_lastWindowPos.x - m_lastWindowSize.x + 2, + fullBox.y + fullBox.height + pMonitor->m_position.y - m_lastWindowPos.y - m_lastWindowSize.y + 2}}; fullBox.translate(PWINDOW->m_floatingOffset); @@ -148,18 +148,18 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { return; // don't draw invisible shadows g_pHyprOpenGL->scissor(nullptr); - g_pHyprOpenGL->m_RenderData.currentWindow = m_pWindow; + g_pHyprOpenGL->m_renderData.currentWindow = m_window; // we'll take the liberty of using this as it should not be used rn - CFramebuffer& alphaFB = g_pHyprOpenGL->m_RenderData.pCurrentMonData->mirrorFB; - CFramebuffer& alphaSwapFB = g_pHyprOpenGL->m_RenderData.pCurrentMonData->mirrorSwapFB; - auto* LASTFB = g_pHyprOpenGL->m_RenderData.currentFB; + CFramebuffer& alphaFB = g_pHyprOpenGL->m_renderData.pCurrentMonData->mirrorFB; + CFramebuffer& alphaSwapFB = g_pHyprOpenGL->m_renderData.pCurrentMonData->mirrorSwapFB; + auto* LASTFB = g_pHyprOpenGL->m_renderData.currentFB; fullBox.scale(pMonitor->m_scale).round(); if (*PSHADOWIGNOREWINDOW) { - CBox windowBox = m_bLastWindowBox; - CBox withDecos = m_bLastWindowBoxWithDecos; + CBox windowBox = m_lastWindowBox; + CBox withDecos = m_lastWindowBoxWithDecos; // get window box windowBox.translate(-pMonitor->m_position + WORKSPACEOFFSET); @@ -178,11 +178,11 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { if (windowBox.width < 1 || windowBox.height < 1) return; // prevent assert failed - CRegion saveDamage = g_pHyprOpenGL->m_RenderData.damage; + CRegion saveDamage = g_pHyprOpenGL->m_renderData.damage; - g_pHyprOpenGL->m_RenderData.damage = fullBox; - g_pHyprOpenGL->m_RenderData.damage.subtract(windowBox.copy().expand(-ROUNDING * pMonitor->m_scale)).intersect(saveDamage); - g_pHyprOpenGL->m_RenderData.renderModif.applyToRegion(g_pHyprOpenGL->m_RenderData.damage); + g_pHyprOpenGL->m_renderData.damage = fullBox; + g_pHyprOpenGL->m_renderData.damage.subtract(windowBox.copy().expand(-ROUNDING * pMonitor->m_scale)).intersect(saveDamage); + g_pHyprOpenGL->m_renderData.renderModif.applyToRegion(g_pHyprOpenGL->m_renderData.damage); alphaFB.bind(); @@ -212,14 +212,14 @@ void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) { g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); - g_pHyprOpenGL->m_RenderData.damage = saveDamage; + g_pHyprOpenGL->m_renderData.damage = saveDamage; } else drawShadowInternal(fullBox, ROUNDING * pMonitor->m_scale, ROUNDINGPOWER, *PSHADOWSIZE * pMonitor->m_scale, PWINDOW->m_realShadowColor->value(), a); - if (m_seExtents != m_seReportedExtents) + if (m_extents != m_reportedExtents) g_pDecorationPositioner->repositionDeco(this); - g_pHyprOpenGL->m_RenderData.currentWindow.reset(); + g_pHyprOpenGL->m_renderData.currentWindow.reset(); } eDecorationLayer CHyprDropShadowDecoration::getDecorationLayer() { diff --git a/src/render/decorations/CHyprDropShadowDecoration.hpp b/src/render/decorations/CHyprDropShadowDecoration.hpp index b5ee7276..22887a52 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.hpp +++ b/src/render/decorations/CHyprDropShadowDecoration.hpp @@ -28,16 +28,16 @@ class CHyprDropShadowDecoration : public IHyprWindowDecoration { void render(PHLMONITOR, float const& a); private: - SBoxExtents m_seExtents; - SBoxExtents m_seReportedExtents; + SBoxExtents m_extents; + SBoxExtents m_reportedExtents; - PHLWINDOWREF m_pWindow; + PHLWINDOWREF m_window; - Vector2D m_vLastWindowPos; - Vector2D m_vLastWindowSize; + Vector2D m_lastWindowPos; + Vector2D m_lastWindowSize; void drawShadowInternal(const CBox& box, int round, float roundingPower, int range, CHyprColor color, float a); - CBox m_bLastWindowBox = {0}; - CBox m_bLastWindowBoxWithDecos = {0}; + CBox m_lastWindowBox = {0}; + CBox m_lastWindowBoxWithDecos = {0}; }; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index aec84575..ade4d372 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -17,11 +17,11 @@ static SP m_tGradientLockedInactive = makeShared(); constexpr int BAR_TEXT_PAD = 2; -CHyprGroupBarDecoration::CHyprGroupBarDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_pWindow(pWindow) { +CHyprGroupBarDecoration::CHyprGroupBarDecoration(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_window(pWindow) { static auto PGRADIENTS = CConfigValue("group:groupbar:enabled"); static auto PENABLED = CConfigValue("group:groupbar:gradients"); - if (m_tGradientActive->m_iTexID == 0 && *PENABLED && *PGRADIENTS) + if (m_tGradientActive->m_texID == 0 && *PENABLED && *PGRADIENTS) refreshGroupBarGradients(); } @@ -43,7 +43,7 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { info.priority = *PPRIORITY; info.reserved = true; - if (*PENABLED && m_pWindow->m_windowData.decorate.valueOrDefault()) { + if (*PENABLED && m_window->m_windowData.decorate.valueOrDefault()) { if (*PSTACKED) { const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + (*PKEEPUPPERGAP * *POUTERGAP)}, {0, 0}}; @@ -55,7 +55,7 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { } void CHyprGroupBarDecoration::onPositioningReply(const SDecorationPositioningReply& reply) { - m_bAssignedBox = reply.assignedGeometry; + m_assignedBox = reply.assignedGeometry; } eDecorationType CHyprGroupBarDecoration::getDecorationType() { @@ -65,8 +65,8 @@ eDecorationType CHyprGroupBarDecoration::getDecorationType() { // void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { - if (m_pWindow->m_groupData.pNextWindow.expired()) { - m_pWindow->removeWindowDeco(this); + if (m_window->m_groupData.pNextWindow.expired()) { + m_window->removeWindowDeco(this); return; } @@ -83,14 +83,14 @@ void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { damageEntire(); if (m_dwGroupMembers.size() == 0) { - m_pWindow->removeWindowDeco(this); + m_window->removeWindowDeco(this); return; } } void CHyprGroupBarDecoration::damageEntire() { auto box = assignedBoxGlobal(); - box.translate(m_pWindow->m_floatingOffset); + box.translate(m_window->m_floatingOffset); g_pHyprRenderer->damageBox(box); } @@ -100,7 +100,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { static auto PENABLED = CConfigValue("group:groupbar:enabled"); - if (!*PENABLED || !m_pWindow->m_windowData.decorate.valueOrDefault()) + if (!*PENABLED || !m_window->m_windowData.decorate.valueOrDefault()) return; static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); @@ -130,8 +130,8 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { const auto ASSIGNEDBOX = assignedBoxGlobal(); const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); - m_fBarWidth = *PSTACKED ? ASSIGNEDBOX.w : (ASSIGNEDBOX.w - *PINNERGAP * (barsToDraw - 1)) / barsToDraw; - m_fBarHeight = *PSTACKED ? ((ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP) - *POUTERGAP * (barsToDraw)) / barsToDraw : ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP; + m_barWidth = *PSTACKED ? ASSIGNEDBOX.w : (ASSIGNEDBOX.w - *PINNERGAP * (barsToDraw - 1)) / barsToDraw; + m_barHeight = *PSTACKED ? ((ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP) - *POUTERGAP * (barsToDraw)) / barsToDraw : ASSIGNEDBOX.h - *POUTERGAP * *PKEEPUPPERGAP; const auto DESIREDHEIGHT = *PSTACKED ? (ONEBARHEIGHT * m_dwGroupMembers.size()) + *POUTERGAP * *PKEEPUPPERGAP : *POUTERGAP * (1 + *PKEEPUPPERGAP) + ONEBARHEIGHT; if (DESIREDHEIGHT != ASSIGNEDBOX.h) @@ -143,13 +143,13 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { for (int i = 0; i < barsToDraw; ++i) { const auto WINDOWINDEX = *PSTACKED ? m_dwGroupMembers.size() - i - 1 : i; - CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_pWindow->m_floatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->m_position.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, + CBox rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_window->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - *PINDICATORHEIGHT - *POUTERGAP - pMonitor->m_position.y + m_window->m_floatingOffset.y, m_barWidth, *PINDICATORHEIGHT}; rect.scale(pMonitor->m_scale).round(); - const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_groupsLocked; + const bool GROUPLOCKED = m_window->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_groupsLocked; const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE; const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE; @@ -170,25 +170,25 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { double first = rect.w - (*PROUNDING * 2); rectdata.round = *PROUNDING; rectdata.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}}; - g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); + g_pHyprRenderer->m_renderPass.add(makeShared(rectdata)); rectdata.round = 0; rectdata.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}}; } else if (i == barsToDraw - 1) { double first = *PROUNDING * 2; rectdata.round = 0; rectdata.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}}; - g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); + g_pHyprRenderer->m_renderPass.add(makeShared(rectdata)); rectdata.round = *PROUNDING; rectdata.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}}; } } else rectdata.round = *PROUNDING; } - g_pHyprRenderer->m_sRenderPass.add(makeShared(rectdata)); + g_pHyprRenderer->m_renderPass.add(makeShared(rectdata)); } - rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_pWindow->m_floatingOffset.x, - ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->m_position.y + m_pWindow->m_floatingOffset.y, m_fBarWidth, + rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_window->m_floatingOffset.x, + ASSIGNEDBOX.y + ASSIGNEDBOX.h - floor(yoff) - ONEBARHEIGHT - pMonitor->m_position.y + m_window->m_floatingOffset.y, m_barWidth, (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0)}; rect.scale(pMonitor->m_scale); @@ -196,7 +196,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { if (*PGRADIENTS) { const auto GRADIENTTEX = (m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? (GROUPLOCKED ? m_tGradientLockedActive : m_tGradientActive) : (GROUPLOCKED ? m_tGradientLockedInactive : m_tGradientInactive)); - if (GRADIENTTEX->m_iTexID) { + if (GRADIENTTEX->m_texID) { CTexPassElement::SRenderData data; data.tex = GRADIENTTEX; data.box = rect; @@ -210,21 +210,21 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { double first = rect.w - (*PGRADIENTROUNDING * 2); data.round = *PGRADIENTROUNDING; data.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}}; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); data.round = 0; data.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}}; } else if (i == barsToDraw - 1) { double first = *PGRADIENTROUNDING * 2; data.round = 0; data.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}}; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); data.round = *PGRADIENTROUNDING; data.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}}; } } else data.round = *PGRADIENTROUNDING; } - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } } @@ -232,31 +232,31 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { CTitleTex* pTitleTex = textureFromTitle(m_dwGroupMembers[WINDOWINDEX]->m_title); if (!pTitleTex) - pTitleTex = m_sTitleTexs.titleTexs + pTitleTex = m_titleTexs.titleTexs .emplace_back(makeUnique(m_dwGroupMembers[WINDOWINDEX].lock(), - Vector2D{m_fBarWidth * pMonitor->m_scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->m_scale}, + Vector2D{m_barWidth * pMonitor->m_scale, (*PTITLEFONTSIZE + 2L * BAR_TEXT_PAD) * pMonitor->m_scale}, pMonitor->m_scale)) .get(); - const auto titleTex = m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? pTitleTex->texActive : pTitleTex->texInactive; - rect.y += std::ceil(((rect.height - titleTex->m_vSize.y) / 2.0) - (*PTEXTOFFSET * pMonitor->m_scale)); - rect.height = titleTex->m_vSize.y; - rect.width = titleTex->m_vSize.x; - rect.x += std::round(((m_fBarWidth * pMonitor->m_scale) / 2.0) - (titleTex->m_vSize.x / 2.0)); + const auto titleTex = m_dwGroupMembers[WINDOWINDEX] == g_pCompositor->m_lastWindow ? pTitleTex->m_texActive : pTitleTex->m_texInactive; + rect.y += std::ceil(((rect.height - titleTex->m_size.y) / 2.0) - (*PTEXTOFFSET * pMonitor->m_scale)); + rect.height = titleTex->m_size.y; + rect.width = titleTex->m_size.x; + rect.x += std::round(((m_barWidth * pMonitor->m_scale) / 2.0) - (titleTex->m_size.x / 2.0)); rect.round(); CTexPassElement::SRenderData data; data.tex = titleTex; data.box = rect; data.a = a; - g_pHyprRenderer->m_sRenderPass.add(makeShared(data)); + g_pHyprRenderer->m_renderPass.add(makeShared(data)); } } if (*PSTACKED) yoff += ONEBARHEIGHT; else - xoff += *PINNERGAP + m_fBarWidth; + xoff += *PINNERGAP + m_barWidth; } if (*PRENDERTITLES) @@ -264,8 +264,8 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { } CTitleTex* CHyprGroupBarDecoration::textureFromTitle(const std::string& title) { - for (auto const& tex : m_sTitleTexs.titleTexs) { - if (tex->szContent == title) + for (auto const& tex : m_titleTexs.titleTexs) { + if (tex->m_content == title) return tex.get(); } @@ -273,10 +273,10 @@ CTitleTex* CHyprGroupBarDecoration::textureFromTitle(const std::string& title) { } void CHyprGroupBarDecoration::invalidateTextures() { - m_sTitleTexs.titleTexs.clear(); + m_titleTexs.titleTexs.clear(); } -CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale) : szContent(pWindow->m_title), pWindowOwner(pWindow) { +CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale) : m_content(pWindow->m_title), m_windowOwner(pWindow) { static auto FALLBACKFONT = CConfigValue("misc:font_family"); static auto PTITLEFONTFAMILY = CConfigValue("group:groupbar:font_family"); static auto PTITLEFONTSIZE = CConfigValue("group:groupbar:font_size"); @@ -291,8 +291,8 @@ CTitleTex::CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float const CHyprColor COLOR = CHyprColor(*PTEXTCOLOR); const auto FONTFAMILY = *PTITLEFONTFAMILY != STRVAL_EMPTY ? *PTITLEFONTFAMILY : *FALLBACKFONT; - texActive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTACTIVE->m_value); - texInactive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTINACTIVE->m_value); + m_texActive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTACTIVE->m_value); + m_texInactive = g_pHyprOpenGL->renderText(pWindow->m_title, COLOR, *PTITLEFONTSIZE * monitorScale, false, FONTFAMILY, bufferSize.x - 2, FONTWEIGHTINACTIVE->m_value); } static void renderGradientTo(SP tex, CGradientValueData* grad) { @@ -329,7 +329,7 @@ static void renderGradientTo(SP tex, CGradientValueData* grad) { // copy the data to an OpenGL texture we have const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); tex->allocate(); - glBindTexture(GL_TEXTURE_2D, tex->m_iTexID); + glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -360,7 +360,7 @@ void refreshGroupBarGradients() { g_pHyprRenderer->makeEGLCurrent(); - if (m_tGradientActive->m_iTexID != 0) { + if (m_tGradientActive->m_texID != 0) { m_tGradientActive->destroyTexture(); m_tGradientInactive->destroyTexture(); m_tGradientLockedActive->destroyTexture(); @@ -380,20 +380,20 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) { static auto PSTACKED = CConfigValue("group:groupbar:stacked"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); - if (m_pWindow.lock() == m_pWindow->m_groupData.pNextWindow.lock()) + if (m_window.lock() == m_window->m_groupData.pNextWindow.lock()) return false; const float BARRELATIVEX = pos.x - assignedBoxGlobal().x; const float BARRELATIVEY = pos.y - assignedBoxGlobal().y; - const int WINDOWINDEX = *PSTACKED ? (BARRELATIVEY / (m_fBarHeight + *POUTERGAP)) : (BARRELATIVEX) / (m_fBarWidth + *PINNERGAP); + const int WINDOWINDEX = *PSTACKED ? (BARRELATIVEY / (m_barHeight + *POUTERGAP)) : (BARRELATIVEX) / (m_barWidth + *PINNERGAP); - if (!*PSTACKED && (BARRELATIVEX - (m_fBarWidth + *PINNERGAP) * WINDOWINDEX > m_fBarWidth)) + if (!*PSTACKED && (BARRELATIVEX - (m_barWidth + *PINNERGAP) * WINDOWINDEX > m_barWidth)) return false; - if (*PSTACKED && (BARRELATIVEY - (m_fBarHeight + *POUTERGAP) * WINDOWINDEX < *POUTERGAP)) + if (*PSTACKED && (BARRELATIVEY - (m_barHeight + *POUTERGAP) * WINDOWINDEX < *POUTERGAP)) return false; - PHLWINDOW pWindow = m_pWindow->getGroupWindowByIndex(WINDOWINDEX); + PHLWINDOW pWindow = m_window->getGroupWindowByIndex(WINDOWINDEX); // hack g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow); @@ -419,21 +419,21 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND static auto PMERGEGROUPSONGROUPBAR = CConfigValue("group:merge_groups_on_groupbar"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); - const bool FLOATEDINTOTILED = !m_pWindow->m_isFloating && !pDraggedWindow->m_draggingTiled; + const bool FLOATEDINTOTILED = !m_window->m_isFloating && !pDraggedWindow->m_draggingTiled; g_pInputManager->m_wasDraggingWindow = false; - if (!pDraggedWindow->canBeGroupedInto(m_pWindow.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR) || - (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_groupData.pNextWindow.lock() && m_pWindow->m_groupData.pNextWindow.lock())) { + if (!pDraggedWindow->canBeGroupedInto(m_window.lock()) || (*PDRAGINTOGROUP != 1 && *PDRAGINTOGROUP != 2) || (FLOATEDINTOTILED && !*PMERGEFLOATEDINTOTILEDONGROUPBAR) || + (!*PMERGEGROUPSONGROUPBAR && pDraggedWindow->m_groupData.pNextWindow.lock() && m_window->m_groupData.pNextWindow.lock())) { g_pInputManager->m_wasDraggingWindow = true; return false; } - const float BARRELATIVE = *PSTACKED ? pos.y - assignedBoxGlobal().y - (m_fBarHeight + *POUTERGAP) / 2 : pos.x - assignedBoxGlobal().x - m_fBarWidth / 2; - const float BARSIZE = *PSTACKED ? m_fBarHeight + *POUTERGAP : m_fBarWidth + *PINNERGAP; + const float BARRELATIVE = *PSTACKED ? pos.y - assignedBoxGlobal().y - (m_barHeight + *POUTERGAP) / 2 : pos.x - assignedBoxGlobal().x - m_barWidth / 2; + const float BARSIZE = *PSTACKED ? m_barHeight + *POUTERGAP : m_barWidth + *PINNERGAP; const int WINDOWINDEX = BARRELATIVE < 0 ? -1 : BARRELATIVE / BARSIZE; - PHLWINDOW pWindowInsertAfter = m_pWindow->getGroupWindowByIndex(WINDOWINDEX); + PHLWINDOW pWindowInsertAfter = m_window->getGroupWindowByIndex(WINDOWINDEX); PHLWINDOW pWindowInsertEnd = pWindowInsertAfter->m_groupData.pNextWindow.lock(); PHLWINDOW pDraggedHead = pDraggedWindow->m_groupData.pNextWindow.lock() ? pDraggedWindow->getGroupHead() : pDraggedWindow; @@ -478,7 +478,7 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, PHLWIND if (WINDOWINDEX == -1) std::swap(pDraggedHead->m_groupData.head, pWindowInsertEnd->m_groupData.head); - m_pWindow->setGroupCurrent(pDraggedWindow); + m_window->setGroupCurrent(pDraggedWindow); pDraggedWindow->applyGroupRules(); pDraggedWindow->updateWindowDecos(); g_pLayoutManager->getCurrentLayout()->recalculateWindow(pDraggedWindow); @@ -493,12 +493,12 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo static auto PSTACKED = CConfigValue("group:groupbar:stacked"); static auto POUTERGAP = CConfigValue("group:groupbar:gaps_out"); static auto PINNERGAP = CConfigValue("group:groupbar:gaps_in"); - if (m_pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN)) + if (m_window->isEffectiveInternalFSMode(FSMODE_FULLSCREEN)) return true; const float BARRELATIVEX = pos.x - assignedBoxGlobal().x; const float BARRELATIVEY = pos.y - assignedBoxGlobal().y; - const int WINDOWINDEX = *PSTACKED ? (BARRELATIVEY / (m_fBarHeight + *POUTERGAP)) : (BARRELATIVEX) / (m_fBarWidth + *PINNERGAP); + const int WINDOWINDEX = *PSTACKED ? (BARRELATIVEY / (m_barHeight + *POUTERGAP)) : (BARRELATIVEX) / (m_barWidth + *PINNERGAP); static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); // close window on middle click @@ -508,7 +508,7 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo if (e.state == WL_POINTER_BUTTON_STATE_PRESSED) pressedCursorPos = pos; else if (e.state == WL_POINTER_BUTTON_STATE_RELEASED && pressedCursorPos == pos) - g_pXWaylandManager->sendCloseWindow(m_pWindow->getGroupWindowByIndex(WINDOWINDEX)); + g_pXWaylandManager->sendCloseWindow(m_window->getGroupWindowByIndex(WINDOWINDEX)); return true; } @@ -517,17 +517,17 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo return true; // click on padding - const auto TABPAD = !*PSTACKED && (BARRELATIVEX - (m_fBarWidth + *PINNERGAP) * WINDOWINDEX > m_fBarWidth); - const auto STACKPAD = *PSTACKED && (BARRELATIVEY - (m_fBarHeight + *POUTERGAP) * WINDOWINDEX < *POUTERGAP); + const auto TABPAD = !*PSTACKED && (BARRELATIVEX - (m_barWidth + *PINNERGAP) * WINDOWINDEX > m_barWidth); + const auto STACKPAD = *PSTACKED && (BARRELATIVEY - (m_barHeight + *POUTERGAP) * WINDOWINDEX < *POUTERGAP); if (TABPAD || STACKPAD) { - if (!g_pCompositor->isWindowActive(m_pWindow.lock())) - g_pCompositor->focusWindow(m_pWindow.lock()); + if (!g_pCompositor->isWindowActive(m_window.lock())) + g_pCompositor->focusWindow(m_window.lock()); return true; } - PHLWINDOW pWindow = m_pWindow->getGroupWindowByIndex(WINDOWINDEX); + PHLWINDOW pWindow = m_window->getGroupWindowByIndex(WINDOWINDEX); - if (pWindow != m_pWindow) + if (pWindow != m_window) pWindow->setGroupCurrent(pWindow); if (!g_pCompositor->isWindowActive(pWindow) && *PFOLLOWMOUSE != 3) @@ -542,13 +542,13 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, const IPo bool CHyprGroupBarDecoration::onScrollOnDeco(const Vector2D& pos, const IPointer::SAxisEvent e) { static auto PGROUPBARSCROLLING = CConfigValue("group:groupbar:scrolling"); - if (!*PGROUPBARSCROLLING || m_pWindow->m_groupData.pNextWindow.expired()) + if (!*PGROUPBARSCROLLING || m_window->m_groupData.pNextWindow.expired()) return false; if (e.delta > 0) - m_pWindow->setGroupCurrent(m_pWindow->m_groupData.pNextWindow.lock()); + m_window->setGroupCurrent(m_window->m_groupData.pNextWindow.lock()); else - m_pWindow->setGroupCurrent(m_pWindow->getGroupPrevious()); + m_window->setGroupCurrent(m_window->getGroupPrevious()); return true; } @@ -576,12 +576,12 @@ std::string CHyprGroupBarDecoration::getDisplayName() { } CBox CHyprGroupBarDecoration::assignedBoxGlobal() { - CBox box = m_bAssignedBox; - box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, m_pWindow.lock())); + CBox box = m_assignedBox; + box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, m_window.lock())); - const auto PWORKSPACE = m_pWindow->m_workspace; + const auto PWORKSPACE = m_window->m_workspace; - if (PWORKSPACE && !m_pWindow->m_pinned) + if (PWORKSPACE && !m_window->m_pinned) box.translate(PWORKSPACE->m_renderOffset->value()); return box.round(); diff --git a/src/render/decorations/CHyprGroupBarDecoration.hpp b/src/render/decorations/CHyprGroupBarDecoration.hpp index de087bce..feb304f2 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.hpp +++ b/src/render/decorations/CHyprGroupBarDecoration.hpp @@ -12,11 +12,11 @@ class CTitleTex { CTitleTex(PHLWINDOW pWindow, const Vector2D& bufferSize, const float monitorScale); ~CTitleTex() = default; - SP texActive; - SP texInactive; - std::string szContent; + SP m_texActive; + SP m_texInactive; + std::string m_content; - PHLWINDOWREF pWindowOwner; + PHLWINDOWREF m_windowOwner; }; void refreshGroupBarGradients(); @@ -47,16 +47,14 @@ class CHyprGroupBarDecoration : public IHyprWindowDecoration { virtual std::string getDisplayName(); private: - SBoxExtents m_seExtents; + CBox m_assignedBox = {0}; - CBox m_bAssignedBox = {0}; - - PHLWINDOWREF m_pWindow; + PHLWINDOWREF m_window; std::vector m_dwGroupMembers; - float m_fBarWidth; - float m_fBarHeight; + float m_barWidth; + float m_barHeight; CTitleTex* textureFromTitle(const std::string&); void invalidateTextures(); @@ -71,5 +69,5 @@ class CHyprGroupBarDecoration : public IHyprWindowDecoration { struct STitleTexs { // STitleTexs* overriden = nullptr; // TODO: make shit shared in-group to decrease VRAM usage. std::vector> titleTexs; - } m_sTitleTexs; + } m_titleTexs; }; diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp index cb70304f..250070bc 100644 --- a/src/render/decorations/DecorationPositioner.cpp +++ b/src/render/decorations/DecorationPositioner.cpp @@ -59,10 +59,10 @@ Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pW } void CDecorationPositioner::uncacheDecoration(IHyprWindowDecoration* deco) { - std::erase_if(m_vWindowPositioningDatas, [&](const auto& data) { return !data->pWindow.lock() || data->pDecoration == deco; }); + std::erase_if(m_windowPositioningDatas, [&](const auto& data) { return !data->pWindow.lock() || data->pDecoration == deco; }); - const auto WIT = std::find_if(m_mWindowDatas.begin(), m_mWindowDatas.end(), [&](const auto& other) { return other.first.lock() == deco->m_pWindow.lock(); }); - if (WIT == m_mWindowDatas.end()) + const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == deco->m_window.lock(); }); + if (WIT == m_windowDatas.end()) return; WIT->second.needsRecalc = true; @@ -70,16 +70,16 @@ void CDecorationPositioner::uncacheDecoration(IHyprWindowDecoration* deco) { void CDecorationPositioner::repositionDeco(IHyprWindowDecoration* deco) { uncacheDecoration(deco); - onWindowUpdate(deco->m_pWindow.lock()); + onWindowUpdate(deco->m_window.lock()); } CDecorationPositioner::SWindowPositioningData* CDecorationPositioner::getDataFor(IHyprWindowDecoration* pDecoration, PHLWINDOW pWindow) { - auto it = std::find_if(m_vWindowPositioningDatas.begin(), m_vWindowPositioningDatas.end(), [&](const auto& el) { return el->pDecoration == pDecoration; }); + auto it = std::find_if(m_windowPositioningDatas.begin(), m_windowPositioningDatas.end(), [&](const auto& el) { return el->pDecoration == pDecoration; }); - if (it != m_vWindowPositioningDatas.end()) + if (it != m_windowPositioningDatas.end()) return it->get(); - const auto DATA = m_vWindowPositioningDatas.emplace_back(makeUnique(pWindow, pDecoration)).get(); + const auto DATA = m_windowPositioningDatas.emplace_back(makeUnique(pWindow, pDecoration)).get(); DATA->positioningInfo = pDecoration->getPositioningInfo(); @@ -87,8 +87,8 @@ CDecorationPositioner::SWindowPositioningData* CDecorationPositioner::getDataFor } void CDecorationPositioner::sanitizeDatas() { - std::erase_if(m_mWindowDatas, [](const auto& other) { return !valid(other.first); }); - std::erase_if(m_vWindowPositioningDatas, [](const auto& other) { + std::erase_if(m_windowDatas, [](const auto& other) { return !valid(other.first); }); + std::erase_if(m_windowPositioningDatas, [](const auto& other) { if (!validMapped(other->pWindow)) return true; if (std::find_if(other->pWindow->m_windowDecorations.begin(), other->pWindow->m_windowDecorations.end(), [&](const auto& el) { return el.get() == other->pDecoration; }) == @@ -99,8 +99,8 @@ void CDecorationPositioner::sanitizeDatas() { } void CDecorationPositioner::forceRecalcFor(PHLWINDOW pWindow) { - const auto WIT = std::find_if(m_mWindowDatas.begin(), m_mWindowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); - if (WIT == m_mWindowDatas.end()) + const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); + if (WIT == m_windowDatas.end()) return; const auto WINDOWDATA = &WIT->second; @@ -112,8 +112,8 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { if (!validMapped(pWindow)) return; - const auto WIT = std::find_if(m_mWindowDatas.begin(), m_mWindowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); - if (WIT == m_mWindowDatas.end()) + const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); + if (WIT == m_windowDatas.end()) return; const auto WINDOWDATA = &WIT->second; @@ -130,7 +130,7 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { } if (WINDOWDATA->lastWindowSize == pWindow->m_realSize->value() /* position not changed */ - && std::all_of(m_vWindowPositioningDatas.begin(), m_vWindowPositioningDatas.end(), + && std::all_of(m_windowPositioningDatas.begin(), m_windowPositioningDatas.end(), [pWindow](const auto& data) { return pWindow != data->pWindow.lock() || !data->needsReposition; }) /* all window datas are either not for this window or don't need a reposition */ && !WINDOWDATA->needsRecalc /* window doesn't need recalc */ @@ -282,17 +282,17 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { } void CDecorationPositioner::onWindowUnmap(PHLWINDOW pWindow) { - std::erase_if(m_vWindowPositioningDatas, [&](const auto& data) { return data->pWindow.lock() == pWindow; }); - m_mWindowDatas.erase(pWindow); + std::erase_if(m_windowPositioningDatas, [&](const auto& data) { return data->pWindow.lock() == pWindow; }); + m_windowDatas.erase(pWindow); } void CDecorationPositioner::onWindowMap(PHLWINDOW pWindow) { - m_mWindowDatas[pWindow] = {}; + m_windowDatas[pWindow] = {}; } SBoxExtents CDecorationPositioner::getWindowDecorationReserved(PHLWINDOW pWindow) { try { - const auto E = m_mWindowDatas.at(pWindow); + const auto E = m_windowDatas.at(pWindow); return E.reserved; } catch (std::out_of_range& e) { return {}; } } @@ -301,7 +301,7 @@ SBoxExtents CDecorationPositioner::getWindowDecorationExtents(PHLWINDOW pWindow, CBox const mainSurfaceBox = pWindow->getWindowMainSurfaceBox(); CBox accum = mainSurfaceBox; - for (auto const& data : m_vWindowPositioningDatas) { + for (auto const& data : m_windowPositioningDatas) { if (!data->pDecoration || (inputOnly && !(data->pDecoration->getDecorationFlags() & DECORATION_ALLOWS_MOUSE_INPUT))) continue; @@ -349,7 +349,7 @@ SBoxExtents CDecorationPositioner::getWindowDecorationExtents(PHLWINDOW pWindow, CBox CDecorationPositioner::getBoxWithIncludedDecos(PHLWINDOW pWindow) { CBox accum = pWindow->getWindowMainSurfaceBox(); - for (auto const& data : m_vWindowPositioningDatas) { + for (auto const& data : m_windowPositioningDatas) { if (data->pWindow.lock() != pWindow) continue; @@ -385,7 +385,7 @@ CBox CDecorationPositioner::getBoxWithIncludedDecos(PHLWINDOW pWindow) { } CBox CDecorationPositioner::getWindowDecorationBox(IHyprWindowDecoration* deco) { - auto const window = deco->m_pWindow.lock(); + auto const window = deco->m_window.lock(); const auto DATA = getDataFor(deco, window); CBox box = DATA->lastReply.assignedGeometry; diff --git a/src/render/decorations/DecorationPositioner.hpp b/src/render/decorations/DecorationPositioner.hpp index 787c6d1f..7189db41 100644 --- a/src/render/decorations/DecorationPositioner.hpp +++ b/src/render/decorations/DecorationPositioner.hpp @@ -87,8 +87,8 @@ class CDecorationPositioner { bool needsRecalc = false; }; - std::map m_mWindowDatas; - std::vector> m_vWindowPositioningDatas; + std::map m_windowDatas; + std::vector> m_windowPositioningDatas; SWindowPositioningData* getDataFor(IHyprWindowDecoration* pDecoration, PHLWINDOW pWindow); void onWindowUnmap(PHLWINDOW pWindow); diff --git a/src/render/decorations/IHyprWindowDecoration.cpp b/src/render/decorations/IHyprWindowDecoration.cpp index c71ee186..0dd11867 100644 --- a/src/render/decorations/IHyprWindowDecoration.cpp +++ b/src/render/decorations/IHyprWindowDecoration.cpp @@ -2,7 +2,7 @@ class CWindow; -IHyprWindowDecoration::IHyprWindowDecoration(PHLWINDOW pWindow) : m_pWindow(pWindow) { +IHyprWindowDecoration::IHyprWindowDecoration(PHLWINDOW pWindow) : m_window(pWindow) { ; } diff --git a/src/render/decorations/IHyprWindowDecoration.hpp b/src/render/decorations/IHyprWindowDecoration.hpp index 2703eb61..26bfcb45 100644 --- a/src/render/decorations/IHyprWindowDecoration.hpp +++ b/src/render/decorations/IHyprWindowDecoration.hpp @@ -56,7 +56,7 @@ class IHyprWindowDecoration { virtual std::string getDisplayName(); private: - PHLWINDOWREF m_pWindow; + PHLWINDOWREF m_window; friend class CDecorationPositioner; }; diff --git a/src/render/pass/BorderPassElement.cpp b/src/render/pass/BorderPassElement.cpp index 31042c28..1024f021 100644 --- a/src/render/pass/BorderPassElement.cpp +++ b/src/render/pass/BorderPassElement.cpp @@ -1,15 +1,15 @@ #include "BorderPassElement.hpp" #include "../OpenGL.hpp" -CBorderPassElement::CBorderPassElement(const CBorderPassElement::SBorderData& data_) : data(data_) { +CBorderPassElement::CBorderPassElement(const CBorderPassElement::SBorderData& data_) : m_data(data_) { ; } void CBorderPassElement::draw(const CRegion& damage) { - if (data.hasGrad2) - g_pHyprOpenGL->renderBorder(data.box, data.grad1, data.grad2, data.lerp, data.round, data.roundingPower, data.borderSize, data.a, data.outerRound); + if (m_data.hasGrad2) + g_pHyprOpenGL->renderBorder(m_data.box, m_data.grad1, m_data.grad2, m_data.lerp, m_data.round, m_data.roundingPower, m_data.borderSize, m_data.a, m_data.outerRound); else - g_pHyprOpenGL->renderBorder(data.box, data.grad1, data.round, data.roundingPower, data.borderSize, data.a, data.outerRound); + g_pHyprOpenGL->renderBorder(m_data.box, m_data.grad1, m_data.round, m_data.roundingPower, m_data.borderSize, m_data.a, m_data.outerRound); } bool CBorderPassElement::needsLiveBlur() { diff --git a/src/render/pass/BorderPassElement.hpp b/src/render/pass/BorderPassElement.hpp index 785653ab..238b9ed5 100644 --- a/src/render/pass/BorderPassElement.hpp +++ b/src/render/pass/BorderPassElement.hpp @@ -27,5 +27,5 @@ class CBorderPassElement : public IPassElement { } private: - SBorderData data; + SBorderData m_data; }; diff --git a/src/render/pass/ClearPassElement.cpp b/src/render/pass/ClearPassElement.cpp index bafa73c7..256b857f 100644 --- a/src/render/pass/ClearPassElement.cpp +++ b/src/render/pass/ClearPassElement.cpp @@ -1,12 +1,12 @@ #include "ClearPassElement.hpp" #include "../OpenGL.hpp" -CClearPassElement::CClearPassElement(const CClearPassElement::SClearData& data_) : data(data_) { +CClearPassElement::CClearPassElement(const CClearPassElement::SClearData& data_) : m_data(data_) { ; } void CClearPassElement::draw(const CRegion& damage) { - g_pHyprOpenGL->clear(data.color); + g_pHyprOpenGL->clear(m_data.color); } bool CClearPassElement::needsLiveBlur() { diff --git a/src/render/pass/ClearPassElement.hpp b/src/render/pass/ClearPassElement.hpp index 40242457..ff161551 100644 --- a/src/render/pass/ClearPassElement.hpp +++ b/src/render/pass/ClearPassElement.hpp @@ -21,5 +21,5 @@ class CClearPassElement : public IPassElement { } private: - SClearData data; + SClearData m_data; }; \ No newline at end of file diff --git a/src/render/pass/FramebufferElement.cpp b/src/render/pass/FramebufferElement.cpp index 8271777f..7cfa8b4b 100644 --- a/src/render/pass/FramebufferElement.cpp +++ b/src/render/pass/FramebufferElement.cpp @@ -1,18 +1,18 @@ #include "FramebufferElement.hpp" #include "../OpenGL.hpp" -CFramebufferElement::CFramebufferElement(const CFramebufferElement::SFramebufferElementData& data_) : data(data_) { +CFramebufferElement::CFramebufferElement(const CFramebufferElement::SFramebufferElementData& data_) : m_data(data_) { ; } void CFramebufferElement::draw(const CRegion& damage) { CFramebuffer* fb = nullptr; - if (data.main) { - switch (data.framebufferID) { - case FB_MONITOR_RENDER_MAIN: fb = g_pHyprOpenGL->m_RenderData.mainFB; break; - case FB_MONITOR_RENDER_CURRENT: fb = g_pHyprOpenGL->m_RenderData.currentFB; break; - case FB_MONITOR_RENDER_OUT: fb = g_pHyprOpenGL->m_RenderData.outFB; break; + if (m_data.main) { + switch (m_data.framebufferID) { + case FB_MONITOR_RENDER_MAIN: fb = g_pHyprOpenGL->m_renderData.mainFB; break; + case FB_MONITOR_RENDER_CURRENT: fb = g_pHyprOpenGL->m_renderData.currentFB; break; + case FB_MONITOR_RENDER_OUT: fb = g_pHyprOpenGL->m_renderData.outFB; break; } if (!fb) { @@ -21,13 +21,13 @@ void CFramebufferElement::draw(const CRegion& damage) { } } else { - switch (data.framebufferID) { - case FB_MONITOR_RENDER_EXTRA_OFFLOAD: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->offloadFB; break; - case FB_MONITOR_RENDER_EXTRA_MIRROR: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->mirrorFB; break; - case FB_MONITOR_RENDER_EXTRA_MIRROR_SWAP: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->mirrorSwapFB; break; - case FB_MONITOR_RENDER_EXTRA_OFF_MAIN: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->offMainFB; break; - case FB_MONITOR_RENDER_EXTRA_MONITOR_MIRROR: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->monitorMirrorFB; break; - case FB_MONITOR_RENDER_EXTRA_BLUR: fb = &g_pHyprOpenGL->m_RenderData.pCurrentMonData->blurFB; break; + switch (m_data.framebufferID) { + case FB_MONITOR_RENDER_EXTRA_OFFLOAD: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->offloadFB; break; + case FB_MONITOR_RENDER_EXTRA_MIRROR: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->mirrorFB; break; + case FB_MONITOR_RENDER_EXTRA_MIRROR_SWAP: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->mirrorSwapFB; break; + case FB_MONITOR_RENDER_EXTRA_OFF_MAIN: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->offMainFB; break; + case FB_MONITOR_RENDER_EXTRA_MONITOR_MIRROR: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->monitorMirrorFB; break; + case FB_MONITOR_RENDER_EXTRA_BLUR: fb = &g_pHyprOpenGL->m_renderData.pCurrentMonData->blurFB; break; } if (!fb) { diff --git a/src/render/pass/FramebufferElement.hpp b/src/render/pass/FramebufferElement.hpp index ab1f1426..515c3380 100644 --- a/src/render/pass/FramebufferElement.hpp +++ b/src/render/pass/FramebufferElement.hpp @@ -21,5 +21,5 @@ class CFramebufferElement : public IPassElement { } private: - SFramebufferElementData data; + SFramebufferElementData m_data; }; \ No newline at end of file diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 925a30b4..fc743865 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -15,11 +15,11 @@ bool CRenderPass::empty() const { } bool CRenderPass::single() const { - return m_vPassElements.size() == 1; + return m_passElements.size() == 1; } void CRenderPass::add(SP el) { - m_vPassElements.emplace_back(makeShared(CRegion{}, el)); + m_passElements.emplace_back(makeShared(CRegion{}, el)); } void CRenderPass::simplify() { @@ -28,10 +28,10 @@ void CRenderPass::simplify() { // TODO: use precompute blur for instances where there is nothing in between // if there is live blur, we need to NOT occlude any area where it will be influenced - const auto WILLBLUR = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsLiveBlur(); }); + const auto WILLBLUR = std::ranges::any_of(m_passElements, [](const auto& el) { return el->element->needsLiveBlur(); }); - CRegion newDamage = damage.copy().intersect(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize}); - for (auto& el : m_vPassElements | std::views::reverse) { + CRegion newDamage = m_damage.copy().intersect(CBox{{}, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize}); + for (auto& el : m_passElements | std::views::reverse) { if (newDamage.empty() && !el->element->undiscardable()) { el->discard = true; @@ -43,7 +43,7 @@ void CRenderPass::simplify() { if (!bb1 || newDamage.empty()) continue; - auto bb = bb1->scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + auto bb = bb1->scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); // drop if empty if (CRegion copy = newDamage.copy(); copy.intersect(bb).empty()) { @@ -54,13 +54,13 @@ void CRenderPass::simplify() { auto opaque = el->element->opaqueRegion(); if (!opaque.empty()) { - opaque.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + opaque.scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); // if this intersects the liveBlur region, allow live blur to operate correctly. // do not occlude a border near it. if (WILLBLUR) { CRegion liveBlurRegion; - for (auto& el2 : m_vPassElements) { + for (auto& el2 : m_passElements) { // if we reach self, no problem, we can break. // if the blur is above us, we don't care, it will work fine. if (el2 == el) @@ -76,7 +76,7 @@ void CRenderPass::simplify() { } // expand the region: this area needs to be proper to blur it right. - liveBlurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).expand(oneBlurRadius() * 2.F); + liveBlurRegion.scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale).expand(oneBlurRadius() * 2.F); if (auto infringement = opaque.copy().intersect(liveBlurRegion); !infringement.empty()) { // eh, this is not the correct solution, but it will do... @@ -86,57 +86,57 @@ void CRenderPass::simplify() { } newDamage.subtract(opaque); if (*PDEBUGPASS) - occludedRegions.emplace_back(opaque); + m_occludedRegions.emplace_back(opaque); } } if (*PDEBUGPASS) { - for (auto& el2 : m_vPassElements) { + for (auto& el2 : m_passElements) { if (!el2->element->needsLiveBlur()) continue; const auto BB = el2->element->boundingBox(); RASSERT(BB, "No bounding box for an element with live blur is illegal"); - totalLiveBlurRegion.add(BB->copy().scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale)); + m_totalLiveBlurRegion.add(BB->copy().scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale)); } } } void CRenderPass::clear() { - m_vPassElements.clear(); + m_passElements.clear(); } CRegion CRenderPass::render(const CRegion& damage_) { static auto PDEBUGPASS = CConfigValue("debug:pass"); - const auto WILLBLUR = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsLiveBlur(); }); + const auto WILLBLUR = std::ranges::any_of(m_passElements, [](const auto& el) { return el->element->needsLiveBlur(); }); - damage = *PDEBUGPASS ? CRegion{CBox{{}, {INT32_MAX, INT32_MAX}}} : damage_.copy(); + m_damage = *PDEBUGPASS ? CRegion{CBox{{}, {INT32_MAX, INT32_MAX}}} : damage_.copy(); if (*PDEBUGPASS) { - occludedRegions.clear(); - totalLiveBlurRegion = CRegion{}; + m_occludedRegions.clear(); + m_totalLiveBlurRegion = CRegion{}; } - if (damage.empty()) { - g_pHyprOpenGL->m_RenderData.damage = damage; - g_pHyprOpenGL->m_RenderData.finalDamage = damage; - return damage; + if (m_damage.empty()) { + g_pHyprOpenGL->m_renderData.damage = m_damage; + g_pHyprOpenGL->m_renderData.finalDamage = m_damage; + return m_damage; } - if (!*PDEBUGPASS && debugData.present) - debugData = {false}; - else if (*PDEBUGPASS && !debugData.present) { - debugData.present = true; - debugData.keyboardFocusText = g_pHyprOpenGL->renderText("keyboard", Colors::WHITE, 12); - debugData.pointerFocusText = g_pHyprOpenGL->renderText("pointer", Colors::WHITE, 12); - debugData.lastWindowText = g_pHyprOpenGL->renderText("lastWindow", Colors::WHITE, 12); + if (!*PDEBUGPASS && m_debugData.present) + m_debugData = {false}; + else if (*PDEBUGPASS && !m_debugData.present) { + m_debugData.present = true; + m_debugData.keyboardFocusText = g_pHyprOpenGL->renderText("keyboard", Colors::WHITE, 12); + m_debugData.pointerFocusText = g_pHyprOpenGL->renderText("pointer", Colors::WHITE, 12); + m_debugData.lastWindowText = g_pHyprOpenGL->renderText("lastWindow", Colors::WHITE, 12); } if (WILLBLUR && !*PDEBUGPASS) { // combine blur regions into one that will be expanded CRegion blurRegion; - for (auto& el : m_vPassElements) { + for (auto& el : m_passElements) { if (!el->element->needsLiveBlur()) continue; @@ -146,40 +146,40 @@ CRegion CRenderPass::render(const CRegion& damage_) { blurRegion.add(*BB); } - blurRegion.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + blurRegion.scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); - blurRegion.intersect(damage).expand(oneBlurRadius()); + blurRegion.intersect(m_damage).expand(oneBlurRadius()); - g_pHyprOpenGL->m_RenderData.finalDamage = blurRegion.copy().add(damage); + g_pHyprOpenGL->m_renderData.finalDamage = blurRegion.copy().add(m_damage); // FIXME: why does this break on * 1.F ? // used to work when we expand all the damage... I think? Well, before pass. // moving a window over blur shows the edges being wonk. blurRegion.expand(oneBlurRadius() * 1.5F); - damage = blurRegion.copy().add(damage); + m_damage = blurRegion.copy().add(m_damage); } else - g_pHyprOpenGL->m_RenderData.finalDamage = damage; + g_pHyprOpenGL->m_renderData.finalDamage = m_damage; - if (std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->disableSimplification(); })) { - for (auto& el : m_vPassElements) { - el->elementDamage = damage; + if (std::ranges::any_of(m_passElements, [](const auto& el) { return el->element->disableSimplification(); })) { + for (auto& el : m_passElements) { + el->elementDamage = m_damage; } } else simplify(); - g_pHyprOpenGL->m_RenderData.pCurrentMonData->blurFBShouldRender = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsPrecomputeBlur(); }); + g_pHyprOpenGL->m_renderData.pCurrentMonData->blurFBShouldRender = std::ranges::any_of(m_passElements, [](const auto& el) { return el->element->needsPrecomputeBlur(); }); - if (m_vPassElements.empty()) + if (m_passElements.empty()) return {}; - for (auto& el : m_vPassElements) { + for (auto& el : m_passElements) { if (el->discard) { el->element->discard(); continue; } - g_pHyprOpenGL->m_RenderData.damage = el->elementDamage; + g_pHyprOpenGL->m_renderData.damage = el->elementDamage; el->element->draw(el->elementDamage); } @@ -192,16 +192,16 @@ CRegion CRenderPass::render(const CRegion& damage_) { }); } - g_pHyprOpenGL->m_RenderData.damage = damage; - return damage; + g_pHyprOpenGL->m_renderData.damage = m_damage; + return m_damage; } void CRenderPass::renderDebugData() { - CBox box = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_transformedSize}; - for (const auto& rg : occludedRegions) { + CBox box = {{}, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize}; + for (const auto& rg : m_occludedRegions) { g_pHyprOpenGL->renderRectWithDamage(box, Colors::RED.modifyA(0.1F), rg); } - g_pHyprOpenGL->renderRectWithDamage(box, Colors::GREEN.modifyA(0.1F), totalLiveBlurRegion); + g_pHyprOpenGL->renderRectWithDamage(box, Colors::GREEN.modifyA(0.1F), m_totalLiveBlurRegion); std::unordered_map offsets; @@ -219,9 +219,9 @@ void CRenderPass::renderDebugData() { if (!bb.has_value()) return; - CBox box = bb->copy().translate(-g_pHyprOpenGL->m_RenderData.pMonitor->m_position).scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + CBox box = bb->copy().translate(-g_pHyprOpenGL->m_renderData.pMonitor->m_position).scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); - if (box.intersection(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->m_size}).empty()) + if (box.intersection(CBox{{}, g_pHyprOpenGL->m_renderData.pMonitor->m_size}).empty()) return; g_pHyprOpenGL->renderRectWithDamage(box, color, CRegion{0, 0, INT32_MAX, INT32_MAX}); @@ -231,17 +231,17 @@ void CRenderPass::renderDebugData() { else offsets[surface.get()] = 0; - box = {box.pos(), texture->m_vSize}; + box = {box.pos(), texture->m_size}; g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.F, 0.F, 0.F, 0.2F}, CRegion{0, 0, INT32_MAX, INT32_MAX}, std::min(5.0, box.size().y)); g_pHyprOpenGL->renderTexture(texture, box, 1.F); - offsets[surface.get()] += texture->m_vSize.y; + offsets[surface.get()] += texture->m_size.y; }; - renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->m_state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); - renderHLSurface(debugData.pointerFocusText, g_pSeatManager->m_state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); + renderHLSurface(m_debugData.keyboardFocusText, g_pSeatManager->m_state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); + renderHLSurface(m_debugData.pointerFocusText, g_pSeatManager->m_state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F)); if (g_pCompositor->m_lastWindow) - renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); + renderHLSurface(m_debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F)); if (g_pSeatManager->m_state.pointerFocus) { if (g_pSeatManager->m_state.pointerFocus->m_current.input.intersect(CBox{{}, g_pSeatManager->m_state.pointerFocus->m_current.size}).getExtents().size() != @@ -251,28 +251,28 @@ void CRenderPass::renderDebugData() { auto BOX = hlSurface->getSurfaceBoxGlobal(); if (BOX) { auto region = g_pSeatManager->m_state.pointerFocus->m_current.input.copy() - .scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale) - .translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->m_position); + .scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale) + .translate(BOX->pos() - g_pHyprOpenGL->m_renderData.pMonitor->m_position); g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.8F, 0.8F, 0.2F, 0.4F}, region); } } } } - const auto DISCARDED_ELEMENTS = std::count_if(m_vPassElements.begin(), m_vPassElements.end(), [](const auto& e) { return e->discard; }); - auto tex = g_pHyprOpenGL->renderText(std::format("occlusion layers: {}\npass elements: {} ({} discarded)\nviewport: {:X0}", occludedRegions.size(), m_vPassElements.size(), - DISCARDED_ELEMENTS, g_pHyprOpenGL->m_RenderData.pMonitor->m_pixelSize), + const auto DISCARDED_ELEMENTS = std::count_if(m_passElements.begin(), m_passElements.end(), [](const auto& e) { return e->discard; }); + auto tex = g_pHyprOpenGL->renderText(std::format("occlusion layers: {}\npass elements: {} ({} discarded)\nviewport: {:X0}", m_occludedRegions.size(), m_passElements.size(), + DISCARDED_ELEMENTS, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize), Colors::WHITE, 12); if (tex) { - box = CBox{{0.F, g_pHyprOpenGL->m_RenderData.pMonitor->m_size.y - tex->m_vSize.y}, tex->m_vSize}.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + box = CBox{{0.F, g_pHyprOpenGL->m_renderData.pMonitor->m_size.y - tex->m_size.y}, tex->m_size}.scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); g_pHyprOpenGL->renderTexture(tex, box, 1.F); } std::string passStructure; auto yn = [](const bool val) -> const char* { return val ? "yes" : "no"; }; auto tick = [](const bool val) -> const char* { return val ? "✔" : "✖"; }; - for (const auto& el : m_vPassElements | std::views::reverse) { + for (const auto& el : m_passElements | std::views::reverse) { passStructure += std::format("{} {} (bb: {} op: {})\n", tick(!el->discard), el->element->passName(), yn(el->element->boundingBox().has_value()), yn(!el->element->opaqueRegion().empty())); } @@ -282,8 +282,8 @@ void CRenderPass::renderDebugData() { tex = g_pHyprOpenGL->renderText(passStructure, Colors::WHITE, 12); if (tex) { - box = CBox{{g_pHyprOpenGL->m_RenderData.pMonitor->m_size.x - tex->m_vSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->m_size.y - tex->m_vSize.y}, tex->m_vSize}.scale( - g_pHyprOpenGL->m_RenderData.pMonitor->m_scale); + box = CBox{{g_pHyprOpenGL->m_renderData.pMonitor->m_size.x - tex->m_size.x, g_pHyprOpenGL->m_renderData.pMonitor->m_size.y - tex->m_size.y}, tex->m_size}.scale( + g_pHyprOpenGL->m_renderData.pMonitor->m_scale); g_pHyprOpenGL->renderTexture(tex, box, 1.F); } } @@ -296,5 +296,5 @@ float CRenderPass::oneBlurRadius() { } void CRenderPass::removeAllOfType(const std::string& type) { - std::erase_if(m_vPassElements, [&type](const auto& e) { return e->element->passName() == type; }); + std::erase_if(m_passElements, [&type](const auto& e) { return e->element->passName() == type; }); } diff --git a/src/render/pass/Pass.hpp b/src/render/pass/Pass.hpp index bbc55d2c..ac564689 100644 --- a/src/render/pass/Pass.hpp +++ b/src/render/pass/Pass.hpp @@ -18,9 +18,9 @@ class CRenderPass { CRegion render(const CRegion& damage_); private: - CRegion damage; - std::vector occludedRegions; - CRegion totalLiveBlurRegion; + CRegion m_damage; + std::vector m_occludedRegions; + CRegion m_totalLiveBlurRegion; struct SPassElementData { CRegion elementDamage; @@ -28,9 +28,7 @@ class CRenderPass { bool discard = false; }; - std::vector> m_vPassElements; - - SP currentPassInfo = nullptr; + std::vector> m_passElements; void simplify(); float oneBlurRadius(); @@ -39,7 +37,7 @@ class CRenderPass { struct { bool present = false; SP keyboardFocusText, pointerFocusText, lastWindowText; - } debugData; + } m_debugData; friend class CHyprOpenGLImpl; }; diff --git a/src/render/pass/RectPassElement.cpp b/src/render/pass/RectPassElement.cpp index 1dab6a71..22f3bb11 100644 --- a/src/render/pass/RectPassElement.cpp +++ b/src/render/pass/RectPassElement.cpp @@ -1,45 +1,45 @@ #include "RectPassElement.hpp" #include "../OpenGL.hpp" -CRectPassElement::CRectPassElement(const CRectPassElement::SRectData& data_) : data(data_) { +CRectPassElement::CRectPassElement(const CRectPassElement::SRectData& data_) : m_data(data_) { ; } void CRectPassElement::draw(const CRegion& damage) { - if (data.box.w <= 0 || data.box.h <= 0) + if (m_data.box.w <= 0 || m_data.box.h <= 0) return; - if (!data.clipBox.empty()) - g_pHyprOpenGL->m_RenderData.clipBox = data.clipBox; + if (!m_data.clipBox.empty()) + g_pHyprOpenGL->m_renderData.clipBox = m_data.clipBox; - if (data.color.a == 1.F || !data.blur) - g_pHyprOpenGL->renderRectWithDamage(data.box, data.color, damage, data.round, data.roundingPower); + if (m_data.color.a == 1.F || !m_data.blur) + g_pHyprOpenGL->renderRectWithDamage(m_data.box, m_data.color, damage, m_data.round, m_data.roundingPower); else - g_pHyprOpenGL->renderRectWithBlur(data.box, data.color, data.round, data.roundingPower, data.blurA, data.xray); + g_pHyprOpenGL->renderRectWithBlur(m_data.box, m_data.color, m_data.round, m_data.roundingPower, m_data.blurA, m_data.xray); - g_pHyprOpenGL->m_RenderData.clipBox = {}; + g_pHyprOpenGL->m_renderData.clipBox = {}; } bool CRectPassElement::needsLiveBlur() { - return data.color.a < 1.F && !data.xray && data.blur; + return m_data.color.a < 1.F && !m_data.xray && m_data.blur; } bool CRectPassElement::needsPrecomputeBlur() { - return data.color.a < 1.F && data.xray && data.blur; + return m_data.color.a < 1.F && m_data.xray && m_data.blur; } std::optional CRectPassElement::boundingBox() { - return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).round(); + return m_data.box.copy().scale(1.F / g_pHyprOpenGL->m_renderData.pMonitor->m_scale).round(); } CRegion CRectPassElement::opaqueRegion() { - if (data.color.a < 1.F) + if (m_data.color.a < 1.F) return CRegion{}; - CRegion rg = boundingBox()->expand(-data.round); + CRegion rg = boundingBox()->expand(-m_data.round); - if (!data.clipBox.empty()) - rg.intersect(data.clipBox); + if (!m_data.clipBox.empty()) + rg.intersect(m_data.clipBox); return rg; } diff --git a/src/render/pass/RectPassElement.hpp b/src/render/pass/RectPassElement.hpp index f798dbf9..c83d52ec 100644 --- a/src/render/pass/RectPassElement.hpp +++ b/src/render/pass/RectPassElement.hpp @@ -27,5 +27,5 @@ class CRectPassElement : public IPassElement { } private: - SRectData data; + SRectData m_data; }; diff --git a/src/render/pass/RendererHintsPassElement.cpp b/src/render/pass/RendererHintsPassElement.cpp index 5b6d0098..2ad68204 100644 --- a/src/render/pass/RendererHintsPassElement.cpp +++ b/src/render/pass/RendererHintsPassElement.cpp @@ -1,13 +1,13 @@ #include "RendererHintsPassElement.hpp" #include "../OpenGL.hpp" -CRendererHintsPassElement::CRendererHintsPassElement(const CRendererHintsPassElement::SData& data_) : data(data_) { +CRendererHintsPassElement::CRendererHintsPassElement(const CRendererHintsPassElement::SData& data_) : m_data(data_) { ; } void CRendererHintsPassElement::draw(const CRegion& damage) { - if (data.renderModif.has_value()) - g_pHyprOpenGL->m_RenderData.renderModif = *data.renderModif; + if (m_data.renderModif.has_value()) + g_pHyprOpenGL->m_renderData.renderModif = *m_data.renderModif; } bool CRendererHintsPassElement::needsLiveBlur() { diff --git a/src/render/pass/RendererHintsPassElement.hpp b/src/render/pass/RendererHintsPassElement.hpp index a333e031..d56a0cd6 100644 --- a/src/render/pass/RendererHintsPassElement.hpp +++ b/src/render/pass/RendererHintsPassElement.hpp @@ -22,5 +22,5 @@ class CRendererHintsPassElement : public IPassElement { } private: - SData data; + SData m_data; }; \ No newline at end of file diff --git a/src/render/pass/ShadowPassElement.cpp b/src/render/pass/ShadowPassElement.cpp index 22910c96..cccace7e 100644 --- a/src/render/pass/ShadowPassElement.cpp +++ b/src/render/pass/ShadowPassElement.cpp @@ -2,12 +2,12 @@ #include "../OpenGL.hpp" #include "../decorations/CHyprDropShadowDecoration.hpp" -CShadowPassElement::CShadowPassElement(const CShadowPassElement::SShadowData& data_) : data(data_) { +CShadowPassElement::CShadowPassElement(const CShadowPassElement::SShadowData& data_) : m_data(data_) { ; } void CShadowPassElement::draw(const CRegion& damage) { - data.deco->render(g_pHyprOpenGL->m_RenderData.pMonitor.lock(), data.a); + m_data.deco->render(g_pHyprOpenGL->m_renderData.pMonitor.lock(), m_data.a); } bool CShadowPassElement::needsLiveBlur() { diff --git a/src/render/pass/ShadowPassElement.hpp b/src/render/pass/ShadowPassElement.hpp index 715e7bfb..7e85342a 100644 --- a/src/render/pass/ShadowPassElement.hpp +++ b/src/render/pass/ShadowPassElement.hpp @@ -22,5 +22,5 @@ class CShadowPassElement : public IPassElement { } private: - SShadowData data; + SShadowData m_data; }; \ No newline at end of file diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index ade9277c..ed699a02 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -12,59 +12,59 @@ #include using namespace Hyprutils::Utils; -CSurfacePassElement::CSurfacePassElement(const CSurfacePassElement::SRenderData& data_) : data(data_) { +CSurfacePassElement::CSurfacePassElement(const CSurfacePassElement::SRenderData& data_) : m_data(data_) { ; } void CSurfacePassElement::draw(const CRegion& damage) { - g_pHyprOpenGL->m_RenderData.currentWindow = data.pWindow; - g_pHyprOpenGL->m_RenderData.surface = data.surface; - g_pHyprOpenGL->m_RenderData.currentLS = data.pLS; - g_pHyprOpenGL->m_RenderData.clipBox = data.clipBox; - g_pHyprOpenGL->m_RenderData.discardMode = data.discardMode; - g_pHyprOpenGL->m_RenderData.discardOpacity = data.discardOpacity; - g_pHyprOpenGL->m_RenderData.useNearestNeighbor = data.useNearestNeighbor; - g_pHyprOpenGL->m_bEndFrame = data.flipEndFrame; + g_pHyprOpenGL->m_renderData.currentWindow = m_data.pWindow; + g_pHyprOpenGL->m_renderData.surface = m_data.surface; + g_pHyprOpenGL->m_renderData.currentLS = m_data.pLS; + g_pHyprOpenGL->m_renderData.clipBox = m_data.clipBox; + g_pHyprOpenGL->m_renderData.discardMode = m_data.discardMode; + g_pHyprOpenGL->m_renderData.discardOpacity = m_data.discardOpacity; + g_pHyprOpenGL->m_renderData.useNearestNeighbor = m_data.useNearestNeighbor; + g_pHyprOpenGL->m_endFrame = m_data.flipEndFrame; CScopeGuard x = {[]() { - g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); - g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); - g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false; - g_pHyprOpenGL->m_RenderData.clipBox = {}; - g_pHyprOpenGL->m_RenderData.clipRegion = {}; - g_pHyprOpenGL->m_RenderData.discardMode = 0; - g_pHyprOpenGL->m_RenderData.discardOpacity = 0; - g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false; - g_pHyprOpenGL->m_bEndFrame = false; - g_pHyprOpenGL->m_RenderData.currentWindow.reset(); - g_pHyprOpenGL->m_RenderData.surface.reset(); - g_pHyprOpenGL->m_RenderData.currentLS.reset(); + g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight = Vector2D(-1, -1); + g_pHyprOpenGL->m_renderData.useNearestNeighbor = false; + g_pHyprOpenGL->m_renderData.clipBox = {}; + g_pHyprOpenGL->m_renderData.clipRegion = {}; + g_pHyprOpenGL->m_renderData.discardMode = 0; + g_pHyprOpenGL->m_renderData.discardOpacity = 0; + g_pHyprOpenGL->m_renderData.useNearestNeighbor = false; + g_pHyprOpenGL->m_endFrame = false; + g_pHyprOpenGL->m_renderData.currentWindow.reset(); + g_pHyprOpenGL->m_renderData.surface.reset(); + g_pHyprOpenGL->m_renderData.currentLS.reset(); }}; - if (!data.texture) + if (!m_data.texture) return; - const auto& TEXTURE = data.texture; + const auto& TEXTURE = m_data.texture; // this is bad, probably has been logged elsewhere. Means the texture failed // uploading to the GPU. - if (!TEXTURE->m_iTexID) + if (!TEXTURE->m_texID) return; - const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; + const auto INTERACTIVERESIZEINPROGRESS = m_data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; TRACY_GPU_ZONE("RenderSurface"); - auto PSURFACE = CWLSurface::fromResource(data.surface); + auto PSURFACE = CWLSurface::fromResource(m_data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier : 1.F); + const float ALPHA = m_data.alpha * m_data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier : 1.F); const float OVERALL_ALPHA = PSURFACE ? PSURFACE->m_overallOpacity : 1.F; - const bool BLUR = data.blur && (!TEXTURE->m_bOpaque || ALPHA < 1.F || OVERALL_ALPHA < 1.F); + const bool BLUR = m_data.blur && (!TEXTURE->m_opaque || ALPHA < 1.F || OVERALL_ALPHA < 1.F); auto windowBox = getTexBox(); const auto PROJSIZEUNSCALED = windowBox.size(); - windowBox.scale(data.pMonitor->m_scale); + windowBox.scale(m_data.pMonitor->m_scale); windowBox.round(); if (windowBox.width <= 1 || windowBox.height <= 1) { @@ -72,17 +72,17 @@ void CSurfacePassElement::draw(const CRegion& damage) { return; } - const bool MISALIGNEDFSV1 = std::floor(data.pMonitor->m_scale) != data.pMonitor->m_scale /* Fractional */ && data.surface->m_current.scale == 1 /* fs protocol */ && - windowBox.size() != data.surface->m_current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, data.surface->m_current.bufferSize.x, 3) && - DELTALESSTHAN(windowBox.height, data.surface->m_current.bufferSize.y, 3) /* off by one-or-two */ && - (!data.pWindow || (!data.pWindow->m_realSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; + const bool MISALIGNEDFSV1 = std::floor(m_data.pMonitor->m_scale) != m_data.pMonitor->m_scale /* Fractional */ && m_data.surface->m_current.scale == 1 /* fs protocol */ && + windowBox.size() != m_data.surface->m_current.bufferSize /* misaligned */ && DELTALESSTHAN(windowBox.width, m_data.surface->m_current.bufferSize.x, 3) && + DELTALESSTHAN(windowBox.height, m_data.surface->m_current.bufferSize.y, 3) /* off by one-or-two */ && + (!m_data.pWindow || (!m_data.pWindow->m_realSize->isBeingAnimated() && !INTERACTIVERESIZEINPROGRESS)) /* not window or not animated/resizing */; - if (data.surface->m_colorManagement.valid()) + if (m_data.surface->m_colorManagement.valid()) Debug::log(TRACE, "FIXME: rendering surface with color management enabled, should apply necessary transformations"); - g_pHyprRenderer->calculateUVForSurface(data.pWindow, data.surface, data.pMonitor->m_self.lock(), data.mainSurface, windowBox.size(), PROJSIZEUNSCALED, MISALIGNEDFSV1); + g_pHyprRenderer->calculateUVForSurface(m_data.pWindow, m_data.surface, m_data.pMonitor->m_self.lock(), m_data.mainSurface, windowBox.size(), PROJSIZEUNSCALED, MISALIGNEDFSV1); auto cancelRender = false; - g_pHyprOpenGL->m_RenderData.clipRegion = visibleRegion(cancelRender); + g_pHyprOpenGL->m_renderData.clipRegion = visibleRegion(cancelRender); if (cancelRender) return; @@ -91,19 +91,19 @@ void CSurfacePassElement::draw(const CRegion& damage) { // as long as the window is not animated. During those it'd look weird. // UV will fixup it as well if (MISALIGNEDFSV1) - g_pHyprOpenGL->m_RenderData.useNearestNeighbor = true; + g_pHyprOpenGL->m_renderData.useNearestNeighbor = true; - float rounding = data.rounding; - float roundingPower = data.roundingPower; + float rounding = m_data.rounding; + float roundingPower = m_data.roundingPower; rounding -= 1; // to fix a border issue - if (data.dontRound) { + if (m_data.dontRound) { rounding = 0; roundingPower = 2.0f; } - const bool WINDOWOPAQUE = data.pWindow && data.pWindow->m_wlSurface->resource() == data.surface ? data.pWindow->opaque() : false; + const bool WINDOWOPAQUE = m_data.pWindow && m_data.pWindow->m_wlSurface->resource() == m_data.surface ? m_data.pWindow->opaque() : false; const bool CANDISABLEBLEND = ALPHA >= 1.f && OVERALL_ALPHA >= 1.f && rounding == 0 && WINDOWOPAQUE; if (CANDISABLEBLEND) @@ -114,38 +114,38 @@ void CSurfacePassElement::draw(const CRegion& damage) { // FIXME: This is wrong and will bug the blur out as shit if the first surface // is a subsurface that does NOT cover the entire frame. In such cases, we probably should fall back // to what we do for misaligned surfaces (blur the entire thing and then render shit without blur) - if (data.surfaceCounter == 0 && !data.popup) { + if (m_data.surfaceCounter == 0 && !m_data.popup) { if (BLUR) - g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, windowBox, ALPHA, data.surface, rounding, roundingPower, data.blockBlurOptimization, data.fadeAlpha, OVERALL_ALPHA); + g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, windowBox, ALPHA, m_data.surface, rounding, roundingPower, m_data.blockBlurOptimization, m_data.fadeAlpha, OVERALL_ALPHA); else g_pHyprOpenGL->renderTexture(TEXTURE, windowBox, ALPHA * OVERALL_ALPHA, rounding, roundingPower, false, true); } else { - if (BLUR && data.popup) - g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, windowBox, ALPHA, data.surface, rounding, roundingPower, true, data.fadeAlpha, OVERALL_ALPHA); + if (BLUR && m_data.popup) + g_pHyprOpenGL->renderTextureWithBlur(TEXTURE, windowBox, ALPHA, m_data.surface, rounding, roundingPower, true, m_data.fadeAlpha, OVERALL_ALPHA); else g_pHyprOpenGL->renderTexture(TEXTURE, windowBox, ALPHA * OVERALL_ALPHA, rounding, roundingPower, false, true); } if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) - data.surface->presentFeedback(data.when, data.pMonitor->m_self.lock()); + m_data.surface->presentFeedback(m_data.when, m_data.pMonitor->m_self.lock()); // add async (dmabuf) buffers to usedBuffers so we can handle release later // sync (shm) buffers will be released in commitState, so no need to track them here - if (data.surface->m_current.buffer && !data.surface->m_current.buffer->isSynchronous()) - g_pHyprRenderer->usedAsyncBuffers.emplace_back(data.surface->m_current.buffer); + if (m_data.surface->m_current.buffer && !m_data.surface->m_current.buffer->isSynchronous()) + g_pHyprRenderer->m_usedAsyncBuffers.emplace_back(m_data.surface->m_current.buffer); g_pHyprOpenGL->blend(true); } CBox CSurfacePassElement::getTexBox() { - const double outputX = -data.pMonitor->m_position.x, outputY = -data.pMonitor->m_position.y; + const double outputX = -m_data.pMonitor->m_position.x, outputY = -m_data.pMonitor->m_position.y; - const auto INTERACTIVERESIZEINPROGRESS = data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; - auto PSURFACE = CWLSurface::fromResource(data.surface); + const auto INTERACTIVERESIZEINPROGRESS = m_data.pWindow && g_pInputManager->m_currentlyDraggedWindow && g_pInputManager->m_dragMode == MBIND_RESIZE; + auto PSURFACE = CWLSurface::fromResource(m_data.surface); CBox windowBox; - if (data.surface && data.mainSurface) { - windowBox = {(int)outputX + data.pos.x + data.localPos.x, (int)outputY + data.pos.y + data.localPos.y, data.w, data.h}; + if (m_data.surface && m_data.mainSurface) { + windowBox = {(int)outputX + m_data.pos.x + m_data.localPos.x, (int)outputY + m_data.pos.y + m_data.localPos.y, m_data.w, m_data.h}; // however, if surface buffer w / h < box, we need to adjust them const auto PWINDOW = PSURFACE ? PSURFACE->getWindow() : nullptr; @@ -167,49 +167,49 @@ CBox CSurfacePassElement::getTexBox() { } } else { // here we clamp to 2, these might be some tiny specks - windowBox = {(int)outputX + data.pos.x + data.localPos.x, (int)outputY + data.pos.y + data.localPos.y, std::max((float)data.surface->m_current.size.x, 2.F), - std::max((float)data.surface->m_current.size.y, 2.F)}; - if (data.pWindow && data.pWindow->m_realSize->isBeingAnimated() && data.surface && !data.mainSurface && data.squishOversized /* subsurface */) { + windowBox = {(int)outputX + m_data.pos.x + m_data.localPos.x, (int)outputY + m_data.pos.y + m_data.localPos.y, std::max((float)m_data.surface->m_current.size.x, 2.F), + std::max((float)m_data.surface->m_current.size.y, 2.F)}; + if (m_data.pWindow && m_data.pWindow->m_realSize->isBeingAnimated() && m_data.surface && !m_data.mainSurface && m_data.squishOversized /* subsurface */) { // adjust subsurfaces to the window - windowBox.width = (windowBox.width / data.pWindow->m_reportedSize.x) * data.pWindow->m_realSize->value().x; - windowBox.height = (windowBox.height / data.pWindow->m_reportedSize.y) * data.pWindow->m_realSize->value().y; + windowBox.width = (windowBox.width / m_data.pWindow->m_reportedSize.x) * m_data.pWindow->m_realSize->value().x; + windowBox.height = (windowBox.height / m_data.pWindow->m_reportedSize.y) * m_data.pWindow->m_realSize->value().y; } } - if (data.squishOversized) { - if (data.localPos.x + windowBox.width > data.w) - windowBox.width = data.w - data.localPos.x; - if (data.localPos.y + windowBox.height > data.h) - windowBox.height = data.h - data.localPos.y; + if (m_data.squishOversized) { + if (m_data.localPos.x + windowBox.width > m_data.w) + windowBox.width = m_data.w - m_data.localPos.x; + if (m_data.localPos.y + windowBox.height > m_data.h) + windowBox.height = m_data.h - m_data.localPos.y; } return windowBox; } bool CSurfacePassElement::needsLiveBlur() { - auto PSURFACE = CWLSurface::fromResource(data.surface); + auto PSURFACE = CWLSurface::fromResource(m_data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); - const bool BLUR = data.blur && (!data.texture || !data.texture->m_bOpaque || ALPHA < 1.F); + const float ALPHA = m_data.alpha * m_data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); + const bool BLUR = m_data.blur && (!m_data.texture || !m_data.texture->m_opaque || ALPHA < 1.F); - if (!data.pLS && !data.pWindow) + if (!m_data.pLS && !m_data.pWindow) return BLUR; - const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(data.pLS, data.pWindow); + const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(m_data.pLS, m_data.pWindow); return BLUR && !NEWOPTIM; } bool CSurfacePassElement::needsPrecomputeBlur() { - auto PSURFACE = CWLSurface::fromResource(data.surface); + auto PSURFACE = CWLSurface::fromResource(m_data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); - const bool BLUR = data.blur && (!data.texture || !data.texture->m_bOpaque || ALPHA < 1.F); + const float ALPHA = m_data.alpha * m_data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); + const bool BLUR = m_data.blur && (!m_data.texture || !m_data.texture->m_opaque || ALPHA < 1.F); - if (!data.pLS && !data.pWindow) + if (!m_data.pLS && !m_data.pWindow) return BLUR; - const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(data.pLS, data.pWindow); + const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(m_data.pLS, m_data.pWindow); return BLUR && NEWOPTIM; } @@ -219,29 +219,29 @@ std::optional CSurfacePassElement::boundingBox() { } CRegion CSurfacePassElement::opaqueRegion() { - auto PSURFACE = CWLSurface::fromResource(data.surface); + auto PSURFACE = CWLSurface::fromResource(m_data.surface); - const float ALPHA = data.alpha * data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); + const float ALPHA = m_data.alpha * m_data.fadeAlpha * (PSURFACE ? PSURFACE->m_alphaModifier * PSURFACE->m_overallOpacity : 1.F); if (ALPHA < 1.F) return {}; - if (data.surface && data.surface->m_current.size == Vector2D{data.w, data.h}) { - CRegion opaqueSurf = data.surface->m_current.opaque.copy().intersect(CBox{{}, {data.w, data.h}}); + if (m_data.surface && m_data.surface->m_current.size == Vector2D{m_data.w, m_data.h}) { + CRegion opaqueSurf = m_data.surface->m_current.opaque.copy().intersect(CBox{{}, {m_data.w, m_data.h}}); const auto texBox = getTexBox(); - opaqueSurf.scale(texBox.size() / Vector2D{data.w, data.h}); - return opaqueSurf.translate(data.pos + data.localPos - data.pMonitor->m_position).expand(-data.rounding); + opaqueSurf.scale(texBox.size() / Vector2D{m_data.w, m_data.h}); + return opaqueSurf.translate(m_data.pos + m_data.localPos - m_data.pMonitor->m_position).expand(-m_data.rounding); } - return data.texture && data.texture->m_bOpaque ? boundingBox()->expand(-data.rounding) : CRegion{}; + return m_data.texture && m_data.texture->m_opaque ? boundingBox()->expand(-m_data.rounding) : CRegion{}; } CRegion CSurfacePassElement::visibleRegion(bool& cancel) { - auto PSURFACE = CWLSurface::fromResource(data.surface); + auto PSURFACE = CWLSurface::fromResource(m_data.surface); if (!PSURFACE) return {}; - const auto& bufferSize = data.surface->m_current.bufferSize; + const auto& bufferSize = m_data.surface->m_current.bufferSize; auto visibleRegion = PSURFACE->m_visibleRegion.copy(); if (visibleRegion.empty()) @@ -257,8 +257,8 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { // deal with any rounding errors that might come from scaling visibleRegion.expand(1); - auto uvTL = g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft; - auto uvBR = g_pHyprOpenGL->m_RenderData.primarySurfaceUVBottomRight; + auto uvTL = g_pHyprOpenGL->m_renderData.primarySurfaceUVTopLeft; + auto uvBR = g_pHyprOpenGL->m_renderData.primarySurfaceUVBottomRight; if (uvTL == Vector2D(-1, -1)) uvTL = Vector2D(0, 0); @@ -269,11 +269,11 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { visibleRegion.translate(-uvTL * bufferSize); auto texBox = getTexBox(); - texBox.scale(data.pMonitor->m_scale); + texBox.scale(m_data.pMonitor->m_scale); texBox.round(); visibleRegion.scale((Vector2D(1, 1) / (uvBR - uvTL)) * (texBox.size() / bufferSize)); - visibleRegion.translate((data.pos + data.localPos) * data.pMonitor->m_scale - data.pMonitor->m_position); + visibleRegion.translate((m_data.pos + m_data.localPos) * m_data.pMonitor->m_scale - m_data.pMonitor->m_position); return visibleRegion; } @@ -281,6 +281,6 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { void CSurfacePassElement::discard() { if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) { Debug::log(TRACE, "discard for invisible surface"); - data.surface->presentFeedback(data.when, data.pMonitor->m_self.lock(), true); + m_data.surface->presentFeedback(m_data.when, m_data.pMonitor->m_self.lock(), true); } } diff --git a/src/render/pass/SurfacePassElement.hpp b/src/render/pass/SurfacePassElement.hpp index 4d51f804..f4dbb45a 100644 --- a/src/render/pass/SurfacePassElement.hpp +++ b/src/render/pass/SurfacePassElement.hpp @@ -65,7 +65,7 @@ class CSurfacePassElement : public IPassElement { } private: - SRenderData data; + SRenderData m_data; CBox getTexBox(); }; diff --git a/src/render/pass/TexPassElement.cpp b/src/render/pass/TexPassElement.cpp index 3ccad6cb..b27f1032 100644 --- a/src/render/pass/TexPassElement.cpp +++ b/src/render/pass/TexPassElement.cpp @@ -4,27 +4,27 @@ #include using namespace Hyprutils::Utils; -CTexPassElement::CTexPassElement(const CTexPassElement::SRenderData& data_) : data(data_) { +CTexPassElement::CTexPassElement(const CTexPassElement::SRenderData& data_) : m_data(data_) { ; } void CTexPassElement::draw(const CRegion& damage) { - g_pHyprOpenGL->m_bEndFrame = data.flipEndFrame; + g_pHyprOpenGL->m_endFrame = m_data.flipEndFrame; CScopeGuard x = {[]() { // - g_pHyprOpenGL->m_bEndFrame = false; - g_pHyprOpenGL->m_RenderData.clipBox = {}; + g_pHyprOpenGL->m_endFrame = false; + g_pHyprOpenGL->m_renderData.clipBox = {}; }}; - if (!data.clipBox.empty()) - g_pHyprOpenGL->m_RenderData.clipBox = data.clipBox; + if (!m_data.clipBox.empty()) + g_pHyprOpenGL->m_renderData.clipBox = m_data.clipBox; - if (data.replaceProjection) - g_pHyprOpenGL->m_RenderData.monitorProjection = *data.replaceProjection; - g_pHyprOpenGL->renderTextureInternalWithDamage(data.tex, data.box, data.a, data.damage.empty() ? damage : data.damage, data.round, data.roundingPower); - if (data.replaceProjection) - g_pHyprOpenGL->m_RenderData.monitorProjection = g_pHyprOpenGL->m_RenderData.pMonitor->m_projMatrix; + if (m_data.replaceProjection) + g_pHyprOpenGL->m_renderData.monitorProjection = *m_data.replaceProjection; + g_pHyprOpenGL->renderTextureInternalWithDamage(m_data.tex, m_data.box, m_data.a, m_data.damage.empty() ? damage : m_data.damage, m_data.round, m_data.roundingPower); + if (m_data.replaceProjection) + g_pHyprOpenGL->m_renderData.monitorProjection = g_pHyprOpenGL->m_renderData.pMonitor->m_projMatrix; } bool CTexPassElement::needsLiveBlur() { @@ -36,7 +36,7 @@ bool CTexPassElement::needsPrecomputeBlur() { } std::optional CTexPassElement::boundingBox() { - return data.box.copy().scale(1.F / g_pHyprOpenGL->m_RenderData.pMonitor->m_scale).round(); + return m_data.box.copy().scale(1.F / g_pHyprOpenGL->m_renderData.pMonitor->m_scale).round(); } CRegion CTexPassElement::opaqueRegion() { diff --git a/src/render/pass/TexPassElement.hpp b/src/render/pass/TexPassElement.hpp index 5f0f490f..e98edd60 100644 --- a/src/render/pass/TexPassElement.hpp +++ b/src/render/pass/TexPassElement.hpp @@ -35,5 +35,5 @@ class CTexPassElement : public IPassElement { } private: - SRenderData data; + SRenderData m_data; }; diff --git a/src/render/pass/TextureMatteElement.cpp b/src/render/pass/TextureMatteElement.cpp index 3d927357..2b5d4fab 100644 --- a/src/render/pass/TextureMatteElement.cpp +++ b/src/render/pass/TextureMatteElement.cpp @@ -1,19 +1,19 @@ #include "TextureMatteElement.hpp" #include "../OpenGL.hpp" -CTextureMatteElement::CTextureMatteElement(const CTextureMatteElement::STextureMatteData& data_) : data(data_) { +CTextureMatteElement::CTextureMatteElement(const CTextureMatteElement::STextureMatteData& data_) : m_data(data_) { ; } void CTextureMatteElement::draw(const CRegion& damage) { - if (data.disableTransformAndModify) { + if (m_data.disableTransformAndModify) { g_pHyprOpenGL->setMonitorTransformEnabled(true); g_pHyprOpenGL->setRenderModifEnabled(false); - g_pHyprOpenGL->renderTextureMatte(data.tex, data.box, *data.fb); + g_pHyprOpenGL->renderTextureMatte(m_data.tex, m_data.box, *m_data.fb); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); } else - g_pHyprOpenGL->renderTextureMatte(data.tex, data.box, *data.fb); + g_pHyprOpenGL->renderTextureMatte(m_data.tex, m_data.box, *m_data.fb); } bool CTextureMatteElement::needsLiveBlur() { diff --git a/src/render/pass/TextureMatteElement.hpp b/src/render/pass/TextureMatteElement.hpp index bf673946..57d0e1e3 100644 --- a/src/render/pass/TextureMatteElement.hpp +++ b/src/render/pass/TextureMatteElement.hpp @@ -25,5 +25,5 @@ class CTextureMatteElement : public IPassElement { } private: - STextureMatteData data; + STextureMatteData m_data; }; \ No newline at end of file From ec93f8a1cda30f1cf22a24cbc00f680b8bfd0ba8 Mon Sep 17 00:00:00 2001 From: shane blackthorne <84467129+blackthorne7@users.noreply.github.com> Date: Mon, 5 May 2025 18:52:36 -0700 Subject: [PATCH 0158/1077] socket2: add monitorremovedv2 event (#10229) --- src/helpers/Monitor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index dab29544..3cbfbf46 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -279,6 +279,7 @@ void CMonitor::onDisconnect(bool destroy) { if (g_pCompositor->m_isShuttingDown) return; g_pEventManager->postEvent(SHyprIPCEvent{"monitorremoved", m_name}); + g_pEventManager->postEvent(SHyprIPCEvent{"monitorremovedv2", std::format("{},{},{}", m_id, m_name, m_shortDescription)}); EMIT_HOOK_EVENT("monitorRemoved", m_self.lock()); g_pCompositor->arrangeMonitors(); }}; From 930eeac900c60d147bf26491e15b0727605b3944 Mon Sep 17 00:00:00 2001 From: Jack Barnes <135401840+yuukibarns@users.noreply.github.com> Date: Tue, 6 May 2025 09:53:43 +0800 Subject: [PATCH 0159/1077] window: use stored size for new floating window when persistentsize is set (#10212) * fix(window): use stored size for new floating window when persistentsize is set. fix hyprwm#9422. * fix: replace `std::any_of` with `std::ranges:any_of` * fix: use initialClass and initialTitle when storing sizes on close * fix: add `xdgTag` as a new indicator * fix: no {} * fix: format with clang-format --- src/config/ConfigManager.cpp | 11 ++++++++--- src/config/ConfigManager.hpp | 14 ++++++++++++-- src/layout/IHyprLayout.cpp | 14 ++++++++++++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 90e4fe12..4ef39280 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -3043,13 +3043,18 @@ void CConfigManager::ensurePersistentWorkspacesPresent() { } void CConfigManager::storeFloatingSize(PHLWINDOW window, const Vector2D& size) { - Debug::log(LOG, "storing floating size {}x{} for window {}::{}", size.x, size.y, window->m_class, window->m_title); - SFloatCache id{window}; + Debug::log(LOG, "storing floating size {}x{} for window {}::{}", size.x, size.y, window->m_initialClass, window->m_initialTitle); + // true -> use m_initialClass and m_initialTitle + SFloatCache id{window, true}; m_mStoredFloatingSizes[id] = size; } std::optional CConfigManager::getStoredFloatingSize(PHLWINDOW window) { - SFloatCache id{window}; + // At startup, m_initialClass and m_initialTitle are undefined + // and m_class and m_title are just "initial" ones. + // false -> use m_class and m_title + SFloatCache id{window, false}; + Debug::log(LOG, "Hash for window {}::{} = {}", window->m_class, window->m_title, id.hash); if (m_mStoredFloatingSizes.contains(id)) { Debug::log(LOG, "got stored size {}x{} for window {}::{}", m_mStoredFloatingSizes[id].x, m_mStoredFloatingSizes[id].y, window->m_class, window->m_title); return m_mStoredFloatingSizes[id]; diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index eca2bb28..5cb95bac 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -141,8 +141,18 @@ struct SFirstExecRequest { struct SFloatCache { size_t hash; - SFloatCache(PHLWINDOW window) { - hash = std::hash{}(window->m_class) ^ (std::hash{}(window->m_title) << 1); + SFloatCache(PHLWINDOW window, bool initial) { + // Base hash from class/title + size_t baseHash = initial ? (std::hash{}(window->m_initialClass) ^ (std::hash{}(window->m_initialTitle) << 1)) : + (std::hash{}(window->m_class) ^ (std::hash{}(window->m_title) << 1)); + + // Use empty string as default tag value + std::string tagValue = ""; + if (auto xdgTag = window->xdgTag()) + tagValue = xdgTag.value(); + + // Combine hashes + hash = baseHash ^ (std::hash{}(tagValue) << 2); } bool operator==(const SFloatCache& other) const { diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index e1077a93..96dea105 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -17,8 +17,7 @@ void IHyprLayout::onWindowCreated(PHLWINDOW pWindow, eDirection direction) { CBox desiredGeometry = g_pXWaylandManager->getGeometryForWindow(pWindow); - const bool HASPERSISTENTSIZE = - std::any_of(pWindow->m_matchedRules.begin(), pWindow->m_matchedRules.end(), [](const auto& rule) { return rule->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; }); + const bool HASPERSISTENTSIZE = std::ranges::any_of(pWindow->m_matchedRules, [](const auto& rule) { return rule->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; }); const auto STOREDSIZE = HASPERSISTENTSIZE ? g_pConfigManager->getStoredFloatingSize(pWindow) : std::nullopt; @@ -886,6 +885,17 @@ void IHyprLayout::requestFocusForWindow(PHLWINDOW pWindow) { Vector2D IHyprLayout::predictSizeForNewWindowFloating(PHLWINDOW pWindow) { // get all rules, see if we have any size overrides. Vector2D sizeOverride = {}; if (g_pCompositor->m_lastMonitor) { + + // If `persistentsize` is set, use the stored size if available. + const bool HASPERSISTENTSIZE = std::ranges::any_of(pWindow->m_matchedRules, [](const auto& rule) { return rule->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; }); + + const auto STOREDSIZE = HASPERSISTENTSIZE ? g_pConfigManager->getStoredFloatingSize(pWindow) : std::nullopt; + + if (STOREDSIZE.has_value()) { + Debug::log(LOG, "using stored size {}x{} for new floating window {}::{}", STOREDSIZE->x, STOREDSIZE->y, pWindow->m_class, pWindow->m_title); + return STOREDSIZE.value(); + } + for (auto const& r : g_pConfigManager->getMatchingRules(pWindow, true, true)) { if (r->m_ruleType != CWindowRule::RULE_SIZE) continue; From 1ce614dfc0eb8b323e603b76975842c1f2e6a553 Mon Sep 17 00:00:00 2001 From: CyrenArkade Date: Mon, 5 May 2025 20:54:27 -0500 Subject: [PATCH 0160/1077] animations: Add option for animating workspaces as if the first and last were adjacent (#10277) * add option for animating workspaces as if the first and last were adjacent * change wraparound detection to use IDs instead of dispatcher * move shouldWraparound from MiscFunctions to Monitor --- src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/helpers/Monitor.cpp | 21 ++++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 9214772d..8fc6b04b 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -372,6 +372,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, + SConfigOptionDescription{ + .value = "animations:workspace_wraparound", + .description = "changes the direction of slide animations between the first and last workspaces", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, /* * input: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 4ef39280..564ebcda 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -610,6 +610,7 @@ CConfigManager::CConfigManager() { registerConfigVar("animations:enabled", Hyprlang::INT{1}); registerConfigVar("animations:first_launch_animation", Hyprlang::INT{1}); + registerConfigVar("animations:workspace_wraparound", Hyprlang::INT{0}); registerConfigVar("input:follow_mouse", Hyprlang::INT{1}); registerConfigVar("input:follow_mouse_threshold", Hyprlang::FLOAT{0}); diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 3cbfbf46..4dc0942d 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1100,6 +1100,25 @@ float CMonitor::getDefaultScale() { return 1; } +static bool shouldWraparound(const WORKSPACEID id1, const WORKSPACEID id2) { + static auto PWORKSPACEWRAPAROUND = CConfigValue("animations:workspace_wraparound"); + + if (!*PWORKSPACEWRAPAROUND) + return false; + + WORKSPACEID lowestID = INT64_MAX; + WORKSPACEID highestID = INT64_MIN; + + for (auto const& w : g_pCompositor->m_workspaces) { + if (w->m_id < 0 || w->m_isSpecialWorkspace) + continue; + lowestID = std::min(w->m_id, lowestID); + highestID = std::max(w->m_id, highestID); + } + + return std::min(id1, id2) == lowestID && std::max(id1, id2) == highestID; +} + void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bool noMouseMove, bool noFocus) { if (!pWorkspace) return; @@ -1123,7 +1142,7 @@ void CMonitor::changeWorkspace(const PHLWORKSPACE& pWorkspace, bool internal, bo m_activeWorkspace = pWorkspace; if (!internal) { - const auto ANIMTOLEFT = POLDWORKSPACE && pWorkspace->m_id > POLDWORKSPACE->m_id; + const auto ANIMTOLEFT = POLDWORKSPACE && (shouldWraparound(pWorkspace->m_id, POLDWORKSPACE->m_id) ^ (pWorkspace->m_id > POLDWORKSPACE->m_id)); if (POLDWORKSPACE) POLDWORKSPACE->startAnim(false, ANIMTOLEFT); pWorkspace->startAnim(true, ANIMTOLEFT); From 708a7c24ef2c137c04c2473ee6b3f841ed5a1d8b Mon Sep 17 00:00:00 2001 From: Zebra2711 <89755535+Zebra2711@users.noreply.github.com> Date: Tue, 6 May 2025 19:53:28 +0700 Subject: [PATCH 0161/1077] hyprpm: add missing return (#10299) Add a missing return statement after handling the first superuser binary in the `dropSudo` function Fixes: 1c530cb Co-authored-by: Zebra2711 --- hyprpm/src/helpers/Sys.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index 70564ab8..868ad9a9 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -118,5 +118,6 @@ void NSys::dropSudo() { // note the superuser binary that is being dropped std::println("{}", infoString("Don't know how to drop timestamp for '{}', ignoring.", BIN)); } + return; } } From 948277895efba5e8bcc66d34dcafe87518fc7b61 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 6 May 2025 21:49:20 +0200 Subject: [PATCH 0162/1077] popup: damage old size on unmap as well as new (#10306) fixes #10305 chromium for some reason sets the popup size to like 8x8 at the same time as unmapping --- src/desktop/Popup.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index f35cedcb..ed882c3a 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -129,6 +129,10 @@ void CPopup::onUnmap() { m_mapped = false; + // if the popup committed a different size right now, we also need to damage the old size. + const Vector2D MAX_DAMAGE_SIZE = {std::max(m_lastSize.x, m_resource->m_surface->m_surface->m_current.size.x), + std::max(m_lastSize.y, m_resource->m_surface->m_surface->m_current.size.y)}; + m_lastSize = m_resource->m_surface->m_surface->m_current.size; const auto COORDS = coordsGlobal(); @@ -137,6 +141,10 @@ void CPopup::onUnmap() { box.translate(COORDS).expand(4); g_pHyprRenderer->damageBox(box); + // damage the last popup's explicit max size as well + box = CBox{COORDS, MAX_DAMAGE_SIZE}.expand(4); + g_pHyprRenderer->damageBox(box); + m_subsurfaceHead.reset(); if (!m_layerOwner.expired() && m_layerOwner->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP) From f8bbe5124c0012865ea36f52d304313084a31fe9 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 6 May 2025 22:43:08 +0200 Subject: [PATCH 0163/1077] hyprpm: clean up root access and properly check input (#10304) * manifest: reject bad names from parsing * sys: restructure root functions --- hyprpm/src/core/DataState.cpp | 77 ++++++++++++++----- hyprpm/src/core/Manifest.cpp | 44 +++++++---- hyprpm/src/core/Manifest.hpp | 6 +- hyprpm/src/core/PluginManager.cpp | 37 ++++----- hyprpm/src/helpers/Sys.cpp | 124 ++++++++++++++++++++---------- hyprpm/src/helpers/Sys.hpp | 23 ++++-- hyprpm/src/main.cpp | 24 +++--- 7 files changed, 224 insertions(+), 111 deletions(-) diff --git a/hyprpm/src/core/DataState.cpp b/hyprpm/src/core/DataState.cpp index 3e7ae399..623395b1 100644 --- a/hyprpm/src/core/DataState.cpp +++ b/hyprpm/src/core/DataState.cpp @@ -3,11 +3,37 @@ #include #include #include +#include #include "PluginManager.hpp" #include "../helpers/Die.hpp" #include "../helpers/Sys.hpp" #include "../helpers/StringUtils.hpp" +static std::string getTempRoot() { + static auto ENV = getenv("XDG_RUNTIME_DIR"); + if (!ENV) { + std::cerr << "\nERROR: XDG_RUNTIME_DIR not set!\n"; + exit(1); + } + + const auto STR = ENV + std::string{"/hyprpm/"}; + + return STR; +} + +// write the state to a file +static bool writeState(const std::string& str, const std::string& to) { + // create temp file in a safe temp root + std::ofstream of(getTempRoot() + ".temp-state", std::ios::trunc); + if (!of.good()) + return false; + + of << str; + of.close(); + + return NSys::root::install(getTempRoot() + ".temp-state", to, "644"); +} + std::filesystem::path DataState::getDataStatePath() { return std::filesystem::path("/var/cache/hyprpm/" + g_pPluginManager->m_szUsername); } @@ -37,11 +63,16 @@ void DataState::ensureStateStoreExists() { std::error_code ec; if (!std::filesystem::exists(getHeadersPath(), ec) || ec) { std::println("{}", infoString("The hyprpm state store doesn't exist. Creating now...")); - if (!std::filesystem::exists("/var/cache/hyprpm/", ec) || ec) - NSys::runAsSuperuser("mkdir -p -m 755 '/var/cache/hyprpm/'"); - if (!std::filesystem::exists(getDataStatePath(), ec) || ec) - NSys::runAsSuperuser("mkdir -p -m 755 '" + getDataStatePath().string() + "'"); - NSys::runAsSuperuser("mkdir -p -m 755 '" + getHeadersPath() + "'"); + if (!std::filesystem::exists("/var/cache/hyprpm/", ec) || ec) { + if (!NSys::root::createDirectory("/var/cache/hyprpm", "755")) + Debug::die("ensureStateStoreExists: Failed to run a superuser cmd"); + } + if (!std::filesystem::exists(getDataStatePath(), ec) || ec) { + if (!NSys::root::createDirectory(getDataStatePath().string(), "755")) + Debug::die("ensureStateStoreExists: Failed to run a superuser cmd"); + } + if (!NSys::root::createDirectory(getHeadersPath(), "755")) + Debug::die("ensureStateStoreExists: Failed to run a superuser cmd"); } } @@ -51,8 +82,10 @@ void DataState::addNewPluginRepo(const SPluginRepository& repo) { const auto PATH = getDataStatePath() / repo.name; std::error_code ec; - if (!std::filesystem::exists(PATH, ec) || ec) - NSys::runAsSuperuser("mkdir -p -m 755 '" + PATH.string() + "'"); + if (!std::filesystem::exists(PATH, ec) || ec) { + if (!NSys::root::createDirectory(PATH.string(), "755")) + Debug::die("addNewPluginRepo: failed to create cache dir"); + } // clang-format off auto DATA = toml::table{ {"repository", toml::table{ @@ -66,8 +99,10 @@ void DataState::addNewPluginRepo(const SPluginRepository& repo) { const auto filename = p.name + ".so"; // copy .so to the good place and chmod 755 - if (std::filesystem::exists(p.filename)) - NSys::runAsSuperuser("cp '" + p.filename + "' '" + (PATH / filename).string() + "' && chmod 755 '" + (PATH / filename).string() + "'"); + if (std::filesystem::exists(p.filename)) { + if (!NSys::root::install(p.filename, (PATH / filename).string(), "0755")) + Debug::die("addNewPluginRepo: failed to install so file"); + } DATA.emplace(p.name, toml::table{ {"filename", filename}, @@ -80,8 +115,8 @@ void DataState::addNewPluginRepo(const SPluginRepository& repo) { std::stringstream ss; ss << DATA; - NSys::runAsSuperuser("cat << EOF > " + (PATH / "state.toml").string() + "\n" + ss.str() + "\nEOF"); - NSys::runAsSuperuser("chmod 644 '" + (PATH / "state.toml").string() + "'"); + if (!writeState(ss.str(), (PATH / "state.toml").string())) + Debug::die("{}", failureString("Failed to write plugin state")); } bool DataState::pluginRepoExists(const std::string& urlOrName) { @@ -123,7 +158,8 @@ void DataState::removePluginRepo(const std::string& urlOrName) { return; // WTF? // scary! - NSys::runAsSuperuser("rm -r '" + PATH + "'"); + if (!NSys::root::removeRecursive(PATH)) + Debug::die("removePluginRepo: failed to remove dir"); return; } } @@ -135,8 +171,10 @@ void DataState::updateGlobalState(const SGlobalState& state) { const auto PATH = getDataStatePath(); std::error_code ec; - if (!std::filesystem::exists(PATH, ec) || ec) - NSys::runAsSuperuser("mkdir -p -m 755 '" + PATH.string() + "'"); + if (!std::filesystem::exists(PATH, ec) || ec) { + if (!NSys::root::createDirectory(PATH.string(), "755")) + Debug::die("updateGlobalState: failed to create dir"); + } // clang-format off auto DATA = toml::table{ {"state", toml::table{ @@ -149,8 +187,8 @@ void DataState::updateGlobalState(const SGlobalState& state) { std::stringstream ss; ss << DATA; - NSys::runAsSuperuser("cat << EOF > " + (PATH / "state.toml").string() + "\n" + ss.str() + "\nEOF"); - NSys::runAsSuperuser("chmod 644 '" + (PATH / "state.toml").string() + "'"); + if (!writeState(ss.str(), (PATH / "state.toml").string())) + Debug::die("{}", failureString("Failed to write plugin state")); } SGlobalState DataState::getGlobalState() { @@ -229,8 +267,8 @@ bool DataState::setPluginEnabled(const std::string& name, bool enabled) { std::stringstream ss; ss << modifiedState; - NSys::runAsSuperuser("cat << EOF > " + stateFile.string() + "\n" + ss.str() + "\nEOF"); - NSys::runAsSuperuser("chmod 644 '" + stateFile.string() + "'"); + if (!writeState(ss.str(), stateFile.string())) + Debug::die("{}", failureString("Failed to write plugin state")); return true; } @@ -250,5 +288,6 @@ void DataState::purgeAllCache() { if (PATH.contains('\'')) return; // scary! - NSys::runAsSuperuser("rm -r '" + PATH + "'"); + if (!NSys::root::removeRecursive(PATH)) + Debug::die("Failed to run a superuser cmd"); } diff --git a/hyprpm/src/core/Manifest.cpp b/hyprpm/src/core/Manifest.cpp index 754d9d69..90f6fbff 100644 --- a/hyprpm/src/core/Manifest.cpp +++ b/hyprpm/src/core/Manifest.cpp @@ -1,6 +1,12 @@ #include "Manifest.hpp" #include -#include +#include + +// Alphanumerics and -_ allowed for plugin names. No magic names. +// [A-Za-z0-9\-_]* +static bool validManifestName(const std::string_view& n) { + return std::ranges::all_of(n, [](const char& c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '-' || c == '_' || c == '=' || (c >= '0' && c <= '9'); }); +} CManifest::CManifest(const eManifestType type, const std::string& path) { auto manifest = toml::parse_file(path); @@ -11,11 +17,17 @@ CManifest::CManifest(const eManifestType type, const std::string& path) { continue; CManifest::SManifestPlugin plugin; + + if (!validManifestName(key.str())) { + m_good = false; + return; + } + plugin.name = key; - m_vPlugins.push_back(plugin); + m_plugins.push_back(plugin); } - for (auto& plugin : m_vPlugins) { + for (auto& plugin : m_plugins) { plugin.description = manifest[plugin.name]["description"].value_or("?"); plugin.version = manifest[plugin.name]["version"].value_or("?"); plugin.output = manifest[plugin.name]["build"]["output"].value_or("?"); @@ -37,21 +49,21 @@ CManifest::CManifest(const eManifestType type, const std::string& path) { } if (plugin.output.empty() || plugin.buildSteps.empty()) { - m_bGood = false; + m_good = false; return; } } } else if (type == MANIFEST_HYPRPM) { - m_sRepository.name = manifest["repository"]["name"].value_or(""); - auto authors = manifest["repository"]["authors"].as_array(); + m_repository.name = manifest["repository"]["name"].value_or(""); + auto authors = manifest["repository"]["authors"].as_array(); if (authors) { for (auto&& a : *authors) { - m_sRepository.authors.push_back(a.as_string()->value_or("?")); + m_repository.authors.push_back(a.as_string()->value_or("?")); } } else { auto author = manifest["repository"]["author"].value_or(""); if (!std::string{author}.empty()) - m_sRepository.authors.push_back(author); + m_repository.authors.push_back(author); } auto pins = manifest["repository"]["commit_pins"].as_array(); @@ -59,7 +71,7 @@ CManifest::CManifest(const eManifestType type, const std::string& path) { for (auto&& pin : *pins) { auto pinArr = pin.as_array(); if (pinArr && pinArr->get(1)) - m_sRepository.commitPins.push_back(std::make_pair<>(pinArr->get(0)->as_string()->get(), pinArr->get(1)->as_string()->get())); + m_repository.commitPins.push_back(std::make_pair<>(pinArr->get(0)->as_string()->get(), pinArr->get(1)->as_string()->get())); } } @@ -68,11 +80,17 @@ CManifest::CManifest(const eManifestType type, const std::string& path) { continue; CManifest::SManifestPlugin plugin; + + if (!validManifestName(key.str())) { + m_good = false; + return; + } + plugin.name = key; - m_vPlugins.push_back(plugin); + m_plugins.push_back(plugin); } - for (auto& plugin : m_vPlugins) { + for (auto& plugin : m_plugins) { plugin.description = manifest[plugin.name]["description"].value_or("?"); plugin.output = manifest[plugin.name]["output"].value_or("?"); plugin.since = manifest[plugin.name]["since_hyprland"].value_or(0); @@ -94,12 +112,12 @@ CManifest::CManifest(const eManifestType type, const std::string& path) { } if (plugin.output.empty() || plugin.buildSteps.empty()) { - m_bGood = false; + m_good = false; return; } } } else { // ??? - m_bGood = false; + m_good = false; } } \ No newline at end of file diff --git a/hyprpm/src/core/Manifest.hpp b/hyprpm/src/core/Manifest.hpp index 19f967eb..41a49350 100644 --- a/hyprpm/src/core/Manifest.hpp +++ b/hyprpm/src/core/Manifest.hpp @@ -27,8 +27,8 @@ class CManifest { std::string name; std::vector authors; std::vector> commitPins; - } m_sRepository; + } m_repository; - std::vector m_vPlugins; - bool m_bGood = true; + std::vector m_plugins; + bool m_good = true; }; \ No newline at end of file diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 33e565d3..8686910f 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -236,14 +236,14 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& return false; } - if (!pManifest->m_bGood) { + if (!pManifest->m_good) { std::println(stderr, "\n{}", failureString("The provided plugin repository has a corrupted manifest")); return false; } progress.m_iSteps = 2; - progress.printMessageAbove(successString("parsed manifest, found " + std::to_string(pManifest->m_vPlugins.size()) + " plugins:")); - for (auto const& pl : pManifest->m_vPlugins) { + progress.printMessageAbove(successString("parsed manifest, found " + std::to_string(pManifest->m_plugins.size()) + " plugins:")); + for (auto const& pl : pManifest->m_plugins) { std::string message = "→ " + pl.name + " by "; for (auto const& a : pl.authors) { message += a + ", "; @@ -256,12 +256,12 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& progress.printMessageAbove(message); } - if (!pManifest->m_sRepository.commitPins.empty()) { + if (!pManifest->m_repository.commitPins.empty()) { // check commit pins - progress.printMessageAbove(infoString("Manifest has {} pins, checking", pManifest->m_sRepository.commitPins.size())); + progress.printMessageAbove(infoString("Manifest has {} pins, checking", pManifest->m_repository.commitPins.size())); - for (auto const& [hl, plugin] : pManifest->m_sRepository.commitPins) { + for (auto const& [hl, plugin] : pManifest->m_repository.commitPins) { if (hl != HLVER.hash) continue; @@ -293,7 +293,7 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& progress.m_szCurrentMessage = "Building plugin(s)"; progress.print(); - for (auto& p : pManifest->m_vPlugins) { + for (auto& p : pManifest->m_plugins) { std::string out; if (p.since > HLVER.commits && HLVER.commits >= 1 /* for --depth 1 clones, we can't check this. */) { @@ -336,11 +336,11 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& std::string repohash = execAndGet("cd " + m_szWorkingPluginDirectory + " && git rev-parse HEAD"); if (repohash.length() > 0) repohash.pop_back(); - repo.name = pManifest->m_sRepository.name.empty() ? url.substr(url.find_last_of('/') + 1) : pManifest->m_sRepository.name; + repo.name = pManifest->m_repository.name.empty() ? url.substr(url.find_last_of('/') + 1) : pManifest->m_repository.name; repo.url = url; repo.rev = rev; repo.hash = repohash; - for (auto const& p : pManifest->m_vPlugins) { + for (auto const& p : pManifest->m_plugins) { repo.plugins.push_back(SPlugin{p.name, m_szWorkingPluginDirectory + "/" + p.output, false, p.failed}); } DataState::addNewPluginRepo(repo); @@ -566,13 +566,14 @@ bool CPluginManager::updateHeaders(bool force) { ret = execAndGet(cmd); - cmd = std::format("cd {} && make installheaders && chmod -R 644 {} && find {} -type d -exec chmod o+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), + cmd = std::format("make -C '{}' installheaders && chmod -R 644 '{}' && find '{}' -type d -exec chmod o+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), DataState::getHeadersPath()); if (m_bVerbose) progress.printMessageAbove(verboseString("install will run as sudo: {}", cmd)); - ret = NSys::runAsSuperuser(cmd); + // WORKINGDIR and headersPath should not contain anything unsafe. Usernames can't contain cmd exec parts. + ret = NSys::root::runAsSuperuserUnsafe(cmd); if (m_bVerbose) std::println("{}", verboseString("installer returned: {}", ret)); @@ -701,17 +702,17 @@ bool CPluginManager::updatePlugins(bool forceUpdateAll) { continue; } - if (!pManifest->m_bGood) { - std::println(stderr, "\n{}", failureString("The provided plugin repository has a corrupted manifest")); + if (!pManifest->m_good) { + std::println(stderr, "\n{}", failureString("The provided plugin repository has a bad manifest")); continue; } - if (repo.rev.empty() && !pManifest->m_sRepository.commitPins.empty()) { + if (repo.rev.empty() && !pManifest->m_repository.commitPins.empty()) { // check commit pins unless a revision is specified - progress.printMessageAbove(infoString("Manifest has {} pins, checking", pManifest->m_sRepository.commitPins.size())); + progress.printMessageAbove(infoString("Manifest has {} pins, checking", pManifest->m_repository.commitPins.size())); - for (auto const& [hl, plugin] : pManifest->m_sRepository.commitPins) { + for (auto const& [hl, plugin] : pManifest->m_repository.commitPins) { if (hl != HLVER.hash) continue; @@ -721,7 +722,7 @@ bool CPluginManager::updatePlugins(bool forceUpdateAll) { } } - for (auto& p : pManifest->m_vPlugins) { + for (auto& p : pManifest->m_plugins) { std::string out; if (p.since > HLVER.commits && HLVER.commits >= 1000 /* for shallow clones, we can't check this. 1000 is an arbitrary number I chose. */) { @@ -763,7 +764,7 @@ bool CPluginManager::updatePlugins(bool forceUpdateAll) { if (repohash.length() > 0) repohash.pop_back(); newrepo.hash = repohash; - for (auto const& p : pManifest->m_vPlugins) { + for (auto const& p : pManifest->m_plugins) { const auto OLDPLUGINIT = std::find_if(repo.plugins.begin(), repo.plugins.end(), [&](const auto& other) { return other.name == p.name; }); newrepo.plugins.push_back(SPlugin{p.name, m_szWorkingPluginDirectory + "/" + p.output, OLDPLUGINIT != repo.plugins.end() ? OLDPLUGINIT->enabled : false}); } diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index 868ad9a9..a5876b9d 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include @@ -20,7 +20,7 @@ inline constexpr std::array SUPERUSER_BINARIES = { "run0", }; -static std::string fetchSuperuserBins() { +static std::string validSubinsAsStr() { std::ostringstream oss; auto it = SUPERUSER_BINARIES.begin(); if (it != SUPERUSER_BINARIES.end()) { @@ -56,17 +56,30 @@ static bool executableExistsInPath(const std::string& exe) { return false; } -static std::optional> execAndGet(std::string_view cmd, bool noRedirect = false) { - std::string command = std::string{cmd}; - if (!noRedirect) - command += " 2>&1"; +static std::string subin() { + static std::string bin; + static bool once = true; + if (!once) + return bin; - CProcess proc("/bin/sh", {"-c", command}); - if (!proc.runSync()) - // optional handles nullopt gracefully - return std::nullopt; + for (const auto& BIN : SUPERUSER_BINARIES) { + if (!executableExistsInPath(std::string{BIN})) + continue; - return {{proc.stdOut(), proc.exitCode()}}; + bin = BIN; + break; + } + + once = false; + + if (bin.empty()) + Debug::die("{}", failureString("No valid superuser binary present. Supported: {}", validSubinsAsStr())); + + return bin; +} + +static bool verifyStringValid(const std::string& s) { + return std::ranges::none_of(s, [](const char& c) { return c == '`' || c == '$' || c == '(' || c == ')' || c == '\'' || c == '"'; }); } int NSys::getUID() { @@ -85,39 +98,70 @@ bool NSys::isSuperuser() { return getuid() != geteuid() || geteuid() == 0; } -std::string NSys::runAsSuperuser(const std::string& cmd) { - for (const auto& BIN : SUPERUSER_BINARIES) { - if (!executableExistsInPath(std::string{BIN})) - continue; - - const auto result = execAndGet(std::string{BIN} + " /bin/sh -c \"" + cmd + "\"", true); - if (!result.has_value() || result->second != 0) - Debug::die("Failed to run a command as sudo. This could be due to an invalid password, or a hyprpm bug."); - - return result->first; - } - - Debug::die("{} {}", "Failed to find a superuser binary. Supported: ", fetchSuperuserBins()); - return ""; -} - -void NSys::cacheSudo() { +void NSys::root::cacheSudo() { // "caches" the sudo so that the prompt later doesn't pop up in a weird spot // sudo will not ask us again for a moment - runAsSuperuser("echo e > /dev/null"); + CProcess proc(subin(), {"echo", "hyprland"}); + proc.runSync(); } -void NSys::dropSudo() { - for (const auto& BIN : SUPERUSER_BINARIES) { - if (!executableExistsInPath(std::string{BIN})) - continue; - - if (BIN == "sudo") - execAndGet("sudo -k"); - else { - // note the superuser binary that is being dropped - std::println("{}", infoString("Don't know how to drop timestamp for '{}', ignoring.", BIN)); - } +void NSys::root::dropSudo() { + if (subin() != "sudo") { + std::println("{}", infoString("Don't know how to drop timestamp for '{}', ignoring.", subin())); return; } + + CProcess proc(subin(), {"-k"}); + proc.runSync(); +} + +bool NSys::root::createDirectory(const std::string& path, const std::string& mode) { + if (!verifyStringValid(path)) + return false; + + if (!std::ranges::all_of(mode, [](const char& c) { return c >= '0' && c <= '9'; })) + return false; + + CProcess proc(subin(), {"mkdir", "-p", "-m", mode, path}); + + return proc.runSync() && proc.exitCode() == 0; +} + +bool NSys::root::removeRecursive(const std::string& path) { + if (!verifyStringValid(path)) + return false; + + std::error_code ec; + const std::string PATH_ABSOLUTE = std::filesystem::canonical(path, ec); + + if (ec) + return false; + + if (!PATH_ABSOLUTE.starts_with("/var/cache/hyprpm")) + return false; + + CProcess proc(subin(), {"rm", "-fr", PATH_ABSOLUTE}); + + return proc.runSync() && proc.exitCode() == 0; +} + +bool NSys::root::install(const std::string& what, const std::string& where, const std::string& mode) { + if (!verifyStringValid(what) || !verifyStringValid(where)) + return false; + + if (!std::ranges::all_of(mode, [](const char& c) { return c >= '0' && c <= '9'; })) + return false; + + CProcess proc(subin(), {"install", "-m" + mode, "-o", "root", "-g", "root", what, where}); + + return proc.runSync() && proc.exitCode() == 0; +} + +std::string NSys::root::runAsSuperuserUnsafe(const std::string& cmd) { + CProcess proc(subin(), {"/bin/sh", "-c", cmd}); + + if (!proc.runSync()) + return ""; + + return proc.stdOut(); } diff --git a/hyprpm/src/helpers/Sys.hpp b/hyprpm/src/helpers/Sys.hpp index 2d643d40..b44eb758 100644 --- a/hyprpm/src/helpers/Sys.hpp +++ b/hyprpm/src/helpers/Sys.hpp @@ -3,10 +3,21 @@ #include namespace NSys { - bool isSuperuser(); - int getUID(); - int getEUID(); - std::string runAsSuperuser(const std::string& cmd); - void cacheSudo(); - void dropSudo(); + bool isSuperuser(); + int getUID(); + int getEUID(); + + // NOLINTNEXTLINE + namespace root { + void cacheSudo(); + void dropSudo(); + + // + [[nodiscard("Discarding could lead to vulnerabilities and bugs")]] bool createDirectory(const std::string& path, const std::string& mode); + [[nodiscard("Discarding could lead to vulnerabilities and bugs")]] bool removeRecursive(const std::string& path); + [[nodiscard("Discarding could lead to vulnerabilities and bugs")]] bool install(const std::string& what, const std::string& where, const std::string& mode); + + // Do not use this unless absolutely necessary! + std::string runAsSuperuserUnsafe(const std::string& cmd); + }; }; \ No newline at end of file diff --git a/hyprpm/src/main.cpp b/hyprpm/src/main.cpp index a70a0c0b..ca9c0fdb 100644 --- a/hyprpm/src/main.cpp +++ b/hyprpm/src/main.cpp @@ -101,8 +101,8 @@ int main(int argc, char** argv, char** envp) { if (command.size() >= 3) rev = command[2]; - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); return g_pPluginManager->addNewPluginRepo(command[1], rev) ? 0 : 1; } else if (command[0] == "remove") { @@ -111,13 +111,13 @@ int main(int argc, char** argv, char** envp) { return 1; } - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); return g_pPluginManager->removePluginRepo(command[1]) ? 0 : 1; } else if (command[0] == "update") { - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); bool headersValid = g_pPluginManager->headersValid() == HEADERS_OK; bool headers = g_pPluginManager->updateHeaders(force); @@ -152,8 +152,8 @@ int main(int argc, char** argv, char** envp) { return 1; } - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); auto ret = g_pPluginManager->ensurePluginsLoadState(); @@ -173,8 +173,8 @@ int main(int argc, char** argv, char** envp) { return 1; } - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); auto ret = g_pPluginManager->ensurePluginsLoadState(); @@ -200,8 +200,8 @@ int main(int argc, char** argv, char** envp) { g_pPluginManager->notify(ICON_OK, 0, 4000, "[hyprpm] Loaded plugins"); } } else if (command[0] == "purge-cache") { - NSys::cacheSudo(); - CScopeGuard x([] { NSys::dropSudo(); }); + NSys::root::cacheSudo(); + CScopeGuard x([] { NSys::root::dropSudo(); }); DataState::purgeAllCache(); } else if (command[0] == "list") { g_pPluginManager->listAllPlugins(); From e5df8cdc6227e35fa225acd15cdcc75abe3347cb Mon Sep 17 00:00:00 2001 From: davc0n Date: Wed, 7 May 2025 15:21:44 +0200 Subject: [PATCH 0164/1077] xwayland: refactor class member vars (#10312) * xwayland: refactor class member vars * xwayland: fix pure wayland build --- src/Compositor.cpp | 2 +- src/desktop/Window.cpp | 62 +-- src/events/Windows.cpp | 18 +- src/layout/IHyprLayout.cpp | 4 +- src/managers/ANRManager.cpp | 2 +- src/managers/XWaylandManager.cpp | 14 +- src/protocols/XDGOutput.cpp | 2 +- src/protocols/core/DataDevice.cpp | 8 +- src/xwayland/Dnd.cpp | 108 +++--- src/xwayland/Dnd.hpp | 35 +- src/xwayland/Server.cpp | 86 ++--- src/xwayland/Server.hpp | 28 +- src/xwayland/XDataSource.cpp | 44 +-- src/xwayland/XDataSource.hpp | 6 +- src/xwayland/XSurface.cpp | 164 ++++---- src/xwayland/XSurface.hpp | 53 +-- src/xwayland/XWM.cpp | 603 +++++++++++++++--------------- src/xwayland/XWM.hpp | 72 ++-- src/xwayland/XWayland.cpp | 8 +- src/xwayland/XWayland.hpp | 8 +- 20 files changed, 657 insertions(+), 670 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index dd098df2..ece6691a 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2394,7 +2394,7 @@ PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) { if (!w->m_isX11) continue; - if (w->m_xwaylandSurface == pWindow->m_xwaylandSurface->parent) + if (w->m_xwaylandSurface == pWindow->m_xwaylandSurface->m_parent) return w; } diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 6e6e51a1..c712e5eb 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -100,18 +100,18 @@ CWindow::CWindow(SP resource) : m_xdgSurface(resource) { CWindow::CWindow(SP surface) : m_xwaylandSurface(surface) { m_wlSurface = CWLSurface::create(); - m_listeners.map = m_xwaylandSurface->events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); - m_listeners.unmap = m_xwaylandSurface->events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); - m_listeners.destroy = m_xwaylandSurface->events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); - m_listeners.commit = m_xwaylandSurface->events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); - m_listeners.configureRequest = m_xwaylandSurface->events.configureRequest.registerListener([this](std::any d) { onX11ConfigureRequest(std::any_cast(d)); }); - m_listeners.updateState = m_xwaylandSurface->events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); - m_listeners.updateMetadata = m_xwaylandSurface->events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); - m_listeners.resourceChange = m_xwaylandSurface->events.resourceChange.registerListener([this](std::any d) { onResourceChangeX11(); }); - m_listeners.activate = m_xwaylandSurface->events.activate.registerListener([this](std::any d) { Events::listener_activateX11(this, nullptr); }); + m_listeners.map = m_xwaylandSurface->m_events.map.registerListener([this](std::any d) { Events::listener_mapWindow(this, nullptr); }); + m_listeners.unmap = m_xwaylandSurface->m_events.unmap.registerListener([this](std::any d) { Events::listener_unmapWindow(this, nullptr); }); + m_listeners.destroy = m_xwaylandSurface->m_events.destroy.registerListener([this](std::any d) { Events::listener_destroyWindow(this, nullptr); }); + m_listeners.commit = m_xwaylandSurface->m_events.commit.registerListener([this](std::any d) { Events::listener_commitWindow(this, nullptr); }); + m_listeners.configureRequest = m_xwaylandSurface->m_events.configureRequest.registerListener([this](std::any d) { onX11ConfigureRequest(std::any_cast(d)); }); + m_listeners.updateState = m_xwaylandSurface->m_events.stateChanged.registerListener([this](std::any d) { onUpdateState(); }); + m_listeners.updateMetadata = m_xwaylandSurface->m_events.metadataChanged.registerListener([this](std::any d) { onUpdateMeta(); }); + m_listeners.resourceChange = m_xwaylandSurface->m_events.resourceChange.registerListener([this](std::any d) { onResourceChangeX11(); }); + m_listeners.activate = m_xwaylandSurface->m_events.activate.registerListener([this](std::any d) { Events::listener_activateX11(this, nullptr); }); - if (m_xwaylandSurface->overrideRedirect) - m_listeners.setGeometry = m_xwaylandSurface->events.setGeometry.registerListener([this](std::any d) { Events::listener_unmanagedSetGeometry(this, nullptr); }); + if (m_xwaylandSurface->m_overrideRedirect) + m_listeners.setGeometry = m_xwaylandSurface->m_events.setGeometry.registerListener([this](std::any d) { Events::listener_unmanagedSetGeometry(this, nullptr); }); } CWindow::~CWindow() { @@ -352,7 +352,7 @@ pid_t CWindow::getPID() { if (!m_xwaylandSurface) return -1; - PID = m_xwaylandSurface->pid; + PID = m_xwaylandSurface->m_pid; } return PID; @@ -471,10 +471,10 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { } PHLWINDOW CWindow::x11TransientFor() { - if (!m_xwaylandSurface || !m_xwaylandSurface->parent) + if (!m_xwaylandSurface || !m_xwaylandSurface->m_parent) return nullptr; - auto s = m_xwaylandSurface->parent; + auto s = m_xwaylandSurface->m_parent; std::vector> visited; while (s) { // break loops. Some X apps make them, and it seems like it's valid behavior?!?!?! @@ -483,7 +483,7 @@ PHLWINDOW CWindow::x11TransientFor() { break; visited.emplace_back(s.lock()); - s = s->parent; + s = s->m_parent; } if (s == m_xwaylandSurface) @@ -1159,8 +1159,8 @@ bool CWindow::opaque() { if (PWORKSPACE->m_alpha->value() != 1.f) return false; - if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->surface && m_xwaylandSurface->surface->m_current.texture) - return m_xwaylandSurface->surface->m_current.texture->m_opaque; + if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->m_surface && m_xwaylandSurface->m_surface->m_current.texture) + return m_xwaylandSurface->m_surface->m_current.texture->m_opaque; if (!m_wlSurface->resource() || !m_wlSurface->resource()->m_current.texture) return false; @@ -1418,9 +1418,9 @@ void CWindow::activate(bool force) { } void CWindow::onUpdateState() { - std::optional requestsFS = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsFullscreen : m_xwaylandSurface->state.requestsFullscreen; + std::optional requestsFS = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsFullscreen : m_xwaylandSurface->m_state.requestsFullscreen; std::optional requestsID = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsFullscreenMonitor : MONITOR_INVALID; - std::optional requestsMX = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsMaximize : m_xwaylandSurface->state.requestsMaximize; + std::optional requestsMX = m_xdgSurface ? m_xdgSurface->m_toplevel->m_state.requestsMaximize : m_xwaylandSurface->m_state.requestsMaximize; if (requestsFS.has_value() && !(m_suppressedEvents & SUPPRESS_FULLSCREEN)) { if (requestsID.has_value() && (requestsID.value() != MONITOR_INVALID) && !(m_suppressedEvents & SUPPRESS_FULLSCREEN_OUTPUT)) { @@ -1495,7 +1495,7 @@ std::string CWindow::fetchTitle() { return m_xdgSurface->m_toplevel->m_state.title; } else { if (m_xwaylandSurface) - return m_xwaylandSurface->state.title; + return m_xwaylandSurface->m_state.title; } return ""; @@ -1507,7 +1507,7 @@ std::string CWindow::fetchClass() { return m_xdgSurface->m_toplevel->m_state.appid; } else { if (m_xwaylandSurface) - return m_xwaylandSurface->state.appid; + return m_xwaylandSurface->m_state.appid; } return ""; @@ -1524,9 +1524,9 @@ void CWindow::onAck(uint32_t serial) { } void CWindow::onResourceChangeX11() { - if (m_xwaylandSurface->surface && !m_wlSurface->resource()) - m_wlSurface->assign(m_xwaylandSurface->surface.lock(), m_self.lock()); - else if (!m_xwaylandSurface->surface && m_wlSurface->resource()) + if (m_xwaylandSurface->m_surface && !m_wlSurface->resource()) + m_wlSurface->assign(m_xwaylandSurface->m_surface.lock(), m_self.lock()); + else if (!m_xwaylandSurface->m_surface && m_wlSurface->resource()) m_wlSurface->unassign(); // update metadata as well, @@ -1538,7 +1538,7 @@ void CWindow::onResourceChangeX11() { void CWindow::onX11ConfigureRequest(CBox box) { - if (!m_xwaylandSurface->surface || !m_xwaylandSurface->mapped || !m_isMapped) { + if (!m_xwaylandSurface->m_surface || !m_xwaylandSurface->m_mapped || !m_isMapped) { m_xwaylandSurface->configure(box); m_pendingReportedSize = box.size(); m_reportedSize = box.size(); @@ -1668,18 +1668,18 @@ void CWindow::unsetWindowData(eOverridePriority priority) { } bool CWindow::isX11OverrideRedirect() { - return m_xwaylandSurface && m_xwaylandSurface->overrideRedirect; + return m_xwaylandSurface && m_xwaylandSurface->m_overrideRedirect; } bool CWindow::isModal() { - return (m_xwaylandSurface && m_xwaylandSurface->modal); + return (m_xwaylandSurface && m_xwaylandSurface->m_modal); } Vector2D CWindow::requestedMinSize() { - if ((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && !m_xdgSurface->m_toplevel)) + if ((m_isX11 && !m_xwaylandSurface->m_sizeHints) || (!m_isX11 && !m_xdgSurface->m_toplevel)) return Vector2D(1, 1); - Vector2D minSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->min_width, m_xwaylandSurface->sizeHints->min_height) : m_xdgSurface->m_toplevel->layoutMinSize(); + Vector2D minSize = m_isX11 ? Vector2D(m_xwaylandSurface->m_sizeHints->min_width, m_xwaylandSurface->m_sizeHints->min_height) : m_xdgSurface->m_toplevel->layoutMinSize(); minSize = minSize.clamp({1, 1}); @@ -1688,10 +1688,10 @@ Vector2D CWindow::requestedMinSize() { Vector2D CWindow::requestedMaxSize() { constexpr int NO_MAX_SIZE_LIMIT = 99999; - if (((m_isX11 && !m_xwaylandSurface->sizeHints) || (!m_isX11 && (!m_xdgSurface || !m_xdgSurface->m_toplevel)) || m_windowData.noMaxSize.valueOrDefault())) + if (((m_isX11 && !m_xwaylandSurface->m_sizeHints) || (!m_isX11 && (!m_xdgSurface || !m_xdgSurface->m_toplevel)) || m_windowData.noMaxSize.valueOrDefault())) return Vector2D(NO_MAX_SIZE_LIMIT, NO_MAX_SIZE_LIMIT); - Vector2D maxSize = m_isX11 ? Vector2D(m_xwaylandSurface->sizeHints->max_width, m_xwaylandSurface->sizeHints->max_height) : m_xdgSurface->m_toplevel->layoutMaxSize(); + Vector2D maxSize = m_isX11 ? Vector2D(m_xwaylandSurface->m_sizeHints->max_width, m_xwaylandSurface->m_sizeHints->max_height) : m_xdgSurface->m_toplevel->layoutMaxSize(); if (maxSize.x < 5) maxSize.x = NO_MAX_SIZE_LIMIT; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index d365e376..240070a3 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -136,7 +136,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_matchedRules = g_pConfigManager->getMatchingRules(PWINDOW, false); std::optional requestedInternalFSMode, requestedClientFSMode; std::optional requestedFSState; - if (PWINDOW->m_wantsInitialFullscreen || (PWINDOW->m_isX11 && PWINDOW->m_xwaylandSurface->fullscreen)) + if (PWINDOW->m_wantsInitialFullscreen || (PWINDOW->m_isX11 && PWINDOW->m_xwaylandSurface->m_fullscreen)) requestedClientFSMode = FSMODE_FULLSCREEN; MONITORID requestedFSMonitor = PWINDOW->m_wantsInitialFullscreenMonitor; @@ -975,13 +975,13 @@ void Events::listener_activateX11(void* owner, void* data) { void Events::listener_unmanagedSetGeometry(void* owner, void* data) { PHLWINDOW PWINDOW = ((CWindow*)owner)->m_self.lock(); - if (!PWINDOW->m_isMapped || !PWINDOW->m_xwaylandSurface || !PWINDOW->m_xwaylandSurface->overrideRedirect) + if (!PWINDOW->m_isMapped || !PWINDOW->m_xwaylandSurface || !PWINDOW->m_xwaylandSurface->m_overrideRedirect) return; const auto POS = PWINDOW->m_realPosition->goal(); const auto SIZ = PWINDOW->m_realSize->goal(); - if (PWINDOW->m_xwaylandSurface->geometry.size() > Vector2D{1, 1}) + if (PWINDOW->m_xwaylandSurface->m_geometry.size() > Vector2D{1, 1}) PWINDOW->setHidden(false); else PWINDOW->setHidden(true); @@ -994,17 +994,17 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) { static auto PXWLFORCESCALEZERO = CConfigValue("xwayland:force_zero_scaling"); - const auto LOGICALPOS = g_pXWaylandManager->xwaylandToWaylandCoords(PWINDOW->m_xwaylandSurface->geometry.pos()); + const auto LOGICALPOS = g_pXWaylandManager->xwaylandToWaylandCoords(PWINDOW->m_xwaylandSurface->m_geometry.pos()); - if (abs(std::floor(POS.x) - LOGICALPOS.x) > 2 || abs(std::floor(POS.y) - LOGICALPOS.y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->geometry.width) > 2 || - abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->geometry.height) > 2) { - Debug::log(LOG, "Unmanaged window {} requests geometry update to {:j} {:j}", PWINDOW, LOGICALPOS, PWINDOW->m_xwaylandSurface->geometry.size()); + if (abs(std::floor(POS.x) - LOGICALPOS.x) > 2 || abs(std::floor(POS.y) - LOGICALPOS.y) > 2 || abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->m_geometry.width) > 2 || + abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->m_geometry.height) > 2) { + Debug::log(LOG, "Unmanaged window {} requests geometry update to {:j} {:j}", PWINDOW, LOGICALPOS, PWINDOW->m_xwaylandSurface->m_geometry.size()); g_pHyprRenderer->damageWindow(PWINDOW); PWINDOW->m_realPosition->setValueAndWarp(Vector2D(LOGICALPOS.x, LOGICALPOS.y)); - if (abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->geometry.w) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->geometry.h) > 2) - PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_xwaylandSurface->geometry.size()); + if (abs(std::floor(SIZ.x) - PWINDOW->m_xwaylandSurface->m_geometry.w) > 2 || abs(std::floor(SIZ.y) - PWINDOW->m_xwaylandSurface->m_geometry.h) > 2) + PWINDOW->m_realSize->setValueAndWarp(PWINDOW->m_xwaylandSurface->m_geometry.size()); if (*PXWLFORCESCALEZERO) { if (const auto PMONITOR = PWINDOW->m_monitor.lock(); PMONITOR) { diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 96dea105..9919404a 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -131,8 +131,8 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { if (pWindow->m_isX11 && pWindow->isX11OverrideRedirect()) { - if (pWindow->m_xwaylandSurface->geometry.x != 0 && pWindow->m_xwaylandSurface->geometry.y != 0) - *pWindow->m_realPosition = g_pXWaylandManager->xwaylandToWaylandCoords(pWindow->m_xwaylandSurface->geometry.pos()); + if (pWindow->m_xwaylandSurface->m_geometry.x != 0 && pWindow->m_xwaylandSurface->m_geometry.y != 0) + *pWindow->m_realPosition = g_pXWaylandManager->xwaylandToWaylandCoords(pWindow->m_xwaylandSurface->m_geometry.pos()); else *pWindow->m_realPosition = Vector2D(PMONITOR->m_position.x + (PMONITOR->m_size.x - pWindow->m_realSize->goal().x) / 2.f, PMONITOR->m_position.y + (PMONITOR->m_size.y - pWindow->m_realSize->goal().y) / 2.f); diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index eff5046b..e4e62ea8 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -218,7 +218,7 @@ pid_t CANRManager::SANRData::getPid() const { } if (xwaylandSurface) - return xwaylandSurface->pid; + return xwaylandSurface->m_pid; return 0; } diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index ec9e078c..460e9ecd 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -84,7 +84,7 @@ CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) { CBox box; if (pWindow->m_isX11) - box = pWindow->m_xwaylandSurface->geometry; + box = pWindow->m_xwaylandSurface->m_geometry; else if (pWindow->m_xdgSurface) box = pWindow->m_xdgSurface->m_current.geometry; @@ -100,7 +100,7 @@ void CHyprXWaylandManager::sendCloseWindow(PHLWINDOW pWindow) { bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { if (pWindow->m_isX11) { - for (const auto& a : pWindow->m_xwaylandSurface->atoms) + for (const auto& a : pWindow->m_xwaylandSurface->m_atoms) if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DIALOG"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_SPLASH"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLBAR"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_UTILITY"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLTIP"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_POPUP_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DOCK"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"] || @@ -115,12 +115,12 @@ bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) { return true; } - if (pWindow->isModal() || pWindow->m_xwaylandSurface->transient || - (pWindow->m_xwaylandSurface->role.contains("task_dialog") || pWindow->m_xwaylandSurface->role.contains("pop-up")) || pWindow->m_xwaylandSurface->overrideRedirect) + if (pWindow->isModal() || pWindow->m_xwaylandSurface->m_transient || + (pWindow->m_xwaylandSurface->m_role.contains("task_dialog") || pWindow->m_xwaylandSurface->m_role.contains("pop-up")) || pWindow->m_xwaylandSurface->m_overrideRedirect) return true; - const auto SIZEHINTS = pWindow->m_xwaylandSurface->sizeHints.get(); - if (pWindow->m_xwaylandSurface->transient || pWindow->m_xwaylandSurface->parent || + const auto SIZEHINTS = pWindow->m_xwaylandSurface->m_sizeHints.get(); + if (pWindow->m_xwaylandSurface->m_transient || pWindow->m_xwaylandSurface->m_parent || (SIZEHINTS && (SIZEHINTS->min_width == SIZEHINTS->max_width) && (SIZEHINTS->min_height == SIZEHINTS->max_height))) return true; } else { @@ -140,7 +140,7 @@ void CHyprXWaylandManager::checkBorders(PHLWINDOW pWindow) { if (!pWindow->m_isX11) return; - for (auto const& a : pWindow->m_xwaylandSurface->atoms) { + for (auto const& a : pWindow->m_xwaylandSurface->m_atoms) { if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_POPUP_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_NOTIFICATION"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_COMBO"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_SPLASH"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_TOOLTIP"]) { diff --git a/src/protocols/XDGOutput.cpp b/src/protocols/XDGOutput.cpp index 93ac1c37..ccb78e98 100644 --- a/src/protocols/XDGOutput.cpp +++ b/src/protocols/XDGOutput.cpp @@ -47,7 +47,7 @@ void CXDGOutputProtocol::onManagerGetXDGOutput(CZxdgOutputManagerV1* mgr, uint32 CXDGOutput* pXDGOutput = m_xdgOutputs.emplace_back(makeUnique(makeShared(CLIENT, mgr->version(), id), PMONITOR)).get(); #ifndef NO_XWAYLAND - if (g_pXWayland && g_pXWayland->pServer && g_pXWayland->pServer->xwaylandClient == CLIENT) + if (g_pXWayland && g_pXWayland->m_server && g_pXWayland->m_server->m_xwaylandClient == CLIENT) pXDGOutput->m_isXWayland = true; #endif pXDGOutput->m_client = CLIENT; diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index 67c16e43..ad580ed1 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -420,8 +420,8 @@ void CWLDataDeviceProtocol::destroyResource(CWLDataOfferResource* resource) { SP CWLDataDeviceProtocol::dataDeviceForClient(wl_client* c) { #ifndef NO_XWAYLAND - if (g_pXWayland && g_pXWayland->pServer && c == g_pXWayland->pServer->xwaylandClient) - return g_pXWayland->pWM->getDataDevice(); + if (g_pXWayland && g_pXWayland->m_server && c == g_pXWayland->m_server->m_xwaylandClient) + return g_pXWayland->m_wm->getDataDevice(); #endif auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); @@ -451,7 +451,7 @@ void CWLDataDeviceProtocol::sendSelectionToDevice(SP dev, SPgetX11(); X11) - offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), sel); + offer = g_pXWayland->m_wm->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), sel); #endif if UNLIKELY (!offer) { @@ -669,7 +669,7 @@ void CWLDataDeviceProtocol::updateDrag() { } #ifndef NO_XWAYLAND else if (const auto X11 = m_dnd.focusedDevice->getX11(); X11) - offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), m_dnd.currentSource.lock()); + offer = g_pXWayland->m_wm->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), m_dnd.currentSource.lock()); #endif if (!offer) { diff --git a/src/xwayland/Dnd.cpp b/src/xwayland/Dnd.cpp index 2cb8be57..e4c60920 100644 --- a/src/xwayland/Dnd.cpp +++ b/src/xwayland/Dnd.cpp @@ -36,15 +36,15 @@ void CX11DataDevice::sendDndEvent(xcb_window_t targetWindow, xcb_atom_t type, xc .data = data, }; - xcb_send_event(g_pXWayland->pWM->connection, 0, targetWindow, XCB_EVENT_MASK_NO_EVENT, (const char*)&event); - xcb_flush(g_pXWayland->pWM->connection); + xcb_send_event(g_pXWayland->m_wm->m_connection, 0, targetWindow, XCB_EVENT_MASK_NO_EVENT, (const char*)&event); + xcb_flush(g_pXWayland->m_wm->m_connection); } xcb_window_t CX11DataDevice::getProxyWindow(xcb_window_t window) { xcb_window_t targetWindow = window; xcb_get_property_cookie_t proxyCookie = - xcb_get_property(g_pXWayland->pWM->connection, PROPERTY_OFFSET, window, HYPRATOMS["XdndProxy"], XCB_ATOM_WINDOW, PROPERTY_OFFSET, PROPERTY_LENGTH); - xcb_get_property_reply_t* proxyReply = xcb_get_property_reply(g_pXWayland->pWM->connection, proxyCookie, nullptr); + xcb_get_property(g_pXWayland->m_wm->m_connection, PROPERTY_OFFSET, window, HYPRATOMS["XdndProxy"], XCB_ATOM_WINDOW, PROPERTY_OFFSET, PROPERTY_LENGTH); + xcb_get_property_reply_t* proxyReply = xcb_get_property_reply(g_pXWayland->m_wm->m_connection, proxyCookie, nullptr); const auto isValidPropertyReply = [](xcb_get_property_reply_t* reply) { return reply && reply->type == XCB_ATOM_WINDOW && reply->format == PROPERTY_FORMAT_32BIT && xcb_get_property_value_length(reply) == sizeof(xcb_window_t); @@ -54,8 +54,8 @@ xcb_window_t CX11DataDevice::getProxyWindow(xcb_window_t window) { xcb_window_t proxyWindow = *(xcb_window_t*)xcb_get_property_value(proxyReply); xcb_get_property_cookie_t proxyVerifyCookie = - xcb_get_property(g_pXWayland->pWM->connection, PROPERTY_OFFSET, proxyWindow, HYPRATOMS["XdndProxy"], XCB_ATOM_WINDOW, PROPERTY_OFFSET, PROPERTY_LENGTH); - xcb_get_property_reply_t* proxyVerifyReply = xcb_get_property_reply(g_pXWayland->pWM->connection, proxyVerifyCookie, nullptr); + xcb_get_property(g_pXWayland->m_wm->m_connection, PROPERTY_OFFSET, proxyWindow, HYPRATOMS["XdndProxy"], XCB_ATOM_WINDOW, PROPERTY_OFFSET, PROPERTY_LENGTH); + xcb_get_property_reply_t* proxyVerifyReply = xcb_get_property_reply(g_pXWayland->m_wm->m_connection, proxyVerifyCookie, nullptr); if (isValidPropertyReply(proxyVerifyReply)) { xcb_window_t verifyWindow = *(xcb_window_t*)xcb_get_property_value(proxyVerifyReply); @@ -81,16 +81,16 @@ SP CX11DataOffer::getWayland() { } SP CX11DataOffer::getX11() { - return self.lock(); + return m_self.lock(); } SP CX11DataOffer::getSource() { - return source.lock(); + return m_source.lock(); } void CX11DataOffer::markDead() { #ifndef NO_XWAYLAND - std::erase(g_pXWayland->pWM->dndDataOffers, self); + std::erase(g_pXWayland->m_wm->m_dndDataOffers, m_self); #endif } @@ -100,7 +100,7 @@ void CX11DataDevice::sendDataOffer(SP offer) { void CX11DataDevice::sendEnter(uint32_t serial, SP surf, const Vector2D& local, SP offer) { #ifndef NO_XWAYLAND - auto XSURF = g_pXWayland->pWM->windowForWayland(surf); + auto XSURF = g_pXWayland->m_wm->windowForWayland(surf); if (!XSURF) { Debug::log(ERR, "CX11DataDevice::sendEnter: No xwayland surface for destination"); @@ -118,54 +118,54 @@ void CX11DataDevice::sendEnter(uint32_t serial, SP surf, con // reserve to avoid reallocations targets.reserve(SOURCE->mimes().size()); for (auto const& m : SOURCE->mimes()) { - targets.push_back(g_pXWayland->pWM->mimeToAtom(m)); + targets.push_back(g_pXWayland->m_wm->mimeToAtom(m)); } - xcb_change_property(g_pXWayland->pWM->connection, XCB_PROP_MODE_REPLACE, g_pXWayland->pWM->dndSelection.window, HYPRATOMS["XdndTypeList"], XCB_ATOM_ATOM, 32, targets.size(), - targets.data()); + xcb_change_property(g_pXWayland->m_wm->m_connection, XCB_PROP_MODE_REPLACE, g_pXWayland->m_wm->m_dndSelection.window, HYPRATOMS["XdndTypeList"], XCB_ATOM_ATOM, 32, + targets.size(), targets.data()); - xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->dndSelection.window, HYPRATOMS["XdndSelection"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->pWM->connection); + xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, g_pXWayland->m_wm->m_dndSelection.window, HYPRATOMS["XdndSelection"], XCB_TIME_CURRENT_TIME); + xcb_flush(g_pXWayland->m_wm->m_connection); - xcb_window_t targetWindow = getProxyWindow(XSURF->xID); + xcb_window_t targetWindow = getProxyWindow(XSURF->m_xID); xcb_client_message_data_t data = {{0}}; - data.data32[0] = g_pXWayland->pWM->dndSelection.window; + data.data32[0] = g_pXWayland->m_wm->m_dndSelection.window; data.data32[1] = XDND_VERSION << 24; data.data32[1] |= 1; sendDndEvent(targetWindow, HYPRATOMS["XdndEnter"], data); - lastSurface = XSURF; - lastOffer = offer; + m_lastSurface = XSURF; + m_lastOffer = offer; - auto hlSurface = XSURF->surface.lock(); + auto hlSurface = XSURF->m_surface.lock(); if (!hlSurface) { Debug::log(ERR, "CX11DataDevice::sendEnter: Non desktop x surface?!"); - lastSurfaceCoords = {}; + m_lastSurfaceCoords = {}; return; } - lastSurfaceCoords = g_pXWaylandManager->xwaylandToWaylandCoords(XSURF->geometry.pos()); + m_lastSurfaceCoords = g_pXWaylandManager->xwaylandToWaylandCoords(XSURF->m_geometry.pos()); #endif } void CX11DataDevice::cleanupState() { - lastSurface.reset(); - lastOffer.reset(); - lastSurfaceCoords = {}; - lastTime = 0; + m_lastSurface.reset(); + m_lastOffer.reset(); + m_lastSurfaceCoords = {}; + m_lastTime = 0; } void CX11DataDevice::sendLeave() { #ifndef NO_XWAYLAND - if (!lastSurface) + if (!m_lastSurface) return; - xcb_window_t targetWindow = getProxyWindow(lastSurface->xID); + xcb_window_t targetWindow = getProxyWindow(m_lastSurface->m_xID); xcb_client_message_data_t data = {{0}}; - data.data32[0] = g_pXWayland->pWM->dndSelection.window; + data.data32[0] = g_pXWayland->m_wm->m_dndSelection.window; sendDndEvent(targetWindow, HYPRATOMS["XdndLeave"], data); @@ -175,38 +175,38 @@ void CX11DataDevice::sendLeave() { void CX11DataDevice::sendMotion(uint32_t timeMs, const Vector2D& local) { #ifndef NO_XWAYLAND - if (!lastSurface || !lastOffer || !lastOffer->getSource()) + if (!m_lastSurface || !m_lastOffer || !m_lastOffer->getSource()) return; - xcb_window_t targetWindow = getProxyWindow(lastSurface->xID); + xcb_window_t targetWindow = getProxyWindow(m_lastSurface->m_xID); - const auto XCOORDS = g_pXWaylandManager->waylandToXWaylandCoords(lastSurfaceCoords + local); + const auto XCOORDS = g_pXWaylandManager->waylandToXWaylandCoords(m_lastSurfaceCoords + local); const uint32_t coords = ((uint32_t)XCOORDS.x << 16) | (uint32_t)XCOORDS.y; xcb_client_message_data_t data = {{0}}; - data.data32[0] = g_pXWayland->pWM->dndSelection.window; + data.data32[0] = g_pXWayland->m_wm->m_dndSelection.window; data.data32[2] = coords; data.data32[3] = timeMs; - data.data32[4] = dndActionToAtom(lastOffer->getSource()->actions()); + data.data32[4] = dndActionToAtom(m_lastOffer->getSource()->actions()); sendDndEvent(targetWindow, HYPRATOMS["XdndPosition"], data); - lastTime = timeMs; + m_lastTime = timeMs; #endif } void CX11DataDevice::sendDrop() { #ifndef NO_XWAYLAND - if (!lastSurface || !lastOffer) { + if (!m_lastSurface || !m_lastOffer) { Debug::log(ERR, "CX11DataDevice::sendDrop: No surface or offer"); return; } - xcb_window_t targetWindow = getProxyWindow(lastSurface->xID); + xcb_window_t targetWindow = getProxyWindow(m_lastSurface->m_xID); xcb_client_message_data_t data = {{0}}; - data.data32[0] = g_pXWayland->pWM->dndSelection.window; - data.data32[2] = lastTime; + data.data32[0] = g_pXWayland->m_wm->m_dndSelection.window; + data.data32[2] = m_lastTime; sendDndEvent(targetWindow, HYPRATOMS["XdndDrop"], data); @@ -227,11 +227,11 @@ SP CX11DataDevice::getWayland() { } SP CX11DataDevice::getX11() { - return self.lock(); + return m_self.lock(); } std::vector CX11DataSource::mimes() { - return mimeTypes; + return m_mimeTypes; } void CX11DataSource::send(const std::string& mime, CFileDescriptor fd) { @@ -243,30 +243,30 @@ void CX11DataSource::accepted(const std::string& mime) { } void CX11DataSource::cancelled() { - dndSuccess = false; - dropped = false; + m_dndSuccess = false; + m_dropped = false; } bool CX11DataSource::hasDnd() { - return dnd; + return m_dnd; } bool CX11DataSource::dndDone() { - return dropped; + return m_dropped; } void CX11DataSource::error(uint32_t code, const std::string& msg) { Debug::log(ERR, "CX11DataSource error: code {} msg {}", code, msg); - dndSuccess = false; - dropped = false; + m_dndSuccess = false; + m_dropped = false; } void CX11DataSource::sendDndFinished() { - dndSuccess = true; + m_dndSuccess = true; } uint32_t CX11DataSource::actions() { - return supportedActions; + return m_supportedActions; } eDataSourceType CX11DataSource::type() { @@ -274,7 +274,7 @@ eDataSourceType CX11DataSource::type() { } void CX11DataSource::sendDndDropPerformed() { - dropped = true; + m_dropped = true; } void CX11DataSource::sendDndAction(wl_data_device_manager_dnd_action a) { @@ -283,16 +283,16 @@ void CX11DataSource::sendDndAction(wl_data_device_manager_dnd_action a) { void CX11DataDevice::forceCleanupDnd() { #ifndef NO_XWAYLAND - if (lastOffer) { - auto source = lastOffer->getSource(); + if (m_lastOffer) { + auto source = m_lastOffer->getSource(); if (source) { source->cancelled(); source->sendDndFinished(); } } - xcb_set_selection_owner(g_pXWayland->pWM->connection, XCB_ATOM_NONE, HYPRATOMS["XdndSelection"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->pWM->connection); + xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, XCB_ATOM_NONE, HYPRATOMS["XdndSelection"], XCB_TIME_CURRENT_TIME); + xcb_flush(g_pXWayland->m_wm->m_connection); cleanupState(); diff --git a/src/xwayland/Dnd.hpp b/src/xwayland/Dnd.hpp index 1b97f5cc..58129741 100644 --- a/src/xwayland/Dnd.hpp +++ b/src/xwayland/Dnd.hpp @@ -22,15 +22,9 @@ class CX11DataOffer : public IDataOffer { virtual SP getSource(); virtual void markDead(); - WP source; - WP self; - WP xwaylandSurface; - - bool dead = false; - bool accepted = false; - bool recvd = false; - - uint32_t actions = 0; + WP m_source; + WP m_self; + WP m_xwaylandSurface; }; class CX11DataSource : public IDataSource { @@ -51,15 +45,12 @@ class CX11DataSource : public IDataSource { virtual void sendDndDropPerformed(); virtual void sendDndAction(wl_data_device_manager_dnd_action a); - bool used = false; - bool dnd = true; - bool dndSuccess = false; - bool dropped = false; + bool m_dnd = true; + bool m_dndSuccess = false; + bool m_dropped = false; - WP self; - - std::vector mimeTypes; - uint32_t supportedActions = 0; + std::vector m_mimeTypes; + uint32_t m_supportedActions = 0; }; class CX11DataDevice : public IDataDevice { @@ -77,7 +68,7 @@ class CX11DataDevice : public IDataDevice { virtual eDataSourceType type(); void forceCleanupDnd(); - WP self; + WP m_self; private: void cleanupState(); @@ -85,8 +76,8 @@ class CX11DataDevice : public IDataDevice { xcb_window_t getProxyWindow(xcb_window_t window); void sendDndEvent(xcb_window_t targetWindow, xcb_atom_t type, xcb_client_message_data_t& data); #endif - WP lastSurface; - WP lastOffer; - Vector2D lastSurfaceCoords; - uint32_t lastTime = 0; + WP m_lastSurface; + WP m_lastOffer; + Vector2D m_lastSurfaceCoords; + uint32_t m_lastTime = 0; }; diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp index a2e0e9fa..814bd20c 100644 --- a/src/xwayland/Server.cpp +++ b/src/xwayland/Server.cpp @@ -172,12 +172,12 @@ static bool openSockets(std::array& sockets, int display) { } static void startServer(void* data) { - if (!g_pXWayland->pServer->start()) + if (!g_pXWayland->m_server->start()) Debug::log(ERR, "The XWayland server could not start! XWayland will not work..."); } static int xwaylandReady(int fd, uint32_t mask, void* data) { - return g_pXWayland->pServer->ready(fd, mask); + return g_pXWayland->m_server->ready(fd, mask); } static bool safeRemove(const std::string& path) { @@ -194,7 +194,7 @@ bool CXWaylandServer::tryOpenSockets() { CFileDescriptor fd{open(lockPath.c_str(), O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC, LOCK_FILE_MODE)}; if (fd.isValid()) { // we managed to open the lock - if (!openSockets(xFDs, i)) { + if (!openSockets(m_xFDs, i)) { safeRemove(lockPath); continue; } @@ -205,8 +205,8 @@ bool CXWaylandServer::tryOpenSockets() { continue; } - display = i; - displayName = std::format(":{}", display); + m_display = i; + m_displayName = std::format(":{}", m_display); break; } @@ -230,12 +230,12 @@ bool CXWaylandServer::tryOpenSockets() { } } - if (display < 0) { + if (m_display < 0) { Debug::log(ERR, "Failed to find a suitable socket for XWayland"); return false; } - Debug::log(LOG, "XWayland found a suitable display socket at DISPLAY: {}", displayName); + Debug::log(LOG, "XWayland found a suitable display socket at DISPLAY: {}", m_displayName); return true; } @@ -245,63 +245,63 @@ CXWaylandServer::CXWaylandServer() { CXWaylandServer::~CXWaylandServer() { die(); - if (display < 0) + if (m_display < 0) return; - std::string lockPath = std::format("/tmp/.X{}-lock", display); + std::string lockPath = std::format("/tmp/.X{}-lock", m_display); safeRemove(lockPath); std::string path; for (bool isLinux : {true, false}) { - path = getSocketPath(display, isLinux); + path = getSocketPath(m_display, isLinux); safeRemove(path); } } void CXWaylandServer::die() { - if (display < 0) + if (m_display < 0) return; - if (xFDReadEvents[0]) { - wl_event_source_remove(xFDReadEvents[0]); - wl_event_source_remove(xFDReadEvents[1]); - xFDReadEvents = {nullptr, nullptr}; + if (m_xFDReadEvents[0]) { + wl_event_source_remove(m_xFDReadEvents[0]); + wl_event_source_remove(m_xFDReadEvents[1]); + m_xFDReadEvents = {nullptr, nullptr}; } - if (pipeSource) - wl_event_source_remove(pipeSource); + if (m_pipeSource) + wl_event_source_remove(m_pipeSource); // possible crash. Better to leak a bit. //if (xwaylandClient) // wl_client_destroy(xwaylandClient); - xwaylandClient = nullptr; + m_xwaylandClient = nullptr; } bool CXWaylandServer::create() { if (!tryOpenSockets()) return false; - setenv("DISPLAY", displayName.c_str(), true); + setenv("DISPLAY", m_displayName.c_str(), true); // TODO: lazy mode - idleSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, ::startServer, nullptr); + m_idleSource = wl_event_loop_add_idle(g_pCompositor->m_wlEventLoop, ::startServer, nullptr); return true; } void CXWaylandServer::runXWayland(CFileDescriptor& notifyFD) { - if (!xFDs[0].setFlags(xFDs[0].getFlags() & ~FD_CLOEXEC) || !xFDs[1].setFlags(xFDs[1].getFlags() & ~FD_CLOEXEC) || - !waylandFDs[1].setFlags(waylandFDs[1].getFlags() & ~FD_CLOEXEC) || !xwmFDs[1].setFlags(xwmFDs[1].getFlags() & ~FD_CLOEXEC)) { + if (!m_xFDs[0].setFlags(m_xFDs[0].getFlags() & ~FD_CLOEXEC) || !m_xFDs[1].setFlags(m_xFDs[1].getFlags() & ~FD_CLOEXEC) || + !m_waylandFDs[1].setFlags(m_waylandFDs[1].getFlags() & ~FD_CLOEXEC) || !m_xwmFDs[1].setFlags(m_xwmFDs[1].getFlags() & ~FD_CLOEXEC)) { Debug::log(ERR, "Failed to unset cloexec on fds"); _exit(EXIT_FAILURE); } - auto cmd = - std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", displayName, xFDs[0].get(), xFDs[1].get(), notifyFD.get(), xwmFDs[1].get()); + auto cmd = std::format("Xwayland {} -rootless -core -listenfd {} -listenfd {} -displayfd {} -wm {}", m_displayName, m_xFDs[0].get(), m_xFDs[1].get(), notifyFD.get(), + m_xwmFDs[1].get()); - auto waylandSocket = std::format("{}", waylandFDs[1].get()); + auto waylandSocket = std::format("{}", m_waylandFDs[1].get()); setenv("WAYLAND_SOCKET", waylandSocket.c_str(), true); Debug::log(LOG, "Starting XWayland with \"{}\", bon voyage!", cmd); @@ -313,17 +313,17 @@ void CXWaylandServer::runXWayland(CFileDescriptor& notifyFD) { } bool CXWaylandServer::start() { - idleSource = nullptr; + m_idleSource = nullptr; int wlPair[2] = {-1, -1}; if (socketpair(AF_UNIX, SOCK_STREAM, 0, wlPair) != 0) { Debug::log(ERR, "socketpair failed (1)"); die(); return false; } - waylandFDs[0] = CFileDescriptor{wlPair[0]}; - waylandFDs[1] = CFileDescriptor{wlPair[1]}; + m_waylandFDs[0] = CFileDescriptor{wlPair[0]}; + m_waylandFDs[1] = CFileDescriptor{wlPair[1]}; - if (!waylandFDs[0].setFlags(waylandFDs[0].getFlags() | FD_CLOEXEC) || !waylandFDs[1].setFlags(waylandFDs[1].getFlags() | FD_CLOEXEC)) { + if (!m_waylandFDs[0].setFlags(m_waylandFDs[0].getFlags() | FD_CLOEXEC) || !m_waylandFDs[1].setFlags(m_waylandFDs[1].getFlags() | FD_CLOEXEC)) { Debug::log(ERR, "set_cloexec failed (1)"); die(); return false; @@ -336,23 +336,23 @@ bool CXWaylandServer::start() { return false; } - xwmFDs[0] = CFileDescriptor{xwmPair[0]}; - xwmFDs[1] = CFileDescriptor{xwmPair[1]}; + m_xwmFDs[0] = CFileDescriptor{xwmPair[0]}; + m_xwmFDs[1] = CFileDescriptor{xwmPair[1]}; - if (!xwmFDs[0].setFlags(xwmFDs[0].getFlags() | FD_CLOEXEC) || !xwmFDs[1].setFlags(xwmFDs[1].getFlags() | FD_CLOEXEC)) { + if (!m_xwmFDs[0].setFlags(m_xwmFDs[0].getFlags() | FD_CLOEXEC) || !m_xwmFDs[1].setFlags(m_xwmFDs[1].getFlags() | FD_CLOEXEC)) { Debug::log(ERR, "set_cloexec failed (2)"); die(); return false; } - xwaylandClient = wl_client_create(g_pCompositor->m_wlDisplay, waylandFDs[0].get()); - if (!xwaylandClient) { + m_xwaylandClient = wl_client_create(g_pCompositor->m_wlDisplay, m_waylandFDs[0].get()); + if (!m_xwaylandClient) { Debug::log(ERR, "wl_client_create failed"); die(); return false; } - waylandFDs[0].take(); // wl_client owns this fd now + m_waylandFDs[0].take(); // wl_client owns this fd now int notify[2] = {-1, -1}; if (pipe(notify) < 0) { @@ -369,8 +369,8 @@ bool CXWaylandServer::start() { return false; } - pipeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, notifyFds[0].get(), WL_EVENT_READABLE, ::xwaylandReady, nullptr); - pipeFd = std::move(notifyFds[0]); + m_pipeSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, notifyFds[0].get(), WL_EVENT_READABLE, ::xwaylandReady, nullptr); + m_pipeFd = std::move(notifyFds[0]); auto serverPID = fork(); if (serverPID < 0) { @@ -400,19 +400,19 @@ int CXWaylandServer::ready(int fd, uint32_t mask) { // if we don't have readable here, it failed if (!(mask & WL_EVENT_READABLE)) { Debug::log(ERR, "Xwayland: startup failed, not setting up xwm"); - g_pXWayland->pServer.reset(); + g_pXWayland->m_server.reset(); return 1; } Debug::log(LOG, "XWayland is ready"); - wl_event_source_remove(pipeSource); - pipeFd.reset(); - pipeSource = nullptr; + wl_event_source_remove(m_pipeSource); + m_pipeFd.reset(); + m_pipeSource = nullptr; // start the wm - if (!g_pXWayland->pWM) - g_pXWayland->pWM = makeUnique(); + if (!g_pXWayland->m_wm) + g_pXWayland->m_wm = makeUnique(); g_pCursorManager->setXWaylandCursor(); diff --git a/src/xwayland/Server.hpp b/src/xwayland/Server.hpp index 553d99ad..7266a9b0 100644 --- a/src/xwayland/Server.hpp +++ b/src/xwayland/Server.hpp @@ -20,29 +20,25 @@ class CXWaylandServer { bool start(); // called on ready - int ready(int fd, uint32_t mask); + int ready(int fd, uint32_t mask); - void die(); + void die(); - struct { - CSignal ready; - } events; - - wl_client* xwaylandClient = nullptr; + wl_client* m_xwaylandClient = nullptr; private: bool tryOpenSockets(); void runXWayland(Hyprutils::OS::CFileDescriptor& notifyFD); - std::string displayName; - int display = -1; - std::array xFDs; - std::array xFDReadEvents = {nullptr, nullptr}; - wl_event_source* idleSource = nullptr; - wl_event_source* pipeSource = nullptr; - Hyprutils::OS::CFileDescriptor pipeFd; - std::array xwmFDs; - std::array waylandFDs; + std::string m_displayName; + int m_display = -1; + std::array m_xFDs; + std::array m_xFDReadEvents = {nullptr, nullptr}; + wl_event_source* m_idleSource = nullptr; + wl_event_source* m_pipeSource = nullptr; + Hyprutils::OS::CFileDescriptor m_pipeFd; + std::array m_xwmFDs; + std::array m_waylandFDs; friend class CXWM; }; diff --git a/src/xwayland/XDataSource.cpp b/src/xwayland/XDataSource.cpp index 14656d8b..ec06c9bc 100644 --- a/src/xwayland/XDataSource.cpp +++ b/src/xwayland/XDataSource.cpp @@ -7,12 +7,12 @@ #include using namespace Hyprutils::OS; -CXDataSource::CXDataSource(SXSelection& sel_) : selection(sel_) { - xcb_get_property_cookie_t cookie = xcb_get_property(g_pXWayland->pWM->connection, +CXDataSource::CXDataSource(SXSelection& sel_) : m_selection(sel_) { + xcb_get_property_cookie_t cookie = xcb_get_property(g_pXWayland->m_wm->m_connection, 1, // delete - selection.window, HYPRATOMS["_WL_SELECTION"], XCB_GET_PROPERTY_TYPE_ANY, 0, 4096); + m_selection.window, HYPRATOMS["_WL_SELECTION"], XCB_GET_PROPERTY_TYPE_ANY, 0, 4096); - xcb_get_property_reply_t* reply = xcb_get_property_reply(g_pXWayland->pWM->connection, cookie, nullptr); + xcb_get_property_reply_t* reply = xcb_get_property_reply(g_pXWayland->m_wm->m_connection, cookie, nullptr); if (!reply) return; @@ -24,28 +24,28 @@ CXDataSource::CXDataSource(SXSelection& sel_) : selection(sel_) { auto value = (xcb_atom_t*)xcb_get_property_value(reply); for (uint32_t i = 0; i < reply->value_len; i++) { if (value[i] == HYPRATOMS["UTF8_STRING"]) - mimeTypes.emplace_back("text/plain;charset=utf-8"); + m_mimeTypes.emplace_back("text/plain;charset=utf-8"); else if (value[i] == HYPRATOMS["TEXT"]) - mimeTypes.emplace_back("text/plain"); + m_mimeTypes.emplace_back("text/plain"); else if (value[i] != HYPRATOMS["TARGETS"] && value[i] != HYPRATOMS["TIMESTAMP"]) { - auto type = g_pXWayland->pWM->mimeFromAtom(value[i]); + auto type = g_pXWayland->m_wm->mimeFromAtom(value[i]); if (type == "INVALID") continue; - mimeTypes.push_back(type); + m_mimeTypes.push_back(type); } else continue; - mimeAtoms.push_back(value[i]); + m_mimeAtoms.push_back(value[i]); } free(reply); } std::vector CXDataSource::mimes() { - return mimeTypes; + return m_mimeTypes; } void CXDataSource::send(const std::string& mime, CFileDescriptor fd) { @@ -56,9 +56,9 @@ void CXDataSource::send(const std::string& mime, CFileDescriptor fd) { else if (mime == "text/plain;charset=utf-8") mimeAtom = HYPRATOMS["UTF8_STRING"]; else { - for (size_t i = 0; i < mimeTypes.size(); ++i) { - if (mimeTypes[i] == mime) { - mimeAtom = mimeAtoms[i]; + for (size_t i = 0; i < m_mimeTypes.size(); ++i) { + if (m_mimeTypes[i] == mime) { + mimeAtom = m_mimeAtoms[i]; break; } } @@ -71,26 +71,26 @@ void CXDataSource::send(const std::string& mime, CFileDescriptor fd) { Debug::log(LOG, "[XDataSource] send with mime {} to fd {}", mime, fd.get()); - auto transfer = makeUnique(selection); - transfer->incomingWindow = xcb_generate_id(g_pXWayland->pWM->connection); + auto transfer = makeUnique(m_selection); + transfer->incomingWindow = xcb_generate_id(g_pXWayland->m_wm->m_connection); const uint32_t MASK = XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE; - xcb_create_window(g_pXWayland->pWM->connection, XCB_COPY_FROM_PARENT, transfer->incomingWindow, g_pXWayland->pWM->screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, - g_pXWayland->pWM->screen->root_visual, XCB_CW_EVENT_MASK, &MASK); + xcb_create_window(g_pXWayland->m_wm->m_connection, XCB_COPY_FROM_PARENT, transfer->incomingWindow, g_pXWayland->m_wm->m_screen->root, 0, 0, 10, 10, 0, + XCB_WINDOW_CLASS_INPUT_OUTPUT, g_pXWayland->m_wm->m_screen->root_visual, XCB_CW_EVENT_MASK, &MASK); xcb_atom_t selection_atom = HYPRATOMS["CLIPBOARD"]; - if (&selection == &g_pXWayland->pWM->primarySelection) + if (&m_selection == &g_pXWayland->m_wm->m_primarySelection) selection_atom = HYPRATOMS["PRIMARY"]; - else if (&selection == &g_pXWayland->pWM->dndSelection) + else if (&m_selection == &g_pXWayland->m_wm->m_dndSelection) selection_atom = HYPRATOMS["XdndSelection"]; - xcb_convert_selection(g_pXWayland->pWM->connection, transfer->incomingWindow, selection_atom, mimeAtom, HYPRATOMS["_WL_SELECTION"], XCB_TIME_CURRENT_TIME); + xcb_convert_selection(g_pXWayland->m_wm->m_connection, transfer->incomingWindow, selection_atom, mimeAtom, HYPRATOMS["_WL_SELECTION"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->pWM->connection); + xcb_flush(g_pXWayland->m_wm->m_connection); //TODO: make CFileDescriptor setflags take SETFL aswell fcntl(fd.get(), F_SETFL, O_WRONLY | O_NONBLOCK); transfer->wlFD = std::move(fd); - selection.transfers.emplace_back(std::move(transfer)); + m_selection.transfers.emplace_back(std::move(transfer)); } void CXDataSource::accepted(const std::string& mime) { diff --git a/src/xwayland/XDataSource.hpp b/src/xwayland/XDataSource.hpp index a61ffcc9..686991d5 100644 --- a/src/xwayland/XDataSource.hpp +++ b/src/xwayland/XDataSource.hpp @@ -17,7 +17,7 @@ class CXDataSource : public IDataSource { virtual eDataSourceType type(); private: - SXSelection& selection; - std::vector mimeTypes; // these two have shared idx - std::vector mimeAtoms; // + SXSelection& m_selection; + std::vector m_mimeTypes; // these two have shared idx + std::vector m_mimeAtoms; // }; diff --git a/src/xwayland/XSurface.cpp b/src/xwayland/XSurface.cpp index 89c65473..949649ae 100644 --- a/src/xwayland/XSurface.cpp +++ b/src/xwayland/XSurface.cpp @@ -9,19 +9,19 @@ #include -CXWaylandSurface::CXWaylandSurface(uint32_t xID_, CBox geometry_, bool OR) : xID(xID_), geometry(geometry_), overrideRedirect(OR) { +CXWaylandSurface::CXWaylandSurface(uint32_t xID_, CBox geometry_, bool OR) : m_xID(xID_), m_geometry(geometry_), m_overrideRedirect(OR) { xcb_res_query_client_ids_cookie_t client_id_cookie = {0}; - if (g_pXWayland->pWM->xres) { - xcb_res_client_id_spec_t spec = {.client = xID, .mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID}; - client_id_cookie = xcb_res_query_client_ids(g_pXWayland->pWM->connection, 1, &spec); + if (g_pXWayland->m_wm->m_xres) { + xcb_res_client_id_spec_t spec = {.client = m_xID, .mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID}; + client_id_cookie = xcb_res_query_client_ids(g_pXWayland->m_wm->m_connection, 1, &spec); } uint32_t values[1]; values[0] = XCB_EVENT_MASK_FOCUS_CHANGE | XCB_EVENT_MASK_PROPERTY_CHANGE; - xcb_change_window_attributes(g_pXWayland->pWM->connection, xID, XCB_CW_EVENT_MASK, values); + xcb_change_window_attributes(g_pXWayland->m_wm->m_connection, m_xID, XCB_CW_EVENT_MASK, values); - if (g_pXWayland->pWM->xres) { - xcb_res_query_client_ids_reply_t* reply = xcb_res_query_client_ids_reply(g_pXWayland->pWM->connection, client_id_cookie, nullptr); + if (g_pXWayland->m_wm->m_xres) { + xcb_res_query_client_ids_reply_t* reply = xcb_res_query_client_ids_reply(g_pXWayland->m_wm->m_connection, client_id_cookie, nullptr); if (!reply) return; @@ -38,101 +38,101 @@ CXWaylandSurface::CXWaylandSurface(uint32_t xID_, CBox geometry_, bool OR) : xID free(reply); return; } - pid = *ppid; + m_pid = *ppid; free(reply); } - events.resourceChange.registerStaticListener([this](void* data, std::any d) { ensureListeners(); }, nullptr); + m_events.resourceChange.registerStaticListener([this](void* data, std::any d) { ensureListeners(); }, nullptr); } void CXWaylandSurface::ensureListeners() { - bool connected = listeners.destroySurface; + bool connected = m_listeners.destroySurface; - if (connected && !surface) { - listeners.destroySurface.reset(); - listeners.commitSurface.reset(); - } else if (!connected && surface) { - listeners.destroySurface = surface->m_events.destroy.registerListener([this](std::any d) { - if (mapped) + if (connected && !m_surface) { + m_listeners.destroySurface.reset(); + m_listeners.commitSurface.reset(); + } else if (!connected && m_surface) { + m_listeners.destroySurface = m_surface->m_events.destroy.registerListener([this](std::any d) { + if (m_mapped) unmap(); - surface.reset(); - listeners.destroySurface.reset(); - listeners.commitSurface.reset(); - events.resourceChange.emit(); + m_surface.reset(); + m_listeners.destroySurface.reset(); + m_listeners.commitSurface.reset(); + m_events.resourceChange.emit(); }); - listeners.commitSurface = surface->m_events.commit.registerListener([this](std::any d) { - if (surface->m_current.texture && !mapped) { + m_listeners.commitSurface = m_surface->m_events.commit.registerListener([this](std::any d) { + if (m_surface->m_current.texture && !m_mapped) { map(); return; } - if (!surface->m_current.texture && mapped) { + if (!m_surface->m_current.texture && m_mapped) { unmap(); return; } - events.commit.emit(); + m_events.commit.emit(); }); } - if (resource) { - listeners.destroyResource = resource->events.destroy.registerListener([this](std::any d) { + if (m_resource) { + m_listeners.destroyResource = m_resource->events.destroy.registerListener([this](std::any d) { unmap(); - surface.reset(); - events.resourceChange.emit(); + m_surface.reset(); + m_events.resourceChange.emit(); }); } } void CXWaylandSurface::map() { - if (mapped) + if (m_mapped) return; - ASSERT(surface); + ASSERT(m_surface); - g_pXWayland->pWM->mappedSurfaces.emplace_back(self); - g_pXWayland->pWM->mappedSurfacesStacking.emplace_back(self); + g_pXWayland->m_wm->m_mappedSurfaces.emplace_back(m_self); + g_pXWayland->m_wm->m_mappedSurfacesStacking.emplace_back(m_self); - mapped = true; - surface->map(); + m_mapped = true; + m_surface->map(); Debug::log(LOG, "XWayland surface {:x} mapping", (uintptr_t)this); - events.map.emit(); + m_events.map.emit(); - g_pXWayland->pWM->updateClientList(); + g_pXWayland->m_wm->updateClientList(); } void CXWaylandSurface::unmap() { - if (!mapped) + if (!m_mapped) return; - ASSERT(surface); + ASSERT(m_surface); - std::erase(g_pXWayland->pWM->mappedSurfaces, self); - std::erase(g_pXWayland->pWM->mappedSurfacesStacking, self); + std::erase(g_pXWayland->m_wm->m_mappedSurfaces, m_self); + std::erase(g_pXWayland->m_wm->m_mappedSurfacesStacking, m_self); - mapped = false; - events.unmap.emit(); - surface->unmap(); + m_mapped = false; + m_events.unmap.emit(); + m_surface->unmap(); Debug::log(LOG, "XWayland surface {:x} unmapping", (uintptr_t)this); - g_pXWayland->pWM->updateClientList(); + g_pXWayland->m_wm->updateClientList(); } void CXWaylandSurface::considerMap() { - if (mapped) + if (m_mapped) return; - if (!surface) { + if (!m_surface) { Debug::log(LOG, "XWayland surface: considerMap, nope, no surface"); return; } - if (surface->m_current.texture) { + if (m_surface->m_current.texture) { Debug::log(LOG, "XWayland surface: considerMap, sure, we have a buffer"); map(); return; @@ -142,7 +142,7 @@ void CXWaylandSurface::considerMap() { } bool CXWaylandSurface::wantsFocus() { - if (atoms.empty()) + if (m_atoms.empty()) return true; const std::array search = { @@ -153,7 +153,7 @@ bool CXWaylandSurface::wantsFocus() { }; for (auto const& searched : search) { - for (auto const& a : atoms) { + for (auto const& a : m_atoms) { if (a == searched) return false; } @@ -163,110 +163,110 @@ bool CXWaylandSurface::wantsFocus() { } void CXWaylandSurface::configure(const CBox& box) { - Vector2D oldSize = geometry.size(); + Vector2D oldSize = m_geometry.size(); - geometry = box; + m_geometry = box; uint32_t mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_BORDER_WIDTH; uint32_t values[] = {box.x, box.y, box.width, box.height, 0}; - xcb_configure_window(g_pXWayland->pWM->connection, xID, mask, values); + xcb_configure_window(g_pXWayland->m_wm->m_connection, m_xID, mask, values); - if (geometry.width == box.width && geometry.height == box.height) { + if (m_geometry.width == box.width && m_geometry.height == box.height) { // ICCCM requires a synthetic event when window size is not changed xcb_configure_notify_event_t e; e.response_type = XCB_CONFIGURE_NOTIFY; - e.event = xID; - e.window = xID; + e.event = m_xID; + e.window = m_xID; e.x = box.x; e.y = box.y; e.width = box.width; e.height = box.height; e.border_width = 0; e.above_sibling = XCB_NONE; - e.override_redirect = overrideRedirect; - xcb_send_event(g_pXWayland->pWM->connection, false, xID, XCB_EVENT_MASK_STRUCTURE_NOTIFY, (const char*)&e); + e.override_redirect = m_overrideRedirect; + xcb_send_event(g_pXWayland->m_wm->m_connection, false, m_xID, XCB_EVENT_MASK_STRUCTURE_NOTIFY, (const char*)&e); } - g_pXWayland->pWM->updateClientList(); + g_pXWayland->m_wm->updateClientList(); - xcb_flush(g_pXWayland->pWM->connection); + xcb_flush(g_pXWayland->m_wm->m_connection); } void CXWaylandSurface::activate(bool activate) { - if (overrideRedirect && !activate) + if (m_overrideRedirect && !activate) return; - g_pXWayland->pWM->activateSurface(self.lock(), activate); + g_pXWayland->m_wm->activateSurface(m_self.lock(), activate); } void CXWaylandSurface::setFullscreen(bool fs) { - fullscreen = fs; - g_pXWayland->pWM->sendState(self.lock()); + m_fullscreen = fs; + g_pXWayland->m_wm->sendState(m_self.lock()); } void CXWaylandSurface::setMinimized(bool mz) { - minimized = mz; - g_pXWayland->pWM->sendState(self.lock()); + m_minimized = mz; + g_pXWayland->m_wm->sendState(m_self.lock()); } void CXWaylandSurface::restackToTop() { uint32_t values[1] = {XCB_STACK_MODE_ABOVE}; - xcb_configure_window(g_pXWayland->pWM->connection, xID, XCB_CONFIG_WINDOW_STACK_MODE, values); + xcb_configure_window(g_pXWayland->m_wm->m_connection, m_xID, XCB_CONFIG_WINDOW_STACK_MODE, values); - auto& stack = g_pXWayland->pWM->mappedSurfacesStacking; - auto it = std::find(stack.begin(), stack.end(), self); + auto& stack = g_pXWayland->m_wm->m_mappedSurfacesStacking; + auto it = std::find(stack.begin(), stack.end(), m_self); if (it != stack.end()) std::rotate(it, it + 1, stack.end()); - g_pXWayland->pWM->updateClientList(); + g_pXWayland->m_wm->updateClientList(); - xcb_flush(g_pXWayland->pWM->connection); + xcb_flush(g_pXWayland->m_wm->m_connection); } void CXWaylandSurface::close() { xcb_client_message_data_t msg = {}; msg.data32[0] = HYPRATOMS["WM_DELETE_WINDOW"]; msg.data32[1] = XCB_CURRENT_TIME; - g_pXWayland->pWM->sendWMMessage(self.lock(), &msg, XCB_EVENT_MASK_NO_EVENT); + g_pXWayland->m_wm->sendWMMessage(m_self.lock(), &msg, XCB_EVENT_MASK_NO_EVENT); } void CXWaylandSurface::setWithdrawn(bool withdrawn_) { - withdrawn = withdrawn_; + m_withdrawn = withdrawn_; std::vector props = {XCB_ICCCM_WM_STATE_NORMAL, XCB_WINDOW_NONE}; - if (withdrawn) + if (m_withdrawn) props[0] = XCB_ICCCM_WM_STATE_WITHDRAWN; - else if (minimized) + else if (m_minimized) props[0] = XCB_ICCCM_WM_STATE_ICONIC; else props[0] = XCB_ICCCM_WM_STATE_NORMAL; - xcb_change_property(g_pXWayland->pWM->connection, XCB_PROP_MODE_REPLACE, xID, HYPRATOMS["WM_STATE"], HYPRATOMS["WM_STATE"], 32, props.size(), props.data()); + xcb_change_property(g_pXWayland->m_wm->m_connection, XCB_PROP_MODE_REPLACE, m_xID, HYPRATOMS["WM_STATE"], HYPRATOMS["WM_STATE"], 32, props.size(), props.data()); } void CXWaylandSurface::ping() { - bool supportsPing = std::ranges::find(protocols, HYPRATOMS["_NET_WM_PING"]) != protocols.end(); + bool supportsPing = std::ranges::find(m_protocols, HYPRATOMS["_NET_WM_PING"]) != m_protocols.end(); if (!supportsPing) { - Debug::log(TRACE, "CXWaylandSurface: XID {} does not support ping, just sending an instant reply", xID); - g_pANRManager->onResponse(self.lock()); + Debug::log(TRACE, "CXWaylandSurface: XID {} does not support ping, just sending an instant reply", m_xID); + g_pANRManager->onResponse(m_self.lock()); return; } xcb_client_message_data_t msg = {}; msg.data32[0] = HYPRATOMS["_NET_WM_PING"]; msg.data32[1] = Time::millis(Time::steadyNow()); - msg.data32[2] = xID; + msg.data32[2] = m_xID; - lastPingSeq = msg.data32[1]; + m_lastPingSeq = msg.data32[1]; - g_pXWayland->pWM->sendWMMessage(self.lock(), &msg, XCB_EVENT_MASK_PROPERTY_CHANGE); + g_pXWayland->m_wm->sendWMMessage(m_self.lock(), &msg, XCB_EVENT_MASK_PROPERTY_CHANGE); } #else -CXWaylandSurface::CXWaylandSurface(uint32_t xID_, CBox geometry_, bool OR) : xID(xID_), geometry(geometry_), overrideRedirect(OR) { +CXWaylandSurface::CXWaylandSurface(uint32_t xID_, CBox geometry_, bool OR) : m_xID(xID_), m_geometry(geometry_), m_overrideRedirect(OR) { ; } diff --git a/src/xwayland/XSurface.hpp b/src/xwayland/XSurface.hpp index 53777c33..dc43acbb 100644 --- a/src/xwayland/XSurface.hpp +++ b/src/xwayland/XSurface.hpp @@ -39,8 +39,8 @@ typedef struct { class CXWaylandSurface { public: - WP surface; - WP resource; + WP m_surface; + WP m_resource; struct { CSignal stateChanged; // maximized, fs, minimized, etc. @@ -57,7 +57,7 @@ class CXWaylandSurface { CSignal commit; CSignal activate; - } events; + } m_events; struct { std::string title; @@ -67,31 +67,32 @@ class CXWaylandSurface { std::optional requestsMaximize; std::optional requestsFullscreen; std::optional requestsMinimize; - } state; + } m_state; - uint32_t xID = 0; - uint64_t wlID = 0; - uint64_t wlSerial = 0; - uint32_t lastPingSeq = 0; - pid_t pid = 0; - CBox geometry; - bool overrideRedirect = false; - bool withdrawn = false; - bool fullscreen = false; - bool maximized = false; - bool minimized = false; - bool mapped = false; - bool modal = false; + uint32_t m_xID = 0; + uint64_t m_wlID = 0; + uint64_t m_wlSerial = 0; + uint32_t m_lastPingSeq = 0; + pid_t m_pid = 0; + CBox m_geometry; + bool m_overrideRedirect = false; + bool m_withdrawn = false; + bool m_fullscreen = false; + bool m_maximized = false; + bool m_minimized = false; + bool m_mapped = false; + bool m_modal = false; - WP parent; - WP self; - std::vector> children; + WP m_parent; + WP m_self; + std::vector> m_children; - UP hints; - UP sizeHints; - std::vector atoms, protocols; - std::string role = ""; - bool transient = false; + UP m_hints; + UP m_sizeHints; + std::vector m_atoms; + std::vector m_protocols; + std::string m_role = ""; + bool m_transient = false; bool wantsFocus(); void configure(const CBox& box); @@ -115,7 +116,7 @@ class CXWaylandSurface { CHyprSignalListener destroyResource; CHyprSignalListener destroySurface; CHyprSignalListener commitSurface; - } listeners; + } m_listeners; friend class CXWM; }; diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index c62758c5..8e4f9a87 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -24,12 +24,12 @@ using namespace Hyprutils::OS; #define INCR_CHUNK_SIZE (64 * 1024) static int onX11Event(int fd, uint32_t mask, void* data) { - return g_pXWayland->pWM->onEvent(fd, mask); + return g_pXWayland->m_wm->onEvent(fd, mask); } SP CXWM::windowForXID(xcb_window_t wid) { - for (auto const& s : surfaces) { - if (s->xID == wid) + for (auto const& s : m_surfaces) { + if (s->m_xID == wid) return s; } @@ -40,8 +40,8 @@ void CXWM::handleCreate(xcb_create_notify_event_t* e) { if (isWMWindow(e->window)) return; - const auto XSURF = surfaces.emplace_back(SP(new CXWaylandSurface(e->window, CBox{e->x, e->y, e->width, e->height}, e->override_redirect))); - XSURF->self = XSURF; + const auto XSURF = m_surfaces.emplace_back(SP(new CXWaylandSurface(e->window, CBox{e->x, e->y, e->width, e->height}, e->override_redirect))); + XSURF->m_self = XSURF; Debug::log(LOG, "[xwm] New XSurface at {:x} with xid of {}", (uintptr_t)XSURF.get(), e->window); const auto WINDOW = CWindow::create(XSURF); @@ -56,8 +56,8 @@ void CXWM::handleDestroy(xcb_destroy_notify_event_t* e) { if (!XSURF) return; - XSURF->events.destroy.emit(); - std::erase_if(surfaces, [XSURF](const auto& other) { return XSURF == other; }); + XSURF->m_events.destroy.emit(); + std::erase_if(m_surfaces, [XSURF](const auto& other) { return XSURF == other; }); } void CXWM::handleConfigureRequest(xcb_configure_request_event_t* e) { @@ -71,9 +71,9 @@ void CXWM::handleConfigureRequest(xcb_configure_request_event_t* e) { if (!(MASK & GEOMETRY)) return; - XSURF->events.configureRequest.emit(CBox{MASK & XCB_CONFIG_WINDOW_X ? e->x : XSURF->geometry.x, MASK & XCB_CONFIG_WINDOW_Y ? e->y : XSURF->geometry.y, - MASK & XCB_CONFIG_WINDOW_WIDTH ? e->width : XSURF->geometry.width, - MASK & XCB_CONFIG_WINDOW_HEIGHT ? e->height : XSURF->geometry.height}); + XSURF->m_events.configureRequest.emit(CBox{MASK & XCB_CONFIG_WINDOW_X ? e->x : XSURF->m_geometry.x, MASK & XCB_CONFIG_WINDOW_Y ? e->y : XSURF->m_geometry.y, + MASK & XCB_CONFIG_WINDOW_WIDTH ? e->width : XSURF->m_geometry.width, + MASK & XCB_CONFIG_WINDOW_HEIGHT ? e->height : XSURF->m_geometry.height}); } void CXWM::handleConfigureNotify(xcb_configure_notify_event_t* e) { @@ -82,12 +82,12 @@ void CXWM::handleConfigureNotify(xcb_configure_notify_event_t* e) { if (!XSURF) return; - if (XSURF->geometry == CBox{e->x, e->y, e->width, e->height}) + if (XSURF->m_geometry == CBox{e->x, e->y, e->width, e->height}) return; - XSURF->geometry = {e->x, e->y, e->width, e->height}; + XSURF->m_geometry = {e->x, e->y, e->width, e->height}; updateOverrideRedirect(XSURF, e->override_redirect); - XSURF->events.setGeometry.emit(); + XSURF->m_events.setGeometry.emit(); } void CXWM::handleMapRequest(xcb_map_request_event_t* e) { @@ -96,20 +96,21 @@ void CXWM::handleMapRequest(xcb_map_request_event_t* e) { if (!XSURF) return; - xcb_map_window(connection, e->window); + xcb_map_window(m_connection, e->window); XSURF->restackToTop(); const bool SMALL = - XSURF->geometry.size() < Vector2D{2, 2} || (XSURF->sizeHints && XSURF->geometry.size() < Vector2D{XSURF->sizeHints->min_width, XSURF->sizeHints->min_height}); - const bool HAS_HINTS = XSURF->sizeHints && Vector2D{XSURF->sizeHints->base_width, XSURF->sizeHints->base_height} > Vector2D{5, 5}; - const auto DESIREDSIZE = HAS_HINTS ? Vector2D{XSURF->sizeHints->base_width, XSURF->sizeHints->base_height} : Vector2D{800, 800}; + XSURF->m_geometry.size() < Vector2D{2, 2} || (XSURF->m_sizeHints && XSURF->m_geometry.size() < Vector2D{XSURF->m_sizeHints->min_width, XSURF->m_sizeHints->min_height}); + const bool HAS_HINTS = XSURF->m_sizeHints && Vector2D{XSURF->m_sizeHints->base_width, XSURF->m_sizeHints->base_height} > Vector2D{5, 5}; + const auto DESIREDSIZE = HAS_HINTS ? Vector2D{XSURF->m_sizeHints->base_width, XSURF->m_sizeHints->base_height} : Vector2D{800, 800}; // if it's too small, configure it. - if (SMALL && !XSURF->overrideRedirect) // default to 800 x 800 - XSURF->configure({XSURF->geometry.pos(), DESIREDSIZE}); + if (SMALL && !XSURF->m_overrideRedirect) // default to 800 x 800 + XSURF->configure({XSURF->m_geometry.pos(), DESIREDSIZE}); - Debug::log(LOG, "[xwm] Mapping window {} in X (geometry {}x{} at {}x{}))", e->window, XSURF->geometry.width, XSURF->geometry.height, XSURF->geometry.x, XSURF->geometry.y); + Debug::log(LOG, "[xwm] Mapping window {} in X (geometry {}x{} at {}x{}))", e->window, XSURF->m_geometry.width, XSURF->m_geometry.height, XSURF->m_geometry.x, + XSURF->m_geometry.y); // read data again. Some apps for some reason fail to send WINDOW_TYPE // this shouldn't happen but does, I prolly fucked up somewhere, this is a band-aid @@ -126,12 +127,12 @@ void CXWM::handleMapNotify(xcb_map_notify_event_t* e) { updateOverrideRedirect(XSURF, e->override_redirect); - if (XSURF->overrideRedirect) + if (XSURF->m_overrideRedirect) return; XSURF->setWithdrawn(false); sendState(XSURF); - xcb_flush(connection); + xcb_flush(m_connection); XSURF->considerMap(); } @@ -145,23 +146,23 @@ void CXWM::handleUnmapNotify(xcb_unmap_notify_event_t* e) { XSURF->unmap(); dissociate(XSURF); - if (XSURF->overrideRedirect) + if (XSURF->m_overrideRedirect) return; XSURF->setWithdrawn(true); sendState(XSURF); - xcb_flush(connection); + xcb_flush(m_connection); } static bool lookupParentExists(SP XSURF, SP prospectiveChild) { std::vector> visited; - while (XSURF->parent) { - if (XSURF->parent == prospectiveChild) + while (XSURF->m_parent) { + if (XSURF->m_parent == prospectiveChild) return true; visited.emplace_back(XSURF); - XSURF = XSURF->parent.lock(); + XSURF = XSURF->m_parent.lock(); if (std::find(visited.begin(), visited.end(), XSURF) != visited.end()) return false; @@ -179,8 +180,8 @@ std::string CXWM::getAtomName(uint32_t atom) { } // Get the name of the atom - auto const atom_name_cookie = xcb_get_atom_name(connection, atom); - auto* atom_name_reply = xcb_get_atom_name_reply(connection, atom_name_cookie, nullptr); + auto const atom_name_cookie = xcb_get_atom_name(m_connection, atom); + auto* atom_name_reply = xcb_get_atom_name_reply(m_connection, atom_name_cookie, nullptr); if (!atom_name_reply) return "Unknown"; @@ -198,90 +199,90 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ propName = getAtomName(atom); if (atom == XCB_ATOM_WM_CLASS) { - size_t len = xcb_get_property_value_length(reply); - char* string = (char*)xcb_get_property_value(reply); - XSURF->state.appid = std::string{string, len}; - if (std::count(XSURF->state.appid.begin(), XSURF->state.appid.end(), '\000') == 2) - XSURF->state.appid = XSURF->state.appid.substr(XSURF->state.appid.find_first_of('\000') + 1); // fuck you X - if (!XSURF->state.appid.empty()) - XSURF->state.appid.pop_back(); - XSURF->events.metadataChanged.emit(); + size_t len = xcb_get_property_value_length(reply); + char* string = (char*)xcb_get_property_value(reply); + XSURF->m_state.appid = std::string{string, len}; + if (std::count(XSURF->m_state.appid.begin(), XSURF->m_state.appid.end(), '\000') == 2) + XSURF->m_state.appid = XSURF->m_state.appid.substr(XSURF->m_state.appid.find_first_of('\000') + 1); // fuck you X + if (!XSURF->m_state.appid.empty()) + XSURF->m_state.appid.pop_back(); + XSURF->m_events.metadataChanged.emit(); } else if (atom == XCB_ATOM_WM_NAME || atom == HYPRATOMS["_NET_WM_NAME"]) { size_t len = xcb_get_property_value_length(reply); char* string = (char*)xcb_get_property_value(reply); if (reply->type != HYPRATOMS["UTF8_STRING"] && reply->type != HYPRATOMS["TEXT"] && reply->type != XCB_ATOM_STRING) return; - XSURF->state.title = std::string{string, len}; - XSURF->events.metadataChanged.emit(); + XSURF->m_state.title = std::string{string, len}; + XSURF->m_events.metadataChanged.emit(); } else if (atom == HYPRATOMS["_NET_WM_WINDOW_TYPE"]) { xcb_atom_t* atomsArr = (xcb_atom_t*)xcb_get_property_value(reply); size_t atomsNo = reply->value_len; - XSURF->atoms.clear(); + XSURF->m_atoms.clear(); for (size_t i = 0; i < atomsNo; ++i) { - XSURF->atoms.push_back(atomsArr[i]); + XSURF->m_atoms.push_back(atomsArr[i]); } } else if (atom == HYPRATOMS["_NET_WM_STATE"]) { xcb_atom_t* atoms = (xcb_atom_t*)xcb_get_property_value(reply); for (uint32_t i = 0; i < reply->value_len; i++) { if (atoms[i] == HYPRATOMS["_NET_WM_STATE_MODAL"]) - XSURF->modal = true; + XSURF->m_modal = true; } } else if (atom == HYPRATOMS["WM_HINTS"]) { if (reply->value_len != 0) { - XSURF->hints = makeUnique(); - xcb_icccm_get_wm_hints_from_reply(XSURF->hints.get(), reply); + XSURF->m_hints = makeUnique(); + xcb_icccm_get_wm_hints_from_reply(XSURF->m_hints.get(), reply); - if (!(XSURF->hints->flags & XCB_ICCCM_WM_HINT_INPUT)) - XSURF->hints->input = true; + if (!(XSURF->m_hints->flags & XCB_ICCCM_WM_HINT_INPUT)) + XSURF->m_hints->input = true; } } else if (atom == HYPRATOMS["WM_WINDOW_ROLE"]) { size_t len = xcb_get_property_value_length(reply); if (len <= 0) - XSURF->role = ""; + XSURF->m_role = ""; else { - XSURF->role = std::string{(char*)xcb_get_property_value(reply), len}; - XSURF->role = XSURF->role.substr(0, XSURF->role.find_first_of('\000')); + XSURF->m_role = std::string{(char*)xcb_get_property_value(reply), len}; + XSURF->m_role = XSURF->m_role.substr(0, XSURF->m_role.find_first_of('\000')); } } else if (atom == XCB_ATOM_WM_TRANSIENT_FOR) { if (reply->type == XCB_ATOM_WINDOW) { - const auto XID = (xcb_window_t*)xcb_get_property_value(reply); - XSURF->transient = XID; + const auto XID = (xcb_window_t*)xcb_get_property_value(reply); + XSURF->m_transient = XID; if (XID) { if (const auto NEWXSURF = windowForXID(*XID); NEWXSURF && !lookupParentExists(XSURF, NEWXSURF)) { - XSURF->parent = NEWXSURF; - NEWXSURF->children.emplace_back(XSURF); + XSURF->m_parent = NEWXSURF; + NEWXSURF->m_children.emplace_back(XSURF); } else Debug::log(LOG, "[xwm] Denying transient because it would create a loop"); } } } else if (atom == HYPRATOMS["WM_NORMAL_HINTS"]) { if (reply->type == HYPRATOMS["WM_SIZE_HINTS"] && reply->value_len > 0) { - XSURF->sizeHints = makeUnique(); - std::memset(XSURF->sizeHints.get(), 0, sizeof(xcb_size_hints_t)); + XSURF->m_sizeHints = makeUnique(); + std::memset(XSURF->m_sizeHints.get(), 0, sizeof(xcb_size_hints_t)); - xcb_icccm_get_wm_size_hints_from_reply(XSURF->sizeHints.get(), reply); + xcb_icccm_get_wm_size_hints_from_reply(XSURF->m_sizeHints.get(), reply); - const int32_t FLAGS = XSURF->sizeHints->flags; + const int32_t FLAGS = XSURF->m_sizeHints->flags; const bool HASMIN = (FLAGS & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE); const bool HASBASE = (FLAGS & XCB_ICCCM_SIZE_HINT_BASE_SIZE); if (!HASMIN && !HASBASE) { - XSURF->sizeHints->min_width = -1; - XSURF->sizeHints->min_height = -1; - XSURF->sizeHints->base_width = -1; - XSURF->sizeHints->base_height = -1; + XSURF->m_sizeHints->min_width = -1; + XSURF->m_sizeHints->min_height = -1; + XSURF->m_sizeHints->base_width = -1; + XSURF->m_sizeHints->base_height = -1; } else if (!HASBASE) { - XSURF->sizeHints->base_width = XSURF->sizeHints->min_width; - XSURF->sizeHints->base_height = XSURF->sizeHints->min_height; + XSURF->m_sizeHints->base_width = XSURF->m_sizeHints->min_width; + XSURF->m_sizeHints->base_height = XSURF->m_sizeHints->min_height; } else if (!HASMIN) { - XSURF->sizeHints->min_width = XSURF->sizeHints->base_width; - XSURF->sizeHints->min_height = XSURF->sizeHints->base_height; + XSURF->m_sizeHints->min_width = XSURF->m_sizeHints->base_width; + XSURF->m_sizeHints->min_height = XSURF->m_sizeHints->base_height; } if (!(FLAGS & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE)) { - XSURF->sizeHints->max_width = -1; - XSURF->sizeHints->max_height = -1; + XSURF->m_sizeHints->max_width = -1; + XSURF->m_sizeHints->max_height = -1; } } } else if (atom == HYPRATOMS["WM_PROTOCOLS"]) { @@ -292,7 +293,7 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ for (size_t i = 0; i < reply->value_len; ++i) { vec.emplace_back(atoms[i]); } - XSURF->protocols = vec; + XSURF->m_protocols = vec; } } else { Debug::log(TRACE, "[xwm] Unhandled prop {} -> {}", atom, propName); @@ -308,8 +309,8 @@ void CXWM::handlePropertyNotify(xcb_property_notify_event_t* e) { if (!XSURF) return; - xcb_get_property_cookie_t cookie = xcb_get_property(connection, 0, XSURF->xID, e->atom, XCB_ATOM_ANY, 0, 2048); - xcb_get_property_reply_t* reply = xcb_get_property_reply(connection, cookie, nullptr); + xcb_get_property_cookie_t cookie = xcb_get_property(m_connection, 0, XSURF->m_xID, e->atom, XCB_ATOM_ANY, 0, 2048); + xcb_get_property_reply_t* reply = xcb_get_property_reply(m_connection, cookie, nullptr); if (!reply) { Debug::log(ERR, "[xwm] Failed to read property notify cookie"); return; @@ -329,39 +330,39 @@ void CXWM::handleClientMessage(xcb_client_message_event_t* e) { std::string propName = getAtomName(e->type); if (e->type == HYPRATOMS["WM_PROTOCOLS"]) { - if (e->data.data32[1] == XSURF->lastPingSeq && e->data.data32[0] == HYPRATOMS["_NET_WM_PING"]) { + if (e->data.data32[1] == XSURF->m_lastPingSeq && e->data.data32[0] == HYPRATOMS["_NET_WM_PING"]) { g_pANRManager->onResponse(XSURF); return; } } else if (e->type == HYPRATOMS["WL_SURFACE_ID"]) { - if (XSURF->surface) { + if (XSURF->m_surface) { Debug::log(WARN, "[xwm] Re-assignment of WL_SURFACE_ID"); dissociate(XSURF); } auto id = e->data.data32[0]; - auto resource = wl_client_get_object(g_pXWayland->pServer->xwaylandClient, id); + auto resource = wl_client_get_object(g_pXWayland->m_server->m_xwaylandClient, id); if (resource) { auto surf = CWLSurfaceResource::fromResource(resource); associate(XSURF, surf); } } else if (e->type == HYPRATOMS["WL_SURFACE_SERIAL"]) { - if (XSURF->wlSerial) { + if (XSURF->m_wlSerial) { Debug::log(WARN, "[xwm] Re-assignment of WL_SURFACE_SERIAL"); dissociate(XSURF); } uint32_t serialLow = e->data.data32[0]; uint32_t serialHigh = e->data.data32[1]; - XSURF->wlSerial = ((uint64_t)serialHigh << 32) | serialLow; + XSURF->m_wlSerial = ((uint64_t)serialHigh << 32) | serialLow; - Debug::log(LOG, "[xwm] surface {:x} requests serial {:x}", (uintptr_t)XSURF.get(), XSURF->wlSerial); + Debug::log(LOG, "[xwm] surface {:x} requests serial {:x}", (uintptr_t)XSURF.get(), XSURF->m_wlSerial); - for (auto const& res : shellResources) { + for (auto const& res : m_shellResources) { if (!res) continue; - if (res->m_serial != XSURF->wlSerial || !XSURF->wlSerial) + if (res->m_serial != XSURF->m_wlSerial || !XSURF->m_wlSerial) continue; associate(XSURF, res->m_surface.lock()); @@ -391,15 +392,15 @@ void CXWM::handleClientMessage(xcb_client_message_event_t* e) { }; if (prop == HYPRATOMS["_NET_WM_STATE_FULLSCREEN"]) - XSURF->state.requestsFullscreen = updateState(action, XSURF->fullscreen); + XSURF->m_state.requestsFullscreen = updateState(action, XSURF->m_fullscreen); } - XSURF->events.stateChanged.emit(); + XSURF->m_events.stateChanged.emit(); } } else if (e->type == HYPRATOMS["_NET_ACTIVE_WINDOW"]) { - XSURF->events.activate.emit(); + XSURF->m_events.activate.emit(); } else if (e->type == HYPRATOMS["XdndStatus"]) { - if (dndDataOffers.empty() || !dndDataOffers.at(0)->getSource()) { + if (m_dndDataOffers.empty() || !m_dndDataOffers.at(0)->getSource()) { Debug::log(TRACE, "[xwm] Rejecting XdndStatus message: nothing to get"); return; } @@ -408,16 +409,16 @@ void CXWM::handleClientMessage(xcb_client_message_event_t* e) { const bool ACCEPTED = data->data32[1] & 1; if (ACCEPTED) - dndDataOffers.at(0)->getSource()->accepted(""); + m_dndDataOffers.at(0)->getSource()->accepted(""); Debug::log(LOG, "[xwm] XdndStatus: accepted: {}"); } else if (e->type == HYPRATOMS["XdndFinished"]) { - if (dndDataOffers.empty() || !dndDataOffers.at(0)->getSource()) { + if (m_dndDataOffers.empty() || !m_dndDataOffers.at(0)->getSource()) { Debug::log(TRACE, "[xwm] Rejecting XdndFinished message: nothing to get"); return; } - dndDataOffers.at(0)->getSource()->sendDndFinished(); + m_dndDataOffers.at(0)->getSource()->sendDndFinished(); Debug::log(LOG, "[xwm] XdndFinished"); } else { @@ -437,10 +438,10 @@ void CXWM::handleFocusIn(xcb_focus_in_event_t* e) { if (!XSURF) return; - if (focusedSurface && focusedSurface->pid == XSURF->pid && e->sequence - lastFocusSeq <= 255) + if (m_focusedSurface && m_focusedSurface->m_pid == XSURF->m_pid && e->sequence - m_lastFocusSeq <= 255) focusWindow(XSURF); else - focusWindow(focusedSurface.lock()); + focusWindow(m_focusedSurface.lock()); } void CXWM::handleFocusOut(xcb_focus_out_event_t* e) { @@ -451,8 +452,8 @@ void CXWM::handleFocusOut(xcb_focus_out_event_t* e) { if (!XSURF) return; - Debug::log(TRACE, "[xwm] focusOut for {} {} {} surface {}", XSURF->mapped ? "mapped" : "unmapped", XSURF->fullscreen ? "fullscreen" : "windowed", - XSURF == focusedSurface ? "focused" : "unfocused", XSURF->state.title); + Debug::log(TRACE, "[xwm] focusOut for {} {} {} surface {}", XSURF->m_mapped ? "mapped" : "unmapped", XSURF->m_fullscreen ? "fullscreen" : "windowed", + XSURF == m_focusedSurface ? "focused" : "unfocused", XSURF->m_state.title); // do something? } @@ -462,63 +463,63 @@ void CXWM::sendWMMessage(SP surf, xcb_client_message_data_t* d .response_type = XCB_CLIENT_MESSAGE, .format = 32, .sequence = 0, - .window = surf->xID, + .window = surf->m_xID, .type = HYPRATOMS["WM_PROTOCOLS"], .data = *data, }; - xcb_send_event(connection, 0, surf->xID, mask, (const char*)&event); - xcb_flush(connection); + xcb_send_event(m_connection, 0, surf->m_xID, mask, (const char*)&event); + xcb_flush(m_connection); } void CXWM::focusWindow(SP surf) { - if (surf == focusedSurface) + if (surf == m_focusedSurface) return; - focusedSurface = surf; + m_focusedSurface = surf; // send state to all toplevel surfaces, sometimes we might lose some // that could still stick with the focused atom - for (auto const& s : mappedSurfaces) { - if (!s || s->overrideRedirect) + for (auto const& s : m_mappedSurfaces) { + if (!s || s->m_overrideRedirect) continue; sendState(s.lock()); } if (!surf) { - xcb_set_input_focus_checked(connection, XCB_INPUT_FOCUS_POINTER_ROOT, XCB_NONE, XCB_CURRENT_TIME); + xcb_set_input_focus_checked(m_connection, XCB_INPUT_FOCUS_POINTER_ROOT, XCB_NONE, XCB_CURRENT_TIME); return; } - if (surf->overrideRedirect) + if (surf->m_overrideRedirect) return; xcb_client_message_data_t msg = {{0}}; msg.data32[0] = HYPRATOMS["WM_TAKE_FOCUS"]; msg.data32[1] = XCB_TIME_CURRENT_TIME; - if (surf->hints && !surf->hints->input) + if (surf->m_hints && !surf->m_hints->input) sendWMMessage(surf, &msg, XCB_EVENT_MASK_NO_EVENT); else { sendWMMessage(surf, &msg, XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT); - xcb_void_cookie_t cookie = xcb_set_input_focus(connection, XCB_INPUT_FOCUS_POINTER_ROOT, surf->xID, XCB_CURRENT_TIME); - lastFocusSeq = cookie.sequence; + xcb_void_cookie_t cookie = xcb_set_input_focus(m_connection, XCB_INPUT_FOCUS_POINTER_ROOT, surf->m_xID, XCB_CURRENT_TIME); + m_lastFocusSeq = cookie.sequence; } } void CXWM::handleError(xcb_value_error_t* e) { - const char* major_name = xcb_errors_get_name_for_major_code(errors, e->major_opcode); + const char* major_name = xcb_errors_get_name_for_major_code(m_errors, e->major_opcode); if (!major_name) { Debug::log(ERR, "xcb error happened, but could not get major name"); return; } - const char* minor_name = xcb_errors_get_name_for_minor_code(errors, e->major_opcode, e->minor_opcode); + const char* minor_name = xcb_errors_get_name_for_minor_code(m_errors, e->major_opcode, e->minor_opcode); const char* extension; - const char* error_name = xcb_errors_get_name_for_error(errors, e->error_code, &extension); + const char* error_name = xcb_errors_get_name_for_error(m_errors, e->error_code, &extension); if (!error_name) { Debug::log(ERR, "xcb error happened, but could not get error name"); return; @@ -539,8 +540,8 @@ void CXWM::selectionSendNotify(xcb_selection_request_event_t* e, bool success) { .property = success ? e->property : (uint32_t)XCB_ATOM_NONE, }; - xcb_send_event(connection, 0, e->requestor, XCB_EVENT_MASK_NO_EVENT, (const char*)&selection_notify); - xcb_flush(connection); + xcb_send_event(m_connection, 0, e->requestor, XCB_EVENT_MASK_NO_EVENT, (const char*)&selection_notify); + xcb_flush(m_connection); } xcb_atom_t CXWM::mimeToAtom(const std::string& mime) { @@ -549,8 +550,8 @@ xcb_atom_t CXWM::mimeToAtom(const std::string& mime) { if (mime == "text/plain") return HYPRATOMS["TEXT"]; - xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, 0, mime.length(), mime.c_str()); - xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(connection, cookie, nullptr); + xcb_intern_atom_cookie_t cookie = xcb_intern_atom(m_connection, 0, mime.length(), mime.c_str()); + xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(m_connection, cookie, nullptr); if (!reply) return XCB_ATOM_NONE; xcb_atom_t atom = reply->atom; @@ -564,8 +565,8 @@ std::string CXWM::mimeFromAtom(xcb_atom_t atom) { if (atom == HYPRATOMS["TEXT"]) return "text/plain"; - xcb_get_atom_name_cookie_t cookie = xcb_get_atom_name(connection, atom); - xcb_get_atom_name_reply_t* reply = xcb_get_atom_name_reply(connection, cookie, nullptr); + xcb_get_atom_name_cookie_t cookie = xcb_get_atom_name(m_connection, atom); + xcb_get_atom_name_reply_t* reply = xcb_get_atom_name_reply(m_connection, cookie, nullptr); if (!reply) return "INVALID"; size_t len = xcb_get_atom_name_name_length(reply); @@ -587,7 +588,7 @@ void CXWM::handleSelectionNotify(xcb_selection_notify_event_t* e) { sel->transfers.erase(it); } } else if (e->target == HYPRATOMS["TARGETS"]) { - if (!focusedSurface) { + if (!m_focusedSurface) { Debug::log(TRACE, "[xwm] denying access to write to clipboard because no X client is in focus"); return; } @@ -601,7 +602,7 @@ bool CXWM::handleSelectionPropertyNotify(xcb_property_notify_event_t* e) { if (e->state != XCB_PROPERTY_DELETE) return false; - for (auto* sel : {&clipboard, &primarySelection}) { + for (auto* sel : {&m_clipboard, &m_primarySelection}) { auto it = std::ranges::find_if(sel->transfers, [e](const auto& t) { return t->incomingWindow == e->window; }); if (it != sel->transfers.end()) { if (!(*it)->getIncomingSelectionProp(true)) { @@ -618,11 +619,11 @@ bool CXWM::handleSelectionPropertyNotify(xcb_property_notify_event_t* e) { SXSelection* CXWM::getSelection(xcb_atom_t atom) { if (atom == HYPRATOMS["CLIPBOARD"]) - return &clipboard; + return &m_clipboard; else if (atom == HYPRATOMS["PRIMARY"]) - return &primarySelection; + return &m_primarySelection; else if (atom == HYPRATOMS["XdndSelection"]) - return &dndSelection; + return &m_dndSelection; return nullptr; } @@ -650,7 +651,7 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) { return; } - if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) { + if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->m_server->m_xwaylandClient) { Debug::log(TRACE, "[xwm] Ignoring clipboard access: xwayland not in focus"); selectionSendNotify(e, false); return; @@ -659,10 +660,10 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) { if (e->target == HYPRATOMS["TARGETS"]) { // send mime types std::vector mimes; - if (sel == &clipboard && g_pSeatManager->m_selection.currentSelection) + if (sel == &m_clipboard && g_pSeatManager->m_selection.currentSelection) mimes = g_pSeatManager->m_selection.currentSelection->mimes(); - else if (sel == &dndSelection && !dndDataOffers.empty() && dndDataOffers.at(0)->source) - mimes = dndDataOffers.at(0)->source->mimes(); + else if (sel == &m_dndSelection && !m_dndDataOffers.empty() && m_dndDataOffers.at(0)->m_source) + mimes = m_dndDataOffers.at(0)->m_source->mimes(); if (mimes.empty()) Debug::log(WARN, "[xwm] WARNING: No mimes in TARGETS?"); @@ -677,10 +678,10 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) { atoms.push_back(mimeToAtom(m)); } - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, e->requestor, e->property, XCB_ATOM_ATOM, 32, atoms.size(), atoms.data()); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, e->requestor, e->property, XCB_ATOM_ATOM, 32, atoms.size(), atoms.data()); selectionSendNotify(e, true); } else if (e->target == HYPRATOMS["TIMESTAMP"]) { - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, e->requestor, e->property, XCB_ATOM_INTEGER, 32, 1, &sel->timestamp); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, e->requestor, e->property, XCB_ATOM_INTEGER, 32, 1, &sel->timestamp); selectionSendNotify(e, true); } else if (e->target == HYPRATOMS["DELETE"]) { selectionSendNotify(e, true); @@ -707,14 +708,14 @@ bool CXWM::handleSelectionXFixesNotify(xcb_xfixes_selection_notify_event_t* e) { // IMPORTANT: mind the g_pSeatManager below SXSelection* sel = getSelection(e->selection); - if (sel == &dndSelection) + if (sel == &m_dndSelection) return true; if (e->owner == XCB_WINDOW_NONE) { if (sel->owner != sel->window) { - if (sel == &clipboard) + if (sel == &m_clipboard) g_pSeatManager->setCurrentSelection(nullptr); - else if (sel == &primarySelection) + else if (sel == &m_primarySelection) g_pSeatManager->setCurrentPrimarySelection(nullptr); } @@ -729,11 +730,11 @@ bool CXWM::handleSelectionXFixesNotify(xcb_xfixes_selection_notify_event_t* e) { return true; } - if (sel == &clipboard) - xcb_convert_selection(connection, sel->window, HYPRATOMS["CLIPBOARD"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); - else if (sel == &primarySelection) - xcb_convert_selection(connection, sel->window, HYPRATOMS["PRIMARY"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); - xcb_flush(connection); + if (sel == &m_clipboard) + xcb_convert_selection(m_connection, sel->window, HYPRATOMS["CLIPBOARD"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); + else if (sel == &m_primarySelection) + xcb_convert_selection(m_connection, sel->window, HYPRATOMS["PRIMARY"], HYPRATOMS["TARGETS"], HYPRATOMS["_WL_SELECTION"], e->timestamp); + xcb_flush(m_connection); return true; } @@ -753,7 +754,7 @@ bool CXWM::handleSelectionEvent(xcb_generic_event_t* e) { } } - if (e->response_type - xfixes->first_event == XCB_XFIXES_SELECTION_NOTIFY) + if (e->response_type - m_xfixes->first_event == XCB_XFIXES_SELECTION_NOTIFY) return handleSelectionXFixesNotify((xcb_xfixes_selection_notify_event_t*)e); return 0; @@ -764,8 +765,8 @@ int CXWM::onEvent(int fd, uint32_t mask) { if ((mask & WL_EVENT_HANGUP) || (mask & WL_EVENT_ERROR)) { Debug::log(ERR, "XWayland has yeeten the xwm off?!"); Debug::log(CRIT, "XWayland has yeeten the xwm off?!"); - g_pXWayland->pWM.reset(); - g_pXWayland->pServer.reset(); + g_pXWayland->m_wm.reset(); + g_pXWayland->m_server.reset(); // Attempt to create fresh instance g_pEventLoopManager->doLater([]() { g_pXWayland = makeUnique(true); }); return 0; @@ -774,7 +775,7 @@ int CXWM::onEvent(int fd, uint32_t mask) { int count = 0; while (42069) { - xcb_generic_event_t* event = xcb_poll_for_event(connection); + xcb_generic_event_t* event = xcb_poll_for_event(m_connection); if (!event) break; @@ -806,19 +807,19 @@ int CXWM::onEvent(int fd, uint32_t mask) { } if (count) - xcb_flush(connection); + xcb_flush(m_connection); return count; } void CXWM::gatherResources() { - xcb_prefetch_extension_data(connection, &xcb_xfixes_id); - xcb_prefetch_extension_data(connection, &xcb_composite_id); - xcb_prefetch_extension_data(connection, &xcb_res_id); + xcb_prefetch_extension_data(m_connection, &xcb_xfixes_id); + xcb_prefetch_extension_data(m_connection, &xcb_composite_id); + xcb_prefetch_extension_data(m_connection, &xcb_res_id); for (auto& ATOM : HYPRATOMS) { - xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, 0, ATOM.first.length(), ATOM.first.c_str()); - xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(connection, cookie, nullptr); + xcb_intern_atom_cookie_t cookie = xcb_intern_atom(m_connection, 0, ATOM.first.length(), ATOM.first.c_str()); + xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(m_connection, cookie, nullptr); if (!reply) { Debug::log(ERR, "[xwm] Atom failed: {}", ATOM.first); @@ -829,33 +830,33 @@ void CXWM::gatherResources() { free(reply); } - xfixes = xcb_get_extension_data(connection, &xcb_xfixes_id); + m_xfixes = xcb_get_extension_data(m_connection, &xcb_xfixes_id); - if (!xfixes || !xfixes->present) + if (!m_xfixes || !m_xfixes->present) Debug::log(WARN, "XFixes not available"); xcb_xfixes_query_version_cookie_t xfixes_cookie; xcb_xfixes_query_version_reply_t* xfixes_reply; - xfixes_cookie = xcb_xfixes_query_version(connection, XCB_XFIXES_MAJOR_VERSION, XCB_XFIXES_MINOR_VERSION); - xfixes_reply = xcb_xfixes_query_version_reply(connection, xfixes_cookie, nullptr); + xfixes_cookie = xcb_xfixes_query_version(m_connection, XCB_XFIXES_MAJOR_VERSION, XCB_XFIXES_MINOR_VERSION); + xfixes_reply = xcb_xfixes_query_version_reply(m_connection, xfixes_cookie, nullptr); Debug::log(LOG, "xfixes version: {}.{}", xfixes_reply->major_version, xfixes_reply->minor_version); - xfixesMajor = xfixes_reply->major_version; + m_xfixesMajor = xfixes_reply->major_version; free(xfixes_reply); - const xcb_query_extension_reply_t* xresReply1 = xcb_get_extension_data(connection, &xcb_res_id); + const xcb_query_extension_reply_t* xresReply1 = xcb_get_extension_data(m_connection, &xcb_res_id); if (!xresReply1 || !xresReply1->present) return; - xcb_res_query_version_cookie_t xres_cookie = xcb_res_query_version(connection, XCB_RES_MAJOR_VERSION, XCB_RES_MINOR_VERSION); - xcb_res_query_version_reply_t* xres_reply = xcb_res_query_version_reply(connection, xres_cookie, nullptr); + xcb_res_query_version_cookie_t xres_cookie = xcb_res_query_version(m_connection, XCB_RES_MAJOR_VERSION, XCB_RES_MINOR_VERSION); + xcb_res_query_version_reply_t* xres_reply = xcb_res_query_version_reply(m_connection, xres_cookie, nullptr); if (xres_reply == nullptr) return; Debug::log(LOG, "xres version: {}.{}", xres_reply->server_major, xres_reply->server_minor); if (xres_reply->server_major > 1 || (xres_reply->server_major == 1 && xres_reply->server_minor >= 2)) { - xres = xresReply1; + m_xres = xresReply1; } free(xres_reply); } @@ -865,7 +866,7 @@ void CXWM::getVisual() { xcb_visualtype_iterator_t vt_iter; xcb_visualtype_t* visualtype; - d_iter = xcb_screen_allowed_depths_iterator(screen); + d_iter = xcb_screen_allowed_depths_iterator(m_screen); visualtype = nullptr; while (d_iter.rem > 0) { if (d_iter.data->depth == 32) { @@ -882,14 +883,14 @@ void CXWM::getVisual() { return; } - visual_id = visualtype->visual_id; - colormap = xcb_generate_id(connection); - xcb_create_colormap(connection, XCB_COLORMAP_ALLOC_NONE, colormap, screen->root, visual_id); + m_visualID = visualtype->visual_id; + m_colormap = xcb_generate_id(m_connection); + xcb_create_colormap(m_connection, XCB_COLORMAP_ALLOC_NONE, m_colormap, m_screen->root, m_visualID); } void CXWM::getRenderFormat() { - xcb_render_query_pict_formats_cookie_t cookie = xcb_render_query_pict_formats(connection); - xcb_render_query_pict_formats_reply_t* reply = xcb_render_query_pict_formats_reply(connection, cookie, nullptr); + xcb_render_query_pict_formats_cookie_t cookie = xcb_render_query_pict_formats(m_connection); + xcb_render_query_pict_formats_reply_t* reply = xcb_render_query_pict_formats_reply(m_connection, cookie, nullptr); if (!reply) { Debug::log(LOG, "xwm: No xcb_render_query_pict_formats_reply_t reply"); return; @@ -911,30 +912,30 @@ void CXWM::getRenderFormat() { return; } - render_format_id = format->id; + m_renderFormatID = format->id; free(reply); } -CXWM::CXWM() : connection(g_pXWayland->pServer->xwmFDs[0].get()) { +CXWM::CXWM() : m_connection(g_pXWayland->m_server->m_xwmFDs[0].get()) { - if (connection.hasError()) { - Debug::log(ERR, "[xwm] Couldn't start, error {}", connection.hasError()); + if (m_connection.hasError()) { + Debug::log(ERR, "[xwm] Couldn't start, error {}", m_connection.hasError()); return; } - CXCBErrorContext xcbErrCtx(connection); + CXCBErrorContext xcbErrCtx(m_connection); if (!xcbErrCtx.isValid()) { Debug::log(ERR, "[xwm] Couldn't allocate errors context"); return; } - dndDataDevice->self = dndDataDevice; + m_dndDataDevice->m_self = m_dndDataDevice; - xcb_screen_iterator_t screen_iterator = xcb_setup_roots_iterator(xcb_get_setup(connection)); - screen = screen_iterator.data; + xcb_screen_iterator_t screen_iterator = xcb_setup_roots_iterator(xcb_get_setup(m_connection)); + m_screen = screen_iterator.data; - eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, g_pXWayland->pServer->xwmFDs[0].get(), WL_EVENT_READABLE, ::onX11Event, nullptr); - wl_event_source_check(eventSource); + m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, g_pXWayland->m_server->m_xwmFDs[0].get(), WL_EVENT_READABLE, ::onX11Event, nullptr); + wl_event_source_check(m_eventSource); gatherResources(); getVisual(); @@ -943,114 +944,115 @@ CXWM::CXWM() : connection(g_pXWayland->pServer->xwmFDs[0].get()) { uint32_t values[] = { XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | XCB_EVENT_MASK_PROPERTY_CHANGE, }; - xcb_change_window_attributes(connection, screen->root, XCB_CW_EVENT_MASK, values); + xcb_change_window_attributes(m_connection, m_screen->root, XCB_CW_EVENT_MASK, values); - xcb_composite_redirect_subwindows(connection, screen->root, XCB_COMPOSITE_REDIRECT_MANUAL); + xcb_composite_redirect_subwindows(m_connection, m_screen->root, XCB_COMPOSITE_REDIRECT_MANUAL); xcb_atom_t supported[] = { HYPRATOMS["_NET_WM_STATE"], HYPRATOMS["_NET_ACTIVE_WINDOW"], HYPRATOMS["_NET_WM_MOVERESIZE"], HYPRATOMS["_NET_WM_STATE_FOCUSED"], HYPRATOMS["_NET_WM_STATE_MODAL"], HYPRATOMS["_NET_WM_STATE_FULLSCREEN"], HYPRATOMS["_NET_WM_STATE_MAXIMIZED_VERT"], HYPRATOMS["_NET_WM_STATE_MAXIMIZED_HORZ"], HYPRATOMS["_NET_WM_STATE_HIDDEN"], HYPRATOMS["_NET_CLIENT_LIST"], HYPRATOMS["_NET_CLIENT_LIST_STACKING"], }; - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_SUPPORTED"], XCB_ATOM_ATOM, 32, sizeof(supported) / sizeof(*supported), supported); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_screen->root, HYPRATOMS["_NET_SUPPORTED"], XCB_ATOM_ATOM, 32, sizeof(supported) / sizeof(*supported), supported); setActiveWindow(XCB_WINDOW_NONE); initSelection(); - listeners.newWLSurface = PROTO::compositor->m_events.newSurface.registerListener([this](std::any d) { onNewSurface(std::any_cast>(d)); }); - listeners.newXShellSurface = PROTO::xwaylandShell->m_events.newSurface.registerListener([this](std::any d) { onNewResource(std::any_cast>(d)); }); + m_listeners.newWLSurface = PROTO::compositor->m_events.newSurface.registerListener([this](std::any d) { onNewSurface(std::any_cast>(d)); }); + m_listeners.newXShellSurface = + PROTO::xwaylandShell->m_events.newSurface.registerListener([this](std::any d) { onNewResource(std::any_cast>(d)); }); createWMWindow(); - xcb_flush(connection); + xcb_flush(m_connection); } CXWM::~CXWM() { - if (eventSource) - wl_event_source_remove(eventSource); + if (m_eventSource) + wl_event_source_remove(m_eventSource); - for (auto const& sr : surfaces) { - sr->events.destroy.emit(); + for (auto const& sr : m_surfaces) { + sr->m_events.destroy.emit(); } } void CXWM::setActiveWindow(xcb_window_t window) { - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_ACTIVE_WINDOW"], HYPRATOMS["WINDOW"], 32, 1, &window); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_screen->root, HYPRATOMS["_NET_ACTIVE_WINDOW"], HYPRATOMS["WINDOW"], 32, 1, &window); } void CXWM::createWMWindow() { constexpr const char* wmName = "Hyprland :D"; - wmWindow = xcb_generate_id(connection); - xcb_create_window(connection, XCB_COPY_FROM_PARENT, wmWindow, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, 0, nullptr); - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, wmWindow, HYPRATOMS["_NET_WM_NAME"], HYPRATOMS["UTF8_STRING"], + m_wmWindow = xcb_generate_id(m_connection); + xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_wmWindow, m_screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, 0, nullptr); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_wmWindow, HYPRATOMS["_NET_WM_NAME"], HYPRATOMS["UTF8_STRING"], 8, // format strlen(wmName), wmName); - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_SUPPORTING_WM_CHECK"], XCB_ATOM_WINDOW, + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_screen->root, HYPRATOMS["_NET_SUPPORTING_WM_CHECK"], XCB_ATOM_WINDOW, 32, // format - 1, &wmWindow); - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, wmWindow, HYPRATOMS["_NET_SUPPORTING_WM_CHECK"], XCB_ATOM_WINDOW, + 1, &m_wmWindow); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_wmWindow, HYPRATOMS["_NET_SUPPORTING_WM_CHECK"], XCB_ATOM_WINDOW, 32, // format - 1, &wmWindow); - xcb_set_selection_owner(connection, wmWindow, HYPRATOMS["WM_S0"], XCB_CURRENT_TIME); - xcb_set_selection_owner(connection, wmWindow, HYPRATOMS["_NET_WM_CM_S0"], XCB_CURRENT_TIME); + 1, &m_wmWindow); + xcb_set_selection_owner(m_connection, m_wmWindow, HYPRATOMS["WM_S0"], XCB_CURRENT_TIME); + xcb_set_selection_owner(m_connection, m_wmWindow, HYPRATOMS["_NET_WM_CM_S0"], XCB_CURRENT_TIME); } void CXWM::activateSurface(SP surf, bool activate) { - if ((surf == focusedSurface && activate) || (surf && surf->overrideRedirect)) + if ((surf == m_focusedSurface && activate) || (surf && surf->m_overrideRedirect)) return; if (!surf || (!activate && g_pCompositor->m_lastWindow && !g_pCompositor->m_lastWindow->m_isX11)) { setActiveWindow((uint32_t)XCB_WINDOW_NONE); focusWindow(nullptr); } else { - setActiveWindow(surf ? surf->xID : (uint32_t)XCB_WINDOW_NONE); + setActiveWindow(surf ? surf->m_xID : (uint32_t)XCB_WINDOW_NONE); focusWindow(surf); } - xcb_flush(connection); + xcb_flush(m_connection); } void CXWM::sendState(SP surf) { - Debug::log(TRACE, "[xwm] sendState for {} {} {} surface {}", surf->mapped ? "mapped" : "unmapped", surf->fullscreen ? "fullscreen" : "windowed", - surf == focusedSurface ? "focused" : "unfocused", surf->state.title); - if (surf->fullscreen && surf->mapped && surf == focusedSurface) + Debug::log(TRACE, "[xwm] sendState for {} {} {} surface {}", surf->m_mapped ? "mapped" : "unmapped", surf->m_fullscreen ? "fullscreen" : "windowed", + surf == m_focusedSurface ? "focused" : "unfocused", surf->m_state.title); + if (surf->m_fullscreen && surf->m_mapped && surf == m_focusedSurface) surf->setWithdrawn(false); // resend normal state - if (surf->withdrawn) { - xcb_delete_property(connection, surf->xID, HYPRATOMS["_NET_WM_STATE"]); + if (surf->m_withdrawn) { + xcb_delete_property(m_connection, surf->m_xID, HYPRATOMS["_NET_WM_STATE"]); return; } std::vector props; // reserve to avoid reallocations props.reserve(6); // props below - if (surf->modal) + if (surf->m_modal) props.push_back(HYPRATOMS["_NET_WM_STATE_MODAL"]); - if (surf->fullscreen) + if (surf->m_fullscreen) props.push_back(HYPRATOMS["_NET_WM_STATE_FULLSCREEN"]); - if (surf->maximized) { + if (surf->m_maximized) { props.push_back(HYPRATOMS["NET_WM_STATE_MAXIMIZED_VERT"]); props.push_back(HYPRATOMS["NET_WM_STATE_MAXIMIZED_HORZ"]); } - if (surf->minimized) + if (surf->m_minimized) props.push_back(HYPRATOMS["_NET_WM_STATE_HIDDEN"]); - if (surf == focusedSurface) + if (surf == m_focusedSurface) props.push_back(HYPRATOMS["_NET_WM_STATE_FOCUSED"]); - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, surf->xID, HYPRATOMS["_NET_WM_STATE"], XCB_ATOM_ATOM, 32, props.size(), props.data()); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, surf->m_xID, HYPRATOMS["_NET_WM_STATE"], XCB_ATOM_ATOM, 32, props.size(), props.data()); } void CXWM::onNewSurface(SP surf) { - if (surf->client() != g_pXWayland->pServer->xwaylandClient) + if (surf->client() != g_pXWayland->m_server->m_xwaylandClient) return; Debug::log(LOG, "[xwm] New XWayland surface at {:x}", (uintptr_t)surf.get()); const auto WLID = surf->id(); - for (auto const& sr : surfaces) { - if (sr->surface || sr->wlID != WLID) + for (auto const& sr : m_surfaces) { + if (sr->m_surface || sr->m_wlID != WLID) continue; associate(sr, surf); @@ -1063,11 +1065,11 @@ void CXWM::onNewSurface(SP surf) { void CXWM::onNewResource(SP resource) { Debug::log(LOG, "[xwm] New XWayland resource at {:x}", (uintptr_t)resource.get()); - std::erase_if(shellResources, [](const auto& e) { return e.expired(); }); - shellResources.emplace_back(resource); + std::erase_if(m_shellResources, [](const auto& e) { return e.expired(); }); + m_shellResources.emplace_back(resource); - for (auto const& surf : surfaces) { - if (surf->resource || surf->wlSerial != resource->m_serial) + for (auto const& surf : m_surfaces) { + if (surf->m_resource || surf->m_wlSerial != resource->m_serial) continue; associate(surf, resource->m_surface.lock()); @@ -1083,8 +1085,8 @@ void CXWM::readWindowData(SP surf) { }; for (size_t i = 0; i < interestingProps.size(); i++) { - xcb_get_property_cookie_t cookie = xcb_get_property(connection, 0, surf->xID, interestingProps[i], XCB_ATOM_ANY, 0, 2048); - xcb_get_property_reply_t* reply = xcb_get_property_reply(connection, cookie, nullptr); + xcb_get_property_cookie_t cookie = xcb_get_property(m_connection, 0, surf->m_xID, interestingProps[i], XCB_ATOM_ANY, 0, 2048); + xcb_get_property_reply_t* reply = xcb_get_property_reply(m_connection, cookie, nullptr); if (!reply) { Debug::log(ERR, "[xwm] Failed to get window property"); continue; @@ -1095,8 +1097,8 @@ void CXWM::readWindowData(SP surf) { } SP CXWM::windowForWayland(SP surf) { - for (auto& s : surfaces) { - if (s->surface == surf) + for (auto& s : m_surfaces) { + if (s->m_surface == surf) return s; } @@ -1104,100 +1106,100 @@ SP CXWM::windowForWayland(SP surf) { } void CXWM::associate(SP surf, SP wlSurf) { - if (surf->surface) + if (surf->m_surface) return; - auto existing = std::find_if(surfaces.begin(), surfaces.end(), [wlSurf](const auto& e) { return e->surface == wlSurf; }); + auto existing = std::find_if(m_surfaces.begin(), m_surfaces.end(), [wlSurf](const auto& e) { return e->m_surface == wlSurf; }); - if (existing != surfaces.end()) { + if (existing != m_surfaces.end()) { Debug::log(WARN, "[xwm] associate() called but surface is already associated to {:x}, ignoring...", (uintptr_t)surf.get()); return; } - surf->surface = wlSurf; + surf->m_surface = wlSurf; surf->ensureListeners(); readWindowData(surf); - surf->events.resourceChange.emit(); + surf->m_events.resourceChange.emit(); } void CXWM::dissociate(SP surf) { - if (!surf->surface) + if (!surf->m_surface) return; - if (surf->mapped) + if (surf->m_mapped) surf->unmap(); - surf->surface.reset(); - surf->events.resourceChange.emit(); + surf->m_surface.reset(); + surf->m_events.resourceChange.emit(); Debug::log(LOG, "Dissociate for {:x}", (uintptr_t)surf.get()); } void CXWM::updateClientList() { std::vector windows; - windows.reserve(mappedSurfaces.size()); + windows.reserve(m_mappedSurfaces.size()); - for (auto const& s : mappedSurfaces) { + for (auto const& s : m_mappedSurfaces) { if (auto surf = s.lock(); surf) - windows.push_back(surf->xID); + windows.push_back(surf->m_xID); } - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_CLIENT_LIST"], XCB_ATOM_WINDOW, 32, windows.size(), windows.data()); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_screen->root, HYPRATOMS["_NET_CLIENT_LIST"], XCB_ATOM_WINDOW, 32, windows.size(), windows.data()); windows.clear(); - windows.reserve(mappedSurfacesStacking.size()); + windows.reserve(m_mappedSurfacesStacking.size()); - for (auto const& s : mappedSurfacesStacking) { + for (auto const& s : m_mappedSurfacesStacking) { if (auto surf = s.lock(); surf) - windows.push_back(surf->xID); + windows.push_back(surf->m_xID); } - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_CLIENT_LIST_STACKING"], XCB_ATOM_WINDOW, 32, windows.size(), windows.data()); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_screen->root, HYPRATOMS["_NET_CLIENT_LIST_STACKING"], XCB_ATOM_WINDOW, 32, windows.size(), windows.data()); } bool CXWM::isWMWindow(xcb_window_t w) { - return w == wmWindow || w == clipboard.window || w == dndSelection.window; + return w == m_wmWindow || w == m_clipboard.window || w == m_dndSelection.window; } void CXWM::updateOverrideRedirect(SP surf, bool overrideRedirect) { - if (!surf || surf->overrideRedirect == overrideRedirect) + if (!surf || surf->m_overrideRedirect == overrideRedirect) return; - surf->overrideRedirect = overrideRedirect; + surf->m_overrideRedirect = overrideRedirect; } void CXWM::initSelection() { - clipboard.window = xcb_generate_id(connection); - uint32_t mask[1] = {XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE}; - xcb_create_window(connection, XCB_COPY_FROM_PARENT, clipboard.window, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, XCB_CW_EVENT_MASK, - mask); - xcb_set_selection_owner(connection, clipboard.window, HYPRATOMS["CLIPBOARD_MANAGER"], XCB_TIME_CURRENT_TIME); + m_clipboard.window = xcb_generate_id(m_connection); + uint32_t mask[1] = {XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE}; + xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_clipboard.window, m_screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, + XCB_CW_EVENT_MASK, mask); + xcb_set_selection_owner(m_connection, m_clipboard.window, HYPRATOMS["CLIPBOARD_MANAGER"], XCB_TIME_CURRENT_TIME); uint32_t mask2 = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; - xcb_xfixes_select_selection_input(connection, clipboard.window, HYPRATOMS["CLIPBOARD"], mask2); + xcb_xfixes_select_selection_input(m_connection, m_clipboard.window, HYPRATOMS["CLIPBOARD"], mask2); - clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); }); - clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); }); + m_clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any d) { m_clipboard.onSelection(); }); + m_clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { m_clipboard.onKeyboardFocus(); }); - primarySelection.window = xcb_generate_id(connection); - xcb_create_window(connection, XCB_COPY_FROM_PARENT, primarySelection.window, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, + m_primarySelection.window = xcb_generate_id(m_connection); + xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_primarySelection.window, m_screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, XCB_CW_EVENT_MASK, mask); - xcb_set_selection_owner(connection, primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + xcb_set_selection_owner(m_connection, m_primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); - xcb_xfixes_select_selection_input(connection, primarySelection.window, HYPRATOMS["PRIMARY"], mask2); + xcb_xfixes_select_selection_input(m_connection, m_primarySelection.window, HYPRATOMS["PRIMARY"], mask2); - primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); }); - primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); }); + m_primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any d) { m_primarySelection.onSelection(); }); + m_primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { m_primarySelection.onKeyboardFocus(); }); - dndSelection.window = xcb_generate_id(connection); - xcb_create_window(connection, XCB_COPY_FROM_PARENT, dndSelection.window, screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, screen->root_visual, XCB_CW_EVENT_MASK, - mask); + m_dndSelection.window = xcb_generate_id(m_connection); + xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_dndSelection.window, m_screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, m_screen->root_visual, + XCB_CW_EVENT_MASK, mask); uint32_t val1 = XDND_VERSION; - xcb_change_property(connection, XCB_PROP_MODE_REPLACE, dndSelection.window, HYPRATOMS["XdndAware"], XCB_ATOM_ATOM, 32, 1, &val1); + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_dndSelection.window, HYPRATOMS["XdndAware"], XCB_ATOM_ATOM, 32, 1, &val1); } void CXWM::setClipboardToWayland(SXSelection& sel) { @@ -1209,11 +1211,11 @@ void CXWM::setClipboardToWayland(SXSelection& sel) { sel.dataSource = source; - Debug::log(LOG, "[xwm] X selection at {:x} takes {}", (uintptr_t)sel.dataSource.get(), (&sel == &clipboard) ? "clipboard" : "primary selection"); + Debug::log(LOG, "[xwm] X selection at {:x} takes {}", (uintptr_t)sel.dataSource.get(), (&sel == &m_clipboard) ? "clipboard" : "primary selection"); - if (&sel == &clipboard) + if (&sel == &m_clipboard) g_pSeatManager->setCurrentSelection(sel.dataSource); - else if (&sel == &primarySelection) + else if (&sel == &m_primarySelection) g_pSeatManager->setCurrentPrimarySelection(sel.dataSource); } @@ -1274,40 +1276,40 @@ void CXWM::getTransferData(SXSelection& sel) { } void CXWM::setCursor(unsigned char* pixData, uint32_t stride, const Vector2D& size, const Vector2D& hotspot) { - if (!render_format_id) { + if (!m_renderFormatID) { Debug::log(ERR, "[xwm] can't set cursor: no render format"); return; } - if (cursorXID) - xcb_free_cursor(connection, cursorXID); + if (m_cursorXID) + xcb_free_cursor(m_connection, m_cursorXID); constexpr int CURSOR_DEPTH = 32; - xcb_pixmap_t pix = xcb_generate_id(connection); - xcb_create_pixmap(connection, CURSOR_DEPTH, pix, screen->root, size.x, size.y); + xcb_pixmap_t pix = xcb_generate_id(m_connection); + xcb_create_pixmap(m_connection, CURSOR_DEPTH, pix, m_screen->root, size.x, size.y); - xcb_render_picture_t pic = xcb_generate_id(connection); - xcb_render_create_picture(connection, pic, pix, render_format_id, 0, 0); + xcb_render_picture_t pic = xcb_generate_id(m_connection); + xcb_render_create_picture(m_connection, pic, pix, m_renderFormatID, 0, 0); - xcb_gcontext_t gc = xcb_generate_id(connection); - xcb_create_gc(connection, gc, pix, 0, nullptr); + xcb_gcontext_t gc = xcb_generate_id(m_connection); + xcb_create_gc(m_connection, gc, pix, 0, nullptr); - xcb_put_image(connection, XCB_IMAGE_FORMAT_Z_PIXMAP, pix, gc, size.x, size.y, 0, 0, 0, CURSOR_DEPTH, stride * size.y * sizeof(uint8_t), pixData); - xcb_free_gc(connection, gc); + xcb_put_image(m_connection, XCB_IMAGE_FORMAT_Z_PIXMAP, pix, gc, size.x, size.y, 0, 0, 0, CURSOR_DEPTH, stride * size.y * sizeof(uint8_t), pixData); + xcb_free_gc(m_connection, gc); - cursorXID = xcb_generate_id(connection); - xcb_render_create_cursor(connection, cursorXID, pic, hotspot.x, hotspot.y); - xcb_free_pixmap(connection, pix); - xcb_render_free_picture(connection, pic); + m_cursorXID = xcb_generate_id(m_connection); + xcb_render_create_cursor(m_connection, m_cursorXID, pic, hotspot.x, hotspot.y); + xcb_free_pixmap(m_connection, pix); + xcb_render_free_picture(m_connection, pic); - uint32_t values[] = {cursorXID}; - xcb_change_window_attributes(connection, screen->root, XCB_CW_CURSOR, values); - xcb_flush(connection); + uint32_t values[] = {m_cursorXID}; + xcb_change_window_attributes(m_connection, m_screen->root, XCB_CW_CURSOR, values); + xcb_flush(m_connection); } SP CXWM::getDataDevice() { - return dndDataDevice; + return m_dndDataDevice; } SP CXWM::createX11DataOffer(SP surf, SP source) { @@ -1319,43 +1321,43 @@ SP CXWM::createX11DataOffer(SP surf, SPpWM->dndDataOffers.clear(); + g_pXWayland->m_wm->m_dndDataOffers.clear(); - auto offer = dndDataOffers.emplace_back(makeShared()); - offer->self = offer; - offer->xwaylandSurface = XSURF; - offer->source = source; + auto offer = m_dndDataOffers.emplace_back(makeShared()); + offer->m_self = offer; + offer->m_xwaylandSurface = XSURF; + offer->m_source = source; return offer; } void SXSelection::onSelection() { - if ((this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection && g_pSeatManager->m_selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || - (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection && + if ((this == &g_pXWayland->m_wm->m_clipboard && g_pSeatManager->m_selection.currentSelection && g_pSeatManager->m_selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || + (this == &g_pXWayland->m_wm->m_primarySelection && g_pSeatManager->m_selection.currentPrimarySelection && g_pSeatManager->m_selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11)) return; - if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection) { - xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->pWM->connection); - g_pXWayland->pWM->clipboard.notifyOnFocus = true; - } else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection) { - xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->pWM->connection); - g_pXWayland->pWM->primarySelection.notifyOnFocus = true; + if (this == &g_pXWayland->m_wm->m_clipboard && g_pSeatManager->m_selection.currentSelection) { + xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, g_pXWayland->m_wm->m_clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); + xcb_flush(g_pXWayland->m_wm->m_connection); + g_pXWayland->m_wm->m_clipboard.notifyOnFocus = true; + } else if (this == &g_pXWayland->m_wm->m_primarySelection && g_pSeatManager->m_selection.currentPrimarySelection) { + xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, g_pXWayland->m_wm->m_primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + xcb_flush(g_pXWayland->m_wm->m_connection); + g_pXWayland->m_wm->m_primarySelection.notifyOnFocus = true; } } void SXSelection::onKeyboardFocus() { - if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) + if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->m_server->m_xwaylandClient) return; - if (this == &g_pXWayland->pWM->clipboard && g_pXWayland->pWM->clipboard.notifyOnFocus) { + if (this == &g_pXWayland->m_wm->m_clipboard && g_pXWayland->m_wm->m_clipboard.notifyOnFocus) { onSelection(); - g_pXWayland->pWM->clipboard.notifyOnFocus = false; - } else if (this == &g_pXWayland->pWM->primarySelection && g_pXWayland->pWM->primarySelection.notifyOnFocus) { + g_pXWayland->m_wm->m_clipboard.notifyOnFocus = false; + } else if (this == &g_pXWayland->m_wm->m_primarySelection && g_pXWayland->m_wm->m_primarySelection.notifyOnFocus) { onSelection(); - g_pXWayland->pWM->primarySelection.notifyOnFocus = false; + g_pXWayland->m_wm->m_primarySelection.notifyOnFocus = false; } } @@ -1373,7 +1375,7 @@ int SXSelection::onRead(int fd, uint32_t mask) { auto len = read(fd, transfer->data.data() + pre, INCR_CHUNK_SIZE - 1); if (len < 0) { Debug::log(ERR, "[xwm] readDataSource died"); - g_pXWayland->pWM->selectionSendNotify(&transfer->request, false); + g_pXWayland->m_wm->selectionSendNotify(&transfer->request, false); transfers.erase(it); return 0; } @@ -1382,10 +1384,10 @@ int SXSelection::onRead(int fd, uint32_t mask) { if (len == 0) { Debug::log(LOG, "[xwm] Received all the bytes, final length {}", transfer->data.size()); - xcb_change_property(g_pXWayland->pWM->connection, XCB_PROP_MODE_REPLACE, transfer->request.requestor, transfer->request.property, transfer->request.target, 8, + xcb_change_property(g_pXWayland->m_wm->m_connection, XCB_PROP_MODE_REPLACE, transfer->request.requestor, transfer->request.property, transfer->request.target, 8, transfer->data.size(), transfer->data.data()); - xcb_flush(g_pXWayland->pWM->connection); - g_pXWayland->pWM->selectionSendNotify(&transfer->request, true); + xcb_flush(g_pXWayland->m_wm->m_connection); + g_pXWayland->m_wm->selectionSendNotify(&transfer->request, true); transfers.erase(it); } else Debug::log(LOG, "[xwm] Received {} bytes, waiting...", len); @@ -1403,12 +1405,12 @@ static int readDataSource(int fd, uint32_t mask, void* data) { bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) { WP selection; - if (this == &g_pXWayland->pWM->clipboard) + if (this == &g_pXWayland->m_wm->m_clipboard) selection = g_pSeatManager->m_selection.currentSelection; - else if (this == &g_pXWayland->pWM->primarySelection) + else if (this == &g_pXWayland->m_wm->m_primarySelection) selection = g_pSeatManager->m_selection.currentPrimarySelection; - else if (!g_pXWayland->pWM->dndDataOffers.empty()) - selection = g_pXWayland->pWM->dndDataOffers.at(0)->getSource(); + else if (!g_pXWayland->m_wm->m_dndDataOffers.empty()) + selection = g_pXWayland->m_wm->m_dndDataOffers.at(0)->getSource(); if (!selection) return false; @@ -1491,16 +1493,17 @@ SXTransfer::~SXTransfer() { if (eventSource) wl_event_source_remove(eventSource); if (incomingWindow) - xcb_destroy_window(g_pXWayland->pWM->connection, incomingWindow); + xcb_destroy_window(g_pXWayland->m_wm->m_connection, incomingWindow); if (propertyReply) free(propertyReply); } bool SXTransfer::getIncomingSelectionProp(bool erase) { - xcb_get_property_cookie_t cookie = xcb_get_property(g_pXWayland->pWM->connection, erase, incomingWindow, HYPRATOMS["_WL_SELECTION"], XCB_GET_PROPERTY_TYPE_ANY, 0, 0x1fffffff); + xcb_get_property_cookie_t cookie = + xcb_get_property(g_pXWayland->m_wm->m_connection, erase, incomingWindow, HYPRATOMS["_WL_SELECTION"], XCB_GET_PROPERTY_TYPE_ANY, 0, 0x1fffffff); propertyStart = 0; - propertyReply = xcb_get_property_reply(g_pXWayland->pWM->connection, cookie, nullptr); + propertyReply = xcb_get_property_reply(g_pXWayland->m_wm->m_connection, cookie, nullptr); if (!propertyReply) { Debug::log(ERR, "[SXTransfer] couldn't get a prop reply"); diff --git a/src/xwayland/XWM.hpp b/src/xwayland/XWM.hpp index 25010b0b..d6383bf4 100644 --- a/src/xwayland/XWM.hpp +++ b/src/xwayland/XWM.hpp @@ -63,45 +63,45 @@ struct SXSelection { class CXCBConnection { public: - CXCBConnection(int fd) : connection{xcb_connect_to_fd(fd, nullptr)} { + CXCBConnection(int fd) : m_connection{xcb_connect_to_fd(fd, nullptr)} { ; } ~CXCBConnection() { - if (connection) - xcb_disconnect(connection); + if (m_connection) + xcb_disconnect(m_connection); } bool hasError() const { - return xcb_connection_has_error(connection); + return xcb_connection_has_error(m_connection); } operator xcb_connection_t*() const { - return connection; + return m_connection; } private: - xcb_connection_t* connection = nullptr; + xcb_connection_t* m_connection = nullptr; }; class CXCBErrorContext { public: explicit CXCBErrorContext(xcb_connection_t* connection) { - if (xcb_errors_context_new(connection, &errors) != 0) - errors = nullptr; + if (xcb_errors_context_new(connection, &m_errors) != 0) + m_errors = nullptr; } ~CXCBErrorContext() { - if (errors) - xcb_errors_context_free(errors); + if (m_errors) + xcb_errors_context_free(m_errors); } bool isValid() const { - return errors != nullptr; + return m_errors != nullptr; } private: - xcb_errors_context_t* errors = nullptr; + xcb_errors_context_t* m_errors = nullptr; }; class CXWM { @@ -174,42 +174,42 @@ class CXWM { SXSelection* getSelection(xcb_atom_t atom); // - CXCBConnection connection; - xcb_errors_context_t* errors = nullptr; - xcb_screen_t* screen = nullptr; + CXCBConnection m_connection; + xcb_errors_context_t* m_errors = nullptr; + xcb_screen_t* m_screen = nullptr; - xcb_window_t wmWindow; + xcb_window_t m_wmWindow; - wl_event_source* eventSource = nullptr; + wl_event_source* m_eventSource = nullptr; - const xcb_query_extension_reply_t* xfixes = nullptr; - const xcb_query_extension_reply_t* xres = nullptr; - int xfixesMajor = 0; + const xcb_query_extension_reply_t* m_xfixes = nullptr; + const xcb_query_extension_reply_t* m_xres = nullptr; + int m_xfixesMajor = 0; - xcb_visualid_t visual_id; - xcb_colormap_t colormap; - uint32_t cursorXID = 0; + xcb_visualid_t m_visualID; + xcb_colormap_t m_colormap; + uint32_t m_cursorXID = 0; - xcb_render_pictformat_t render_format_id; + xcb_render_pictformat_t m_renderFormatID; - std::vector> shellResources; - std::vector> surfaces; - std::vector> mappedSurfaces; // ordered by map time - std::vector> mappedSurfacesStacking; // ordered by stacking + std::vector> m_shellResources; + std::vector> m_surfaces; + std::vector> m_mappedSurfaces; // ordered by map time + std::vector> m_mappedSurfacesStacking; // ordered by stacking - WP focusedSurface; - uint64_t lastFocusSeq = 0; + WP m_focusedSurface; + uint64_t m_lastFocusSeq = 0; - SXSelection clipboard; - SXSelection primarySelection; - SXSelection dndSelection; - SP dndDataDevice = makeShared(); - std::vector> dndDataOffers; + SXSelection m_clipboard; + SXSelection m_primarySelection; + SXSelection m_dndSelection; + SP m_dndDataDevice = makeShared(); + std::vector> m_dndDataOffers; struct { CHyprSignalListener newWLSurface; CHyprSignalListener newXShellSurface; - } listeners; + } m_listeners; friend class CXWaylandSurface; friend class CXWayland; diff --git a/src/xwayland/XWayland.cpp b/src/xwayland/XWayland.cpp index 1f78231f..f7bdf1e6 100644 --- a/src/xwayland/XWayland.cpp +++ b/src/xwayland/XWayland.cpp @@ -26,9 +26,9 @@ CXWayland::CXWayland(const bool wantsEnabled) { Debug::log(LOG, "Starting up the XWayland server"); - pServer = makeUnique(); + m_server = makeUnique(); - if (!pServer->create()) { + if (!m_server->create()) { Debug::log(ERR, "XWayland failed to start: it will not work."); return; } @@ -41,12 +41,12 @@ CXWayland::CXWayland(const bool wantsEnabled) { void CXWayland::setCursor(unsigned char* pixData, uint32_t stride, const Vector2D& size, const Vector2D& hotspot) { #ifndef NO_XWAYLAND - if (!pWM) { + if (!m_wm) { Debug::log(ERR, "Couldn't set XCursor: no XWM yet"); return; } - pWM->setCursor(pixData, stride, size, hotspot); + m_wm->setCursor(pixData, stride, size, hotspot); #endif } diff --git a/src/xwayland/XWayland.hpp b/src/xwayland/XWayland.hpp index 9202f19e..7fd6e354 100644 --- a/src/xwayland/XWayland.hpp +++ b/src/xwayland/XWayland.hpp @@ -19,17 +19,13 @@ class CXWayland { CXWayland(const bool wantsEnabled); #ifndef NO_XWAYLAND - UP pServer; - UP pWM; + UP m_server; + UP m_wm; #endif bool enabled(); void setCursor(unsigned char* pixData, uint32_t stride, const Vector2D& size, const Vector2D& hotspot); - struct { - CSignal newSurface; - } events; - private: bool m_enabled = false; }; From 0dfcba9825f1c9fb24987e9b255e8b43be4aae6d Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Wed, 7 May 2025 18:15:27 +0200 Subject: [PATCH 0165/1077] DMABuffer: reserve vector and avoid UB (#10317) actually reserve the vector instead of initializing it with the m_attrs.fd.size() adding 4 invalid fd entries, and later emplace_back the valid ones. sync_merge_data name is defined as char name[32] a fixed size array, and c++ technically doesnt allow assigning string literals directly to array fields in aggregate initializers, it may compile but is technically undefined behaviour or ill formed. zero initalise it and use std::ranges::copy_n instead. --- src/protocols/types/DMABuffer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/protocols/types/DMABuffer.cpp b/src/protocols/types/DMABuffer.cpp index 326c0736..0f6334e6 100644 --- a/src/protocols/types/DMABuffer.cpp +++ b/src/protocols/types/DMABuffer.cpp @@ -111,7 +111,9 @@ CFileDescriptor CDMABuffer::exportSyncFile() { #if !defined(__linux__) return {}; #else - std::vector syncFds(m_attrs.fds.size()); + std::vector syncFds; + syncFds.reserve(m_attrs.fds.size()); + for (const auto& fd : m_attrs.fds) { if (fd == -1) continue; @@ -135,12 +137,15 @@ CFileDescriptor CDMABuffer::exportSyncFile() { continue; } + const std::string name = "merged release fence"; struct sync_merge_data data{ - .name = "merged release fence", + .name = {}, // zero-initialize name[] .fd2 = fd.get(), .fence = -1, }; + std::ranges::copy_n(name.c_str(), std::min(name.size() + 1, sizeof(data.name)), data.name); + if (doIoctl(syncFd.get(), SYNC_IOC_MERGE, &data) == 0) syncFd = CFileDescriptor(data.fence); else From 6abb5b0c7e98e064c752075b78cb7389ea818f46 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Wed, 7 May 2025 19:02:07 +0200 Subject: [PATCH 0166/1077] renderer: precompute fullalpha (#10319) precompute it once instead of calculating it every single call, was showing up as a lot of time wasted in profiling. --- src/render/Renderer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index ed767cbd..dde53f5d 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -519,10 +519,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW); + const auto fullAlpha = renderdata.alpha * renderdata.fadeAlpha; + if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) { CBox monbox = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y}; CRectPassElement::SRectData data; - data.color = CHyprColor(0, 0, 0, *PDIMAROUND * renderdata.alpha * renderdata.fadeAlpha); + data.color = CHyprColor(0, 0, 0, *PDIMAROUND * fullAlpha); data.box = monbox; m_renderPass.add(makeShared(data)); } @@ -555,14 +557,14 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (wd->getDecorationLayer() != DECORATION_LAYER_BOTTOM) continue; - wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha); + wd->draw(pMonitor, fullAlpha); } for (auto const& wd : pWindow->m_windowDecorations) { if (wd->getDecorationLayer() != DECORATION_LAYER_UNDER) continue; - wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha); + wd->draw(pMonitor, fullAlpha); } } @@ -603,7 +605,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (wd->getDecorationLayer() != DECORATION_LAYER_OVER) continue; - wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha); + wd->draw(pMonitor, fullAlpha); } } @@ -674,7 +676,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if (wd->getDecorationLayer() != DECORATION_LAYER_OVERLAY) continue; - wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha); + wd->draw(pMonitor, fullAlpha); } } } From 7a971735af6bfc7f8d74005afa02f6fd01228f89 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Wed, 7 May 2025 21:51:59 +0300 Subject: [PATCH 0167/1077] flake.lock: update --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 1e507853..77f427f4 100644 --- a/flake.lock +++ b/flake.lock @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1745357019, - "narHash": "sha256-q/C3qj9FWHQenObXuw/nGIT8iIsWFjgmcQYcA+ZfpPs=", + "lastModified": 1746637914, + "narHash": "sha256-YRYeG+Zp7dQKYBtyOv15vXzLfguinmUm6LNzq5cCEkc=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "397600c42b8d7a443a5b4e92aa15f46650a90f18", + "rev": "e863ebcee936dd57f360cca4fec0220da19c5b2d", "type": "github" }, "original": { @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1745975815, - "narHash": "sha256-s3GzsRxBL/N/xYgUXZhQh4t62uR1BN4zxXgWBtJ3lWM=", + "lastModified": 1746635225, + "narHash": "sha256-W9G9bb0zRYDBRseHbVez0J8qVpD5QbizX67H/vsudhM=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "05878d9470c9e5cbc8807813f9ec2006627a0ca0", + "rev": "674ea57373f08b7609ce93baff131117a0dfe70d", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1746141548, - "narHash": "sha256-IgBWhX7A2oJmZFIrpRuMnw5RAufVnfvOgHWgIdds+hc=", + "lastModified": 1746461020, + "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f02fddb8acef29a8b32f10a335d44828d7825b78", + "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", "type": "github" }, "original": { @@ -299,11 +299,11 @@ ] }, "locked": { - "lastModified": 1742649964, - "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "lastModified": 1746537231, + "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969", "type": "github" }, "original": { From 22b12e3013adf66b462b174688f82bd53ba8e721 Mon Sep 17 00:00:00 2001 From: davc0n Date: Thu, 8 May 2025 00:07:35 +0200 Subject: [PATCH 0168/1077] refactor: cshader class to sshader struct (#10324) --- src/render/OpenGL.cpp | 16 ++++++++-------- src/render/OpenGL.hpp | 34 +++++++++++++++++----------------- src/render/Shader.cpp | 4 ++-- src/render/Shader.hpp | 5 ++--- 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 6a568ed8..f073165d 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -906,7 +906,7 @@ static std::string processShader(const std::string& filename, const std::map tex, const CBox& box, static std::map, std::array> primariesConversionCache; -void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManagement::SImageDescription& imageDescription, +void CHyprOpenGLImpl::passCMUniforms(const SShader& shader, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, bool modifySDR) { glUniform1i(shader.sourceTF, imageDescription.transferFunction); glUniform1i(shader.targetTF, targetImageDescription.transferFunction); @@ -1487,7 +1487,7 @@ void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const NColorManageme glUniformMatrix3fv(shader.convertMatrix, 1, false, &primariesConversionCache[cacheKey][0]); } -void CHyprOpenGLImpl::passCMUniforms(const CShader& shader, const SImageDescription& imageDescription) { +void CHyprOpenGLImpl::passCMUniforms(const SShader& shader, const SImageDescription& imageDescription) { passCMUniforms(shader, imageDescription, m_renderData.pMonitor->m_imageDescription, true); } @@ -1519,7 +1519,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - CShader* shader = nullptr; + SShader* shader = nullptr; bool usingFinalShader = false; @@ -1716,7 +1716,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - CShader* shader = &m_shaders->m_shPASSTHRURGBA; + SShader* shader = &m_shaders->m_shPASSTHRURGBA; glActiveTexture(GL_TEXTURE0); glBindTexture(tex->m_target, tex->m_texID); @@ -1767,7 +1767,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra Mat3x3 matrix = m_renderData.monitorProjection.projectBox(newBox, TRANSFORM, newBox.rot); Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - CShader* shader = &m_shaders->m_shMATTE; + SShader* shader = &m_shaders->m_shMATTE; glUseProgram(shader->program); @@ -1912,7 +1912,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o } // declare the draw func - auto drawPass = [&](CShader* pShader, CRegion* pDamage) { + auto drawPass = [&](SShader* pShader, CRegion* pDamage) { if (currentRenderToFB == PMIRRORFB) PMIRRORSWAPFB->bind(); else diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index f4e9bdc4..3c7a3169 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -83,20 +83,20 @@ struct SPreparedShaders { std::string TEXVERTSRC; std::string TEXVERTSRC300; std::string TEXVERTSRC320; - CShader m_shQUAD; - CShader m_shRGBA; - CShader m_shPASSTHRURGBA; - CShader m_shMATTE; - CShader m_shRGBX; - CShader m_shEXT; - CShader m_shBLUR1; - CShader m_shBLUR2; - CShader m_shBLURPREPARE; - CShader m_shBLURFINISH; - CShader m_shSHADOW; - CShader m_shBORDER1; - CShader m_shGLITCH; - CShader m_shCM; + SShader m_shQUAD; + SShader m_shRGBA; + SShader m_shPASSTHRURGBA; + SShader m_shMATTE; + SShader m_shRGBX; + SShader m_shEXT; + SShader m_shBLUR1; + SShader m_shBLUR2; + SShader m_shBLURPREPARE; + SShader m_shBLURFINISH; + SShader m_shSHADOW; + SShader m_shBORDER1; + SShader m_shGLITCH; + SShader m_shCM; }; struct SMonitorRenderData { @@ -309,7 +309,7 @@ class CHyprOpenGLImpl { bool m_offloadedFramebuffer = false; bool m_cmSupported = true; - CShader m_finalScreenShader; + SShader m_finalScreenShader; CTimer m_globalTimer; SP m_missingAssetTexture; @@ -334,9 +334,9 @@ class CHyprOpenGLImpl { // returns the out FB, can be either Mirror or MirrorSwap CFramebuffer* blurMainFramebufferWithDamage(float a, CRegion* damage); - void passCMUniforms(const CShader&, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, + void passCMUniforms(const SShader&, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, bool modifySDR = false); - void passCMUniforms(const CShader&, const NColorManagement::SImageDescription& imageDescription); + void passCMUniforms(const SShader&, const NColorManagement::SImageDescription& imageDescription); void renderTextureInternalWithDamage(SP, const CBox& box, float a, const CRegion& damage, int round = 0, float roundingPower = 2.0f, bool discardOpaque = false, bool noAA = false, bool allowCustomUV = false, bool allowDim = false); void renderTexturePrimitive(SP tex, const CBox& box); diff --git a/src/render/Shader.cpp b/src/render/Shader.cpp index 97bcf761..7b22c83a 100644 --- a/src/render/Shader.cpp +++ b/src/render/Shader.cpp @@ -1,10 +1,10 @@ #include "Shader.hpp" -CShader::~CShader() { +SShader::~SShader() { destroy(); } -void CShader::destroy() { +void SShader::destroy() { if (program == 0) return; diff --git a/src/render/Shader.hpp b/src/render/Shader.hpp index 0ccc8c45..d23d2d5a 100644 --- a/src/render/Shader.hpp +++ b/src/render/Shader.hpp @@ -3,9 +3,8 @@ #include "../defines.hpp" #include -class CShader { - public: - ~CShader(); +struct SShader { + ~SShader(); GLuint program = 0; GLint proj = -1; From fa1e343b0448d20b9b64dfa19fa28b6883d8af47 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Thu, 8 May 2025 16:29:47 +0000 Subject: [PATCH 0169/1077] compositor: set fullscreenstate on movetoworkspace (#10303) modified: src/managers/KeybindManager.cpp --- src/managers/KeybindManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index bae7c559..c4c6d4ab 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1430,9 +1430,11 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { g_pHyprRenderer->damageWindow(PWINDOW); if (pWorkspace) { + const auto FULLSCREENMODE = PWINDOW->m_fullscreenState.internal; g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, pWorkspace); pMonitor = pWorkspace->m_monitor.lock(); g_pCompositor->setActiveMonitor(pMonitor); + g_pCompositor->setWindowFullscreenInternal(PWINDOW, FULLSCREENMODE); } else { pWorkspace = g_pCompositor->createNewWorkspace(WORKSPACEID, PWINDOW->monitorID(), workspaceName, false); pMonitor = pWorkspace->m_monitor.lock(); From f909b0f114e9024d6edbdad0e714df4c6cf961f5 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Thu, 8 May 2025 18:22:33 +0100 Subject: [PATCH 0170/1077] opengl: fix legacyrenderer --- src/render/OpenGL.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index f073165d..4bd8eba3 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -945,7 +945,7 @@ bool CHyprOpenGLImpl::initShaders() { GLuint prog; #ifdef GLES2 - m_bCMSupported = false; + m_cmSupported = false; #else if (!*PCM) m_cmSupported = false; @@ -1379,7 +1379,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co glUniformMatrix3fv(m_shaders->m_shQUAD.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); #else glMatrix.transpose(); - glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shQUAD.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); + glUniformMatrix3fv(m_renderData.pCurrentMonData->m_shQUAD.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); #endif // premultiply the color as well as we don't work with straight alpha From 2b3cac018ef4cbd7c9b2b5c5249783958ed391fb Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Thu, 8 May 2025 20:37:36 +0300 Subject: [PATCH 0171/1077] flake.lock: update --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 77f427f4..d82b7df9 100644 --- a/flake.lock +++ b/flake.lock @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1746637914, - "narHash": "sha256-YRYeG+Zp7dQKYBtyOv15vXzLfguinmUm6LNzq5cCEkc=", + "lastModified": 1746655412, + "narHash": "sha256-kVQ0bHVtX6baYxRWWIh4u3LNJZb9Zcm2xBeDPOGz5BY=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "e863ebcee936dd57f360cca4fec0220da19c5b2d", + "rev": "557241780c179cf7ef224df392f8e67dab6cef83", "type": "github" }, "original": { From 53bfb92d6539e63e65f63965eca12fa33597764a Mon Sep 17 00:00:00 2001 From: nyx Date: Thu, 8 May 2025 14:59:51 -0400 Subject: [PATCH 0172/1077] layout: allow interacting with pinned windows when fullscreened (#10326) * layout: allow interacting with pinned windows when fullscreened * IHyprLayout: format code * e --- src/layout/IHyprLayout.cpp | 2 +- src/managers/input/InputManager.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 9919404a..a7237aef 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -963,7 +963,7 @@ bool IHyprLayout::updateDragWindow() { const auto PWORKSPACE = DRAGGINGWINDOW->m_workspace; - if (PWORKSPACE->m_hasFullscreenWindow && (!DRAGGINGWINDOW->m_createdOverFullscreen || !DRAGGINGWINDOW->m_isFloating)) { + if (PWORKSPACE->m_hasFullscreenWindow && (!DRAGGINGWINDOW->m_isFloating || (!DRAGGINGWINDOW->m_createdOverFullscreen && !DRAGGINGWINDOW->m_pinned))) { Debug::log(LOG, "Rejecting drag on a fullscreen workspace. (window under fullscreen)"); g_pKeybindManager->changeMouseBindMode(MBIND_INVALID); return true; diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index ff2ddaf4..68769987 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -370,7 +370,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { } if (PWINDOWIDEAL && - ((PWINDOWIDEAL->m_isFloating && PWINDOWIDEAL->m_createdOverFullscreen) /* floating over fullscreen */ + ((PWINDOWIDEAL->m_isFloating && (PWINDOWIDEAL->m_createdOverFullscreen || PWINDOWIDEAL->m_pinned)) /* floating over fullscreen or pinned */ || (PMONITOR->m_activeSpecialWorkspace == PWINDOWIDEAL->m_workspace) /* on an open special workspace */)) pFoundWindow = PWINDOWIDEAL; @@ -405,7 +405,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (pFoundWindow != PWINDOWIDEAL) pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING); - if (!(pFoundWindow && pFoundWindow->m_isFloating && pFoundWindow->m_createdOverFullscreen)) + if (!(pFoundWindow && (pFoundWindow->m_isFloating && (pFoundWindow->m_createdOverFullscreen || pFoundWindow->m_pinned)))) pFoundWindow = PWORKSPACE->getFullscreenWindow(); } } From 04c98abd1fe7f3d63c6060ea175e0a5cd9cd9947 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 8 May 2025 21:00:28 +0200 Subject: [PATCH 0173/1077] layout: properly assign workspace and monitor when moving a child to the parent (#10338) --- src/desktop/Window.cpp | 21 +++++++++++++++++++++ src/desktop/Window.hpp | 1 + src/layout/IHyprLayout.cpp | 19 +++++++++++++------ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index c712e5eb..c2b92094 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1822,3 +1822,24 @@ std::optional CWindow::xdgDescription() { return m_xdgSurface->m_toplevel->m_toplevelDescription; } + +PHLWINDOW CWindow::parent() { + if (m_isX11) { + auto t = x11TransientFor(); + + // don't return a parent that's not mapped + if (!validMapped(t)) + return nullptr; + + return t; + } + + if (!m_xdgSurface || !m_xdgSurface->m_toplevel || !m_xdgSurface->m_toplevel->m_parent) + return nullptr; + + // don't return a parent that's not mapped + if (!m_xdgSurface->m_toplevel->m_parent->m_window || !validMapped(m_xdgSurface->m_toplevel->m_parent->m_window)) + return nullptr; + + return m_xdgSurface->m_toplevel->m_parent->m_window.lock(); +} diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 449c9c60..abc2747f 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -409,6 +409,7 @@ class CWindow { bool isNotResponding(); std::optional xdgTag(); std::optional xdgDescription(); + PHLWINDOW parent(); CBox getWindowMainSurfaceBox() const { return {m_realPosition->value().x, m_realPosition->value().y, m_realSize->value().x, m_realSize->value().y}; diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index a7237aef..8d32e44e 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -159,12 +159,19 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { // TODO: detect a popup in a more consistent way. if ((desiredGeometry.x == 0 && desiredGeometry.y == 0) || !visible || !pWindow->m_isX11) { - // if the pos isn't set, fall back to the center placement if it's not a child, otherwise middle of parent if available - if (!pWindow->m_isX11 && pWindow->m_xdgSurface->m_toplevel->m_parent && validMapped(pWindow->m_xdgSurface->m_toplevel->m_parent->m_window)) - *pWindow->m_realPosition = pWindow->m_xdgSurface->m_toplevel->m_parent->m_window->m_realPosition->goal() + - pWindow->m_xdgSurface->m_toplevel->m_parent->m_window->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; - else - *pWindow->m_realPosition = PMONITOR->m_position + PMONITOR->m_size / 2.F - desiredGeometry.size() / 2.F; + // if the pos isn't set, fall back to the center placement if it's not a child + auto pos = PMONITOR->m_position + PMONITOR->m_size / 2.F - desiredGeometry.size() / 2.F; + + // otherwise middle of parent if available + if (!pWindow->m_isX11) { + if (const auto PARENT = pWindow->parent(); PARENT) { + *pWindow->m_realPosition = PARENT->m_realPosition->goal() + PARENT->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; + pWindow->m_workspace = PARENT->m_workspace; + pWindow->m_monitor = PARENT->m_monitor; + } + } + + *pWindow->m_realPosition = pos; } else { // if it is, we respect where it wants to put itself, but apply monitor offset if outside // most of these are popups From f01e3043b81d1ad7d886f0502b445bdf3cea0ccc Mon Sep 17 00:00:00 2001 From: s1dd <140317709+nots1dd@users.noreply.github.com> Date: Fri, 9 May 2025 00:31:49 +0530 Subject: [PATCH 0174/1077] desktop: cleanup code and use std::ranges (#10289) --- src/desktop/LayerRule.cpp | 2 +- src/desktop/LayerSurface.cpp | 4 +- src/desktop/Popup.cpp | 1 - src/desktop/Window.cpp | 83 +++++++++++++++++------------------- src/desktop/Window.hpp | 8 ++-- src/desktop/WindowRule.cpp | 13 +++--- src/desktop/Workspace.cpp | 19 +++------ src/desktop/Workspace.hpp | 1 - 8 files changed, 57 insertions(+), 74 deletions(-) diff --git a/src/desktop/LayerRule.cpp b/src/desktop/LayerRule.cpp index 9b5f9da2..dfcd289a 100644 --- a/src/desktop/LayerRule.cpp +++ b/src/desktop/LayerRule.cpp @@ -8,7 +8,7 @@ static const auto RULES = std::unordered_set{"noanim", "blur static const auto RULES_PREFIX = std::unordered_set{"ignorealpha", "ignorezero", "xray", "animation", "order", "abovelock"}; CLayerRule::CLayerRule(const std::string& rule_, const std::string& ns_) : m_targetNamespace(ns_), m_rule(rule_) { - const bool VALID = RULES.contains(m_rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule_](const auto& prefix) { return rule_.starts_with(prefix); }); + const bool VALID = RULES.contains(m_rule) || std::ranges::any_of(RULES_PREFIX, [&rule_](const auto& prefix) { return rule_.starts_with(prefix); }); if (!VALID) return; diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index a5d9067a..f913b658 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -186,7 +186,7 @@ void CLayerSurface::onMap() { m_readyToDelete = false; m_fadingOut = false; - g_pEventManager->postEvent(SHyprIPCEvent{"openlayer", m_namespace}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "openlayer", .data = m_namespace}); EMIT_HOOK_EVENT("openLayer", m_self.lock()); g_pCompositor->setPreferredScaleForSurface(m_surface->resource(), PMONITOR->m_scale); @@ -196,7 +196,7 @@ void CLayerSurface::onMap() { void CLayerSurface::onUnmap() { Debug::log(LOG, "LayerSurface {:x} unmapped", (uintptr_t)m_layerSurface.get()); - g_pEventManager->postEvent(SHyprIPCEvent{"closelayer", m_layerSurface->m_layerNamespace}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "closelayer", .data = m_layerSurface->m_layerNamespace}); EMIT_HOOK_EVENT("closeLayer", m_self.lock()); std::erase_if(g_pInputManager->m_exclusiveLSes, [this](const auto& other) { return !other || other == m_self; }); diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index ed882c3a..b647bed5 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -5,7 +5,6 @@ #include "../protocols/XDGShell.hpp" #include "../protocols/core/Compositor.hpp" #include "../managers/SeatManager.hpp" -#include "../managers/eventLoop/EventLoopManager.hpp" #include "../desktop/LayerSurface.hpp" #include "../managers/input/InputManager.hpp" #include "../render/Renderer.hpp" diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index c2b92094..f90702dc 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1,10 +1,10 @@ +#include #include #include #include #include #include -#include #include "Window.hpp" #include "../Compositor.hpp" #include "../render/decorations/CHyprDropShadowDecoration.hpp" @@ -137,25 +137,22 @@ SBoxExtents CWindow::getFullWindowExtents() { if (m_windowData.dimAround.valueOrDefault()) { if (const auto PMONITOR = m_monitor.lock(); PMONITOR) - return {{m_realPosition->value().x - PMONITOR->m_position.x, m_realPosition->value().y - PMONITOR->m_position.y}, - {PMONITOR->m_size.x - (m_realPosition->value().x - PMONITOR->m_position.x), PMONITOR->m_size.y - (m_realPosition->value().y - PMONITOR->m_position.y)}}; + return {.topLeft = {m_realPosition->value().x - PMONITOR->m_position.x, m_realPosition->value().y - PMONITOR->m_position.y}, + .bottomRight = {PMONITOR->m_size.x - (m_realPosition->value().x - PMONITOR->m_position.x), + PMONITOR->m_size.y - (m_realPosition->value().y - PMONITOR->m_position.y)}}; } - SBoxExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}}; + SBoxExtents maxExtents = {.topLeft = {BORDERSIZE + 2, BORDERSIZE + 2}, .bottomRight = {BORDERSIZE + 2, BORDERSIZE + 2}}; const auto EXTENTS = g_pDecorationPositioner->getWindowDecorationExtents(m_self.lock()); - if (EXTENTS.topLeft.x > maxExtents.topLeft.x) - maxExtents.topLeft.x = EXTENTS.topLeft.x; + maxExtents.topLeft.x = std::max(EXTENTS.topLeft.x, maxExtents.topLeft.x); - if (EXTENTS.topLeft.y > maxExtents.topLeft.y) - maxExtents.topLeft.y = EXTENTS.topLeft.y; + maxExtents.topLeft.y = std::max(EXTENTS.topLeft.y, maxExtents.topLeft.y); - if (EXTENTS.bottomRight.x > maxExtents.bottomRight.x) - maxExtents.bottomRight.x = EXTENTS.bottomRight.x; + maxExtents.bottomRight.x = std::max(EXTENTS.bottomRight.x, maxExtents.bottomRight.x); - if (EXTENTS.bottomRight.y > maxExtents.bottomRight.y) - maxExtents.bottomRight.y = EXTENTS.bottomRight.y; + maxExtents.bottomRight.y = std::max(EXTENTS.bottomRight.y, maxExtents.bottomRight.y); if (m_wlSurface->exists() && !m_isX11 && m_popupHead) { CBox surfaceExtents = {0, 0, 0, 0}; @@ -167,10 +164,8 @@ SBoxExtents CWindow::getFullWindowExtents() { CBox* pSurfaceExtents = (CBox*)data; CBox surf = CBox{popup->coordsRelativeToParent(), popup->size()}; - if (surf.x < pSurfaceExtents->x) - pSurfaceExtents->x = surf.x; - if (surf.y < pSurfaceExtents->y) - pSurfaceExtents->y = surf.y; + pSurfaceExtents->x = std::min(surf.x, pSurfaceExtents->x); + pSurfaceExtents->y = std::min(surf.y, pSurfaceExtents->y); if (surf.x + surf.w > pSurfaceExtents->width) pSurfaceExtents->width = surf.x + surf.w - pSurfaceExtents->x; if (surf.y + surf.h > pSurfaceExtents->height) @@ -178,11 +173,9 @@ SBoxExtents CWindow::getFullWindowExtents() { }, &surfaceExtents); - if (-surfaceExtents.x > maxExtents.topLeft.x) - maxExtents.topLeft.x = -surfaceExtents.x; + maxExtents.topLeft.x = std::max(-surfaceExtents.x, maxExtents.topLeft.x); - if (-surfaceExtents.y > maxExtents.topLeft.y) - maxExtents.topLeft.y = -surfaceExtents.y; + maxExtents.topLeft.y = std::max(-surfaceExtents.y, maxExtents.topLeft.y); if (surfaceExtents.x + surfaceExtents.width > m_wlSurface->resource()->m_current.size.x + maxExtents.bottomRight.x) maxExtents.bottomRight.x = surfaceExtents.x + surfaceExtents.width - m_wlSurface->resource()->m_current.size.x; @@ -249,7 +242,7 @@ CBox CWindow::getWindowBoxUnified(uint64_t properties) { return {PMONITOR->m_position.x, PMONITOR->m_position.y, PMONITOR->m_size.x, PMONITOR->m_size.y}; } - SBoxExtents EXTENTS = {{0, 0}, {0, 0}}; + SBoxExtents EXTENTS = {.topLeft = {0, 0}, .bottomRight = {0, 0}}; if (properties & RESERVED_EXTENTS) EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationReserved(m_self.lock())); if (properties & INPUT_EXTENTS) @@ -297,7 +290,7 @@ void CWindow::updateWindowDecos() { } for (auto const& wd : decos) { - if (std::find_if(m_windowDecorations.begin(), m_windowDecorations.end(), [wd](const auto& other) { return other.get() == wd; }) == m_windowDecorations.end()) + if (std::ranges::find_if(m_windowDecorations, [wd](const auto& other) { return other.get() == wd; }) == m_windowDecorations.end()) continue; wd->updateWindow(m_self.lock()); } @@ -452,8 +445,8 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { g_pCompositor->updateAllWindowsAnimatedDecorationValues(); if (valid(pWorkspace)) { - g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_name)}); - g_pEventManager->postEvent(SHyprIPCEvent{"movewindowv2", std::format("{:x},{},{}", (uintptr_t)this, pWorkspace->m_id, pWorkspace->m_name)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "movewindow", .data = std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_name)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "movewindowv2", .data = std::format("{:x},{},{}", (uintptr_t)this, pWorkspace->m_id, pWorkspace->m_name)}); EMIT_HOOK_EVENT("moveWindow", (std::vector{m_self.lock(), pWorkspace})); } @@ -479,7 +472,7 @@ PHLWINDOW CWindow::x11TransientFor() { while (s) { // break loops. Some X apps make them, and it seems like it's valid behavior?!?!?! // TODO: we should reject loops being created in the first place. - if (std::find(visited.begin(), visited.end(), s) != visited.end()) + if (std::ranges::find(visited.begin(), visited.end(), s) != visited.end()) break; visited.emplace_back(s.lock()); @@ -647,18 +640,18 @@ void CWindow::applyDynamicRule(const SP& r) { if (r == "override") { if (opacityIDX == 1) - m_windowData.alpha = CWindowOverridableVar(SAlphaValue{m_windowData.alpha.value().alpha, true}, priority); + m_windowData.alpha = CWindowOverridableVar(SAlphaValue{.alpha = m_windowData.alpha.value().alpha, .overridden = true}, priority); else if (opacityIDX == 2) - m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{m_windowData.alphaInactive.value().alpha, true}, priority); + m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{.alpha = m_windowData.alphaInactive.value().alpha, .overridden = true}, priority); else if (opacityIDX == 3) - m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{m_windowData.alphaFullscreen.value().alpha, true}, priority); + m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{.alpha = m_windowData.alphaFullscreen.value().alpha, .overridden = true}, priority); } else { if (opacityIDX == 0) { - m_windowData.alpha = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alpha = CWindowOverridableVar(SAlphaValue{.alpha = std::stof(r), .overridden = false}, priority); } else if (opacityIDX == 1) { - m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alphaInactive = CWindowOverridableVar(SAlphaValue{.alpha = std::stof(r), .overridden = false}, priority); } else if (opacityIDX == 2) { - m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{std::stof(r), false}, priority); + m_windowData.alphaFullscreen = CWindowOverridableVar(SAlphaValue{.alpha = std::stof(r), .overridden = false}, priority); } else { throw std::runtime_error("more than 3 alpha values"); } @@ -702,9 +695,9 @@ void CWindow::applyDynamicRule(const SP& r) { } else if (token.contains("deg")) inactiveBorderGradient.m_angle = std::stoi(token.substr(0, token.size() - 3)) * (PI / 180.0); else if (active) - activeBorderGradient.m_colors.push_back(configStringToInt(token).value_or(0)); + activeBorderGradient.m_colors.emplace_back(configStringToInt(token).value_or(0)); else - inactiveBorderGradient.m_colors.push_back(configStringToInt(token).value_or(0)); + inactiveBorderGradient.m_colors.emplace_back(configStringToInt(token).value_or(0)); } activeBorderGradient.updateColorsOk(); @@ -902,7 +895,7 @@ void CWindow::createGroup() { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); - g_pEventManager->postEvent(SHyprIPCEvent{"togglegroup", std::format("1,{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "togglegroup", .data = std::format("1,{:x}", (uintptr_t)this)}); } } @@ -922,7 +915,7 @@ void CWindow::destroyGroup() { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(monitorID()); g_pCompositor->updateAllWindowsAnimatedDecorationValues(); - g_pEventManager->postEvent(SHyprIPCEvent{"togglegroup", std::format("0,{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "togglegroup", .data = std::format("0,{:x}", (uintptr_t)this)}); return; } @@ -962,7 +955,7 @@ void CWindow::destroyGroup() { if (!addresses.empty()) addresses.pop_back(); - g_pEventManager->postEvent(SHyprIPCEvent{"togglegroup", std::format("0,{}", addresses)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "togglegroup", .data = std::format("0,{}", addresses)}); } PHLWINDOW CWindow::getGroupHead() { @@ -1399,7 +1392,7 @@ void CWindow::activate(bool force) { m_isUrgent = true; - g_pEventManager->postEvent(SHyprIPCEvent{"urgent", std::format("{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "urgent", .data = std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("urgent", m_self.lock()); if (!force && (!m_windowData.focusOnActivate.valueOr(*PFOCUSONACTIVATE) || (m_suppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_suppressedEvents & SUPPRESS_ACTIVATE))) @@ -1454,13 +1447,13 @@ void CWindow::onUpdateMeta() { if (m_title != NEWTITLE) { m_title = NEWTITLE; - g_pEventManager->postEvent(SHyprIPCEvent{"windowtitle", std::format("{:x}", (uintptr_t)this)}); - g_pEventManager->postEvent(SHyprIPCEvent{"windowtitlev2", std::format("{:x},{}", (uintptr_t)this, m_title)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "windowtitle", .data = std::format("{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "windowtitlev2", .data = std::format("{:x},{}", (uintptr_t)this, m_title)}); EMIT_HOOK_EVENT("windowTitle", m_self.lock()); if (m_self == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others - g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_class + "," + m_title}); - g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindow", .data = m_class + "," + m_title}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindowv2", .data = std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("activeWindow", m_self.lock()); } @@ -1473,8 +1466,8 @@ void CWindow::onUpdateMeta() { m_class = NEWCLASS; if (m_self == g_pCompositor->m_lastWindow) { // if it's the active, let's post an event to update others - g_pEventManager->postEvent(SHyprIPCEvent{"activewindow", m_class + "," + m_title}); - g_pEventManager->postEvent(SHyprIPCEvent{"activewindowv2", std::format("{:x}", (uintptr_t)this)}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindow", .data = m_class + "," + m_title}); + g_pEventManager->postEvent(SHyprIPCEvent{.event = "activewindowv2", .data = std::format("{:x}", (uintptr_t)this)}); EMIT_HOOK_EVENT("activeWindow", m_self.lock()); } @@ -1514,7 +1507,7 @@ std::string CWindow::fetchClass() { } void CWindow::onAck(uint32_t serial) { - const auto SERIAL = std::find_if(m_pendingSizeAcks.rbegin(), m_pendingSizeAcks.rend(), [serial](const auto& e) { return e.first == serial; }); + const auto SERIAL = std::ranges::find_if(m_pendingSizeAcks.rbegin(), m_pendingSizeAcks.rend(), [serial](const auto& e) { return e.first == serial; }); if (SERIAL == m_pendingSizeAcks.rend()) return; @@ -1647,7 +1640,7 @@ PHLWINDOW CWindow::getSwallower() { if (!w) continue; - if (std::find(candidates.begin(), candidates.end(), w.lock()) != candidates.end()) + if (std::ranges::find(candidates.begin(), candidates.end(), w.lock()) != candidates.end()) return w.lock(); } diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index abc2747f..47d28db2 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -6,8 +6,6 @@ #include "../config/ConfigDataValues.hpp" #include "../helpers/AnimatedVariable.hpp" -#include "../helpers/math/Math.hpp" -#include "../helpers/signal/Signal.hpp" #include "../helpers/TagKeeper.hpp" #include "../macros.hpp" #include "../managers/XWaylandManager.hpp" @@ -79,9 +77,9 @@ struct SAlphaValue { }; struct SWindowData { - CWindowOverridableVar alpha = SAlphaValue{1.f, false}; - CWindowOverridableVar alphaInactive = SAlphaValue{1.f, false}; - CWindowOverridableVar alphaFullscreen = SAlphaValue{1.f, false}; + CWindowOverridableVar alpha = SAlphaValue{.alpha = 1.f, .overridden = false}; + CWindowOverridableVar alphaInactive = SAlphaValue{.alpha = 1.f, .overridden = false}; + CWindowOverridableVar alphaFullscreen = SAlphaValue{.alpha = 1.f, .overridden = false}; CWindowOverridableVar allowsInput = false; CWindowOverridableVar dimAround = false; diff --git a/src/desktop/WindowRule.cpp b/src/desktop/WindowRule.cpp index db1b0dde..48bf2ff0 100644 --- a/src/desktop/WindowRule.cpp +++ b/src/desktop/WindowRule.cpp @@ -15,10 +15,9 @@ static const auto RULES_PREFIX = std::unordered_set{ CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool isV2, bool isExecRule) : m_value(value), m_rule(rule), m_v2(isV2), m_execRule(isExecRule) { const auto VALS = CVarList(rule, 2, ' '); - const bool VALID = RULES.contains(rule) || std::any_of(RULES_PREFIX.begin(), RULES_PREFIX.end(), [&rule](auto prefix) { return rule.starts_with(prefix); }) || - (NWindowProperties::boolWindowProperties.find(VALS[0]) != NWindowProperties::boolWindowProperties.end()) || - (NWindowProperties::intWindowProperties.find(VALS[0]) != NWindowProperties::intWindowProperties.end()) || - (NWindowProperties::floatWindowProperties.find(VALS[0]) != NWindowProperties::floatWindowProperties.end()); + const bool VALID = RULES.contains(rule) || std::ranges::any_of(RULES_PREFIX, [&rule](auto prefix) { return rule.starts_with(prefix); }) || + (NWindowProperties::boolWindowProperties.contains(VALS[0])) || (NWindowProperties::intWindowProperties.contains(VALS[0])) || + (NWindowProperties::floatWindowProperties.contains(VALS[0])); if (!VALID) return; @@ -84,9 +83,9 @@ CWindowRule::CWindowRule(const std::string& rule, const std::string& value, bool else { // check if this is a prop. const CVarList VARS(rule, 0, 's', true); - if (NWindowProperties::intWindowProperties.find(VARS[0]) != NWindowProperties::intWindowProperties.end() || - NWindowProperties::boolWindowProperties.find(VARS[0]) != NWindowProperties::boolWindowProperties.end() || - NWindowProperties::floatWindowProperties.find(VARS[0]) != NWindowProperties::floatWindowProperties.end()) { + const bool ISPROP = NWindowProperties::intWindowProperties.contains(VARS[0]) || NWindowProperties::boolWindowProperties.contains(VARS[0]) || + NWindowProperties::floatWindowProperties.contains(VARS[0]); + if (ISPROP) { *const_cast(&m_rule) = "prop " + rule; m_ruleType = RULE_PROP; Debug::log(LOG, "CWindowRule: direct prop rule found, rewritten {} -> {}", rule, m_rule); diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index fbbad118..886c52fb 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -47,10 +47,10 @@ void CWorkspace::init(PHLWORKSPACE self) { if (self->m_wasCreatedEmpty) if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) - g_pKeybindManager->spawnWithRules(*cmd, self); + CKeybindManager::spawnWithRules(*cmd, self); - g_pEventManager->postEvent({"createworkspace", m_name}); - g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_id, m_name)}); + g_pEventManager->postEvent({.event = "createworkspace", .data = m_name}); + g_pEventManager->postEvent({.event = "createworkspacev2", .data = std::format("{},{}", m_id, m_name)}); EMIT_HOOK_EVENT("createWorkspace", this); } @@ -66,8 +66,8 @@ CWorkspace::~CWorkspace() { g_pHookSystem->unhook(m_focusedWindowHook); if (g_pEventManager) { - g_pEventManager->postEvent({"destroyworkspace", m_name}); - g_pEventManager->postEvent({"destroyworkspacev2", std::format("{},{}", m_id, m_name)}); + g_pEventManager->postEvent({.event = "destroyworkspace", .data = m_name}); + g_pEventManager->postEvent({.event = "destroyworkspacev2", .data = std::format("{},{}", m_id, m_name)}); EMIT_HOOK_EVENT("destroyWorkspace", this); } } @@ -604,12 +604,7 @@ PHLWINDOW CWorkspace::getTopLeftWindow() { } bool CWorkspace::hasUrgentWindow() { - for (auto const& w : g_pCompositor->m_windows) { - if (w->m_workspace == m_self && w->m_isMapped && w->m_isUrgent) - return true; - } - - return false; + return std::ranges::any_of(g_pCompositor->m_windows, [this](const auto& w) { return w->m_workspace == m_self && w->m_isMapped && w->m_isUrgent; }); } void CWorkspace::updateWindowDecos() { @@ -654,7 +649,7 @@ void CWorkspace::rename(const std::string& name) { if (WORKSPACERULE.isPersistent) g_pCompositor->ensurePersistentWorkspacesPresent(std::vector{WORKSPACERULE}, m_self.lock()); - g_pEventManager->postEvent({"renameworkspace", std::to_string(m_id) + "," + m_name}); + g_pEventManager->postEvent({.event = "renameworkspace", .data = std::to_string(m_id) + "," + m_name}); } void CWorkspace::updateWindows() { diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp index a3fe21e8..4f109257 100644 --- a/src/desktop/Workspace.hpp +++ b/src/desktop/Workspace.hpp @@ -2,7 +2,6 @@ #include "../helpers/AnimatedVariable.hpp" #include -#include "../defines.hpp" #include "DesktopTypes.hpp" #include "../helpers/MiscFunctions.hpp" From 239cdd67fd5ec54701ac3b0a477c0449beb4d869 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 8 May 2025 22:10:31 +0200 Subject: [PATCH 0175/1077] socket2: fix order of window events on map (#10341) --- src/events/Windows.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 240070a3..48cf78d5 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -417,6 +417,10 @@ void Events::listener_mapWindow(void* owner, void* data) { if (PWINDOW->m_swallowed) PWINDOW->m_swallowed->m_currentlySwallowed = true; + // emit the IPC event before the layout might focus the window to avoid a focus event first + g_pEventManager->postEvent( + SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name, PWINDOW->m_class, PWINDOW->m_title)}); + if (PWINDOW->m_isFloating) { g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW); PWINDOW->m_createdOverFullscreen = true; @@ -673,8 +677,7 @@ void Events::listener_mapWindow(void* owner, void* data) { Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->m_name, PWINDOW->m_realPosition->goal(), PWINDOW->m_realSize->goal()); - auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name; - g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, PWINDOW->m_class, PWINDOW->m_title)}); + // emit the hook event here after basic stuff has been initialized EMIT_HOOK_EVENT("openWindow", PWINDOW); // apply data from default decos. Borders, shadows. From 9958d297641b5c84dcff93f9039d80a5ad37ab00 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Thu, 8 May 2025 21:15:18 +0100 Subject: [PATCH 0176/1077] version: bump to 0.49.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a758a09a..5c4503b7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.48.0 +0.49.0 From fcb6f936ea8b39ec42f5979e55c7aa4a060d2f30 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Fri, 9 May 2025 01:42:19 +0000 Subject: [PATCH 0177/1077] hyprpm: add missing include for libc++ after 1c530cbc66db (#10344) hyprpm/src/helpers/Sys.cpp:24:24: error: implicit instantiation of undefined temp late 'std::basic_ostringstream' 24 | std::ostringstream oss; | ^ /usr/include/c++/v1/__fwd/sstream.h:27:28: note: template is declared here 27 | class _LIBCPP_TEMPLATE_VIS basic_ostringstream; | ^ --- hyprpm/src/helpers/Sys.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index a5876b9d..58741caf 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include From e44aae0c2064240f335b0e7706599ed0487726da Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Fri, 9 May 2025 12:18:15 +0000 Subject: [PATCH 0178/1077] hyprpm: switch to numeric owner/group after f8bbe5124c00 (#10345) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On BSDs "root" is in "wheel" group. Instead of enumerating platforms or probing "wheel" explicitly use numeric value for the superuser. $ truss hyprpm add [...] read(5,"install: unknown group root\n",1023) = 28 (0x1c) [...] [ERR] ✖ Failed to write plugin state --- hyprpm/src/helpers/Sys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/helpers/Sys.cpp b/hyprpm/src/helpers/Sys.cpp index 58741caf..e7ac8854 100644 --- a/hyprpm/src/helpers/Sys.cpp +++ b/hyprpm/src/helpers/Sys.cpp @@ -153,7 +153,7 @@ bool NSys::root::install(const std::string& what, const std::string& where, cons if (!std::ranges::all_of(mode, [](const char& c) { return c >= '0' && c <= '9'; })) return false; - CProcess proc(subin(), {"install", "-m" + mode, "-o", "root", "-g", "root", what, where}); + CProcess proc(subin(), {"install", "-m" + mode, "-o", "0", "-g", "0", what, where}); return proc.runSync() && proc.exitCode() == 0; } From 25cf06f6cfe1b23b97d9beae91247413a3683803 Mon Sep 17 00:00:00 2001 From: "Florian \"sp1rit" <31540351+sp1ritCS@users.noreply.github.com> Date: Fri, 9 May 2025 12:47:28 +0000 Subject: [PATCH 0179/1077] build: require hyprgraphics>=0.1.3 (#10350) 49974d5 introduced use of types, which were only added in 0.1.3 --- CMakeLists.txt | 2 +- meson.build | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc016d85..16007dc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,7 +110,7 @@ pkg_check_modules(aquamarine_dep REQUIRED IMPORTED_TARGET aquamarine>=0.8.0) pkg_check_modules(hyprlang_dep REQUIRED IMPORTED_TARGET hyprlang>=0.3.2) pkg_check_modules(hyprcursor_dep REQUIRED IMPORTED_TARGET hyprcursor>=0.1.7) pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=0.7.0) -pkg_check_modules(hyprgraphics_dep REQUIRED IMPORTED_TARGET hyprgraphics>=0.1.1) +pkg_check_modules(hyprgraphics_dep REQUIRED IMPORTED_TARGET hyprgraphics>=0.1.3) string(REPLACE "." ";" AQ_VERSION_LIST ${aquamarine_dep_VERSION}) list(GET AQ_VERSION_LIST 0 AQ_VERSION_MAJOR) diff --git a/meson.build b/meson.build index a482cbf2..bf518216 100644 --- a/meson.build +++ b/meson.build @@ -33,7 +33,7 @@ endif aquamarine = dependency('aquamarine', version: '>=0.8.0') hyprcursor = dependency('hyprcursor', version: '>=0.1.7') -hyprgraphics = dependency('hyprgraphics', version: '>= 0.1.1') +hyprgraphics = dependency('hyprgraphics', version: '>= 0.1.3') hyprlang = dependency('hyprlang', version: '>= 0.3.2') hyprutils = dependency('hyprutils', version: '>= 0.7.0') aquamarine_version_list = aquamarine.version().split('.') From 60cd5b7a48af4a23717201d70395161a3bb4ab24 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Fri, 9 May 2025 22:16:21 +0100 Subject: [PATCH 0180/1077] renderer: always render snapshots as 8bit fixes issues with transparent windows on 10b --- src/render/Framebuffer.cpp | 5 +++++ src/render/Framebuffer.hpp | 2 ++ src/render/OpenGL.cpp | 10 ++++++---- src/render/Renderer.cpp | 6 +++--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index ae2ce2a6..ab5a14a3 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -12,6 +12,11 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { uint32_t glFormat = NFormatUtils::drmFormatToGL(drmFormat); uint32_t glType = NFormatUtils::glFormatToType(glFormat); + if (drmFormat != m_drmFormat || m_size != Vector2D{w, h}) + release(); + + m_drmFormat = drmFormat; + if (!m_tex) { m_tex = makeShared(); m_tex->allocate(); diff --git a/src/render/Framebuffer.hpp b/src/render/Framebuffer.hpp index 4e041573..0e18df5f 100644 --- a/src/render/Framebuffer.hpp +++ b/src/render/Framebuffer.hpp @@ -1,6 +1,7 @@ #pragma once #include "../defines.hpp" +#include "../helpers/Format.hpp" #include "Texture.hpp" class CFramebuffer { @@ -20,6 +21,7 @@ class CFramebuffer { GLuint getFBID(); Vector2D m_size; + DRMFormat m_drmFormat = 0 /* DRM_FORMAT_INVALID */; private: SP m_tex; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 4bd8eba3..9cbf091b 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -752,13 +752,15 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb if (!m_shadersInitialized) initShaders(); + const auto DRM_FORMAT = fb ? fb->m_drmFormat : pMonitor->m_output->state->state().drmFormat; + // ensure a framebuffer for the monitor exists - if (m_renderData.pCurrentMonData->offloadFB.m_size != pMonitor->m_pixelSize) { + if (m_renderData.pCurrentMonData->offloadFB.m_size != pMonitor->m_pixelSize || DRM_FORMAT != m_renderData.pCurrentMonData->offloadFB.m_drmFormat) { m_renderData.pCurrentMonData->stencilTex->allocate(); - m_renderData.pCurrentMonData->offloadFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - m_renderData.pCurrentMonData->mirrorFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); - m_renderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat); + m_renderData.pCurrentMonData->offloadFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, DRM_FORMAT); + m_renderData.pCurrentMonData->mirrorFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, DRM_FORMAT); + m_renderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, DRM_FORMAT); m_renderData.pCurrentMonData->offloadFB.addStencil(m_renderData.pCurrentMonData->stencilTex); m_renderData.pCurrentMonData->mirrorFB.addStencil(m_renderData.pCurrentMonData->stencilTex); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index dde53f5d..343276c9 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2389,7 +2389,7 @@ void CHyprRenderer::makeRawWindowSnapshot(PHLWINDOW pWindow, CFramebuffer* pFram makeEGLCurrent(); - pFramebuffer->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); + pFramebuffer->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888); pFramebuffer->addStencil(g_pHyprOpenGL->m_renderData.pCurrentMonData->stencilTex); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, pFramebuffer); @@ -2440,7 +2440,7 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_windowFramebuffers[ref]; - PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); + PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, PFRAMEBUFFER); @@ -2484,7 +2484,7 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { const auto PFRAMEBUFFER = &g_pHyprOpenGL->m_layerFramebuffers[pLayer]; - PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, PMONITOR->m_output->state->state().drmFormat); + PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888); beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, PFRAMEBUFFER); From f58bb72d3a300dc482e9dc934101790c8707667d Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 10 May 2025 18:31:26 +0100 Subject: [PATCH 0181/1077] renderer: render blur on fade out (#10356) --- src/desktop/Window.cpp | 2 +- src/events/Windows.cpp | 3 +- src/render/OpenGL.cpp | 12 ++--- src/render/OpenGL.hpp | 10 +++-- src/render/Renderer.cpp | 72 +++++++++++++++++++----------- src/render/Renderer.hpp | 12 ++++- src/render/pass/TexPassElement.cpp | 19 ++++++-- src/render/pass/TexPassElement.hpp | 5 ++- 8 files changed, 90 insertions(+), 45 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index f90702dc..7ef54da0 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1149,7 +1149,7 @@ bool CWindow::opaque() { if (m_wlSurface->small() && !m_wlSurface->m_fillIgnoreSmall) return false; - if (PWORKSPACE->m_alpha->value() != 1.f) + if (PWORKSPACE && PWORKSPACE->m_alpha->value() != 1.f) return false; if (m_isX11 && m_xwaylandSurface && m_xwaylandSurface->m_surface && m_xwaylandSurface->m_surface->m_current.texture) diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 48cf78d5..4bf54ca8 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -754,7 +754,8 @@ void Events::listener_unmapWindow(void* owner, void* data) { g_pCompositor->setWindowFullscreenInternal(PWINDOW, FSMODE_NONE); // Allow the renderer to catch the last frame. - g_pHyprRenderer->makeWindowSnapshot(PWINDOW); + if (g_pHyprRenderer->shouldRenderWindow(PWINDOW)) + g_pHyprRenderer->makeWindowSnapshot(PWINDOW); // swallowing if (valid(PWINDOW->m_swallowed)) { diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 9cbf091b..19d03fef 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1813,13 +1813,16 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra // // Dual (or more) kawase blur CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* originalDamage) { - if (!m_renderData.currentFB->getTexture()) { Debug::log(ERR, "BUG THIS: null fb texture while attempting to blur main fb?! (introspection off?!)"); return &m_renderData.pCurrentMonData->mirrorFB; // return something to sample from at least } - TRACY_GPU_ZONE("RenderBlurMainFramebufferWithDamage"); + return blurFramebufferWithDamage(a, originalDamage, *m_renderData.currentFB); +} + +CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* originalDamage, CFramebuffer& source) { + TRACY_GPU_ZONE("RenderBlurFramebufferWithDamage"); const auto BLENDBEFORE = m_blend; blend(false); @@ -1859,7 +1862,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o glActiveTexture(GL_TEXTURE0); - auto currentTex = m_renderData.currentFB->getTexture(); + auto currentTex = source.getTexture(); glBindTexture(currentTex->m_target, currentTex->m_texID); @@ -2226,7 +2229,7 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f // amazing hack: the surface has an opaque region! CRegion inverseOpaque; - if (a >= 1.f && std::round(pSurface->m_current.size.x * m_renderData.pMonitor->m_scale) == box.w && + if (a >= 1.f && pSurface && std::round(pSurface->m_current.size.x * m_renderData.pMonitor->m_scale) == box.w && std::round(pSurface->m_current.size.y * m_renderData.pMonitor->m_scale) == box.h) { pixman_box32_t surfbox = {0, 0, pSurface->m_current.size.x * pSurface->m_current.scale, pSurface->m_current.size.y * pSurface->m_current.scale}; inverseOpaque = pSurface->m_current.opaque; @@ -2249,7 +2252,6 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f inverseOpaque.translate(box.pos()); m_renderData.renderModif.applyToRegion(inverseOpaque); inverseOpaque.intersect(texDamage); - POUTFB = blurMainFramebufferWithDamage(a, &inverseOpaque); } else POUTFB = &m_renderData.pCurrentMonData->blurFB; diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 3c7a3169..17fe7f85 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -114,11 +114,12 @@ struct SMonitorRenderData { }; struct SCurrentRenderData { - PHLMONITORREF pMonitor; - Mat3x3 projection; - Mat3x3 savedProjection; - Mat3x3 monitorProjection; + PHLMONITORREF pMonitor; + Mat3x3 projection; + Mat3x3 savedProjection; + Mat3x3 monitorProjection; + // FIXME: raw pointer galore! SMonitorRenderData* pCurrentMonData = nullptr; CFramebuffer* currentFB = nullptr; // current rendering to CFramebuffer* mainFB = nullptr; // main to render to @@ -333,6 +334,7 @@ class CHyprOpenGLImpl { // returns the out FB, can be either Mirror or MirrorSwap CFramebuffer* blurMainFramebufferWithDamage(float a, CRegion* damage); + CFramebuffer* blurFramebufferWithDamage(float a, CRegion* damage, CFramebuffer& source); void passCMUniforms(const SShader&, const NColorManagement::SImageDescription& imageDescription, const NColorManagement::SImageDescription& targetImageDescription, bool modifySDR = false); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 343276c9..3abeb7bd 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -493,7 +493,6 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T // whether to use m_fMovingToWorkspaceAlpha, only if fading out into an invisible ws const bool USE_WORKSPACE_FADE_ALPHA = pWindow->m_monitorMovedFrom != -1 && (!PWORKSPACE || !PWORKSPACE->isVisible()); - const bool DONT_BLUR = pWindow->m_windowData.noBlur.valueOrDefault() || pWindow->m_windowData.RGBX.valueOrDefault() || pWindow->opaque(); renderdata.surface = pWindow->m_wlSurface->resource(); renderdata.dontRound = pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN) || pWindow->m_windowData.noRounding.valueOrDefault(); @@ -503,7 +502,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T renderdata.decorate = decorate && !pWindow->m_X11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN); renderdata.rounding = standalone || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->m_scale; renderdata.roundingPower = standalone || renderdata.dontRound ? 2.0f : pWindow->roundingPower(); - renderdata.blur = !standalone && *PBLUR && !DONT_BLUR; + renderdata.blur = !standalone && shouldBlur(pWindow); renderdata.pWindow = pWindow; if (standalone) { @@ -572,7 +571,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T if ((pWindow->m_isX11 && *PXWLUSENN) || pWindow->m_windowData.nearestNeighbor.valueOrDefault()) renderdata.useNearestNeighbor = true; - if (!pWindow->m_windowData.noBlur.valueOrDefault() && pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall && renderdata.blur && *PBLUR) { + if (pWindow->m_wlSurface->small() && !pWindow->m_wlSurface->m_fillIgnoreSmall && renderdata.blur) { CBox wb = {renderdata.pos.x - pMonitor->m_position.x, renderdata.pos.y - pMonitor->m_position.y, renderdata.w, renderdata.h}; wb.scale(pMonitor->m_scale).round(); CRectPassElement::SRectData data; @@ -712,8 +711,6 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s return; } - static auto PBLUR = CConfigValue("decoration:blur:enabled"); - TRACY_GPU_ZONE("RenderLayer"); const auto REALPOS = pLayer->m_realPosition->value(); @@ -721,7 +718,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s CSurfacePassElement::SRenderData renderdata = {pMonitor, time, REALPOS}; renderdata.fadeAlpha = pLayer->m_alpha->value(); - renderdata.blur = pLayer->m_forceBlur && *PBLUR; + renderdata.blur = shouldBlur(pLayer); renderdata.surface = pLayer->m_surface->resource(); renderdata.decorate = false; renderdata.w = REALSIZ.x; @@ -874,12 +871,15 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { renderLayer(ls.lock(), pMonitor, time); } + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { renderLayer(ls.lock(), pMonitor, time); } + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) { renderLayer(ls.lock(), pMonitor, time); } + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) { renderLayer(ls.lock(), pMonitor, time); } @@ -896,6 +896,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) { renderLayer(ls.lock(), pMonitor, time); } + for (auto const& ls : pMonitor->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) { renderLayer(ls.lock(), pMonitor, time); } @@ -940,9 +941,9 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA // special for (auto const& ws : g_pCompositor->m_workspaces) { if (ws->m_alpha->value() > 0.f && ws->m_isSpecialWorkspace) { - if (ws->m_hasFullscreenWindow) + if (ws->m_hasFullscreenWindow) { renderWorkspaceWindowsFullscreen(pMonitor, ws, time); - else + } else renderWorkspaceWindows(pMonitor, ws, time); } } @@ -2448,21 +2449,8 @@ void CHyprRenderer::makeWindowSnapshot(PHLWINDOW pWindow) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - // this is a hack but it works :P - // we need to disable blur or else we will get a black background, as the shader - // will try to copy the bg to apply blur. - // this isn't entirely correct, but like, oh well. - // small todo: maybe make this correct? :P - static auto* const PBLUR = (Hyprlang::INT* const*)(g_pConfigManager->getConfigValuePtr("decoration:blur:enabled")); - const auto BLURVAL = **PBLUR; - **PBLUR = 0; - - g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - renderWindow(pWindow, PMONITOR, Time::steadyNow(), !pWindow->m_X11DoesntWantBorders, RENDER_PASS_ALL); - **PBLUR = BLURVAL; - endRender(); m_bRenderingSnapshot = false; @@ -2492,14 +2480,9 @@ void CHyprRenderer::makeLayerSnapshot(PHLLS pLayer) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 0)); // JIC - const auto BLURLSSTATUS = pLayer->m_forceBlur; - pLayer->m_forceBlur = false; - // draw the layer renderLayer(pLayer, PMONITOR, Time::steadyNow()); - pLayer->m_forceBlur = BLURLSSTATUS; - endRender(); m_bRenderingSnapshot = false; @@ -2534,7 +2517,6 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { CRegion fakeDamage{0, 0, PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y}; if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault()) { - CRectPassElement::SRectData data; data.box = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.y}; @@ -2544,6 +2526,19 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { damageMonitor(PMONITOR); } + if (shouldBlur(pWindow)) { + CRectPassElement::SRectData data; + data.box = CBox{pWindow->m_realPosition->value(), pWindow->m_realSize->value()}.translate(-PMONITOR->m_position).scale(PMONITOR->m_scale).round(); + data.color = CHyprColor{0, 0, 0, 0}; + data.blur = true; + data.blurA = sqrt(pWindow->m_alpha->value()); // sqrt makes the blur fadeout more realistic. + data.round = pWindow->rounding(); + data.roundingPower = pWindow->roundingPower(); + data.xray = pWindow->m_windowData.xray.valueOr(false); + + m_renderPass.add(makeShared(data)); + } + CTexPassElement::SRenderData data; data.flipEndFrame = true; data.tex = FBDATA->getTexture(); @@ -2580,12 +2575,35 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) { CRegion fakeDamage{0, 0, PMONITOR->m_transformedSize.x, PMONITOR->m_transformedSize.y}; + const bool SHOULD_BLUR = shouldBlur(pLayer); + CTexPassElement::SRenderData data; data.flipEndFrame = true; data.tex = FBDATA->getTexture(); data.box = layerBox; data.a = pLayer->m_alpha->value(); data.damage = fakeDamage; + data.blur = SHOULD_BLUR; + data.blurA = sqrt(pLayer->m_alpha->value()); // sqrt makes the blur fadeout more realistic. + if (SHOULD_BLUR) + data.ignoreAlpha = pLayer->m_ignoreAlpha ? pLayer->m_ignoreAlphaValue : 0.01F /* ignore the alpha 0 regions */; m_renderPass.add(makeShared(data)); } + +bool CHyprRenderer::shouldBlur(PHLLS ls) { + if (m_bRenderingSnapshot) + return false; + + static auto PBLUR = CConfigValue("decoration:blur:enabled"); + return *PBLUR && ls->m_forceBlur; +} + +bool CHyprRenderer::shouldBlur(PHLWINDOW w) { + if (m_bRenderingSnapshot) + return false; + + static auto PBLUR = CConfigValue("decoration:blur:enabled"); + const bool DONT_BLUR = w->m_windowData.noBlur.valueOrDefault() || w->m_windowData.RGBX.valueOrDefault() || w->opaque(); + return *PBLUR && !DONT_BLUR; +} diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 29d7464b..77e1fcf0 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -45,6 +45,11 @@ struct SExplicitSyncSettings { bool explicitEnabled = false, explicitKMSEnabled = false; }; +struct SRenderWorkspaceUntilData { + PHLLS ls; + PHLWINDOW w; +}; + class CHyprRenderer { public: CHyprRenderer(); @@ -117,20 +122,23 @@ class CHyprRenderer { private: void arrangeLayerArray(PHLMONITOR, const std::vector&, bool, CBox*); + void renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const CBox& geometry); void renderWorkspaceWindowsFullscreen(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) void renderWorkspaceWindows(PHLMONITOR, PHLWORKSPACE, const Time::steady_tp&); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) + void renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); void renderWindow(PHLWINDOW, PHLMONITOR, const Time::steady_tp&, bool, eRenderPassMode, bool ignorePosition = false, bool standalone = false); void renderLayer(PHLLS, PHLMONITOR, const Time::steady_tp&, bool popups = false, bool lockscreen = false); void renderSessionLockSurface(WP, PHLMONITOR, const Time::steady_tp&); void renderDragIcon(PHLMONITOR, const Time::steady_tp&); void renderIMEPopup(CInputPopup*, PHLMONITOR, const Time::steady_tp&); - void renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const CBox& geometry); void sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now); // sends frame displayed events but doesn't actually render anything - void renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, const Time::steady_tp& now, const Vector2D& translate = {0, 0}, const float& scale = 1.f); void renderSessionLockMissing(PHLMONITOR pMonitor); bool commitPendingAndDoExplicitSync(PHLMONITOR pMonitor); + bool shouldBlur(PHLLS ls); + bool shouldBlur(PHLWINDOW w); + bool m_cursorHidden = false; bool m_cursorHasSurface = false; SP m_currentRenderbuffer = nullptr; diff --git a/src/render/pass/TexPassElement.cpp b/src/render/pass/TexPassElement.cpp index b27f1032..e6f4d052 100644 --- a/src/render/pass/TexPassElement.cpp +++ b/src/render/pass/TexPassElement.cpp @@ -11,10 +11,14 @@ CTexPassElement::CTexPassElement(const CTexPassElement::SRenderData& data_) : m_ void CTexPassElement::draw(const CRegion& damage) { g_pHyprOpenGL->m_endFrame = m_data.flipEndFrame; - CScopeGuard x = {[]() { + CScopeGuard x = {[this]() { // g_pHyprOpenGL->m_endFrame = false; g_pHyprOpenGL->m_renderData.clipBox = {}; + if (m_data.replaceProjection) + g_pHyprOpenGL->m_renderData.monitorProjection = g_pHyprOpenGL->m_renderData.pMonitor->m_projMatrix; + if (m_data.ignoreAlpha.has_value()) + g_pHyprOpenGL->m_renderData.discardMode = 0; }}; if (!m_data.clipBox.empty()) @@ -22,9 +26,16 @@ void CTexPassElement::draw(const CRegion& damage) { if (m_data.replaceProjection) g_pHyprOpenGL->m_renderData.monitorProjection = *m_data.replaceProjection; - g_pHyprOpenGL->renderTextureInternalWithDamage(m_data.tex, m_data.box, m_data.a, m_data.damage.empty() ? damage : m_data.damage, m_data.round, m_data.roundingPower); - if (m_data.replaceProjection) - g_pHyprOpenGL->m_renderData.monitorProjection = g_pHyprOpenGL->m_renderData.pMonitor->m_projMatrix; + + if (m_data.ignoreAlpha.has_value()) { + g_pHyprOpenGL->m_renderData.discardMode = DISCARD_ALPHA; + g_pHyprOpenGL->m_renderData.discardOpacity = *m_data.ignoreAlpha; + } + + if (m_data.blur) + g_pHyprOpenGL->renderTextureWithBlur(m_data.tex, m_data.box, m_data.a, nullptr, m_data.round, m_data.roundingPower, false, m_data.blurA, 1.F); + else + g_pHyprOpenGL->renderTextureInternalWithDamage(m_data.tex, m_data.box, m_data.a, m_data.damage.empty() ? damage : m_data.damage, m_data.round, m_data.roundingPower); } bool CTexPassElement::needsLiveBlur() { diff --git a/src/render/pass/TexPassElement.hpp b/src/render/pass/TexPassElement.hpp index e98edd60..a9206d2d 100644 --- a/src/render/pass/TexPassElement.hpp +++ b/src/render/pass/TexPassElement.hpp @@ -11,13 +11,16 @@ class CTexPassElement : public IPassElement { struct SRenderData { SP tex; CBox box; - float a = 1.F; + float a = 1.F; + float blurA = 1.F; CRegion damage; int round = 0; float roundingPower = 2.0f; bool flipEndFrame = false; std::optional replaceProjection; CBox clipBox; + bool blur = false; + std::optional ignoreAlpha; }; CTexPassElement(const SRenderData& data); From 9a87498bb1cb923dec04807fb3fb1f66bd2c2580 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 10 May 2025 23:53:05 +0100 Subject: [PATCH 0182/1077] renderer: minor damage fixes --- src/render/Renderer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 3abeb7bd..77c19697 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -175,7 +175,7 @@ bool CHyprRenderer::shouldRenderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor) { return false; if (!pWindow->m_workspace && pWindow->m_fadingOut) - return pWindow->workspaceID() == pMonitor->activeWorkspaceID(); + return pWindow->workspaceID() == pMonitor->activeWorkspaceID() || pWindow->workspaceID() == pMonitor->activeSpecialWorkspaceID(); if (pWindow->m_pinned) return true; @@ -2523,7 +2523,6 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) { data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_alpha->value()); m_renderPass.add(makeShared(data)); - damageMonitor(PMONITOR); } if (shouldBlur(pWindow)) { From 390a357859e702b6416194291e0eb168270d50ac Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 11 May 2025 13:15:03 +0100 Subject: [PATCH 0183/1077] renderer: use alpha for the lockttytext texture ref #10348 --- src/render/Renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 77c19697..354d4cce 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1037,7 +1037,7 @@ void CHyprRenderer::renderSessionLockMissing(PHLMONITOR pMonitor) { // also render text for the tty number if (g_pHyprOpenGL->m_lockTtyTextTexture) { CBox texbox = {{}, g_pHyprOpenGL->m_lockTtyTextTexture->m_size}; - g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_lockTtyTextTexture, texbox, 1.F); + g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_lockTtyTextTexture, texbox, ALPHA); } } From 04124988e8b4a9cdfc5995388ebfaad0005b4b31 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Sun, 11 May 2025 18:36:20 +0200 Subject: [PATCH 0184/1077] opengl: optimize shaders and reduce unneeded drawcalls (#10364) * opengl: remove unnecessery glflush calls glflushing forces the driver to break batching and issue commands prematurely and prevents optimisations like command reordering and merging. many glFunctions already internally glflushes and eglsync creation still has a glflush at end render. so lets reduce the overhead of these calls. * opengl: reduce glUseProgram calls apitrace shows cases where the same program gets called multiple times, add a helper function that keeps track of current program and only call it once on same program. reduces slight overhead. * opengl: use more efficient vertex array object use a more modern vertex array object approach with the shaders, makes it a onetime setup on shader creation instead of once per drawcall, also should make the driver not have to revalidate the vertex format on each call. --- src/Compositor.cpp | 1 - src/managers/PointerManager.cpp | 1 - src/render/OpenGL.cpp | 159 +++++++++++++------------------- src/render/OpenGL.hpp | 2 + src/render/Renderer.cpp | 3 - src/render/Shader.cpp | 36 +++++++- src/render/Shader.hpp | 5 + 7 files changed, 108 insertions(+), 99 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index ece6691a..973cb26b 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1487,7 +1487,6 @@ void CCompositor::cleanupFadingOut(const MONITORID& monid) { Debug::log(LOG, "Cleanup: destroyed a layersurface"); - glFlush(); // to free mem NOW. return; } } diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 5415e7be..7bd66c5d 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -584,7 +584,6 @@ SP CPointerManager::renderHWCursorBuffer(SPrenderTexture(texture, xbox, 1.F); g_pHyprOpenGL->end(); - glFlush(); g_pHyprOpenGL->m_renderData.pMonitor.reset(); g_pHyprRenderer->onRenderbufferDestroy(RBO.get()); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 19d03fef..7d1b9db9 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -977,6 +977,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shCM.applyTint = glGetUniformLocation(prog, "applyTint"); shaders->m_shCM.tint = glGetUniformLocation(prog, "tint"); shaders->m_shCM.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); + shaders->m_shCM.createVao(); } else Debug::log(ERR, "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports " @@ -1006,6 +1007,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shQUAD.proj = glGetUniformLocation(prog, "proj"); shaders->m_shQUAD.color = glGetUniformLocation(prog, "color"); shaders->m_shQUAD.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shQUAD.createVao(); prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBA, isDynamic); if (!prog) @@ -1025,6 +1027,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shRGBA.applyTint = glGetUniformLocation(prog, "applyTint"); shaders->m_shRGBA.tint = glGetUniformLocation(prog, "tint"); shaders->m_shRGBA.useAlphaMatte = glGetUniformLocation(prog, "useAlphaMatte"); + shaders->m_shRGBA.createVao(); prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBAPASSTHRU, isDynamic); if (!prog) @@ -1034,6 +1037,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shPASSTHRURGBA.tex = glGetUniformLocation(prog, "tex"); shaders->m_shPASSTHRURGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); shaders->m_shPASSTHRURGBA.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shPASSTHRURGBA.createVao(); prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBAMATTE, isDynamic); if (!prog) @@ -1044,6 +1048,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shMATTE.alphaMatte = glGetUniformLocation(prog, "texMatte"); shaders->m_shMATTE.texAttrib = glGetAttribLocation(prog, "texcoord"); shaders->m_shMATTE.posAttrib = glGetAttribLocation(prog, "pos"); + shaders->m_shMATTE.createVao(); prog = createProgram(shaders->TEXVERTSRC, FRAGGLITCH, isDynamic); if (!prog) @@ -1056,6 +1061,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shGLITCH.distort = glGetUniformLocation(prog, "distort"); shaders->m_shGLITCH.time = glGetUniformLocation(prog, "time"); shaders->m_shGLITCH.fullSize = glGetUniformLocation(prog, "screenSize"); + shaders->m_shGLITCH.createVao(); prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCRGBX, isDynamic); if (!prog) @@ -1072,6 +1078,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shRGBX.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); shaders->m_shRGBX.applyTint = glGetUniformLocation(prog, "applyTint"); shaders->m_shRGBX.tint = glGetUniformLocation(prog, "tint"); + shaders->m_shRGBX.createVao(); prog = createProgram(shaders->TEXVERTSRC, TEXFRAGSRCEXT, isDynamic); if (!prog) @@ -1088,6 +1095,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shEXT.discardAlphaValue = glGetUniformLocation(prog, "discardAlphaValue"); shaders->m_shEXT.applyTint = glGetUniformLocation(prog, "applyTint"); shaders->m_shEXT.tint = glGetUniformLocation(prog, "tint"); + shaders->m_shEXT.createVao(); prog = createProgram(shaders->TEXVERTSRC, FRAGBLUR1, isDynamic); if (!prog) @@ -1103,6 +1111,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLUR1.passes = glGetUniformLocation(prog, "passes"); shaders->m_shBLUR1.vibrancy = glGetUniformLocation(prog, "vibrancy"); shaders->m_shBLUR1.vibrancy_darkness = glGetUniformLocation(prog, "vibrancy_darkness"); + shaders->m_shBLUR1.createVao(); prog = createProgram(shaders->TEXVERTSRC, FRAGBLUR2, isDynamic); if (!prog) @@ -1115,6 +1124,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLUR2.texAttrib = glGetAttribLocation(prog, "texcoord"); shaders->m_shBLUR2.radius = glGetUniformLocation(prog, "radius"); shaders->m_shBLUR2.halfpixel = glGetUniformLocation(prog, "halfpixel"); + shaders->m_shBLUR2.createVao(); prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURPREPARE, isDynamic); if (!prog) @@ -1129,6 +1139,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLURPREPARE.texAttrib = glGetAttribLocation(prog, "texcoord"); shaders->m_shBLURPREPARE.contrast = glGetUniformLocation(prog, "contrast"); shaders->m_shBLURPREPARE.brightness = glGetUniformLocation(prog, "brightness"); + shaders->m_shBLURPREPARE.createVao(); prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBLURFINISH, isDynamic); if (!prog) @@ -1142,6 +1153,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBLURFINISH.texAttrib = glGetAttribLocation(prog, "texcoord"); shaders->m_shBLURFINISH.brightness = glGetUniformLocation(prog, "brightness"); shaders->m_shBLURFINISH.noise = glGetUniformLocation(prog, "noise"); + shaders->m_shBLURFINISH.createVao(); prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGSHADOW, isDynamic); if (!prog) @@ -1157,6 +1169,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shSHADOW.range = glGetUniformLocation(prog, "range"); shaders->m_shSHADOW.shadowPower = glGetUniformLocation(prog, "shadowPower"); shaders->m_shSHADOW.color = glGetUniformLocation(prog, "color"); + shaders->m_shSHADOW.createVao(); prog = createProgram(m_cmSupported ? shaders->TEXVERTSRC300 : shaders->TEXVERTSRC, FRAGBORDER1, isDynamic); if (!prog) @@ -1181,6 +1194,8 @@ bool CHyprOpenGLImpl::initShaders() { shaders->m_shBORDER1.angle2 = glGetUniformLocation(prog, "angle2"); shaders->m_shBORDER1.gradientLerp = glGetUniformLocation(prog, "gradientLerp"); shaders->m_shBORDER1.alpha = glGetUniformLocation(prog, "alpha"); + shaders->m_shBORDER1.createVao(); + } catch (const std::exception& e) { if (!m_shadersInitialized) throw e; @@ -1375,7 +1390,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co newBox, wlTransformToHyprutils(invertTransform(!m_endFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_renderData.pMonitor->m_transform)), newBox.rot); Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); - glUseProgram(m_shaders->m_shQUAD.program); + useProgram(m_shaders->m_shQUAD.program); #ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shQUAD.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -1400,9 +1415,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co glUniform1f(m_shaders->m_shQUAD.radius, round); glUniform1f(m_shaders->m_shQUAD.roundingPower, roundingPower); - glVertexAttribPointer(m_shaders->m_shQUAD.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shQUAD.posAttrib); + glBindVertexArray(m_shaders->m_shQUAD.shaderVao); if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; @@ -1421,7 +1434,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co } } - glDisableVertexAttribArray(m_shaders->m_shQUAD.posAttrib); + glBindVertexArray(0); scissor(nullptr); } @@ -1581,7 +1594,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB if (!skipCM && !usingFinalShader && (texType == TEXTURE_RGBA || texType == TEXTURE_RGBX)) shader = &m_shaders->m_shCM; - glUseProgram(shader->program); + useProgram(shader->program); if (shader == &m_shaders->m_shCM) { glUniform1i(shader->texType, texType); @@ -1655,22 +1668,20 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glUniform1i(shader->applyTint, 0); } - const float verts[] = { - m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVTopLeft.y, // top right - m_renderData.primarySurfaceUVTopLeft.x, m_renderData.primarySurfaceUVTopLeft.y, // top left - m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVBottomRight.y, // bottom right - m_renderData.primarySurfaceUVTopLeft.x, m_renderData.primarySurfaceUVBottomRight.y, // bottom left - }; + glBindVertexArray(shader->shaderVao); + if (allowCustomUV && m_renderData.primarySurfaceUVTopLeft != Vector2D(-1, -1)) { + const float customUVs[] = { + m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVTopLeft.y, m_renderData.primarySurfaceUVTopLeft.x, + m_renderData.primarySurfaceUVTopLeft.y, m_renderData.primarySurfaceUVBottomRight.x, m_renderData.primarySurfaceUVBottomRight.y, + m_renderData.primarySurfaceUVTopLeft.x, m_renderData.primarySurfaceUVBottomRight.y, + }; - glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - if (allowCustomUV && m_renderData.primarySurfaceUVTopLeft != Vector2D(-1, -1)) - glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, verts); - else - glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(shader->posAttrib); - glEnableVertexAttribArray(shader->texAttrib); + glBindBuffer(GL_ARRAY_BUFFER, shader->shaderVboUv); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(customUVs), customUVs); + } else { + glBindBuffer(GL_ARRAY_BUFFER, shader->shaderVboUv); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(fullVerts), fullVerts); + } if (!m_renderData.clipBox.empty() || !m_renderData.clipRegion.empty()) { CRegion damageClip = m_renderData.clipBox; @@ -1695,9 +1706,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB } } - glDisableVertexAttribArray(shader->posAttrib); - glDisableVertexAttribArray(shader->texAttrib); - + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); glBindTexture(tex->m_target, 0); } @@ -1723,7 +1733,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) glActiveTexture(GL_TEXTURE0); glBindTexture(tex->m_target, tex->m_texID); - glUseProgram(shader->program); + useProgram(shader->program); #ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -1733,11 +1743,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) #endif glUniform1i(shader->tex, 0); - glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(shader->posAttrib); - glEnableVertexAttribArray(shader->texAttrib); + glBindVertexArray(shader->shaderVao); for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); @@ -1746,9 +1752,7 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) scissor(nullptr); - glDisableVertexAttribArray(shader->posAttrib); - glDisableVertexAttribArray(shader->texAttrib); - + glBindVertexArray(0); glBindTexture(tex->m_target, 0); } @@ -1771,7 +1775,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra SShader* shader = &m_shaders->m_shMATTE; - glUseProgram(shader->program); + useProgram(shader->program); #ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -1789,11 +1793,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra auto matteTex = matte.getTexture(); glBindTexture(matteTex->m_target, matteTex->m_texID); - glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(shader->posAttrib); - glEnableVertexAttribArray(shader->texAttrib); + glBindVertexArray(shader->shaderVao); for (auto const& RECT : m_renderData.damage.getRects()) { scissor(&RECT); @@ -1802,9 +1802,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra scissor(nullptr); - glDisableVertexAttribArray(shader->posAttrib); - glDisableVertexAttribArray(shader->texAttrib); - + glBindVertexArray(0); glBindTexture(tex->m_target, 0); } @@ -1868,7 +1866,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glUseProgram(m_shaders->m_shBLURPREPARE.program); + useProgram(m_shaders->m_shBLURPREPARE.program); // From FB to sRGB const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; @@ -1897,11 +1895,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glUniform1f(m_shaders->m_shBLURPREPARE.brightness, *PBLURBRIGHTNESS); glUniform1i(m_shaders->m_shBLURPREPARE.tex, 0); - glVertexAttribPointer(m_shaders->m_shBLURPREPARE.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_shaders->m_shBLURPREPARE.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shBLURPREPARE.posAttrib); - glEnableVertexAttribArray(m_shaders->m_shBLURPREPARE.texAttrib); + glBindVertexArray(m_shaders->m_shBLURPREPARE.shaderVao); if (!damage.empty()) { for (auto const& RECT : damage.getRects()) { @@ -1910,9 +1904,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi } } - glDisableVertexAttribArray(m_shaders->m_shBLURPREPARE.posAttrib); - glDisableVertexAttribArray(m_shaders->m_shBLURPREPARE.texAttrib); - + glBindVertexArray(0); currentRenderToFB = PMIRRORSWAPFB; } @@ -1931,7 +1923,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glUseProgram(pShader->program); + useProgram(pShader->program); // prep two shaders #ifndef GLES2 @@ -1950,12 +1942,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glUniform2f(m_shaders->m_shBLUR2.halfpixel, 0.5f / (m_renderData.pMonitor->m_pixelSize.x * 2.f), 0.5f / (m_renderData.pMonitor->m_pixelSize.y * 2.f)); glUniform1i(pShader->tex, 0); - glVertexAttribPointer(pShader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(pShader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(pShader->posAttrib); - glEnableVertexAttribArray(pShader->texAttrib); - + glBindVertexArray(pShader->shaderVao); if (!pDamage->empty()) { for (auto const& RECT : pDamage->getRects()) { scissor(&RECT, false /* this region is already transformed */); @@ -1963,8 +1950,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi } } - glDisableVertexAttribArray(pShader->posAttrib); - glDisableVertexAttribArray(pShader->texAttrib); + glBindVertexArray(0); if (currentRenderToFB != PMIRRORFB) currentRenderToFB = PMIRRORFB; @@ -2009,7 +1995,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glUseProgram(m_shaders->m_shBLURFINISH.program); + useProgram(m_shaders->m_shBLURFINISH.program); #ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBLURFINISH.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -2022,11 +2008,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glUniform1i(m_shaders->m_shBLURFINISH.tex, 0); - glVertexAttribPointer(m_shaders->m_shBLURFINISH.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_shaders->m_shBLURFINISH.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shBLURFINISH.posAttrib); - glEnableVertexAttribArray(m_shaders->m_shBLURFINISH.texAttrib); + glBindVertexArray(m_shaders->m_shBLURFINISH.shaderVao); if (!damage.empty()) { for (auto const& RECT : damage.getRects()) { @@ -2035,8 +2017,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi } } - glDisableVertexAttribArray(m_shaders->m_shBLURFINISH.posAttrib); - glDisableVertexAttribArray(m_shaders->m_shBLURFINISH.texAttrib); + glBindVertexArray(0); if (currentRenderToFB != PMIRRORFB) currentRenderToFB = PMIRRORFB; @@ -2352,7 +2333,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto BLEND = m_blend; blend(true); - glUseProgram(m_shaders->m_shBORDER1.program); + useProgram(m_shaders->m_shBORDER1.program); const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shBORDER1.skipCM, skipCM); @@ -2387,11 +2368,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1f(m_shaders->m_shBORDER1.roundingPower, roundingPower); glUniform1f(m_shaders->m_shBORDER1.thick, scaledBorderSize); - glVertexAttribPointer(m_shaders->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_shaders->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); - glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); + glBindVertexArray(m_shaders->m_shBORDER1.shaderVao); if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; @@ -2410,8 +2387,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } - glDisableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); - glDisableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); + glBindVertexArray(0); blend(BLEND); } @@ -2450,7 +2426,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr const auto BLEND = m_blend; blend(true); - glUseProgram(m_shaders->m_shBORDER1.program); + useProgram(m_shaders->m_shBORDER1.program); #ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); @@ -2484,11 +2460,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform1f(m_shaders->m_shBORDER1.roundingPower, roundingPower); glUniform1f(m_shaders->m_shBORDER1.thick, scaledBorderSize); - glVertexAttribPointer(m_shaders->m_shBORDER1.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_shaders->m_shBORDER1.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); - glEnableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); + glBindVertexArray(m_shaders->m_shBORDER1.shaderVao); if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; @@ -2507,9 +2479,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr } } - glDisableVertexAttribArray(m_shaders->m_shBORDER1.posAttrib); - glDisableVertexAttribArray(m_shaders->m_shBORDER1.texAttrib); - + glBindVertexArray(0); blend(BLEND); } @@ -2538,7 +2508,7 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun blend(true); - glUseProgram(m_shaders->m_shSHADOW.program); + useProgram(m_shaders->m_shSHADOW.program); const bool skipCM = !m_cmSupported || m_renderData.pMonitor->m_imageDescription == SImageDescription{}; glUniform1i(m_shaders->m_shSHADOW.skipCM, skipCM); if (!skipCM) @@ -2565,11 +2535,7 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun glUniform1f(m_shaders->m_shSHADOW.range, range); glUniform1f(m_shaders->m_shSHADOW.shadowPower, SHADOWPOWER); - glVertexAttribPointer(m_shaders->m_shSHADOW.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - glVertexAttribPointer(m_shaders->m_shSHADOW.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts); - - glEnableVertexAttribArray(m_shaders->m_shSHADOW.posAttrib); - glEnableVertexAttribArray(m_shaders->m_shSHADOW.texAttrib); + glBindVertexArray(m_shaders->m_shSHADOW.shaderVao); if (m_renderData.clipBox.width != 0 && m_renderData.clipBox.height != 0) { CRegion damageClip{m_renderData.clipBox.x, m_renderData.clipBox.y, m_renderData.clipBox.width, m_renderData.clipBox.height}; @@ -2588,8 +2554,7 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun } } - glDisableVertexAttribArray(m_shaders->m_shSHADOW.posAttrib); - glDisableVertexAttribArray(m_shaders->m_shSHADOW.texAttrib); + glBindVertexArray(0); } void CHyprOpenGLImpl::saveBufferForMirror(const CBox& box) { @@ -2861,6 +2826,14 @@ void CHyprOpenGLImpl::initMissingAssetTexture() { m_missingAssetTexture = tex; } +void CHyprOpenGLImpl::useProgram(GLuint prog) { + if (m_currentProgram == prog) + return; + + glUseProgram(prog); + m_currentProgram = prog; +} + void CHyprOpenGLImpl::initAssets() { initMissingAssetTexture(); diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 17fe7f85..5d76bba8 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -312,6 +312,7 @@ class CHyprOpenGLImpl { SShader m_finalScreenShader; CTimer m_globalTimer; + GLuint m_currentProgram; SP m_missingAssetTexture; SP m_backgroundTexture; @@ -328,6 +329,7 @@ class CHyprOpenGLImpl { EGLDeviceEXT eglDeviceFromDRMFD(int drmFD); void initAssets(); void initMissingAssetTexture(); + void useProgram(GLuint prog); // std::optional> getModsForFormat(EGLint format); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 354d4cce..982e2ed8 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2280,9 +2280,6 @@ void CHyprRenderer::endRender(const std::function& renderingDoneCallback g_pHyprOpenGL->m_renderData.mouseZoomUseMouse = true; } - // send all queued opengl commands so rendering starts happening immediately - glFlush(); - if (m_renderMode == RENDER_MODE_FULL_FAKE) return; diff --git a/src/render/Shader.cpp b/src/render/Shader.cpp index 7b22c83a..7201d1c0 100644 --- a/src/render/Shader.cpp +++ b/src/render/Shader.cpp @@ -1,14 +1,48 @@ #include "Shader.hpp" +#include "render/OpenGL.hpp" SShader::~SShader() { destroy(); } +void SShader::createVao() { + glGenVertexArrays(1, &shaderVao); + glBindVertexArray(shaderVao); + + if (posAttrib != -1) { + glGenBuffers(1, &shaderVboPos); + glBindBuffer(GL_ARRAY_BUFFER, shaderVboPos); + glBufferData(GL_ARRAY_BUFFER, sizeof(fullVerts), fullVerts, GL_STATIC_DRAW); + glEnableVertexAttribArray(posAttrib); + glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); + } + + // UV VBO (dynamic, may be updated per frame) + if (texAttrib != -1) { + glGenBuffers(1, &shaderVboUv); + glBindBuffer(GL_ARRAY_BUFFER, shaderVboUv); + glBufferData(GL_ARRAY_BUFFER, sizeof(fullVerts), fullVerts, GL_DYNAMIC_DRAW); // Initial dummy UVs + glEnableVertexAttribArray(texAttrib); + glVertexAttribPointer(texAttrib, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); + } + + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); +} + void SShader::destroy() { if (program == 0) return; - glDeleteProgram(program); + if (shaderVao) + glDeleteVertexArrays(1, &shaderVao); + if (shaderVboPos) + glDeleteBuffers(1, &shaderVboPos); + + if (shaderVboUv) + glDeleteBuffers(1, &shaderVboUv); + + glDeleteProgram(program); program = 0; } diff --git a/src/render/Shader.hpp b/src/render/Shader.hpp index d23d2d5a..7bed9041 100644 --- a/src/render/Shader.hpp +++ b/src/render/Shader.hpp @@ -32,6 +32,10 @@ struct SShader { GLint discardAlpha = -1; GLfloat discardAlphaValue = -1; + GLuint shaderVao = 0; + GLuint shaderVboPos = 0; + GLuint shaderVboUv = 0; + GLint topLeft = -1; GLint bottomRight = -1; GLint fullSize = -1; @@ -76,5 +80,6 @@ struct SShader { GLint brightness = -1; GLint noise = -1; + void createVao(); void destroy(); }; From da3583fd5e86044d02af9fcfac84724e02545336 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Mon, 12 May 2025 05:15:47 -0700 Subject: [PATCH 0185/1077] opengl: publicize shader creation/usage functions (#10378) Allows plugins to create and use shaders again --- src/render/OpenGL.hpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 5d76bba8..09aff9da 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -240,6 +240,11 @@ class CHyprOpenGLImpl { EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs); bool initShaders(); + + GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false); + GLuint compileShader(const GLuint&, std::string, bool dynamic = false, bool silent = false); + void useProgram(GLuint prog); + bool m_shadersInitialized = false; SP m_shaders; @@ -321,15 +326,12 @@ class CHyprOpenGLImpl { SP m_lockTtyTextTexture; // TODO: don't always load lock void logShaderError(const GLuint&, bool program = false, bool silent = false); - GLuint createProgram(const std::string&, const std::string&, bool dynamic = false, bool silent = false); - GLuint compileShader(const GLuint&, std::string, bool dynamic = false, bool silent = false); void createBGTextureForMonitor(PHLMONITOR); void initDRMFormats(); void initEGL(bool gbm); EGLDeviceEXT eglDeviceFromDRMFD(int drmFD); void initAssets(); void initMissingAssetTexture(); - void useProgram(GLuint prog); // std::optional> getModsForFormat(EGLint format); From 59b23406804d0c6aa37dc40c271852e697759663 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Wed, 14 May 2025 00:46:29 +0200 Subject: [PATCH 0186/1077] opengl: add missing vao for screenshader (#10397) missed creating vertex array objects in 04124988e8b4a9cdfc5995388ebfaad0005b4b31 add it. --- src/render/OpenGL.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 7d1b9db9..c4223085 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1262,6 +1262,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { } m_finalScreenShader.texAttrib = glGetAttribLocation(m_finalScreenShader.program, "texcoord"); m_finalScreenShader.posAttrib = glGetAttribLocation(m_finalScreenShader.program, "pos"); + m_finalScreenShader.createVao(); } void CHyprOpenGLImpl::clear(const CHyprColor& color) { From a51e639d81b445ad00c5403198e0c1f6c18ed303 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Wed, 14 May 2025 17:48:17 +0100 Subject: [PATCH 0187/1077] input: disallow virtual keyboards from changing LED state (#10402) --- src/managers/input/InputManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 68769987..cd603ca5 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1368,7 +1368,7 @@ void CInputManager::destroyTabletPad(SP pad) { } void CInputManager::updateKeyboardsLeds(SP pKeyboard) { - if (!pKeyboard) + if (!pKeyboard || pKeyboard->isVirtual()) return; std::optional leds = pKeyboard->getLEDs(); From 75f2cb5f6559ca6ca7c6300b270e5ddc3fdabe31 Mon Sep 17 00:00:00 2001 From: Yukari Chiba Date: Thu, 15 May 2025 02:31:19 +0800 Subject: [PATCH 0188/1077] xwayland: do not include xcb.h when xwayland is disabled (#10407) xcb.h should not be included when xwayland is disabled. This allows hyprland to not use X11 libraries at all when xwayland is disabled. --- src/xwayland/Dnd.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/xwayland/Dnd.hpp b/src/xwayland/Dnd.hpp index 58129741..33c841a5 100644 --- a/src/xwayland/Dnd.hpp +++ b/src/xwayland/Dnd.hpp @@ -5,7 +5,9 @@ #include "../managers/input/InputManager.hpp" #include #include +#ifndef NO_XWAYLAND #include +#endif #define XDND_VERSION 5 From f707d86912fa75c19920818321aec99d1f287c46 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Thu, 15 May 2025 02:12:55 -0700 Subject: [PATCH 0189/1077] protocols/hyprland-surface: account for scaled monitor positions (#10415) --- src/render/pass/SurfacePassElement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index ed699a02..d161f909 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -273,7 +273,7 @@ CRegion CSurfacePassElement::visibleRegion(bool& cancel) { texBox.round(); visibleRegion.scale((Vector2D(1, 1) / (uvBR - uvTL)) * (texBox.size() / bufferSize)); - visibleRegion.translate((m_data.pos + m_data.localPos) * m_data.pMonitor->m_scale - m_data.pMonitor->m_position); + visibleRegion.translate((m_data.pos + m_data.localPos - m_data.pMonitor->m_position) * m_data.pMonitor->m_scale); return visibleRegion; } From 5ceb0ec15df6301cafe95a1b1f73b4f4bf255968 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 15 May 2025 11:13:24 +0200 Subject: [PATCH 0190/1077] core: drop the legacy renderer (#10408) * core: drop the legacy renderer the legacy renderer is broken and barely used, drop it. * Nix: drop support for legacyRenderer --------- Co-authored-by: Mihai Fufezan --- CMakeLists.txt | 11 +- Makefile | 8 -- flake.nix | 1 - meson.build | 4 - meson_options.txt | 1 - nix/default.nix | 6 +- nix/overlays.nix | 8 +- src/debug/CrashReporter.cpp | 3 - src/debug/HyprCtl.cpp | 8 +- src/debug/HyprDebugOverlay.cpp | 3 - src/debug/HyprNotificationOverlay.cpp | 3 - src/helpers/Format.cpp | 111 +++++------------- src/hyprerror/HyprError.cpp | 3 - src/includes.hpp | 6 - src/protocols/Screencopy.cpp | 8 -- src/protocols/ToplevelExport.cpp | 6 - src/render/Framebuffer.cpp | 14 --- src/render/OpenGL.cpp | 107 +---------------- src/render/Texture.cpp | 6 +- .../decorations/CHyprGroupBarDecoration.cpp | 3 - 20 files changed, 50 insertions(+), 270 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16007dc5..4267a59d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,11 +99,7 @@ message(STATUS "Checking deps...") find_package(Threads REQUIRED) -if(LEGACY_RENDERER) - set(GLES_VERSION "GLES2") -else() - set(GLES_VERSION "GLES3") -endif() +set(GLES_VERSION "GLES3") find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION}) pkg_check_modules(aquamarine_dep REQUIRED IMPORTED_TARGET aquamarine>=0.8.0) @@ -216,11 +212,6 @@ if(NOT HAS_INOTIFY AND inotify_FOUND) target_link_libraries(Hyprland PkgConfig::inotify) endif() -if(LEGACY_RENDERER) - message(STATUS "Using the legacy GLES2 renderer!") - add_compile_definitions(LEGACY_RENDERER) -endif() - if(NO_XWAYLAND) message(STATUS "Using the NO_XWAYLAND flag, disabling XWayland!") add_compile_definitions(NO_XWAYLAND) diff --git a/Makefile b/Makefile index 7405cfad..01d1d650 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,6 @@ PREFIX = /usr/local stub: @echo "Do not run $(MAKE) directly without any arguments. Please refer to the wiki on how to compile Hyprland." -legacyrenderer: - cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -DLEGACY_RENDERER:BOOL=true -S . -B ./build - cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` - -legacyrendererdebug: - cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -DLEGACY_RENDERER:BOOL=true -S . -B ./build - cmake --build ./build --config Debug --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` - release: cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -S . -B ./build cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` diff --git a/flake.nix b/flake.nix index 801d96ec..dde2860c 100644 --- a/flake.nix +++ b/flake.nix @@ -132,7 +132,6 @@ # hyprland-packages hyprland hyprland-debug - hyprland-legacy-renderer hyprland-unwrapped # hyprland-extras xdg-desktop-portal-hyprland diff --git a/meson.build b/meson.build index bf518216..58ec2475 100644 --- a/meson.build +++ b/meson.build @@ -77,10 +77,6 @@ if (systemd_option.enabled()) subdir('systemd') endif -if get_option('legacy_renderer').enabled() - add_project_arguments('-DLEGACY_RENDERER', language: 'cpp') -endif - if get_option('buildtype') == 'debug' add_project_arguments('-DHYPRLAND_DEBUG', language: 'cpp') endif diff --git a/meson_options.txt b/meson_options.txt index 3eb01696..e50b4cce 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,6 +1,5 @@ option('xwayland', type: 'feature', value: 'auto', description: 'Enable support for X11 applications') option('systemd', type: 'feature', value: 'auto', description: 'Enable systemd integration') option('uwsm', type: 'feature', value: 'enabled', description: 'Enable uwsm integration (only if systemd is enabled)') -option('legacy_renderer', type: 'feature', value: 'disabled', description: 'Enable legacy renderer') option('hyprpm', type: 'feature', value: 'enabled', description: 'Enable hyprpm') option('tracy_enable', type: 'boolean', value: false , description: 'Enable profiling') diff --git a/nix/default.nix b/nix/default.nix index f66bac93..6832006f 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -41,7 +41,6 @@ xwayland, debug ? false, enableXWayland ? true, - legacyRenderer ? false, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, wrapRuntimeDeps ? true, version ? "git", @@ -52,6 +51,7 @@ enableNvidiaPatches ? false, nvidiaPatches ? false, hidpiXWayland ? false, + legacyRenderer ? false, }: let inherit (builtins) baseNameOf foldl' readFile; inherit (lib.asserts) assertMsg; @@ -70,6 +70,7 @@ in assert assertMsg (!nvidiaPatches) "The option `nvidiaPatches` has been removed."; assert assertMsg (!enableNvidiaPatches) "The option `enableNvidiaPatches` has been removed."; assert assertMsg (!hidpiXWayland) "The option `hidpiXWayland` has been removed. Please refer https://wiki.hyprland.org/Configuring/XWayland"; + assert assertMsg (!legacyRenderer) "The option `legacyRenderer` has been removed. Legacy renderer is no longer supported."; customStdenv.mkDerivation (finalAttrs: { pname = "hyprland${optionalString debug "-debug"}"; inherit version; @@ -142,7 +143,7 @@ in wayland-scanner xorg.libXcursor ] - (optionals customStdenv.hostPlatform.isBSD [ epoll-shim ]) + (optionals customStdenv.hostPlatform.isBSD [epoll-shim]) (optionals customStdenv.hostPlatform.isMusl [libexecinfo]) (optionals enableXWayland [ xorg.libxcb @@ -165,7 +166,6 @@ in mesonFlags = flatten [ (mapAttrsToList mesonEnable { "xwayland" = enableXWayland; - "legacy_renderer" = legacyRenderer; "systemd" = withSystemd; "uwsm" = false; "hyprpm" = false; diff --git a/nix/overlays.nix b/nix/overlays.nix index 1f50e88d..687a49d4 100644 --- a/nix/overlays.nix +++ b/nix/overlays.nix @@ -50,9 +50,15 @@ in { hyprutils = final.hyprutils.override {debug = true;}; debug = true; }; - hyprland-legacy-renderer = final.hyprland.override {legacyRenderer = true;}; # deprecated packages + hyprland-legacy-renderer = + builtins.trace '' + hyprland-legacy-renderer was removed. Please use the hyprland package. + Legacy renderer is no longer supported. + '' + final.hyprland; + hyprland-nvidia = builtins.trace '' hyprland-nvidia was removed. Please use the hyprland package. diff --git a/src/debug/CrashReporter.cpp b/src/debug/CrashReporter.cpp index e220b0ac..38552c51 100644 --- a/src/debug/CrashReporter.cpp +++ b/src/debug/CrashReporter.cpp @@ -109,9 +109,6 @@ void NCrashReporter::createAndSaveCrash(int sig) { finalCrashReport += "\nDate: "; finalCrashReport += GIT_COMMIT_DATE; finalCrashReport += "\nFlags:\n"; -#ifdef LEGACY_RENDERER - finalCrashReport += "legacyrenderer\n"; -#endif #if ISDEBUG finalCrashReport += "debug\n"; #endif diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index d3f9efa1..adfbab1e 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -931,13 +931,10 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { HYPRLAND_VERSION, GIT_BRANCH, GIT_COMMIT_HASH, GIT_DIRTY, commitMsg, GIT_COMMIT_DATE, GIT_TAG, GIT_COMMITS, AQUAMARINE_VERSION, HYPRLANG_VERSION, HYPRUTILS_VERSION, HYPRCURSOR_VERSION, HYPRGRAPHICS_VERSION); -#if (!defined(LEGACY_RENDERER) && !ISDEBUG && !defined(NO_XWAYLAND)) +#if (!ISDEBUG && !defined(NO_XWAYLAND)) result += "no flags were set\n"; #else result += "flags set:\n"; -#ifdef LEGACY_RENDERER - result += "legacyrenderer\n"; -#endif #if ISDEBUG result += "debug\n"; #endif @@ -966,9 +963,6 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { GIT_BRANCH, GIT_COMMIT_HASH, HYPRLAND_VERSION, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), escapeJSONStrings(commitMsg), GIT_COMMIT_DATE, GIT_TAG, GIT_COMMITS, AQUAMARINE_VERSION, HYPRLANG_VERSION, HYPRUTILS_VERSION, HYPRCURSOR_VERSION, HYPRGRAPHICS_VERSION); -#ifdef LEGACY_RENDERER - result += "\"legacyrenderer\","; -#endif #if ISDEBUG result += "\"debug\","; #endif diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index 522b3a83..332800dd 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -263,11 +263,8 @@ void CHyprDebugOverlay::draw() { glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index f8dd69ab..4e17e797 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -238,11 +238,8 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, MONSIZE.x, MONSIZE.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); diff --git a/src/helpers/Format.cpp b/src/helpers/Format.cpp index 6679e869..c3d72185 100644 --- a/src/helpers/Format.cpp +++ b/src/helpers/Format.cpp @@ -14,26 +14,18 @@ */ inline const std::vector GLES3_FORMATS = { { - .drmFormat = DRM_FORMAT_ARGB8888, - .flipRB = true, -#ifndef GLES2 - .glFormat = GL_RGBA, -#else - .glFormat = GL_BGRA_EXT, -#endif + .drmFormat = DRM_FORMAT_ARGB8888, + .flipRB = true, + .glFormat = GL_RGBA, .glType = GL_UNSIGNED_BYTE, .withAlpha = true, .alphaStripped = DRM_FORMAT_XRGB8888, .bytesPerBlock = 4, }, { - .drmFormat = DRM_FORMAT_XRGB8888, - .flipRB = true, -#ifndef GLES2 - .glFormat = GL_RGBA, -#else - .glFormat = GL_BGRA_EXT, -#endif + .drmFormat = DRM_FORMAT_XRGB8888, + .flipRB = true, + .glFormat = GL_RGBA, .glType = GL_UNSIGNED_BYTE, .withAlpha = false, .alphaStripped = DRM_FORMAT_XRGB8888, @@ -104,96 +96,64 @@ inline const std::vector GLES3_FORMATS = { .bytesPerBlock = 2, }, { - .drmFormat = DRM_FORMAT_XBGR2101010, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_UNSIGNED_INT_2_10_10_10_REV, -#else - .glType = GL_UNSIGNED_INT_2_10_10_10_REV_EXT, -#endif + .drmFormat = DRM_FORMAT_XBGR2101010, + .glFormat = GL_RGBA, + .glType = GL_UNSIGNED_INT_2_10_10_10_REV, .withAlpha = false, .alphaStripped = DRM_FORMAT_XBGR2101010, .bytesPerBlock = 4, }, { - .drmFormat = DRM_FORMAT_ABGR2101010, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_UNSIGNED_INT_2_10_10_10_REV, -#else - .glType = GL_UNSIGNED_INT_2_10_10_10_REV_EXT, -#endif + .drmFormat = DRM_FORMAT_ABGR2101010, + .glFormat = GL_RGBA, + .glType = GL_UNSIGNED_INT_2_10_10_10_REV, .withAlpha = true, .alphaStripped = DRM_FORMAT_XBGR2101010, .bytesPerBlock = 4, }, { - .drmFormat = DRM_FORMAT_XRGB2101010, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_UNSIGNED_INT_2_10_10_10_REV, -#else - .glType = GL_UNSIGNED_INT_2_10_10_10_REV_EXT, -#endif + .drmFormat = DRM_FORMAT_XRGB2101010, + .glFormat = GL_RGBA, + .glType = GL_UNSIGNED_INT_2_10_10_10_REV, .withAlpha = false, .alphaStripped = DRM_FORMAT_XRGB2101010, .bytesPerBlock = 4, }, { - .drmFormat = DRM_FORMAT_ARGB2101010, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_UNSIGNED_INT_2_10_10_10_REV, -#else - .glType = GL_UNSIGNED_INT_2_10_10_10_REV_EXT, -#endif + .drmFormat = DRM_FORMAT_ARGB2101010, + .glFormat = GL_RGBA, + .glType = GL_UNSIGNED_INT_2_10_10_10_REV, .withAlpha = true, .alphaStripped = DRM_FORMAT_XRGB2101010, .bytesPerBlock = 4, }, { - .drmFormat = DRM_FORMAT_XBGR16161616F, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_HALF_FLOAT, -#else - .glType = GL_HALF_FLOAT_OES, -#endif + .drmFormat = DRM_FORMAT_XBGR16161616F, + .glFormat = GL_RGBA, + .glType = GL_HALF_FLOAT, .withAlpha = false, .alphaStripped = DRM_FORMAT_XBGR16161616F, .bytesPerBlock = 8, }, { - .drmFormat = DRM_FORMAT_ABGR16161616F, - .glFormat = GL_RGBA, -#ifndef GLES2 - .glType = GL_HALF_FLOAT, -#else - .glType = GL_HALF_FLOAT_OES, -#endif + .drmFormat = DRM_FORMAT_ABGR16161616F, + .glFormat = GL_RGBA, + .glType = GL_HALF_FLOAT, .withAlpha = true, .alphaStripped = DRM_FORMAT_XBGR16161616F, .bytesPerBlock = 8, }, { - .drmFormat = DRM_FORMAT_XBGR16161616, -#ifndef GLES2 - .glFormat = GL_RGBA16UI, -#else - .glFormat = GL_RGBA16_EXT, -#endif + .drmFormat = DRM_FORMAT_XBGR16161616, + .glFormat = GL_RGBA16UI, .glType = GL_UNSIGNED_SHORT, .withAlpha = false, .alphaStripped = DRM_FORMAT_XBGR16161616, .bytesPerBlock = 8, }, { - .drmFormat = DRM_FORMAT_ABGR16161616, -#ifndef GLES2 - .glFormat = GL_RGBA16UI, -#else - .glFormat = GL_RGBA16_EXT, -#endif + .drmFormat = DRM_FORMAT_ABGR16161616, + .glFormat = GL_RGBA16UI, .glType = GL_UNSIGNED_SHORT, .withAlpha = true, .alphaStripped = DRM_FORMAT_XBGR16161616, @@ -290,12 +250,7 @@ uint32_t NFormatUtils::drmFormatToGL(DRMFormat drm) { case DRM_FORMAT_XRGB8888: case DRM_FORMAT_XBGR8888: return GL_RGBA; // doesn't matter, opengl is gucci in this case. case DRM_FORMAT_XRGB2101010: - case DRM_FORMAT_XBGR2101010: -#ifdef GLES2 - return GL_RGB10_A2_EXT; -#else - return GL_RGB10_A2; -#endif + case DRM_FORMAT_XBGR2101010: return GL_RGB10_A2; default: return GL_RGBA; } UNREACHABLE(); @@ -303,13 +258,7 @@ uint32_t NFormatUtils::drmFormatToGL(DRMFormat drm) { } uint32_t NFormatUtils::glFormatToType(uint32_t gl) { - return gl != GL_RGBA ? -#ifdef GLES2 - GL_UNSIGNED_INT_2_10_10_10_REV_EXT : -#else - GL_UNSIGNED_INT_2_10_10_10_REV : -#endif - GL_UNSIGNED_BYTE; + return gl != GL_RGBA ? GL_UNSIGNED_INT_2_10_10_10_REV : GL_UNSIGNED_BYTE; } std::string NFormatUtils::drmFormatName(DRMFormat drm) { diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index d9f50db3..614fdd2e 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -146,11 +146,8 @@ void CHyprError::createQueued() { glBindTexture(GL_TEXTURE_2D, m_texture->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); diff --git a/src/includes.hpp b/src/includes.hpp index c00fec97..e33e4e3f 100644 --- a/src/includes.hpp +++ b/src/includes.hpp @@ -17,15 +17,9 @@ #include #include -#ifdef LEGACY_RENDERER -#include -#include -#define GLES2 -#else #define GLES32 #include #include -#endif #ifdef NO_XWAYLAND #define XWAYLAND false diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index e0ef6783..1afa477f 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -264,11 +264,7 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->renderTexture(g_pHyprOpenGL->m_screencopyDeniedTexture, texbox, 1); } -#ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, fb.getFBID()); -#else - glBindFramebuffer(GL_FRAMEBUFFER, fb.getFBID()); -#endif const auto PFORMAT = NFormatUtils::getPixelFormatFromDRM(shm.format); if (!PFORMAT) { @@ -304,11 +300,7 @@ bool CScreencopyFrame::copyShm() { g_pHyprOpenGL->m_renderData.pMonitor.reset(); -#ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); -#else - glBindFramebuffer(GL_FRAMEBUFFER, 0); -#endif LOGM(TRACE, "Copied frame via shm"); diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 498bcba9..e50f1fce 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -281,10 +281,7 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { g_pHyprOpenGL->m_renderData.pMonitor = PMONITOR; outFB.bind(); -#ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, outFB.getFBID()); -#endif - glPixelStorei(GL_PACK_ALIGNMENT, 1); auto glFormat = PFORMAT->flipRB ? GL_BGRA_EXT : GL_RGBA; @@ -318,10 +315,7 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { } outFB.unbind(); - -#ifndef GLES2 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); -#endif return true; } diff --git a/src/render/Framebuffer.cpp b/src/render/Framebuffer.cpp index ab5a14a3..b3681c95 100644 --- a/src/render/Framebuffer.cpp +++ b/src/render/Framebuffer.cpp @@ -40,14 +40,11 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { glBindFramebuffer(GL_FRAMEBUFFER, m_fb); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_tex->m_texID, 0); -// TODO: Allow this with gles2 -#ifndef GLES2 if (m_stencilTex) { glBindTexture(GL_TEXTURE_2D, m_stencilTex->m_texID); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, w, h, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_stencilTex->m_texID, 0); } -#endif auto status = glCheckFramebufferStatus(GL_FRAMEBUFFER); RASSERT((status == GL_FRAMEBUFFER_COMPLETE), "Framebuffer incomplete, couldn't create! (FB status: {}, GL Error: 0x{:x})", status, (int)glGetError()); @@ -64,8 +61,6 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) { } void CFramebuffer::addStencil(SP tex) { - // TODO: Allow this with gles2 -#ifndef GLES2 m_stencilTex = tex; glBindTexture(GL_TEXTURE_2D, m_stencilTex->m_texID); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, m_size.x, m_size.y, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); @@ -79,15 +74,10 @@ void CFramebuffer::addStencil(SP tex) { glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0); -#endif } void CFramebuffer::bind() { -#ifndef GLES2 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fb); -#else - glBindFramebuffer(GL_FRAMEBUFFER, m_iFb); -#endif if (g_pHyprOpenGL) glViewport(0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.y); @@ -96,11 +86,7 @@ void CFramebuffer::bind() { } void CFramebuffer::unbind() { -#ifndef GLES2 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); -#else - glBindFramebuffer(GL_FRAMEBUFFER, 0); -#endif } void CFramebuffer::release() { diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index c4223085..20862a7a 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -162,24 +162,14 @@ void CHyprOpenGLImpl::initEGL(bool gbm) { auto attrsNoVer = attrs; -#ifndef GLES2 attrs.push_back(EGL_CONTEXT_MAJOR_VERSION); attrs.push_back(3); attrs.push_back(EGL_CONTEXT_MINOR_VERSION); attrs.push_back(2); -#else - attrs.push_back(EGL_CONTEXT_CLIENT_VERSION); - attrs.push_back(2); - m_eglContextVersion = EGL_CONTEXT_GLES_2_0; -#endif - attrs.push_back(EGL_NONE); m_eglContext = eglCreateContext(m_eglDisplay, EGL_NO_CONFIG_KHR, EGL_NO_CONTEXT, attrs.data()); if (m_eglContext == EGL_NO_CONTEXT) { -#ifdef GLES2 - RASSERT(false, "EGL: failed to create a context with GLES2.0"); -#endif Debug::log(WARN, "EGL: Failed to create a context with GLES3.2, retrying 3.0"); attrs = attrsNoVer; @@ -362,10 +352,6 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmFD) { TRACY_GPU_CONTEXT; -#ifdef GLES2 - Debug::log(WARN, "!RENDERER: Using the legacy GLES2 renderer!"); -#endif - initDRMFormats(); initAssets(); @@ -669,7 +655,6 @@ GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP rb, CFramebuffer* fb) { m_renderData.pMonitor = pMonitor; -#ifndef GLES2 const GLenum RESETSTATUS = glGetGraphicsResetStatus(); if (RESETSTATUS != GL_NO_ERROR) { std::string errStr = ""; @@ -682,7 +667,6 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP RASSERT(false, "Aborting, glGetGraphicsResetStatus returned {}. Cannot continue until proper GPU reset handling is implemented.", errStr); return; } -#endif TRACY_GPU_ZONE("RenderBeginSimple"); @@ -721,7 +705,6 @@ void CHyprOpenGLImpl::beginSimple(PHLMONITOR pMonitor, const CRegion& damage, SP void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFramebuffer* fb, std::optional finalDamage) { m_renderData.pMonitor = pMonitor; -#ifndef GLES2 const GLenum RESETSTATUS = glGetGraphicsResetStatus(); if (RESETSTATUS != GL_NO_ERROR) { std::string errStr = ""; @@ -734,7 +717,6 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, CFrameb RASSERT(false, "Aborting, glGetGraphicsResetStatus returned {}. Cannot continue until proper GPU reset handling is implemented.", errStr); return; } -#endif TRACY_GPU_ZONE("RenderBegin"); @@ -860,11 +842,7 @@ void CHyprOpenGLImpl::end() { // check for gl errors const GLenum ERR = glGetError(); -#ifdef GLES2 - if (ERR == GL_CONTEXT_LOST_KHR) /* We don't have infra to recover from this */ -#else if (ERR == GL_CONTEXT_LOST) /* We don't have infra to recover from this */ -#endif RASSERT(false, "glGetError at Opengl::end() returned GL_CONTEXT_LOST. Cannot continue until proper GPU reset handling is implemented."); } @@ -946,9 +924,7 @@ bool CHyprOpenGLImpl::initShaders() { shaders->TEXVERTSRC320 = processShader("tex320.vert", includes); GLuint prog; -#ifdef GLES2 - m_cmSupported = false; -#else + if (!*PCM) m_cmSupported = false; else { @@ -983,7 +959,6 @@ bool CHyprOpenGLImpl::initShaders() { "WARNING: CM Shader failed compiling, color management will not work. It's likely because your GPU is an old piece of garbage, don't file bug reports " "about this!"); } -#endif const auto FRAGSHADOW = processShader(m_cmSupported ? "shadow.frag" : "shadow_legacy.frag", includes); const auto FRAGBORDER1 = processShader(m_cmSupported ? "border.frag" : "border_legacy.frag", includes); @@ -1392,13 +1367,7 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co Mat3x3 glMatrix = m_renderData.projection.copy().multiply(matrix); useProgram(m_shaders->m_shQUAD.program); - -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shQUAD.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_renderData.pCurrentMonData->m_shQUAD.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif // premultiply the color as well as we don't work with straight alpha glUniform4f(m_shaders->m_shQUAD.color, col.r * col.a, col.g * col.a, col.b * col.a, col.a); @@ -1602,12 +1571,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB passCMUniforms(*shader, imageDescription); } -#ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1i(shader->tex, 0); if ((usingFinalShader && *PDT == 0) || CRASHING) { @@ -1735,15 +1699,8 @@ void CHyprOpenGLImpl::renderTexturePrimitive(SP tex, const CBox& box) glBindTexture(tex->m_target, tex->m_texID); useProgram(shader->program); - -#ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1i(shader->tex, 0); - glBindVertexArray(shader->shaderVao); for (auto const& RECT : m_renderData.damage.getRects()) { @@ -1777,13 +1734,7 @@ void CHyprOpenGLImpl::renderTextureMatte(SP tex, const CBox& box, CFra SShader* shader = &m_shaders->m_shMATTE; useProgram(shader->program); - -#ifndef GLES2 glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1i(shader->tex, 0); glUniform1i(shader->alphaMatte, 1); @@ -1886,12 +1837,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi 1.0f); } -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBLURPREPARE.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_shaders->m_shBLURPREPARE.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1f(m_shaders->m_shBLURPREPARE.contrast, *PBLURCONTRAST); glUniform1f(m_shaders->m_shBLURPREPARE.brightness, *PBLURBRIGHTNESS); glUniform1i(m_shaders->m_shBLURPREPARE.tex, 0); @@ -1927,12 +1873,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi useProgram(pShader->program); // prep two shaders -#ifndef GLES2 glUniformMatrix3fv(pShader->proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(pShader->proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1f(pShader->radius, *PBLURSIZE * a); // this makes the blursize change with a if (pShader == &m_shaders->m_shBLUR1) { glUniform2f(m_shaders->m_shBLUR1.halfpixel, 0.5f / (m_renderData.pMonitor->m_pixelSize.x / 2.f), 0.5f / (m_renderData.pMonitor->m_pixelSize.y / 2.f)); @@ -1997,13 +1938,7 @@ CFramebuffer* CHyprOpenGLImpl::blurFramebufferWithDamage(float a, CRegion* origi glTexParameteri(currentTex->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); useProgram(m_shaders->m_shBLURFINISH.program); - -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBLURFINISH.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_shaders->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform1f(m_shaders->m_shBLURFINISH.noise, *PBLURNOISE); glUniform1f(m_shaders->m_shBLURFINISH.brightness, *PBLURBRIGHTNESS); @@ -2341,13 +2276,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr if (!skipCM) passCMUniforms(m_shaders->m_shBORDER1, SImageDescription{}); -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif - glUniform4fv(m_shaders->m_shBORDER1.gradient, grad.m_colorsOkLabA.size() / 4, (float*)grad.m_colorsOkLabA.data()); glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad.m_colorsOkLabA.size() / 4); glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); @@ -2428,14 +2357,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr blend(true); useProgram(m_shaders->m_shBORDER1.program); - -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_shaders->m_shBORDER1.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif - glUniform4fv(m_shaders->m_shBORDER1.gradient, grad1.m_colorsOkLabA.size() / 4, (float*)grad1.m_colorsOkLabA.data()); glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad1.m_colorsOkLabA.size() / 4); glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad1.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); @@ -2515,12 +2437,7 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun if (!skipCM) passCMUniforms(m_shaders->m_shSHADOW, SImageDescription{}); -#ifndef GLES2 glUniformMatrix3fv(m_shaders->m_shSHADOW.proj, 1, GL_TRUE, glMatrix.getMatrix().data()); -#else - glMatrix.transpose(); - glUniformMatrix3fv(m_shaders->m_shSHADOW.proj, 1, GL_FALSE, glMatrix.getMatrix().data()); -#endif glUniform4f(m_shaders->m_shSHADOW.color, col.r, col.g, col.b, col.a * a); const auto TOPLEFT = Vector2D(range + round, range + round); @@ -2675,26 +2592,20 @@ SP CHyprOpenGLImpl::loadAsset(const std::string& filename) { tex->allocate(); tex->m_size = {cairo_image_surface_get_width(CAIROSURFACE), cairo_image_surface_get_height(CAIROSURFACE)}; - const GLint glIFormat = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? -#ifdef GLES2 - GL_RGB32F_EXT : -#else - GL_RGB32F : -#endif - GL_RGBA; - const GLint glFormat = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_RGB : GL_RGBA; - const GLint glType = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_FLOAT : GL_UNSIGNED_BYTE; + const GLint glIFormat = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_RGB32F : GL_RGBA; + const GLint glFormat = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_RGB : GL_RGBA; + const GLint glType = CAIROFORMAT == CAIRO_FORMAT_RGB96F ? GL_FLOAT : GL_UNSIGNED_BYTE; const auto DATA = cairo_image_surface_get_data(CAIROSURFACE); glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -#ifndef GLES2 + if (CAIROFORMAT != CAIRO_FORMAT_RGB96F) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); } -#endif + glTexImage2D(GL_TEXTURE_2D, 0, glIFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); @@ -2772,10 +2683,8 @@ SP CHyprOpenGLImpl::renderText(const std::string& text, CHyprColor col glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->m_size.x, tex->m_size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); cairo_destroy(CAIRO); @@ -2815,10 +2724,8 @@ void CHyprOpenGLImpl::initMissingAssetTexture() { glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); @@ -2928,10 +2835,8 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(PHLMONITOR pMonitor) { glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, glFormat, tex->m_size.x, tex->m_size.y, 0, glFormat, glType, DATA); cairo_surface_destroy(CAIROSURFACE); diff --git a/src/render/Texture.cpp b/src/render/Texture.cpp index 74770cb9..52b79e8d 100644 --- a/src/render/Texture.cpp +++ b/src/render/Texture.cpp @@ -72,12 +72,12 @@ void CTexture::createFromShm(uint32_t drmFormat, uint8_t* pixels, uint32_t strid GLCALL(glBindTexture(GL_TEXTURE_2D, m_texID)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); -#ifndef GLES2 + if (format->flipRB) { GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED)); } -#endif + GLCALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, stride / format->bytesPerBlock)); GLCALL(glTexImage2D(GL_TEXTURE_2D, 0, format->glInternalFormat ? format->glInternalFormat : format->glFormat, size_.x, size_.y, 0, format->glFormat, format->glType, pixels)); GLCALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, 0)); @@ -120,12 +120,10 @@ void CTexture::update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, cons auto rects = damage.copy().intersect(CBox{{}, m_size}).getRects(); -#ifndef GLES2 if (format->flipRB) { GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE)); GLCALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED)); } -#endif for (auto const& rect : rects) { GLCALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, stride / format->bytesPerBlock)); diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index ade4d372..84060e0d 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -332,11 +332,8 @@ static void renderGradientTo(SP tex, CGradientValueData* grad) { glBindTexture(GL_TEXTURE_2D, tex->m_texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - -#ifndef GLES2 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED); -#endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferSize.x, bufferSize.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, DATA); From dfb841c303263208c2f8ac7a55fbdf4668594fb7 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Thu, 15 May 2025 02:16:03 -0700 Subject: [PATCH 0191/1077] desktop: prevent layers from dismissing their own seat grabs on map (#10417) --- src/desktop/LayerSurface.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index f913b658..048a3641 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -167,7 +167,9 @@ void CLayerSurface::onMap() { if (GRABSFOCUS) { // TODO: use the new superb really very cool grab - g_pSeatManager->setGrab(nullptr); + if (g_pSeatManager->m_seatGrab && !g_pSeatManager->m_seatGrab->accepts(m_surface->resource())) + g_pSeatManager->setGrab(nullptr); + g_pInputManager->releaseAllMouseButtons(); g_pCompositor->focusSurface(m_surface->resource()); From a5c9b3e49047b4f03f79c5146d8925363eab3072 Mon Sep 17 00:00:00 2001 From: Zach DeCook Date: Thu, 15 May 2025 05:31:44 -0400 Subject: [PATCH 0192/1077] core: Include cstring whenever strncpy is used (#10404) Fixes ppc64le build in alpine --- hyprpm/src/core/HyprlandSocket.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hyprpm/src/core/HyprlandSocket.cpp b/hyprpm/src/core/HyprlandSocket.cpp index 4d86192c..50b3558c 100644 --- a/hyprpm/src/core/HyprlandSocket.cpp +++ b/hyprpm/src/core/HyprlandSocket.cpp @@ -5,6 +5,7 @@ #include #include #include +#include static int getUID() { const auto UID = getuid(); From b0cc49218d37e6e791725b40fe5da97832daa9c8 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Fri, 16 May 2025 14:38:45 -0700 Subject: [PATCH 0193/1077] protocols: simulate mouse movement after activating a toplevel (#10429) --- src/protocols/ForeignToplevelWlr.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index 8807c225..dccf83b6 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -1,6 +1,7 @@ #include "ForeignToplevelWlr.hpp" #include #include "../Compositor.hpp" +#include "managers/input/InputManager.hpp" #include "protocols/core/Output.hpp" #include "render/Renderer.hpp" #include "../managers/HookSystemManager.hpp" @@ -24,6 +25,7 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SPactivate(true); + g_pInputManager->simulateMouseMovement(); }); m_resource->setSetFullscreen([this](CZwlrForeignToplevelHandleV1* p, wl_resource* output) { From 2946009006bd8a988ff8a51b83528f6e1d8f0e98 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Fri, 16 May 2025 14:39:28 -0700 Subject: [PATCH 0194/1077] input: do not send mouse events when outside of a surface (#10416) --- src/managers/input/InputManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cd603ca5..cc46aaec 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -201,6 +201,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Vector2D surfacePos = Vector2D(-1337, -1337); PHLWINDOW pFoundWindow; PHLLS pFoundLayerSurface; + bool sendExternalMouseEvents = false; EMIT_HOOK_EVENT_CANCELLABLE("mouseMove", MOUSECOORDSFLOORED); @@ -297,7 +298,8 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // and we're not dnd-ing, don't refocus. Keep focus on last surface. if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->m_mapped && g_pSeatManager->m_state.pointerFocus && !m_hardInput) { - foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); + foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); + sendExternalMouseEvents = true; // IME popups aren't desktop-like elements // TODO: make them. @@ -598,6 +600,13 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { m_lastFocusOnLS = true; } + // Don't send events outside of the surface unless holding a mouse button, + // except for X11 surfaces which are always sent events in case of potential breakage. + if (!sendExternalMouseEvents && foundSurface && (!pFoundWindow || !pFoundWindow->m_isX11)) { + if (!foundSurface->at(surfaceLocal, true).first) + foundSurface = nullptr; + } + g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); g_pSeatManager->sendPointerMotion(time, surfaceLocal); } From 2aa21625bd9036a918c220b89ff94d003fb6cbe7 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Sat, 17 May 2025 04:06:48 -0700 Subject: [PATCH 0195/1077] input: ensure seat grabs from exclusive layers can be dismissed (#10418) --- src/managers/input/InputManager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cc46aaec..69c70af8 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -607,6 +607,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { foundSurface = nullptr; } + // Releases any seat grabs after a click outside of them not handled by an earlier case (notably exclusive layers). + if ((m_hardInput || refocus) && g_pSeatManager->m_seatGrab && !foundSurface) { + g_pSeatManager->setGrab(nullptr); + return; // setGrab will refocus + } + g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); g_pSeatManager->sendPointerMotion(time, surfaceLocal); } From 18377d221d8c440c6ec3a1d2313947d81c4741e1 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 17 May 2025 11:08:13 +0000 Subject: [PATCH 0196/1077] [gha] Nix: update inputs --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index d82b7df9..1be8e6d4 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1746461020, - "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", + "lastModified": 1747327360, + "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", + "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", "type": "github" }, "original": { @@ -299,11 +299,11 @@ ] }, "locked": { - "lastModified": 1746537231, - "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { From dfa483621609cc443daab40e7d8b71786d8d21c9 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 17 May 2025 17:08:42 +0100 Subject: [PATCH 0197/1077] hyprpm: fix execute permission bit on installed dirs (#10435) --- hyprpm/src/core/PluginManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 8686910f..76f20110 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -566,7 +566,7 @@ bool CPluginManager::updateHeaders(bool force) { ret = execAndGet(cmd); - cmd = std::format("make -C '{}' installheaders && chmod -R 644 '{}' && find '{}' -type d -exec chmod o+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), + cmd = std::format("make -C '{}' installheaders && chmod -R 644 '{}' && find '{}' -type d -exec chmod a+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), DataState::getHeadersPath()); if (m_bVerbose) From bb9aa79b216b952c692c2443c50b0a6d7e5b108d Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 17 May 2025 18:10:28 +0200 Subject: [PATCH 0198/1077] hyprpm: reject remove without a param ref #10458 --- hyprpm/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/main.cpp b/hyprpm/src/main.cpp index ca9c0fdb..b8bf8bca 100644 --- a/hyprpm/src/main.cpp +++ b/hyprpm/src/main.cpp @@ -106,7 +106,7 @@ int main(int argc, char** argv, char** envp) { return g_pPluginManager->addNewPluginRepo(command[1], rev) ? 0 : 1; } else if (command[0] == "remove") { - if (ARGS.size() < 2) { + if (command.size() < 2) { std::println(stderr, "{}", failureString("Not enough args for remove.")); return 1; } From bb5cd5b2ddcb2dbe58613aa41fa2062208208339 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 17 May 2025 18:03:35 +0100 Subject: [PATCH 0199/1077] screencopy: store a fb before permission popup if the permission is pending (#10455) stops rendering the permission popup on stuff like grim when it asks --- src/protocols/Screencopy.cpp | 79 ++++++++++++++++++++++++------------ src/protocols/Screencopy.hpp | 14 +++++-- 2 files changed, 64 insertions(+), 29 deletions(-) diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 1afa477f..5fa7c84e 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -187,9 +187,43 @@ void CScreencopyFrame::share() { callback(copyShm()); } +void CScreencopyFrame::renderMon() { + auto TEXTURE = makeShared(m_monitor->m_output->state->state().buffer); + + CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; + + CBox monbox = CBox{0, 0, m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y} + .translate({-m_box.x, -m_box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. + .transform(wlTransformToHyprutils(invertTransform(m_monitor->m_transform)), m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y); + g_pHyprOpenGL->setMonitorTransformEnabled(true); + g_pHyprOpenGL->setRenderModifEnabled(false); + g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); + g_pHyprOpenGL->setRenderModifEnabled(true); + g_pHyprOpenGL->setMonitorTransformEnabled(false); + if (m_overlayCursor) + g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, + g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); +} + +void CScreencopyFrame::storeTempFB() { + g_pHyprRenderer->makeEGLCurrent(); + + m_tempFb.alloc(m_box.w, m_box.h); + + CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; + + if (!g_pHyprRenderer->beginRender(m_monitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &m_tempFb, true)) { + LOGM(ERR, "Can't copy: failed to begin rendering to temp fb"); + return; + } + + renderMon(); + + g_pHyprRenderer->endRender(); +} + void CScreencopyFrame::copyDmabuf(std::function callback) { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(m_monitor->m_output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); CRegion fakeDamage = {0, 0, INT16_MAX, INT16_MAX}; @@ -200,17 +234,12 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y} - .translate({-m_box.x, -m_box.y}) // vvvv kinda ass-backwards but that's how I designed the renderer... sigh. - .transform(wlTransformToHyprutils(invertTransform(m_monitor->m_transform)), m_monitor->m_pixelSize.x, m_monitor->m_pixelSize.y); - g_pHyprOpenGL->setMonitorTransformEnabled(true); - g_pHyprOpenGL->setRenderModifEnabled(false); - g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); - g_pHyprOpenGL->setRenderModifEnabled(true); - g_pHyprOpenGL->setMonitorTransformEnabled(false); - if (m_overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); + if (m_tempFb.isAllocated()) { + CBox texbox = {{}, m_box.size()}; + g_pHyprOpenGL->renderTexture(m_tempFb.getTexture(), texbox, 1); + m_tempFb.release(); + } else + renderMon(); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { @@ -228,8 +257,7 @@ void CScreencopyFrame::copyDmabuf(std::function callback) { } bool CScreencopyFrame::copyShm() { - const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); - auto TEXTURE = makeShared(m_monitor->m_output->state->state().buffer); + const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_SCREENCOPY); auto shm = m_buffer->shm(); auto [pixelData, fmt, bufLen] = m_buffer->beginDataPtr(0); // no need for end, cuz it's shm @@ -247,15 +275,12 @@ bool CScreencopyFrame::copyShm() { } if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - CBox monbox = CBox{0, 0, m_monitor->m_transformedSize.x, m_monitor->m_transformedSize.y}.translate({-m_box.x, -m_box.y}); - g_pHyprOpenGL->setMonitorTransformEnabled(true); - g_pHyprOpenGL->setRenderModifEnabled(false); - g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); - g_pHyprOpenGL->setRenderModifEnabled(true); - g_pHyprOpenGL->setMonitorTransformEnabled(false); - if (m_overlayCursor) - g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, - g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); + if (m_tempFb.isAllocated()) { + CBox texbox = {{}, m_box.size()}; + g_pHyprOpenGL->renderTexture(m_tempFb.getTexture(), texbox, 1); + m_tempFb.release(); + } else + renderMon(); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) g_pHyprOpenGL->clear(Colors::BLACK); else { @@ -420,8 +445,12 @@ void CScreencopyProtocol::onOutputCommit(PHLMONITOR pMonitor) { // check permissions const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(f->m_resource->client(), PERMISSION_TYPE_SCREENCOPY); - if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) { + if (!f->m_tempFb.isAllocated()) + f->storeTempFB(); // make a snapshot before the popup + continue; // pending an answer, don't do anything yet. + } // otherwise share. If it's denied, it will be black. diff --git a/src/protocols/Screencopy.hpp b/src/protocols/Screencopy.hpp index ead8b2ed..665fede1 100644 --- a/src/protocols/Screencopy.hpp +++ b/src/protocols/Screencopy.hpp @@ -10,6 +10,7 @@ #include "../managers/HookSystemManager.hpp" #include "../helpers/time/Timer.hpp" #include "../helpers/time/Time.hpp" +#include "../render/Framebuffer.hpp" #include "../managers/eventLoop/EventLoopTimer.hpp" #include @@ -72,10 +73,15 @@ class CScreencopyFrame { int m_shmStride = 0; CBox m_box = {}; - void copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer); - void copyDmabuf(std::function callback); - bool copyShm(); - void share(); + // if we have a pending perm, hold the buffer. + CFramebuffer m_tempFb; + + void copy(CZwlrScreencopyFrameV1* pFrame, wl_resource* buffer); + void copyDmabuf(std::function callback); + bool copyShm(); + void renderMon(); + void storeTempFB(); + void share(); friend class CScreencopyProtocol; }; From c19f383685000fcf61706c95feb4d80d22c9afe5 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 17 May 2025 19:07:11 +0200 Subject: [PATCH 0200/1077] hyprpm: fix crash with enable without an arg --- hyprpm/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/main.cpp b/hyprpm/src/main.cpp index b8bf8bca..98458762 100644 --- a/hyprpm/src/main.cpp +++ b/hyprpm/src/main.cpp @@ -142,7 +142,7 @@ int main(int argc, char** argv, char** envp) { } else if (notify) g_pPluginManager->notify(ICON_ERROR, 0, 10000, "[hyprpm] Couldn't update headers"); } else if (command[0] == "enable") { - if (ARGS.size() < 2) { + if (command.size() < 2) { std::println(stderr, "{}", failureString("Not enough args for enable.")); return 1; } From 705b97c4ac93148820012c701fe39445cf76a590 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 17 May 2025 19:43:12 +0200 Subject: [PATCH 0201/1077] input: revert #10416 and #10418 fixes #10451 --- src/managers/input/InputManager.cpp | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 69c70af8..cd603ca5 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -201,7 +201,6 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { Vector2D surfacePos = Vector2D(-1337, -1337); PHLWINDOW pFoundWindow; PHLLS pFoundLayerSurface; - bool sendExternalMouseEvents = false; EMIT_HOOK_EVENT_CANCELLABLE("mouseMove", MOUSECOORDSFLOORED); @@ -298,8 +297,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { // and we're not dnd-ing, don't refocus. Keep focus on last surface. if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->m_mapped && g_pSeatManager->m_state.pointerFocus && !m_hardInput) { - foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); - sendExternalMouseEvents = true; + foundSurface = g_pSeatManager->m_state.pointerFocus.lock(); // IME popups aren't desktop-like elements // TODO: make them. @@ -600,19 +598,6 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { m_lastFocusOnLS = true; } - // Don't send events outside of the surface unless holding a mouse button, - // except for X11 surfaces which are always sent events in case of potential breakage. - if (!sendExternalMouseEvents && foundSurface && (!pFoundWindow || !pFoundWindow->m_isX11)) { - if (!foundSurface->at(surfaceLocal, true).first) - foundSurface = nullptr; - } - - // Releases any seat grabs after a click outside of them not handled by an earlier case (notably exclusive layers). - if ((m_hardInput || refocus) && g_pSeatManager->m_seatGrab && !foundSurface) { - g_pSeatManager->setGrab(nullptr); - return; // setGrab will refocus - } - g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal); g_pSeatManager->sendPointerMotion(time, surfaceLocal); } From 44cb8f769e45cbe13edc6605e3b51ba041afd92f Mon Sep 17 00:00:00 2001 From: zacoons Date: Mon, 19 May 2025 03:10:06 +1000 Subject: [PATCH 0202/1077] internal: added error log when getEdgeDefinedPoint is impossible (#10462) --- src/render/decorations/DecorationPositioner.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp index 250070bc..82f2e5a8 100644 --- a/src/render/decorations/DecorationPositioner.cpp +++ b/src/render/decorations/DecorationPositioner.cpp @@ -42,7 +42,6 @@ Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pW return wb.pos() + Vector2D{0.0, wb.size().y / 2.0}; else if (RIGHT) return wb.pos() + Vector2D{wb.size().x, wb.size().y / 2.0}; - UNREACHABLE(); } else { if (TOP && LEFT) return wb.pos(); @@ -52,9 +51,8 @@ Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pW return wb.pos() + wb.size(); if (BOTTOM && LEFT) return wb.pos() + Vector2D{0.0, wb.size().y}; - UNREACHABLE(); } - UNREACHABLE(); + Debug::log(ERR, "getEdgeDefinedPoint: invalid configuration of edges"); return {}; } From 158c0f2911894f5f97af7361f639f97f6d100c82 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 18 May 2025 18:13:20 +0100 Subject: [PATCH 0203/1077] permissions: add permission management for keyboards (#10367) --- src/config/ConfigManager.cpp | 2 ++ src/devices/IKeyboard.hpp | 3 ++ src/managers/input/InputManager.cpp | 24 ++++++++++++++- .../permissions/DynamicPermissionManager.cpp | 30 ++++++++++++------- .../permissions/DynamicPermissionManager.hpp | 1 + 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 564ebcda..f5f0bed3 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2900,6 +2900,8 @@ std::optional CConfigManager::handlePermission(const std::string& c type = PERMISSION_TYPE_SCREENCOPY; else if (data[1] == "plugin") type = PERMISSION_TYPE_PLUGIN; + else if (data[1] == "keyboard" || data[1] == "keeb") + type = PERMISSION_TYPE_KEYBOARD; if (data[2] == "ask") mode = PERMISSION_RULE_ALLOW_MODE_ASK; diff --git a/src/devices/IKeyboard.hpp b/src/devices/IKeyboard.hpp index 3d7b2dd1..c66aee27 100644 --- a/src/devices/IKeyboard.hpp +++ b/src/devices/IKeyboard.hpp @@ -78,6 +78,9 @@ class IKeyboard : public IHID { bool m_enabled = true; bool m_allowBinds = true; + // permission flag: whether this keyboard is allowed to be processed + bool m_allowed = true; + // if the keymap is overridden by the implementation, // don't try to set keyboard rules anymore, to avoid overwriting the requested one. // e.g. Virtual keyboards with custom maps. diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cd603ca5..f9f36cf2 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -36,6 +36,7 @@ #include "../../managers/HookSystemManager.hpp" #include "../../managers/EventManager.hpp" #include "../../managers/LayoutManager.hpp" +#include "../../managers/permissions/DynamicPermissionManager.hpp" #include "../../helpers/time/Time.hpp" @@ -1054,6 +1055,27 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { pKeyboard->m_resolveBindsBySym = RESOLVEBINDSBYSYM; pKeyboard->m_allowBinds = ALLOWBINDS; + const auto PERM = g_pDynamicPermissionManager->clientPermissionModeWithString(-1, pKeyboard->m_hlName, PERMISSION_TYPE_KEYBOARD); + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) { + const auto PROMISE = g_pDynamicPermissionManager->promiseFor(-1, pKeyboard->m_hlName, PERMISSION_TYPE_KEYBOARD); + if (!PROMISE) + Debug::log(ERR, "BUG THIS: No promise for client permission for keyboard"); + else { + PROMISE->then([k = WP{pKeyboard}](SP> r) { + if (r->hasError()) { + Debug::log(ERR, "BUG THIS: No permission returned for keyboard"); + return; + } + + if (!k) + return; + + k->m_allowed = r->result() == PERMISSION_RULE_ALLOW_MODE_ALLOW; + }); + } + } else + pKeyboard->m_allowed = PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW; + try { if (NUMLOCKON == pKeyboard->m_numlockOn && REPEATDELAY == pKeyboard->m_repeatDelay && REPEATRATE == pKeyboard->m_repeatRate && RULES != "" && RULES == pKeyboard->m_currentRules.rules && MODEL == pKeyboard->m_currentRules.model && LAYOUT == pKeyboard->m_currentRules.layout && @@ -1382,7 +1404,7 @@ void CInputManager::updateKeyboardsLeds(SP pKeyboard) { } void CInputManager::onKeyboardKey(std::any event, SP pKeyboard) { - if (!pKeyboard->m_enabled) + if (!pKeyboard->m_enabled || !pKeyboard->m_allowed) return; const bool DISALLOWACTION = pKeyboard->isVirtual() && shouldIgnoreVirtualKeyboard(pKeyboard); diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp index e111343e..dd1fd4cf 100644 --- a/src/managers/permissions/DynamicPermissionManager.cpp +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -52,6 +52,7 @@ static const char* permissionToString(eDynamicPermissionType type) { case PERMISSION_TYPE_UNKNOWN: return "PERMISSION_TYPE_UNKNOWN"; case PERMISSION_TYPE_SCREENCOPY: return "PERMISSION_TYPE_SCREENCOPY"; case PERMISSION_TYPE_PLUGIN: return "PERMISSION_TYPE_PLUGIN"; + case PERMISSION_TYPE_KEYBOARD: return "PERMISSION_TYPE_KEYBOARD"; } return "error"; @@ -59,9 +60,10 @@ static const char* permissionToString(eDynamicPermissionType type) { static const char* permissionToHumanString(eDynamicPermissionType type) { switch (type) { - case PERMISSION_TYPE_UNKNOWN: return "requesting an unknown permission"; - case PERMISSION_TYPE_SCREENCOPY: return "trying to capture your screen"; - case PERMISSION_TYPE_PLUGIN: return "trying to load a plugin"; + case PERMISSION_TYPE_UNKNOWN: return "An application {} is requesting an unknown permission."; + case PERMISSION_TYPE_SCREENCOPY: return "An application {} is trying to capture your screen.

Do you want to allow it to do so?"; + case PERMISSION_TYPE_PLUGIN: return "An application {} is trying to load a plugin: {}.

Do you want to load it?"; + case PERMISSION_TYPE_KEYBOARD: return "A new keyboard has been plugged in: {}.

Do you want to allow it to operate?"; } return "error"; @@ -184,7 +186,7 @@ eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionMode(wl_c return PERMISSION_RULE_ALLOW_MODE_PENDING; } - // if we are here, we need to ask. + // if we are here, we need to ask, that's the fallback for all these (keyboards wont come here) askForPermission(client, LOOKUP.value_or(""), permission); return PERMISSION_RULE_ALLOW_MODE_PENDING; @@ -232,6 +234,10 @@ eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionModeWithS } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_PENDING) { Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission pending by config rule"); return PERMISSION_RULE_ALLOW_MODE_PENDING; + } else if ((*it)->m_allowMode == PERMISSION_RULE_ALLOW_MODE_ASK) { + Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission ask by config rule"); + askForPermission(nullptr, str, permission, pid); + return PERMISSION_RULE_ALLOW_MODE_PENDING; } else Debug::log(TRACE, "CDynamicPermissionManager::clientHasPermission: permission ask by config rule"); } @@ -247,6 +253,10 @@ eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionModeWithS return PERMISSION_RULE_ALLOW_MODE_PENDING; } + // keyboards are allow default + if (permission == PERMISSION_TYPE_KEYBOARD) + return PERMISSION_RULE_ALLOW_MODE_ALLOW; + // if we are here, we need to ask. askForPermission(nullptr, str, permission, pid); @@ -263,22 +273,20 @@ void CDynamicPermissionManager::askForPermission(wl_client* client, const std::s std::string description = ""; if (binaryPath.empty()) - description = std::format("An unknown application (wayland client ID 0x{:x}) is {}.", (uintptr_t)client, permissionToHumanString(type)); + description = std::format(std::runtime_format(permissionToHumanString(type)), std::format("unknown application (wayland client ID 0x{:x})", (uintptr_t)client)); else if (client) { std::string binaryName = binaryPath.contains("/") ? binaryPath.substr(binaryPath.find_last_of('/') + 1) : binaryPath; - description = std::format("An application {} ({}) is {}.", binaryName, binaryPath, permissionToHumanString(type)); + description = std::format(std::runtime_format(permissionToHumanString(type)), std::format("{} ({})", binaryName, binaryPath)); } else if (pid >= 0) { if (type == PERMISSION_TYPE_PLUGIN) { const auto LOOKUP = binaryNameForPid(pid); - description = std::format("An application {} is {}:
{}", LOOKUP.value_or("Unknown"), permissionToHumanString(type), binaryPath); + description = std::format(std::runtime_format(permissionToHumanString(type)), LOOKUP.value_or("Unknown"), binaryPath); } else { const auto LOOKUP = binaryNameForPid(pid); - description = std::format("An application {} ({}) is {}.", LOOKUP.value_or("Unknown"), binaryPath, permissionToHumanString(type)); + description = std::format(std::runtime_format(permissionToHumanString(type)), LOOKUP.value_or("Unknown"), binaryPath); } } else - description = std::format("An application is {}:
{}", permissionToHumanString(type), binaryPath); - - description += "

Do you want to allow this?"; + description = std::format(std::runtime_format(permissionToHumanString(type)), binaryPath); std::vector options; diff --git a/src/managers/permissions/DynamicPermissionManager.hpp b/src/managers/permissions/DynamicPermissionManager.hpp index f8cfe3ad..a61f256e 100644 --- a/src/managers/permissions/DynamicPermissionManager.hpp +++ b/src/managers/permissions/DynamicPermissionManager.hpp @@ -17,6 +17,7 @@ enum eDynamicPermissionType : uint8_t { PERMISSION_TYPE_UNKNOWN = 0, PERMISSION_TYPE_SCREENCOPY, PERMISSION_TYPE_PLUGIN, + PERMISSION_TYPE_KEYBOARD, }; enum eDynamicPermissionRuleSource : uint8_t { From d9c8a378118d954932eb9906b07150ccd9a3a434 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 18 May 2025 19:34:14 +0200 Subject: [PATCH 0204/1077] input: always allow focus to permission popups --- src/Compositor.cpp | 31 ++++++++++++++----- src/desktop/Window.cpp | 4 +++ src/desktop/Window.hpp | 2 ++ src/helpers/AsyncDialogBox.cpp | 19 +++++++++--- src/helpers/AsyncDialogBox.hpp | 6 +++- src/managers/input/InputManager.cpp | 9 ++++-- .../permissions/DynamicPermissionManager.cpp | 3 +- 7 files changed, 58 insertions(+), 16 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 973cb26b..c6593923 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -870,10 +870,14 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper static auto PBORDERGRABEXTEND = CConfigValue("general:extend_border_grab_area"); static auto PSPECIALFALLTHRU = CConfigValue("input:special_fallthrough"); const auto BORDER_GRAB_AREA = *PRESIZEONBORDER ? *PBORDERSIZE + *PBORDERGRABEXTEND : 0; + const bool ONLY_PRIORITY = properties & FOCUS_PRIORITY; // pinned windows on top of floating regardless if (properties & ALLOW_FLOATING) { for (auto const& w : m_windows | std::views::reverse) { + if (ONLY_PRIORITY && !w->priorityFocus()) + continue; + if (w->m_isFloating && w->m_isMapped && !w->isHidden() && !w->m_X11ShouldntFocus && w->m_pinned && !w->m_windowData.noFocus.valueOrDefault() && w != pIgnoreWindow) { const auto BB = w->getWindowBoxUnified(properties); CBox box = BB.copy().expand(!w->isX11OverrideRedirect() ? BORDER_GRAB_AREA : 0); @@ -898,6 +902,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper if (!w->m_workspace) continue; + if (ONLY_PRIORITY && !w->priorityFocus()) + continue; + const auto PWINDOWMONITOR = w->m_monitor.lock(); // to avoid focusing windows behind special workspaces from other monitors @@ -950,7 +957,7 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper const WORKSPACEID WSPID = special ? PMONITOR->activeSpecialWorkspaceID() : PMONITOR->activeWorkspaceID(); const auto PWORKSPACE = getWorkspaceByID(WSPID); - if (PWORKSPACE->m_hasFullscreenWindow && !(properties & SKIP_FULLSCREEN_PRIORITY)) + if (PWORKSPACE->m_hasFullscreenWindow && !(properties & SKIP_FULLSCREEN_PRIORITY) && !ONLY_PRIORITY) return PWORKSPACE->getFullscreenWindow(); auto found = floating(false); @@ -959,6 +966,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper // for windows, we need to check their extensions too, first. for (auto const& w : m_windows) { + if (ONLY_PRIORITY && !w->priorityFocus()) + continue; + if (special != w->onSpecialWorkspace()) continue; @@ -973,6 +983,9 @@ PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_t proper } for (auto const& w : m_windows) { + if (ONLY_PRIORITY && !w->priorityFocus()) + continue; + if (special != w->onSpecialWorkspace()) continue; @@ -1083,14 +1096,16 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP pSurface static auto PFOLLOWMOUSE = CConfigValue("input:follow_mouse"); static auto PSPECIALFALLTHROUGH = CConfigValue("input:special_fallthrough"); - if (g_pSessionLockManager->isSessionLocked()) { - Debug::log(LOG, "Refusing a keyboard focus to a window because of a sessionlock"); - return; - } + if (!pWindow || !pWindow->priorityFocus()) { + if (g_pSessionLockManager->isSessionLocked()) { + Debug::log(LOG, "Refusing a keyboard focus to a window because of a sessionlock"); + return; + } - if (!g_pInputManager->m_exclusiveLSes.empty()) { - Debug::log(LOG, "Refusing a keyboard focus to a window because of an exclusive ls"); - return; + if (!g_pInputManager->m_exclusiveLSes.empty()) { + Debug::log(LOG, "Refusing a keyboard focus to a window because of an exclusive ls"); + return; + } } if (pWindow && pWindow->m_isX11 && pWindow->isX11OverrideRedirect() && !pWindow->m_xwaylandSurface->wantsFocus()) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 7ef54da0..9f69e364 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1836,3 +1836,7 @@ PHLWINDOW CWindow::parent() { return m_xdgSurface->m_toplevel->m_parent->m_window.lock(); } + +bool CWindow::priorityFocus() { + return !m_isX11 && CAsyncDialogBox::isPriorityDialogBox(getPID()); +} diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 47d28db2..0d06b69c 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -51,6 +51,7 @@ enum eGetWindowProperties : uint8_t { ALLOW_FLOATING = 1 << 4, USE_PROP_TILED = 1 << 5, SKIP_FULLSCREEN_PRIORITY = 1 << 6, + FOCUS_PRIORITY = 1 << 7, }; enum eSuppressEvents : uint8_t { @@ -408,6 +409,7 @@ class CWindow { std::optional xdgTag(); std::optional xdgDescription(); PHLWINDOW parent(); + bool priorityFocus(); CBox getWindowMainSurfaceBox() const { return {m_realPosition->value().x, m_realPosition->value().y, m_realSize->value().x, m_realSize->value().y}; diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 42dac469..697d61ba 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -7,7 +7,7 @@ using namespace Hyprutils::OS; -static std::vector asyncDialogBoxes; +static std::vector>> asyncDialogBoxes; // SP CAsyncDialogBox::create(const std::string& title, const std::string& description, std::vector buttons) { @@ -24,7 +24,18 @@ SP CAsyncDialogBox::create(const std::string& title, const std: } bool CAsyncDialogBox::isAsyncDialogBox(pid_t pid) { - return std::ranges::contains(asyncDialogBoxes, pid); + return std::ranges::find_if(asyncDialogBoxes, [pid](const auto& e) { return e.first == pid; }) != asyncDialogBoxes.end(); +} + +bool CAsyncDialogBox::isPriorityDialogBox(pid_t pid) { + for (const auto& [p, db] : asyncDialogBoxes) { + if (p != pid) + continue; + + return db && db->m_priority; + } + + return false; } CAsyncDialogBox::CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons) : @@ -68,7 +79,7 @@ void CAsyncDialogBox::onWrite(int fd, uint32_t mask) { Debug::log(LOG, "CAsyncDialogBox: dialog {:x} hung up, closed."); m_promiseResolver->resolve(m_stdout); - std::erase(asyncDialogBoxes, m_dialogPid); + std::erase_if(asyncDialogBoxes, [this](const auto& e) { return e.first == m_dialogPid; }); wl_event_source_remove(m_readEventSource); m_selfReference.reset(); @@ -112,7 +123,7 @@ SP> CAsyncDialogBox::open() { } m_dialogPid = proc.pid(); - asyncDialogBoxes.emplace_back(m_dialogPid); + asyncDialogBoxes.emplace_back(std::make_pair<>(m_dialogPid, m_selfWeakReference)); // close the write fd, only the dialog owns it now close(outPipe[1]); diff --git a/src/helpers/AsyncDialogBox.hpp b/src/helpers/AsyncDialogBox.hpp index 4018a857..0ee0144e 100644 --- a/src/helpers/AsyncDialogBox.hpp +++ b/src/helpers/AsyncDialogBox.hpp @@ -16,6 +16,7 @@ class CAsyncDialogBox { public: static SP create(const std::string& title, const std::string& description, std::vector buttons); static bool isAsyncDialogBox(pid_t pid); + static bool isPriorityDialogBox(pid_t pid); CAsyncDialogBox(const CAsyncDialogBox&) = delete; CAsyncDialogBox(CAsyncDialogBox&&) = delete; @@ -26,7 +27,10 @@ class CAsyncDialogBox { void kill(); bool isRunning() const; - void onWrite(int fd, uint32_t mask); + // focus priority, only permission popups + bool m_priority = false; + + void onWrite(int fd, uint32_t mask); private: CAsyncDialogBox(const std::string& title, const std::string& description, std::vector buttons); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index f9f36cf2..2d50dbcf 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -250,7 +250,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (PMONITOR != g_pCompositor->m_lastMonitor && (*PMOUSEFOCUSMON || refocus) && m_forcedFocus.expired()) g_pCompositor->setActiveMonitor(PMONITOR); - if (g_pSessionLockManager->isSessionLocked()) { + // check for windows that have focus priority like our permission popups + pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, FOCUS_PRIORITY); + if (pFoundWindow) + foundSurface = g_pCompositor->vectorWindowToSurface(mouseCoords, pFoundWindow, surfaceCoords); + + if (!foundSurface && g_pSessionLockManager->isSessionLocked()) { // set keyboard focus on session lock surface regardless of layers const auto PSESSIONLOCKSURFACE = g_pSessionLockManager->getSessionLockSurfaceForMonitor(PMONITOR->m_id); @@ -288,7 +293,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) { if (!forcedFocus) forcedFocus = g_pCompositor->getForceFocus(); - if (forcedFocus) { + if (forcedFocus && !foundSurface) { pFoundWindow = forcedFocus; surfacePos = pFoundWindow->m_realPosition->value(); foundSurface = pFoundWindow->m_wlSurface->resource(); diff --git a/src/managers/permissions/DynamicPermissionManager.cpp b/src/managers/permissions/DynamicPermissionManager.cpp index dd1fd4cf..c015adfe 100644 --- a/src/managers/permissions/DynamicPermissionManager.cpp +++ b/src/managers/permissions/DynamicPermissionManager.cpp @@ -296,7 +296,8 @@ void CDynamicPermissionManager::askForPermission(wl_client* client, const std::s } else options = {"Deny", "Allow"}; - rule->m_dialogBox = CAsyncDialogBox::create("Permission request", description, options); + rule->m_dialogBox = CAsyncDialogBox::create("Permission request", description, options); + rule->m_dialogBox->m_priority = true; if (!rule->m_dialogBox) { Debug::log(ERR, "CDynamicPermissionManager::askForPermission: hyprland-qtutils likely missing, cannot ask! Disabling permission control..."); From eb3b38d40baca5c05ddbc1507b3d3f02a0ccb164 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 19 May 2025 01:27:30 +0200 Subject: [PATCH 0205/1077] eventLoop: fixup event source callbacks --- src/managers/eventLoop/EventLoopManager.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index 338b75e3..6233a2d0 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -70,16 +70,20 @@ static int handleWaiterFD(int fd, uint32_t mask, void* data) { void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) { auto it = std::ranges::find_if(m_readableWaiters, [waiter](const UP& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; }); - if (waiter->source) { - wl_event_source_remove(waiter->source); - waiter->source = nullptr; + // ??? + if (it == m_readableWaiters.end()) + return; + + UP taken = std::move(*it); + m_readableWaiters.erase(it); + + if (taken->source) { + wl_event_source_remove(taken->source); + taken->source = nullptr; } - if (waiter->fn) - waiter->fn(); - - if (it != m_readableWaiters.end()) - m_readableWaiters.erase(it); + if (taken->fn) + taken->fn(); } void CEventLoopManager::enterLoop() { From b90910c0dcc6db9d7529d02190b0a19f69cb46e3 Mon Sep 17 00:00:00 2001 From: zacoons <73414084+zacoons@users.noreply.github.com> Date: Thu, 22 May 2025 01:41:40 +1000 Subject: [PATCH 0206/1077] renderer: add wrapping options to renderTexture method (#10497) --- src/render/OpenGL.cpp | 11 ++++++----- src/render/OpenGL.hpp | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 20862a7a..855da879 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1409,10 +1409,11 @@ void CHyprOpenGLImpl::renderRectWithDamage(const CBox& box, const CHyprColor& co scissor(nullptr); } -void CHyprOpenGLImpl::renderTexture(SP tex, const CBox& box, float alpha, int round, float roundingPower, bool discardActive, bool allowCustomUV) { +void CHyprOpenGLImpl::renderTexture(SP tex, const CBox& box, float alpha, int round, float roundingPower, bool discardActive, bool allowCustomUV, GLenum wrapX, + GLenum wrapY) { RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); - renderTextureInternalWithDamage(tex, box, alpha, m_renderData.damage, round, roundingPower, discardActive, false, allowCustomUV, true); + renderTextureInternalWithDamage(tex, box, alpha, m_renderData.damage, round, roundingPower, discardActive, false, allowCustomUV, true, wrapX, wrapY); scissor(nullptr); } @@ -1477,7 +1478,7 @@ void CHyprOpenGLImpl::passCMUniforms(const SShader& shader, const SImageDescript } void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CBox& box, float alpha, const CRegion& damage, int round, float roundingPower, bool discardActive, - bool noAA, bool allowCustomUV, bool allowDim) { + bool noAA, bool allowCustomUV, bool allowDim, GLenum wrapX, GLenum wrapY) { RASSERT(m_renderData.pMonitor, "Tried to render texture without begin()!"); RASSERT((tex->m_texID > 0), "Attempted to draw nullptr texture!"); @@ -1541,8 +1542,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP tex, const CB glActiveTexture(GL_TEXTURE0); glBindTexture(tex->m_target, tex->m_texID); - glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_S, wrapX); + glTexParameteri(tex->m_target, GL_TEXTURE_WRAP_T, wrapY); if (m_renderData.useNearestNeighbor) { glTexParameteri(tex->m_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 09aff9da..fade4a9d 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -183,7 +183,8 @@ class CHyprOpenGLImpl { void renderRect(const CBox&, const CHyprColor&, int round = 0, float roundingPower = 2.0f); void renderRectWithBlur(const CBox&, const CHyprColor&, int round = 0, float roundingPower = 2.0f, float blurA = 1.f, bool xray = false); void renderRectWithDamage(const CBox&, const CHyprColor&, const CRegion& damage, int round = 0, float roundingPower = 2.0f); - void renderTexture(SP, const CBox&, float a, int round = 0, float roundingPower = 2.0f, bool discardActive = false, bool allowCustomUV = false); + void renderTexture(SP, const CBox&, float a, int round = 0, float roundingPower = 2.0f, bool discardActive = false, bool allowCustomUV = false, + GLenum wrapX = GL_CLAMP_TO_EDGE, GLenum wrapY = GL_CLAMP_TO_EDGE); void renderTextureWithDamage(SP, const CBox&, const CRegion& damage, float a, int round = 0, float roundingPower = 2.0f, bool discardActive = false, bool allowCustomUV = false); void renderTextureWithBlur(SP, const CBox&, float a, SP pSurface, int round = 0, float roundingPower = 2.0f, bool blockBlurOptimization = false, @@ -344,7 +345,7 @@ class CHyprOpenGLImpl { bool modifySDR = false); void passCMUniforms(const SShader&, const NColorManagement::SImageDescription& imageDescription); void renderTextureInternalWithDamage(SP, const CBox& box, float a, const CRegion& damage, int round = 0, float roundingPower = 2.0f, bool discardOpaque = false, - bool noAA = false, bool allowCustomUV = false, bool allowDim = false); + bool noAA = false, bool allowCustomUV = false, bool allowDim = false, GLenum wrapX = GL_CLAMP_TO_EDGE, GLenum wrapY = GL_CLAMP_TO_EDGE); void renderTexturePrimitive(SP tex, const CBox& box); void renderSplash(cairo_t* const, cairo_surface_t* const, double offset, const Vector2D& size); From 185c96849ef59da3e101116662d942dea16b468a Mon Sep 17 00:00:00 2001 From: darkwater Date: Wed, 21 May 2025 23:44:21 +0200 Subject: [PATCH 0207/1077] input: unhide cursor on tablet events after touch events (#10484) --- src/managers/input/Tablets.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 5b9ca378..b0fe7c64 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -134,6 +134,7 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { } } + m_lastInputTouch = false; simulateMouseMovement(); refocusTablet(PTAB, PTOOL, true); m_lastCursorMovement.reset(); From 4f161da3d6a3eb16cffd8c7706e2b916c82c93a7 Mon Sep 17 00:00:00 2001 From: nezu <29180158+dumbasPL@users.noreply.github.com> Date: Thu, 22 May 2025 13:54:02 +0200 Subject: [PATCH 0208/1077] hyprpm: ignore pins when adding a package with a git rev (#10502) ref #10436 --- hyprpm/src/core/PluginManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 76f20110..90eba579 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -256,7 +256,7 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& progress.printMessageAbove(message); } - if (!pManifest->m_repository.commitPins.empty()) { + if (rev.empty() && !pManifest->m_repository.commitPins.empty()) { // check commit pins progress.printMessageAbove(infoString("Manifest has {} pins, checking", pManifest->m_repository.commitPins.size())); From bd4733a0ff2b89fd3f22dc6ec9ff00e070753662 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Thu, 22 May 2025 18:02:18 +0300 Subject: [PATCH 0209/1077] flake.lock: update nix/overlays: remove wayland-protocols overlay. PR landed in master a while ago --- flake.lock | 24 ++++++++++++------------ nix/overlays.nix | 13 ------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/flake.lock b/flake.lock index 1be8e6d4..de57aab4 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1745357003, - "narHash": "sha256-jYwzQkv1r7HN/4qrAuKp+NR4YYNp2xDrOX5O9YVqkWo=", + "lastModified": 1747864449, + "narHash": "sha256-PIjVAWghZhr3L0EFM2UObhX84UQxIACbON0IC0zzSKA=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a19cf76ee1a15c1c12083fa372747ce46387289f", + "rev": "389372c5f4dc1ac0e7645ed29a35fd6d71672ef5", "type": "github" }, "original": { @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1746655412, - "narHash": "sha256-kVQ0bHVtX6baYxRWWIh4u3LNJZb9Zcm2xBeDPOGz5BY=", + "lastModified": 1747484975, + "narHash": "sha256-+LAQ81HBwG0lwshHlWe0kfWg4KcChIPpnwtnwqmnoEU=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "557241780c179cf7ef224df392f8e67dab6cef83", + "rev": "163c83b3db48a17c113729c220a60b94596c9291", "type": "github" }, "original": { @@ -261,11 +261,11 @@ ] }, "locked": { - "lastModified": 1739870480, - "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", + "lastModified": 1747584298, + "narHash": "sha256-PH9qZqWLHvSBQiUnA0NzAyQA3tu2no2z8kz0ZeHWj4w=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", + "rev": "e511882b9c2e1d7a75d45d8fddd2160daeafcbc3", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1747327360, - "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", + "lastModified": 1747744144, + "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", + "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", "type": "github" }, "original": { diff --git a/nix/overlays.nix b/nix/overlays.nix index 687a49d4..6085bf80 100644 --- a/nix/overlays.nix +++ b/nix/overlays.nix @@ -29,7 +29,6 @@ in { inputs.hyprutils.overlays.default inputs.hyprwayland-scanner.overlays.default self.overlays.udis86 - self.overlays.wayland-protocols # Hyprland packages themselves (final: _prev: let @@ -96,16 +95,4 @@ in { patches = []; }); }; - - # TODO: remove when https://github.com/NixOS/nixpkgs/pull/397497 lands in master - wayland-protocols = final: prev: { - wayland-protocols = prev.wayland-protocols.overrideAttrs (self: super: { - version = "1.43"; - - src = final.fetchurl { - url = "https://gitlab.freedesktop.org/wayland/${self.pname}/-/releases/${self.version}/downloads/${self.pname}-${self.version}.tar.xz"; - hash = "sha256-ujw0Jd0nxXtSkek9upe+EkeWAeALyrJNJkcZSMtkNlM="; - }; - }); - }; } From 81cd526f923f4a9074bbfef59b4c7e9f3350c349 Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Fri, 23 May 2025 23:41:35 +0200 Subject: [PATCH 0210/1077] cursor: fix screencopy cursor pos and duplicate shape with sw cursors (#10519) * cursor: account for hotspot with overridePos * cursor: don't draw cursor on screencopy if using sw anyways --- src/managers/PointerManager.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 7bd66c5d..f42fd686 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -603,10 +603,17 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time:: return; } + // don't render cursor if forced but we are already using sw cursors for the monitor + // otherwise we draw the cursor again for screencopy when using sw cursors + if (forceRender && (state->hardwareFailed || state->softwareLocks != 0)) + return; + auto box = state->box.copy(); if (overridePos.has_value()) { box.x = overridePos->x; box.y = overridePos->y; + + box.translate(-m_currentCursorImage.hotspot); } if (box.intersection(CBox{{}, {pMonitor->m_size}}).empty()) From 55076edaac38865562d647e22b42566822264218 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 24 May 2025 20:39:36 +0200 Subject: [PATCH 0211/1077] versionkeeper: don't pop up on initial launch --- src/managers/VersionKeeperManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/managers/VersionKeeperManager.cpp b/src/managers/VersionKeeperManager.cpp index ef9c274d..93f820f4 100644 --- a/src/managers/VersionKeeperManager.cpp +++ b/src/managers/VersionKeeperManager.cpp @@ -31,6 +31,7 @@ CVersionKeeperManager::CVersionKeeperManager() { if (!LASTVER) { NFsUtils::writeToFile(*DATAROOT + "/" + VERSION_FILE_NAME, "0.0.0"); LASTVER = "0.0.0"; + return; } if (!isVersionOlderThanRunning(*LASTVER)) { From 28c9122adbb9cba2ba19ad723eb0f36c19b21f2d Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 24 May 2025 18:41:03 +0000 Subject: [PATCH 0212/1077] [gha] Nix: update inputs --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index de57aab4..22f246d5 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1747744144, - "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", + "lastModified": 1748026106, + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", "type": "github" }, "original": { From cc0792c1dce250311a19e92bad204eefae072592 Mon Sep 17 00:00:00 2001 From: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> Date: Sat, 24 May 2025 17:26:10 +0300 Subject: [PATCH 0213/1077] hyprland-uwsm.desktop: Add TryExec This should hide this entry when uwsm is missing (at least in DMs that handle TryExec) --- systemd/hyprland-uwsm.desktop | 1 + 1 file changed, 1 insertion(+) diff --git a/systemd/hyprland-uwsm.desktop b/systemd/hyprland-uwsm.desktop index e00f4aa2..3f37532d 100644 --- a/systemd/hyprland-uwsm.desktop +++ b/systemd/hyprland-uwsm.desktop @@ -2,5 +2,6 @@ Name=Hyprland (uwsm-managed) Comment=An intelligent dynamic tiling Wayland compositor Exec=uwsm start -- hyprland.desktop +TryExec=uwsm DesktopNames=Hyprland Type=Application From a58ab20e8bc27a50d55e924b13047db6bbf9dc4a Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 25 May 2025 18:45:23 +0200 Subject: [PATCH 0214/1077] debug/pass: show live/precompile blur in debug --- src/render/pass/Pass.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index fc743865..5877d9a9 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -273,8 +273,8 @@ void CRenderPass::renderDebugData() { auto yn = [](const bool val) -> const char* { return val ? "yes" : "no"; }; auto tick = [](const bool val) -> const char* { return val ? "✔" : "✖"; }; for (const auto& el : m_passElements | std::views::reverse) { - passStructure += std::format("{} {} (bb: {} op: {})\n", tick(!el->discard), el->element->passName(), yn(el->element->boundingBox().has_value()), - yn(!el->element->opaqueRegion().empty())); + passStructure += std::format("{} {} (bb: {} op: {}, pb: {}, lb: {})\n", tick(!el->discard), el->element->passName(), yn(el->element->boundingBox().has_value()), + yn(!el->element->opaqueRegion().empty()), yn(el->element->needsPrecomputeBlur()), yn(el->element->needsLiveBlur())); } if (!passStructure.empty()) From 2347050285920925db8bc844e3232bc932eef21e Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 25 May 2025 18:48:32 +0200 Subject: [PATCH 0215/1077] pass/surface: make sure popup blurs are marked for require live blur fixes #10535 --- src/render/pass/SurfacePassElement.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/render/pass/SurfacePassElement.cpp b/src/render/pass/SurfacePassElement.cpp index d161f909..2163566a 100644 --- a/src/render/pass/SurfacePassElement.cpp +++ b/src/render/pass/SurfacePassElement.cpp @@ -195,6 +195,9 @@ bool CSurfacePassElement::needsLiveBlur() { if (!m_data.pLS && !m_data.pWindow) return BLUR; + if (m_data.popup) + return BLUR; + const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(m_data.pLS, m_data.pWindow); return BLUR && !NEWOPTIM; @@ -209,6 +212,9 @@ bool CSurfacePassElement::needsPrecomputeBlur() { if (!m_data.pLS && !m_data.pWindow) return BLUR; + if (m_data.popup) + return false; + const bool NEWOPTIM = g_pHyprOpenGL->shouldUseNewBlurOptimizations(m_data.pLS, m_data.pWindow); return BLUR && NEWOPTIM; From 292a7456af9465a57a7fe3ee36d113ae661a9ff3 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 26 May 2025 16:53:35 +0200 Subject: [PATCH 0216/1077] eventLoop: fixup headers --- src/managers/eventLoop/EventLoopManager.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index a3c755a7..977d2b01 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -5,7 +5,7 @@ #include #include #include -#include "helpers/signal/Signal.hpp" +#include "../../helpers/signal/Signal.hpp" #include #include "EventLoopTimer.hpp" From 4c4c9bb324b9e17bddb72c4614b451775521ee24 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 27 May 2025 01:15:11 +0800 Subject: [PATCH 0217/1077] dwindle: add better automatic window drag and drop direction detection (#9704) --- src/config/ConfigDescriptions.hpp | 6 ++++++ src/config/ConfigManager.cpp | 1 + src/layout/IHyprLayout.cpp | 26 +++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 8fc6b04b..19c1f74c 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1757,6 +1757,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_CHOICE, .data = SConfigOptionDescription::SChoiceData{0, "positional,current,opening"}, }, + SConfigOptionDescription{ + .value = "dwindle:precise_move", + .description = "if enabled, bindm movewindow will drop the window more precisely depending on where your mouse is.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, /* * master: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f5f0bed3..99b4cf85 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -592,6 +592,7 @@ CConfigManager::CConfigManager() { registerConfigVar("dwindle:split_bias", Hyprlang::INT{0}); registerConfigVar("dwindle:smart_split", Hyprlang::INT{0}); registerConfigVar("dwindle:smart_resizing", Hyprlang::INT{1}); + registerConfigVar("dwindle:precise_move", Hyprlang::INT{0}); registerConfigVar("master:special_scale_factor", {1.f}); registerConfigVar("master:mfact", {0.55f}); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 8d32e44e..93b09c87 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -362,9 +362,33 @@ void IHyprLayout::onEndDragWindow() { } if (DRAGGINGWINDOW->m_draggingTiled) { + static auto PPRECISEMOUSE = CConfigValue("dwindle:precise_mouse_move"); DRAGGINGWINDOW->m_isFloating = false; g_pInputManager->refocus(); - changeWindowFloatingMode(DRAGGINGWINDOW); + + if (*PPRECISEMOUSE) { + eDirection direction = DIRECTION_DEFAULT; + + const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); + const PHLWINDOW pReferenceWindow = g_pCompositor->vectorToWindowUnified(MOUSECOORDS, RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING, DRAGGINGWINDOW); + + if (pReferenceWindow && pReferenceWindow != DRAGGINGWINDOW) { + const Vector2D draggedCenter = DRAGGINGWINDOW->m_realPosition->goal() + DRAGGINGWINDOW->m_realSize->goal() / 2.f; + const Vector2D referenceCenter = pReferenceWindow->m_realPosition->goal() + pReferenceWindow->m_realSize->goal() / 2.f; + const float xDiff = draggedCenter.x - referenceCenter.x; + const float yDiff = draggedCenter.y - referenceCenter.y; + + if (fabs(xDiff) > fabs(yDiff)) + direction = xDiff < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + else + direction = yDiff < 0 ? DIRECTION_UP : DIRECTION_DOWN; + } + + onWindowRemovedTiling(DRAGGINGWINDOW); + onWindowCreatedTiling(DRAGGINGWINDOW, direction); + } else + changeWindowFloatingMode(DRAGGINGWINDOW); + DRAGGINGWINDOW->m_lastFloatingSize = m_draggingWindowOriginalFloatSize; } From c2805aad92978577a4d89b14f1c4f51e50247547 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Mon, 26 May 2025 18:25:58 +0100 Subject: [PATCH 0218/1077] config: add maxwidth monitor resolution mode (#10528) Signed-off-by: Nikolaos Karaolidis --- src/config/ConfigManager.cpp | 2 ++ src/helpers/Monitor.cpp | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 99b4cf85..a8d70bb6 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2014,6 +2014,8 @@ std::optional CConfigManager::handleMonitor(const std::string& comm newrule.resolution = Vector2D(-1, -1); } else if (ARGS[1].starts_with("highres")) { newrule.resolution = Vector2D(-1, -2); + } else if (ARGS[1].starts_with("maxwidth")) { + newrule.resolution = Vector2D(-1, -3); } else if (parseModeLine(ARGS[1], newrule.drmMode)) { newrule.resolution = Vector2D(newrule.drmMode.hdisplay, newrule.drmMode.vdisplay); newrule.refreshRate = float(newrule.drmMode.vrefresh) / 1000; diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 4dc0942d..72a221f5 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -515,7 +515,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { } else if (RULE->resolution == Vector2D(-1, -2)) { requestedStr = "highres"; - // sort prioritizing resultion 1st and refresh rate 2nd, then add best 3 + // sort prioritizing resolution 1st and refresh rate 2nd, then add best 3 addBest3Modes([](auto const& a, auto const& b) { if (a->pixelSize.x > b->pixelSize.x && a->pixelSize.y > b->pixelSize.y) return true; @@ -524,6 +524,17 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { return true; return false; }); + } else if (RULE->resolution == Vector2D(-1, -3)) { + requestedStr = "maxwidth"; + + // sort prioritizing widest resolution 1st and refresh rate 2nd, then add best 3 + addBest3Modes([](auto const& a, auto const& b) { + if (a->pixelSize.x > b->pixelSize.x) + return true; + if (a->pixelSize.x == b->pixelSize.x && std::round(a->refreshRate) > std::round(b->refreshRate)) + return true; + return false; + }); } else if (RULE->resolution != Vector2D()) { // user requested mode requestedStr = std::format("{:X0}@{:.2f}Hz", RULE->resolution, RULE->refreshRate); From be6ee6e55f08387a9e2fbf712c061fb238a70319 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 26 May 2025 23:33:25 +0200 Subject: [PATCH 0219/1077] cmake: disable gprof by default --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4267a59d..61893803 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,7 +153,7 @@ endif() add_executable(Hyprland ${SRCFILES} ${TRACY_CPP_FILES}) -set(USE_GPROF ON) +set(USE_GPROF OFF) if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG) message(STATUS "Setting debug flags") From a62ccb169aa05ef40c6c215c0638e843740920f3 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 27 May 2025 15:33:17 +0800 Subject: [PATCH 0220/1077] config: fix crash on misnamed variable (#10549) --- src/config/ConfigDescriptions.hpp | 2 +- src/config/ConfigManager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 19c1f74c..f59bd1a9 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1758,7 +1758,7 @@ inline static const std::vector CONFIG_OPTIONS = { .data = SConfigOptionDescription::SChoiceData{0, "positional,current,opening"}, }, SConfigOptionDescription{ - .value = "dwindle:precise_move", + .value = "dwindle:precise_mouse_move", .description = "if enabled, bindm movewindow will drop the window more precisely depending on where your mouse is.", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index a8d70bb6..a4f09d65 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -592,7 +592,7 @@ CConfigManager::CConfigManager() { registerConfigVar("dwindle:split_bias", Hyprlang::INT{0}); registerConfigVar("dwindle:smart_split", Hyprlang::INT{0}); registerConfigVar("dwindle:smart_resizing", Hyprlang::INT{1}); - registerConfigVar("dwindle:precise_move", Hyprlang::INT{0}); + registerConfigVar("dwindle:precise_mouse_move", Hyprlang::INT{0}); registerConfigVar("master:special_scale_factor", {1.f}); registerConfigVar("master:mfact", {0.55f}); From ddb9f8394df01eaa575955e7f0eee99065441e4b Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 27 May 2025 22:50:00 +0800 Subject: [PATCH 0221/1077] config: fix inconsistant hint of default value (#10556) similar to https://github.com/hyprwm/hyprland-wiki/pull/1093 --- src/config/ConfigDescriptions.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index f59bd1a9..5e18233d 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1761,7 +1761,7 @@ inline static const std::vector CONFIG_OPTIONS = { .value = "dwindle:precise_mouse_move", .description = "if enabled, bindm movewindow will drop the window more precisely depending on where your mouse is.", .type = CONFIG_OPTION_BOOL, - .data = SConfigOptionDescription::SBoolData{true}, + .data = SConfigOptionDescription::SBoolData{false}, }, /* From 90d0b8ecae9540c21ce418ef781cf0fc2afc4dff Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Tue, 27 May 2025 15:51:59 +0100 Subject: [PATCH 0222/1077] core: add auto-center arrangements (#10527) Signed-off-by: Nikolaos Karaolidis --- src/Compositor.cpp | 24 ++++++++++++++++++++++++ src/config/ConfigManager.cpp | 12 +++++++++++- src/helpers/Monitor.hpp | 6 +++++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index c6593923..b4d3aaea 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2890,6 +2890,30 @@ void CCompositor::arrangeMonitors() { case eAutoDirs::DIR_AUTO_LEFT: newPosition.x = maxXOffsetLeft - m->m_size.x; break; case eAutoDirs::DIR_AUTO_RIGHT: case eAutoDirs::DIR_AUTO_NONE: newPosition.x = maxXOffsetRight; break; + case eAutoDirs::DIR_AUTO_CENTER_UP: { + int width = maxXOffsetRight - maxXOffsetLeft; + newPosition.y = maxYOffsetUp - m->m_size.y; + newPosition.x = maxXOffsetLeft + (width - m->m_size.x) / 2; + break; + } + case eAutoDirs::DIR_AUTO_CENTER_DOWN: { + int width = maxXOffsetRight - maxXOffsetLeft; + newPosition.y = maxYOffsetDown; + newPosition.x = maxXOffsetLeft + (width - m->m_size.x) / 2; + break; + } + case eAutoDirs::DIR_AUTO_CENTER_LEFT: { + int height = maxYOffsetDown - maxYOffsetUp; + newPosition.x = maxXOffsetLeft - m->m_size.x; + newPosition.y = maxYOffsetUp + (height - m->m_size.y) / 2; + break; + } + case eAutoDirs::DIR_AUTO_CENTER_RIGHT: { + int height = maxYOffsetDown - maxYOffsetUp; + newPosition.x = maxXOffsetRight; + newPosition.y = maxYOffsetUp + (height - m->m_size.y) / 2; + break; + } default: UNREACHABLE(); } Debug::log(LOG, "arrangeMonitors: {} auto {:j}", m->m_name, m->m_position); diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index a4f09d65..a79afb35 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2049,10 +2049,20 @@ std::optional CConfigManager::handleMonitor(const std::string& comm newrule.autoDir = eAutoDirs::DIR_AUTO_UP; else if (ARGS[2] == "auto-down") newrule.autoDir = eAutoDirs::DIR_AUTO_DOWN; + else if (ARGS[2] == "auto-center-right") + newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_RIGHT; + else if (ARGS[2] == "auto-center-left") + newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_LEFT; + else if (ARGS[2] == "auto-center-up") + newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_UP; + else if (ARGS[2] == "auto-center-down") + newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_DOWN; else { Debug::log(WARN, "Invalid auto direction. Valid options are 'auto'," - "'auto-up', 'auto-down', 'auto-left', and 'auto-right'."); + "'auto-up', 'auto-down', 'auto-left', 'auto-right'," + "'auto-center-up', 'auto-center-down'," + "'auto-center-left', and 'auto-center-right'."); error += "invalid auto direction "; } } else { diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index 31777b0c..019a5547 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -25,7 +25,11 @@ enum eAutoDirs : uint8_t { DIR_AUTO_UP, DIR_AUTO_DOWN, DIR_AUTO_LEFT, - DIR_AUTO_RIGHT + DIR_AUTO_RIGHT, + DIR_AUTO_CENTER_UP, + DIR_AUTO_CENTER_DOWN, + DIR_AUTO_CENTER_LEFT, + DIR_AUTO_CENTER_RIGHT }; enum eCMType : uint8_t { From 24915a3a9b0bb8c4dc8b5a365cc0bc3a03ee36f0 Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Tue, 27 May 2025 20:10:22 +0500 Subject: [PATCH 0223/1077] windowrules: Add noscreenshare (#10482) --- src/desktop/Window.hpp | 2 ++ src/protocols/Screencopy.cpp | 54 ++++++++++++++++++++++++++++++++ src/protocols/ToplevelExport.cpp | 17 +++++----- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 0d06b69c..3f73c468 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -104,6 +104,7 @@ struct SWindowData { CWindowOverridableVar xray = false; CWindowOverridableVar renderUnfocused = false; CWindowOverridableVar noFollowMouse = false; + CWindowOverridableVar noScreenShare = false; CWindowOverridableVar borderSize = {std::string("general:border_size"), Hyprlang::INT(0), std::nullopt}; CWindowOverridableVar rounding = {std::string("decoration:rounding"), Hyprlang::INT(0), std::nullopt}; @@ -489,6 +490,7 @@ namespace NWindowProperties { {"immediate", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.tearing; }}, {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.xray; }}, {"nofollowmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noFollowMouse; }}, + {"noscreenshare", [](const PHLWINDOW& pWindow) { return &pWindow->m_windowData.noScreenShare; }}, }; const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 5fa7c84e..8002776a 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -13,6 +13,7 @@ #include "types/Buffer.hpp" #include "../helpers/Format.hpp" #include "../helpers/time/Time.hpp" +#include "XDGShell.hpp" #include #include @@ -200,6 +201,59 @@ void CScreencopyFrame::renderMon() { g_pHyprOpenGL->renderTexture(TEXTURE, monbox, 1); g_pHyprOpenGL->setRenderModifEnabled(true); g_pHyprOpenGL->setMonitorTransformEnabled(false); + + for (auto const& w : g_pCompositor->m_windows) { + if (!w->m_windowData.noScreenShare.valueOrDefault()) + continue; + + if (!g_pHyprRenderer->shouldRenderWindow(w)) + continue; + + const auto PWORKSPACE = w->m_workspace; + + if UNLIKELY (!PWORKSPACE) + continue; + + const auto REALPOS = w->m_realPosition->value() + (w->m_pinned ? Vector2D{} : PWORKSPACE->m_renderOffset->value()); + const auto noScreenShareBox = CBox{REALPOS.x, REALPOS.y, std::max(w->m_realSize->value().x, 5.0), std::max(w->m_realSize->value().y, 5.0)} + .scale(m_monitor->m_scale) + .translate({-m_monitor->m_position.x, -m_monitor->m_position.y}) + .translate({-m_box.x, -m_box.y}); + + const auto dontRound = w->isEffectiveInternalFSMode(FSMODE_FULLSCREEN) || w->m_windowData.noRounding.valueOrDefault(); + const auto rounding = dontRound ? 0 : w->rounding() * m_monitor->m_scale; + const auto roundingPower = dontRound ? 2.0f : w->roundingPower(); + + g_pHyprOpenGL->renderRect(noScreenShareBox, {0, 0, 0, 255}, rounding, roundingPower); + + if (w->m_isX11 || !w->m_popupHead) + continue; + + const auto geom = w->m_xdgSurface->m_current.geometry; + const Vector2D popupBaseOffset = REALPOS - Vector2D{geom.pos().x, geom.pos().y}; + + w->m_popupHead->breadthfirst( + [&](WP popup, void*) { + if (!popup->m_wlSurface || !popup->m_wlSurface->resource() || !popup->m_mapped) + return; + + const auto popRel = popup->coordsRelativeToParent(); + popup->m_wlSurface->resource()->breadthfirst( + [&](SP surf, const Vector2D& localOff, void*) { + const auto size = surf->m_current.size; + const auto surfBox = CBox{popupBaseOffset.x + popRel.x + localOff.x, popupBaseOffset.y + popRel.y + localOff.y, size.x, size.y} + .scale(m_monitor->m_scale) + .translate({-m_monitor->m_position.x, -m_monitor->m_position.y}) + .translate({-m_box.x, -m_box.y}); + + if LIKELY (surfBox.w > 0 && surfBox.h > 0) + g_pHyprOpenGL->renderRect(surfBox, {0, 0, 0, 255}); + }, + nullptr); + }, + nullptr); + } + if (m_overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(m_monitor.lock(), Time::steadyNow(), fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_monitor->m_position - m_box.pos(), true); diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index e50f1fce..4d0ee0f8 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -257,10 +257,11 @@ bool CToplevelExportFrame::copyShm(const Time::steady_tp& now) { // render client at 0,0 if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); - g_pHyprRenderer->m_bBlockSurfaceFeedback = false; - + if (!m_window->m_windowData.noScreenShare.valueOrDefault()) { + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = false; + } if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); } else if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { @@ -338,9 +339,11 @@ bool CToplevelExportFrame::copyDmabuf(const Time::steady_tp& now) { g_pHyprOpenGL->clear(CHyprColor(0, 0, 0, 1.0)); if (PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW) { - g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible - g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); - g_pHyprRenderer->m_bBlockSurfaceFeedback = false; + if (!m_window->m_windowData.noScreenShare.valueOrDefault()) { + g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(m_window); // block the feedback to avoid spamming the surface if it's visible + g_pHyprRenderer->renderWindow(m_window, PMONITOR, now, false, RENDER_PASS_ALL, true, true); + g_pHyprRenderer->m_bBlockSurfaceFeedback = false; + } if (overlayCursor) g_pPointerManager->renderSoftwareCursorsFor(PMONITOR->m_self.lock(), now, fakeDamage, g_pInputManager->getMouseCoordsInternal() - m_window->m_realPosition->value()); From 9b327ddfd1ad4cfef7a04a178e9f0aed16e95e0a Mon Sep 17 00:00:00 2001 From: vaxerski Date: Tue, 27 May 2025 21:26:47 +0200 Subject: [PATCH 0224/1077] monitor: mark 0, 0 presentation timestamps as invalid fixes #10562 --- src/helpers/Monitor.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 72a221f5..d7536a39 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -74,11 +74,16 @@ void CMonitor::onConnect(bool noRule) { auto E = std::any_cast(d); timespec* ts = E.when; - if (!ts) { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(&now), E.refresh, E.seq, E.flags); - } else + + if (ts && ts->tv_sec <= 2) { + // drop this timestamp, it's not valid. Likely drm is cringe. We can't push it further because + // a) it's wrong, b) our translations aren't 100% accurate and risk underflows + ts = nullptr; + } + + if (!ts) + PROTO::presentation->onPresented(m_self.lock(), Time::steadyNow(), E.refresh, E.seq, E.flags); + else PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(E.when), E.refresh, E.seq, E.flags); }); From 5cc6cb49458634bd277ada22dfffe6f189cd7d34 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 28 May 2025 15:18:30 +0200 Subject: [PATCH 0225/1077] groupbar: force recalc on visibility changes fixes #10566 --- .../decorations/CHyprGroupBarDecoration.cpp | 17 ++++++++++++----- .../decorations/CHyprGroupBarDecoration.hpp | 3 +++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 84060e0d..65d7d7ff 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -29,7 +29,6 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { static auto PHEIGHT = CConfigValue("group:groupbar:height"); static auto PINDICATORGAP = CConfigValue("group:groupbar:indicator_gap"); static auto PINDICATORHEIGHT = CConfigValue("group:groupbar:indicator_height"); - static auto PENABLED = CConfigValue("group:groupbar:enabled"); static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); static auto PGRADIENTS = CConfigValue("group:groupbar:gradients"); static auto PPRIORITY = CConfigValue("group:groupbar:priority"); @@ -43,7 +42,7 @@ SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() { info.priority = *PPRIORITY; info.reserved = true; - if (*PENABLED && m_window->m_windowData.decorate.valueOrDefault()) { + if (visible()) { if (*PSTACKED) { const auto ONEBARHEIGHT = *POUTERGAP + *PINDICATORHEIGHT + *PINDICATORGAP + (*PGRADIENTS || *PRENDERTITLES ? *PHEIGHT : 0); info.desiredExtents = {{0, (ONEBARHEIGHT * m_dwGroupMembers.size()) + (*PKEEPUPPERGAP * *POUTERGAP)}, {0, 0}}; @@ -96,11 +95,14 @@ void CHyprGroupBarDecoration::damageEntire() { void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) { // get how many bars we will draw - int barsToDraw = m_dwGroupMembers.size(); + int barsToDraw = m_dwGroupMembers.size(); - static auto PENABLED = CConfigValue("group:groupbar:enabled"); + const bool VISIBLE = visible(); - if (!*PENABLED || !m_window->m_windowData.decorate.valueOrDefault()) + if (VISIBLE != m_bLastVisibilityStatus) + g_pDecorationPositioner->repositionDeco(this); + + if (!VISIBLE) return; static auto PRENDERTITLES = CConfigValue("group:groupbar:render_titles"); @@ -583,3 +585,8 @@ CBox CHyprGroupBarDecoration::assignedBoxGlobal() { return box.round(); } + +bool CHyprGroupBarDecoration::visible() { + static auto PENABLED = CConfigValue("group:groupbar:enabled"); + return *PENABLED && m_window->m_windowData.decorate.valueOrDefault(); +} diff --git a/src/render/decorations/CHyprGroupBarDecoration.hpp b/src/render/decorations/CHyprGroupBarDecoration.hpp index feb304f2..5e1abc5a 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.hpp +++ b/src/render/decorations/CHyprGroupBarDecoration.hpp @@ -56,10 +56,13 @@ class CHyprGroupBarDecoration : public IHyprWindowDecoration { float m_barWidth; float m_barHeight; + bool m_bLastVisibilityStatus = true; + CTitleTex* textureFromTitle(const std::string&); void invalidateTextures(); CBox assignedBoxGlobal(); + bool visible(); bool onBeginWindowDragOnDeco(const Vector2D&); bool onEndWindowDragOnDeco(const Vector2D&, PHLWINDOW); From 9bf1b491440eac6f9c0d6853013ad5666c12d1d9 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 28 May 2025 21:20:03 +0800 Subject: [PATCH 0226/1077] snap: add option to respect gaps (#10524) --- src/config/ConfigDescriptions.hpp | 6 ++++ src/config/ConfigManager.cpp | 1 + src/layout/IHyprLayout.cpp | 48 +++++++++++++++++++------------ 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 5e18233d..a77cf757 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -128,6 +128,12 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, + SConfigOptionDescription{ + .value = "general:snap:respect_gaps", + .description = "if true, snapping will respect gaps between windows", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, /* * decoration: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index a79afb35..acbc0262 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -456,6 +456,7 @@ CConfigManager::CConfigManager() { registerConfigVar("general:snap:window_gap", Hyprlang::INT{10}); registerConfigVar("general:snap:monitor_gap", Hyprlang::INT{10}); registerConfigVar("general:snap:border_overlap", Hyprlang::INT{0}); + registerConfigVar("general:snap:respect_gaps", Hyprlang::INT{0}); registerConfigVar("general:col.active_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffffff"}); registerConfigVar("general:col.inactive_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xff444444"}); registerConfigVar("general:col.nogroup_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffaaff"}); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 93b09c87..1fe3a936 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -417,6 +417,7 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA static auto SNAPWINDOWGAP = CConfigValue("general:snap:window_gap"); static auto SNAPMONITORGAP = CConfigValue("general:snap:monitor_gap"); static auto SNAPBORDEROVERLAP = CConfigValue("general:snap:border_overlap"); + static auto SNAPRESPECTGAPS = CConfigValue("general:snap:respect_gaps"); const SnapFn SNAP = (MODE == MBIND_MOVE) ? snapMove : snapResize; int snaps = 0; @@ -444,9 +445,15 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA const int OTHERBORDERSIZE = other->getRealBorderSize(); const double BORDERSIZE = OVERLAP ? std::max(DRAGGINGBORDERSIZE, OTHERBORDERSIZE) : (DRAGGINGBORDERSIZE + OTHERBORDERSIZE); - const CBox SURF = other->getWindowMainSurfaceBox(); - const SRange SURFBX = {SURF.x - BORDERSIZE, SURF.x + SURF.w + BORDERSIZE}; - const SRange SURFBY = {SURF.y - BORDERSIZE, SURF.y + SURF.h + BORDERSIZE}; + const CBox SURF = other->getWindowMainSurfaceBox(); + double gapOffset = 0; + if (*SNAPRESPECTGAPS) { + static auto PGAPSINDATA = CConfigValue("general:gaps_in"); + auto* PGAPSINPTR = (CCssGapData*)(PGAPSINDATA.ptr())->getData(); + gapOffset = std::max({PGAPSINPTR->m_left, PGAPSINPTR->m_right, PGAPSINPTR->m_top, PGAPSINPTR->m_bottom}); + } + const SRange SURFBX = {SURF.x - BORDERSIZE - gapOffset, SURF.x + SURF.w + BORDERSIZE + gapOffset}; + const SRange SURFBY = {SURF.y - BORDERSIZE - gapOffset, SURF.y + SURF.h + BORDERSIZE + gapOffset}; // only snap windows if their ranges overlap in the opposite axis if (sourceY.start <= SURFBY.end && SURFBY.start <= sourceY.end) { @@ -497,32 +504,37 @@ static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRA const double GAPSIZE = *SNAPMONITORGAP; const double BORDERDIFF = OVERLAP ? DRAGGINGBORDERSIZE : 0; const auto MON = DRAGGINGWINDOW->m_monitor.lock(); - - SRange monX = {MON->m_position.x + MON->m_reservedTopLeft.x + DRAGGINGBORDERSIZE, MON->m_position.x + MON->m_size.x - MON->m_reservedBottomRight.x - DRAGGINGBORDERSIZE}; - SRange monY = {MON->m_position.y + MON->m_reservedTopLeft.y + DRAGGINGBORDERSIZE, MON->m_position.y + MON->m_size.y - MON->m_reservedBottomRight.y - DRAGGINGBORDERSIZE}; + double gapOffset = 0; + if (*SNAPRESPECTGAPS) { + static auto PGAPSOUTDATA = CConfigValue("general:gaps_out"); + auto* PGAPSOUTPTR = (CCssGapData*)(PGAPSOUTDATA.ptr())->getData(); + gapOffset = std::max({PGAPSOUTPTR->m_left, PGAPSOUTPTR->m_right, PGAPSOUTPTR->m_top, PGAPSOUTPTR->m_bottom}); + } if (CORNER & (CORNER_TOPLEFT | CORNER_BOTTOMLEFT) && - ((MON->m_reservedTopLeft.x > 0 && canSnap(sourceX.start, monX.start, GAPSIZE)) || - canSnap(sourceX.start, (monX.start -= MON->m_reservedTopLeft.x + BORDERDIFF), GAPSIZE))) { - SNAP(sourceX.start, sourceX.end, monX.start); + ((MON->m_reservedTopLeft.x > 0 && canSnap(sourceX.start, MON->m_position.x + MON->m_reservedTopLeft.x + DRAGGINGBORDERSIZE + gapOffset, GAPSIZE)) || + canSnap(sourceX.start, MON->m_position.x + MON->m_reservedTopLeft.x - BORDERDIFF + gapOffset, GAPSIZE))) { + SNAP(sourceX.start, sourceX.end, MON->m_position.x + MON->m_reservedTopLeft.x + DRAGGINGBORDERSIZE + gapOffset); snaps |= SNAP_LEFT; } if (CORNER & (CORNER_TOPRIGHT | CORNER_BOTTOMRIGHT) && - ((MON->m_reservedBottomRight.x > 0 && canSnap(sourceX.end, monX.end, GAPSIZE)) || - canSnap(sourceX.end, (monX.end += MON->m_reservedBottomRight.x + BORDERDIFF), GAPSIZE))) { - SNAP(sourceX.end, sourceX.start, monX.end); + ((MON->m_reservedBottomRight.x > 0 && + canSnap(sourceX.end, MON->m_position.x + MON->m_size.x - MON->m_reservedBottomRight.x - DRAGGINGBORDERSIZE - gapOffset, GAPSIZE)) || + canSnap(sourceX.end, MON->m_position.x + MON->m_size.x - MON->m_reservedBottomRight.x + BORDERDIFF - gapOffset, GAPSIZE))) { + SNAP(sourceX.end, sourceX.start, MON->m_position.x + MON->m_size.x - MON->m_reservedBottomRight.x - DRAGGINGBORDERSIZE - gapOffset); snaps |= SNAP_RIGHT; } if (CORNER & (CORNER_TOPLEFT | CORNER_TOPRIGHT) && - ((MON->m_reservedTopLeft.y > 0 && canSnap(sourceY.start, monY.start, GAPSIZE)) || - canSnap(sourceY.start, (monY.start -= MON->m_reservedTopLeft.y + BORDERDIFF), GAPSIZE))) { - SNAP(sourceY.start, sourceY.end, monY.start); + ((MON->m_reservedTopLeft.y > 0 && canSnap(sourceY.start, MON->m_position.y + MON->m_reservedTopLeft.y + DRAGGINGBORDERSIZE + gapOffset, GAPSIZE)) || + canSnap(sourceY.start, MON->m_position.y + MON->m_reservedTopLeft.y - BORDERDIFF + gapOffset, GAPSIZE))) { + SNAP(sourceY.start, sourceY.end, MON->m_position.y + MON->m_reservedTopLeft.y + DRAGGINGBORDERSIZE + gapOffset); snaps |= SNAP_UP; } if (CORNER & (CORNER_BOTTOMLEFT | CORNER_BOTTOMRIGHT) && - ((MON->m_reservedBottomRight.y > 0 && canSnap(sourceY.end, monY.end, GAPSIZE)) || - canSnap(sourceY.end, (monY.end += MON->m_reservedBottomRight.y + BORDERDIFF), GAPSIZE))) { - SNAP(sourceY.end, sourceY.start, monY.end); + ((MON->m_reservedBottomRight.y > 0 && + canSnap(sourceY.end, MON->m_position.y + MON->m_size.y - MON->m_reservedBottomRight.y - DRAGGINGBORDERSIZE - gapOffset, GAPSIZE)) || + canSnap(sourceY.end, MON->m_position.y + MON->m_size.y - MON->m_reservedBottomRight.y + BORDERDIFF - gapOffset, GAPSIZE))) { + SNAP(sourceY.end, sourceY.start, MON->m_position.y + MON->m_size.y - MON->m_reservedBottomRight.y - DRAGGINGBORDERSIZE - gapOffset); snaps |= SNAP_DOWN; } } From 9190443d951c21ab24201d033accf90b4d172f46 Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Fri, 30 May 2025 18:25:59 +0500 Subject: [PATCH 0227/1077] refactor: use std::ranges whenever possible (#10584) --- src/Compositor.cpp | 4 ++-- src/config/ConfigDataValues.hpp | 2 +- src/config/ConfigManager.cpp | 12 +++++----- src/debug/HyprCtl.cpp | 11 ++++----- src/debug/HyprNotificationOverlay.cpp | 2 +- src/desktop/Window.cpp | 3 ++- src/devices/IKeyboard.cpp | 2 +- src/events/Windows.cpp | 2 +- src/helpers/MiscFunctions.cpp | 8 +++---- src/helpers/Monitor.cpp | 12 ++++++---- src/hyprerror/HyprError.cpp | 2 +- src/layout/MasterLayout.cpp | 23 +++++++++---------- src/managers/AnimationManager.cpp | 2 +- src/managers/CursorManager.cpp | 2 +- src/managers/EventManager.cpp | 2 +- src/managers/HookSystemManager.cpp | 2 +- src/managers/KeybindManager.cpp | 13 ++++------- src/managers/LayoutManager.cpp | 4 ++-- src/managers/PointerManager.cpp | 2 +- src/managers/SeatManager.cpp | 2 +- src/managers/XCursorManager.cpp | 8 +++---- src/managers/input/InputManager.cpp | 12 +++++----- src/protocols/AlphaModifier.cpp | 2 +- src/protocols/ColorManagement.cpp | 4 ++-- src/protocols/DRMLease.cpp | 6 ++--- src/protocols/DataDeviceWlr.cpp | 6 ++--- src/protocols/FocusGrab.cpp | 4 ++-- src/protocols/ForeignToplevel.cpp | 2 +- src/protocols/ForeignToplevelWlr.cpp | 2 +- src/protocols/HyprlandSurface.cpp | 2 +- src/protocols/LayerShell.cpp | 2 +- src/protocols/LinuxDMABUF.cpp | 16 ++++++------- src/protocols/PointerConstraints.cpp | 2 +- src/protocols/PrimarySelection.cpp | 6 ++--- src/protocols/SecurityContext.cpp | 2 +- src/protocols/VirtualKeyboard.cpp | 2 +- src/protocols/XDGActivation.cpp | 5 ++-- src/protocols/XDGShell.cpp | 8 +++---- src/protocols/XXColorManagement.cpp | 4 ++-- src/protocols/core/Compositor.cpp | 4 ++-- src/protocols/core/DataDevice.cpp | 6 ++--- src/protocols/core/Seat.cpp | 4 ++-- src/protocols/core/Shm.cpp | 2 +- src/protocols/core/Subcompositor.cpp | 14 +++++------ src/render/OpenGL.cpp | 8 +++---- src/render/Renderer.cpp | 10 ++++---- .../decorations/DecorationPositioner.cpp | 16 ++++++------- src/render/pass/Pass.cpp | 2 +- src/xwayland/XSurface.cpp | 2 +- src/xwayland/XWM.cpp | 8 +++---- 50 files changed, 137 insertions(+), 146 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index b4d3aaea..8d53f3d8 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1724,13 +1724,13 @@ static PHLWINDOW getWeakWindowPred(Iterator cur, Iterator end, Iterator begin, c PHLWINDOW CCompositor::getWindowCycleHist(PHLWINDOWREF cur, bool focusableOnly, std::optional floating, bool visible, bool next) { const auto FINDER = [&](const PHLWINDOWREF& w) { return isWindowAvailableForCycle(cur, w, focusableOnly, floating, visible); }; // also m_vWindowFocusHistory has reverse order, so when it is next - we need to reverse again - return next ? getWeakWindowPred(std::ranges::find(std::ranges::reverse_view(m_windowFocusHistory), cur), m_windowFocusHistory.rend(), m_windowFocusHistory.rbegin(), FINDER) : + return next ? getWeakWindowPred(std::ranges::find(m_windowFocusHistory | std::views::reverse, cur), m_windowFocusHistory.rend(), m_windowFocusHistory.rbegin(), FINDER) : getWeakWindowPred(std::ranges::find(m_windowFocusHistory, cur), m_windowFocusHistory.end(), m_windowFocusHistory.begin(), FINDER); } PHLWINDOW CCompositor::getWindowCycle(PHLWINDOW cur, bool focusableOnly, std::optional floating, bool visible, bool prev) { const auto FINDER = [&](const PHLWINDOW& w) { return isWindowAvailableForCycle(cur, w, focusableOnly, floating, visible); }; - return prev ? getWindowPred(std::ranges::find(std::ranges::reverse_view(m_windows), cur), m_windows.rend(), m_windows.rbegin(), FINDER) : + return prev ? getWindowPred(std::ranges::find(m_windows | std::views::reverse, cur), m_windows.rend(), m_windows.rbegin(), FINDER) : getWindowPred(std::ranges::find(m_windows, cur), m_windows.end(), m_windows.begin(), FINDER); } diff --git a/src/config/ConfigDataValues.hpp b/src/config/ConfigDataValues.hpp index 2fad9277..d17e7672 100644 --- a/src/config/ConfigDataValues.hpp +++ b/src/config/ConfigDataValues.hpp @@ -158,7 +158,7 @@ class CFontWeightConfigValueData : public ICustomConfigValueData { void parseWeight(const std::string& strWeight) { auto lcWeight{strWeight}; - transform(strWeight.begin(), strWeight.end(), lcWeight.begin(), ::tolower); + std::ranges::transform(strWeight, lcWeight.begin(), ::tolower); // values taken from Pango weight enums const auto WEIGHTS = std::map{ diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index acbc0262..3ab53a3c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1651,7 +1651,7 @@ Hyprlang::CConfigValue* CConfigManager::getHyprlangConfigValuePtr(const std::str bool CConfigManager::deviceConfigExists(const std::string& dev) { auto copy = dev; - std::replace(copy.begin(), copy.end(), ' ', '-'); + std::ranges::replace(copy, ' ', '-'); return m_config->specialCategoryExistsForKey("device", copy.c_str()); } @@ -1902,7 +1902,7 @@ static bool parseModeLine(const std::string& modeline, drmModeModeInfo& mode) { auto args = CVarList(modeline, 0, 's'); auto keyword = args[0]; - std::transform(keyword.begin(), keyword.end(), keyword.begin(), ::tolower); + std::ranges::transform(keyword, keyword.begin(), ::tolower); if (keyword != "modeline") return false; @@ -1938,7 +1938,7 @@ static bool parseModeLine(const std::string& modeline, drmModeModeInfo& mode) { for (; argno < static_cast(args.size()); argno++) { auto key = args[argno]; - std::transform(key.begin(), key.end(), key.begin(), ::tolower); + std::ranges::transform(key, key.begin(), ::tolower); auto it = flagsmap.find(key); @@ -2375,7 +2375,7 @@ std::optional CConfigManager::handleBind(const std::string& command HANDLER = "mouse"; // to lower - std::transform(HANDLER.begin(), HANDLER.end(), HANDLER.begin(), ::tolower); + std::ranges::transform(HANDLER, HANDLER.begin(), ::tolower); const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(HANDLER); @@ -2798,7 +2798,7 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin wsRule.workspaceId = id; wsRule.workspaceName = name; - const auto IT = std::find_if(m_workspaceRules.begin(), m_workspaceRules.end(), [&](const auto& other) { return other.workspaceString == wsRule.workspaceString; }); + const auto IT = std::ranges::find_if(m_workspaceRules, [&](const auto& other) { return other.workspaceString == wsRule.workspaceString; }); if (IT == m_workspaceRules.end()) m_workspaceRules.emplace_back(wsRule); @@ -2896,7 +2896,7 @@ std::optional CConfigManager::handleEnv(const std::string& command, } std::optional CConfigManager::handlePlugin(const std::string& command, const std::string& path) { - if (std::find(m_declaredPlugins.begin(), m_declaredPlugins.end(), path) != m_declaredPlugins.end()) + if (std::ranges::find(m_declaredPlugins, path) != m_declaredPlugins.end()) return "plugin '" + path + "' declared twice"; m_declaredPlugins.push_back(path); diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index adfbab1e..c8cc5c59 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -216,10 +216,10 @@ static std::string getTagsData(PHLWINDOW w, eHyprCtlOutputFormat format) { const auto tags = w->m_tags.getTags(); if (format == eHyprCtlOutputFormat::FORMAT_JSON) - return std::accumulate(tags.begin(), tags.end(), std::string(), - [](const std::string& a, const std::string& b) { return a.empty() ? std::format("\"{}\"", b) : std::format("{}, \"{}\"", a, b); }); + return std::ranges::fold_left(tags, std::string(), + [](const std::string& a, const std::string& b) { return a.empty() ? std::format("\"{}\"", b) : std::format("{}, \"{}\"", a, b); }); else - return std::accumulate(tags.begin(), tags.end(), std::string(), [](const std::string& a, const std::string& b) { return a.empty() ? b : a + ", " + b; }); + return std::ranges::fold_left(tags, std::string(), [](const std::string& a, const std::string& b) { return a.empty() ? b : a + ", " + b; }); } static std::string getGroupedData(PHLWINDOW w, eHyprCtlOutputFormat format) { @@ -921,7 +921,7 @@ static std::string bindsRequest(eHyprCtlOutputFormat format, std::string request std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { auto commitMsg = trim(GIT_COMMIT_MESSAGE); - std::replace(commitMsg.begin(), commitMsg.end(), '#', ' '); + std::ranges::replace(commitMsg, '#', ' '); if (format == eHyprCtlOutputFormat::FORMAT_NORMAL) { std::string result = std::format("Hyprland {} built from branch {} at commit {} {} ({}).\n" @@ -1296,8 +1296,7 @@ static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, std::stri } return result.empty() ? "ok" : result; } else { - auto k = std::find_if(g_pInputManager->m_keyboards.begin(), g_pInputManager->m_keyboards.end(), - [&](const auto& other) { return other->m_hlName == g_pInputManager->deviceNameToInternalString(KB); }); + auto k = std::ranges::find_if(g_pInputManager->m_keyboards, [&](const auto& other) { return other->m_hlName == g_pInputManager->deviceNameToInternalString(KB); }); if (k == g_pInputManager->m_keyboards.end()) return "device not found"; diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index 4e17e797..bfa5c4e4 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -13,7 +13,7 @@ static inline auto iconBackendFromLayout(PangoLayout* layout) { // preference: Nerd > FontAwesome > text auto eIconBackendChecks = std::array{ICONS_BACKEND_NF, ICONS_BACKEND_FA}; for (auto iconID : eIconBackendChecks) { - auto iconsText = std::accumulate(ICONS_ARRAY[iconID].begin(), ICONS_ARRAY[iconID].end(), std::string()); + auto iconsText = std::ranges::fold_left(ICONS_ARRAY[iconID], std::string(), std::plus<>()); pango_layout_set_text(layout, iconsText.c_str(), -1); if (pango_layout_get_unknown_glyphs_count(layout) == 0) return iconID; diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 9f69e364..cc3c9390 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -1507,7 +1508,7 @@ std::string CWindow::fetchClass() { } void CWindow::onAck(uint32_t serial) { - const auto SERIAL = std::ranges::find_if(m_pendingSizeAcks.rbegin(), m_pendingSizeAcks.rend(), [serial](const auto& e) { return e.first == serial; }); + const auto SERIAL = std::ranges::find_if(m_pendingSizeAcks | std::views::reverse, [serial](const auto& e) { return e.first == serial; }); if (SERIAL == m_pendingSizeAcks.rend()) return; diff --git a/src/devices/IKeyboard.cpp b/src/devices/IKeyboard.cpp index 597724a6..89ad8c16 100644 --- a/src/devices/IKeyboard.cpp +++ b/src/devices/IKeyboard.cpp @@ -379,7 +379,7 @@ bool IKeyboard::updateModifiersState() { void IKeyboard::updateXkbStateWithKey(uint32_t xkbKey, bool pressed) { - const auto contains = std::find(m_pressedXKB.begin(), m_pressedXKB.end(), xkbKey) != m_pressedXKB.end(); + const auto contains = std::ranges::find(m_pressedXKB, xkbKey) != m_pressedXKB.end(); if (contains && pressed) return; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 4bf54ca8..b019adff 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -742,7 +742,7 @@ void Events::listener_unmapWindow(void* owner, void* data) { EMIT_HOOK_EVENT("closeWindow", PWINDOW); if (PWINDOW->m_isFloating && !PWINDOW->m_isX11 && - std::any_of(PWINDOW->m_matchedRules.begin(), PWINDOW->m_matchedRules.end(), [](const auto& r) { return r->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; })) { + std::ranges::any_of(PWINDOW->m_matchedRules, [](const auto& r) { return r->m_ruleType == CWindowRule::RULE_PERSISTENTSIZE; })) { Debug::log(LOG, "storing floating size {}x{} for window {}::{} on close", PWINDOW->m_realSize->value().x, PWINDOW->m_realSize->value().y, PWINDOW->m_class, PWINDOW->m_title); g_pConfigManager->storeFloatingSize(PWINDOW, PWINDOW->m_realSize->value()); diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index ed67618e..ddd16144 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -243,7 +243,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { namedWSes.push_back(ws->m_id); } - std::sort(namedWSes.begin(), namedWSes.end()); + std::ranges::sort(namedWSes); if (absolute) { // 1-index @@ -388,7 +388,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { validWSes.push_back(ws->m_id); } - std::sort(validWSes.begin(), validWSes.end()); + std::ranges::sort(validWSes); ssize_t currentItem = -1; @@ -623,7 +623,7 @@ std::expected configStringToInt(const std::string& VALUE) const auto VALUEWITHOUTFUNC = trim(VALUE.substr(5, VALUE.length() - 6)); // try doing it the comma way first - if (std::count(VALUEWITHOUTFUNC.begin(), VALUEWITHOUTFUNC.end(), ',') == 3) { + if (std::ranges::count(VALUEWITHOUTFUNC, ',') == 3) { // cool std::string rolling = VALUEWITHOUTFUNC; auto r = configStringToInt(trim(rolling.substr(0, rolling.find(',')))); @@ -657,7 +657,7 @@ std::expected configStringToInt(const std::string& VALUE) const auto VALUEWITHOUTFUNC = trim(VALUE.substr(4, VALUE.length() - 5)); // try doing it the comma way first - if (std::count(VALUEWITHOUTFUNC.begin(), VALUEWITHOUTFUNC.end(), ',') == 2) { + if (std::ranges::count(VALUEWITHOUTFUNC, ',') == 2) { // cool std::string rolling = VALUEWITHOUTFUNC; auto r = configStringToInt(trim(rolling.substr(0, rolling.find(',')))); diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index d7536a39..5afd0123 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -32,6 +32,8 @@ #include #include #include +#include +#include using namespace Hyprutils::String; using namespace Hyprutils::Utils; @@ -189,7 +191,7 @@ void CMonitor::onConnect(bool noRule) { RASSERT(thisWrapper->get(), "CMonitor::onConnect: Had no wrapper???"); - if (std::find_if(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) + if (std::ranges::find_if(g_pCompositor->m_monitors, [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) g_pCompositor->m_monitors.push_back(*thisWrapper); m_enabled = true; @@ -320,7 +322,7 @@ void CMonitor::onDisconnect(bool destroy) { // remove mirror if (m_mirrorOf) { - m_mirrorOf->m_mirrors.erase(std::find_if(m_mirrorOf->m_mirrors.begin(), m_mirrorOf->m_mirrors.end(), [&](const auto& other) { return other == m_self; })); + m_mirrorOf->m_mirrors.erase(std::ranges::find_if(m_mirrorOf->m_mirrors, [&](const auto& other) { return other == m_self; })); // unlock software for mirrored monitor g_pPointerManager->unlockSoftwareForMonitor(m_mirrorOf.lock()); @@ -486,7 +488,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { std::ranges::sort(sortedModes, sortFunc); if (sortedModes.size() > 3) sortedModes.erase(sortedModes.begin() + 3, sortedModes.end()); - requestedModes.insert(requestedModes.end(), sortedModes.rbegin(), sortedModes.rend()); + requestedModes.insert_range(requestedModes.end(), sortedModes | std::views::reverse); }; // last fallback is always preferred mode @@ -1019,7 +1021,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { // disable mirroring if (m_mirrorOf) { - m_mirrorOf->m_mirrors.erase(std::find_if(m_mirrorOf->m_mirrors.begin(), m_mirrorOf->m_mirrors.end(), [&](const auto& other) { return other == m_self; })); + m_mirrorOf->m_mirrors.erase(std::ranges::find_if(m_mirrorOf->m_mirrors, [&](const auto& other) { return other == m_self; })); // unlock software for mirrored monitor g_pPointerManager->unlockSoftwareForMonitor(m_mirrorOf.lock()); @@ -1046,7 +1048,7 @@ void CMonitor::setMirror(const std::string& mirrorOf) { RASSERT(thisWrapper->get(), "CMonitor::setMirror: Had no wrapper???"); - if (std::find_if(g_pCompositor->m_monitors.begin(), g_pCompositor->m_monitors.end(), [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) { + if (std::ranges::find_if(g_pCompositor->m_monitors, [&](auto& other) { return other.get() == this; }) == g_pCompositor->m_monitors.end()) { g_pCompositor->m_monitors.push_back(*thisWrapper); } diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 614fdd2e..22744c93 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -63,7 +63,7 @@ void CHyprError::createQueued() { cairo_paint(CAIRO); cairo_restore(CAIRO); - const auto LINECOUNT = Hyprlang::INT{1} + std::count(m_queued.begin(), m_queued.end(), '\n'); + const auto LINECOUNT = Hyprlang::INT{1} + std::ranges::count(m_queued, '\n'); static auto LINELIMIT = CConfigValue("debug:error_limit"); static auto BAR_POSITION = CConfigValue("debug:error_position"); diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 065dcdc2..cb1313a8 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -94,7 +94,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire if (*PNEWONACTIVE != "none" && !BNEWISMASTER) { const auto pLastNode = getNodeFromWindow(g_pCompositor->m_lastWindow.lock()); if (pLastNode && !(pLastNode->isMaster && (getMastersOnWorkspace(pWindow->workspaceID()) == 1 || *PNEWSTATUS == "slave"))) { - auto it = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *pLastNode); + auto it = std::ranges::find(m_masterNodesData, *pLastNode); if (!BNEWBEFOREACTIVE) ++it; return &(*m_masterNodesData.emplace(it)); @@ -117,7 +117,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire const auto MOUSECOORDS = g_pInputManager->getMouseCoordsInternal(); static auto PDROPATCURSOR = CConfigValue("master:drop_at_cursor"); eOrientation orientation = getDynamicOrientation(pWindow->m_workspace); - const auto NODEIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *PNODE); + const auto NODEIT = std::ranges::find(m_masterNodesData, *PNODE); bool forceDropAsMaster = false; // if dragging window to move, drop it at the cursor position instead of bottom/top of stack @@ -804,8 +804,8 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne if (!*PSMARTRESIZING) { PNODE->percSize = std::clamp(PNODE->percSize + RESIZEDELTA / SIZE, 0.05, 1.95); } else { - const auto NODEIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *PNODE); - const auto REVNODEIT = std::find(m_masterNodesData.rbegin(), m_masterNodesData.rend(), *PNODE); + const auto NODEIT = std::ranges::find(m_masterNodesData, *PNODE); + const auto REVNODEIT = std::ranges::find(m_masterNodesData | std::views::reverse, *PNODE); const float totalSize = isStackVertical ? WSSIZE.y : WSSIZE.x; const float minSize = totalSize / nodesInSameColumn * 0.2; @@ -1026,16 +1026,15 @@ PHLWINDOW CHyprMasterLayout::getNextWindow(PHLWINDOW pWindow, bool next, bool lo auto nodes = m_masterNodesData; if (!next) - std::reverse(nodes.begin(), nodes.end()); + std::ranges::reverse(nodes); - const auto NODEIT = std::find(nodes.begin(), nodes.end(), *PNODE); + const auto NODEIT = std::ranges::find(nodes, *PNODE); const bool ISMASTER = PNODE->isMaster; auto CANDIDATE = std::find_if(NODEIT, nodes.end(), [&](const auto& other) { return other != *PNODE && ISMASTER == other.isMaster && other.workspaceID == PNODE->workspaceID; }); if (CANDIDATE == nodes.end()) - CANDIDATE = - std::find_if(nodes.begin(), nodes.end(), [&](const auto& other) { return other != *PNODE && ISMASTER != other.isMaster && other.workspaceID == PNODE->workspaceID; }); + CANDIDATE = std::ranges::find_if(nodes, [&](const auto& other) { return other != *PNODE && ISMASTER != other.isMaster && other.workspaceID == PNODE->workspaceID; }); if (CANDIDATE != nodes.end() && !loop) { if (CANDIDATE->isMaster && next) @@ -1308,12 +1307,12 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!OLDMASTER) return 0; - const auto OLDMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *OLDMASTER); + const auto OLDMASTERIT = std::ranges::find(m_masterNodesData, *OLDMASTER); for (auto& nd : m_masterNodesData) { if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { nd.isMaster = true; - const auto NEWMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), nd); + const auto NEWMASTERIT = std::ranges::find(m_masterNodesData, nd); m_masterNodesData.splice(OLDMASTERIT, m_masterNodesData, NEWMASTERIT); switchToWindow(nd.pWindow.lock()); OLDMASTER->isMaster = false; @@ -1334,12 +1333,12 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri if (!OLDMASTER) return 0; - const auto OLDMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), *OLDMASTER); + const auto OLDMASTERIT = std::ranges::find(m_masterNodesData, *OLDMASTER); for (auto& nd : m_masterNodesData | std::views::reverse) { if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { nd.isMaster = true; - const auto NEWMASTERIT = std::find(m_masterNodesData.begin(), m_masterNodesData.end(), nd); + const auto NEWMASTERIT = std::ranges::find(m_masterNodesData, nd); m_masterNodesData.splice(OLDMASTERIT, m_masterNodesData, NEWMASTERIT); switchToWindow(nd.pWindow.lock()); OLDMASTER->isMaster = false; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index d12b91a5..f935d3dc 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -384,7 +384,7 @@ void CHyprAnimationManager::onWindowPostCreateClose(PHLWINDOW pWindow, bool clos } std::string ANIMSTYLE = pWindow->m_realPosition->getStyle(); - transform(ANIMSTYLE.begin(), ANIMSTYLE.end(), ANIMSTYLE.begin(), ::tolower); + std::ranges::transform(ANIMSTYLE, ANIMSTYLE.begin(), ::tolower); CVarList animList(ANIMSTYLE, 0, 's'); diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index 77ea5a28..9211fc20 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -186,7 +186,7 @@ void CCursorManager::setCursorFromName(const std::string& name) { if (m_currentCursorShapeData.images.size() < 1) { // try with '_' first (old hc, etc) std::string newName = name; - std::replace(newName.begin(), newName.end(), '-', '_'); + std::ranges::replace(newName, '-', '_'); m_currentCursorShapeData = m_hyprcursor->getShape(newName.c_str(), m_currentStyleInfo); } diff --git a/src/managers/EventManager.cpp b/src/managers/EventManager.cpp index 651bf436..e0d8704b 100644 --- a/src/managers/EventManager.cpp +++ b/src/managers/EventManager.cpp @@ -123,7 +123,7 @@ int CEventManager::onClientEvent(int fd, uint32_t mask) { } std::vector::iterator CEventManager::findClientByFD(int fd) { - return std::find_if(m_clients.begin(), m_clients.end(), [fd](const auto& client) { return client.fd.get() == fd; }); + return std::ranges::find_if(m_clients, [fd](const auto& client) { return client.fd.get() == fd; }); } std::vector::iterator CEventManager::removeClientByFD(int fd) { diff --git a/src/managers/HookSystemManager.cpp b/src/managers/HookSystemManager.cpp index 67e6e732..2f1f3a27 100644 --- a/src/managers/HookSystemManager.cpp +++ b/src/managers/HookSystemManager.cpp @@ -46,7 +46,7 @@ void CHookSystemManager::emit(std::vector* const callbacks, SCal m_currentEventPlugin = true; - if (std::find(faultyHandles.begin(), faultyHandles.end(), cb.handle) != faultyHandles.end()) + if (std::ranges::find(faultyHandles, cb.handle) != faultyHandles.end()) continue; try { diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index c4c6d4ab..58951281 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -225,7 +225,7 @@ void CKeybindManager::removeKeybind(uint32_t mod, const SParsedKey& key) { uint32_t CKeybindManager::stringToModMask(std::string mods) { uint32_t modMask = 0; - std::transform(mods.begin(), mods.end(), mods.begin(), ::toupper); + std::ranges::transform(mods, mods.begin(), ::toupper); if (mods.contains("SHIFT")) modMask |= HL_MODIFIER_SHIFT; if (mods.contains("CAPS")) @@ -624,10 +624,8 @@ eMultiKeyCase CKeybindManager::mkKeysymSetMatches(const std::set k std::set boundKeysNotPressed; std::set pressedKeysNotBound; - std::set_difference(keybindKeysyms.begin(), keybindKeysyms.end(), pressedKeysyms.begin(), pressedKeysyms.end(), - std::inserter(boundKeysNotPressed, boundKeysNotPressed.begin())); - std::set_difference(pressedKeysyms.begin(), pressedKeysyms.end(), keybindKeysyms.begin(), keybindKeysyms.end(), - std::inserter(pressedKeysNotBound, pressedKeysNotBound.begin())); + std::ranges::set_difference(keybindKeysyms, pressedKeysyms, std::inserter(boundKeysNotPressed, boundKeysNotPressed.begin())); + std::ranges::set_difference(pressedKeysyms, keybindKeysyms, std::inserter(pressedKeysNotBound, pressedKeysNotBound.begin())); if (boundKeysNotPressed.empty() && pressedKeysNotBound.empty()) return MK_FULL_MATCH; @@ -670,8 +668,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP for (auto& k : m_keybinds) { const bool SPECIALDISPATCHER = k->handler == "global" || k->handler == "pass" || k->handler == "sendshortcut" || k->handler == "mouse"; - const bool SPECIALTRIGGERED = - std::find_if(m_pressedSpecialBinds.begin(), m_pressedSpecialBinds.end(), [&](const auto& other) { return other == k; }) != m_pressedSpecialBinds.end(); + const bool SPECIALTRIGGERED = std::ranges::find_if(m_pressedSpecialBinds, [&](const auto& other) { return other == k; }) != m_pressedSpecialBinds.end(); const bool IGNORECONDITIONS = SPECIALDISPATCHER && !pressed && SPECIALTRIGGERED; // ignore mods. Pass, global dispatchers should be released immediately once the key is released. @@ -1106,7 +1103,7 @@ SDispatchResult CKeybindManager::signalWindow(std::string args) { return {.success = false, .error = "signalWindow: no window"}; } - if (!std::all_of(SIGNAL.begin(), SIGNAL.end(), ::isdigit)) + if (!std::ranges::all_of(SIGNAL, ::isdigit)) return {.success = false, .error = "signalWindow: signal has to be int"}; try { diff --git a/src/managers/LayoutManager.cpp b/src/managers/LayoutManager.cpp index a929b42e..08bbcf44 100644 --- a/src/managers/LayoutManager.cpp +++ b/src/managers/LayoutManager.cpp @@ -26,7 +26,7 @@ void CLayoutManager::switchToLayout(std::string layout) { } bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) { - if (std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.first == name || other.second == layout; }) != m_layouts.end()) + if (std::ranges::find_if(m_layouts, [&](const auto& other) { return other.first == name || other.second == layout; }) != m_layouts.end()) return false; m_layouts.emplace_back(std::make_pair<>(name, layout)); @@ -37,7 +37,7 @@ bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) { } bool CLayoutManager::removeLayout(IHyprLayout* layout) { - const auto IT = std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.second == layout; }); + const auto IT = std::ranges::find_if(m_layouts, [&](const auto& other) { return other.second == layout; }); if (IT == m_layouts.end() || IT->first == "dwindle" || IT->first == "master") return false; diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index f42fd686..a82be1b0 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -94,7 +94,7 @@ bool CPointerManager::hasCursor() { } SP CPointerManager::stateFor(PHLMONITOR mon) { - auto it = std::find_if(m_monitorStates.begin(), m_monitorStates.end(), [mon](const auto& other) { return other->monitor == mon; }); + auto it = std::ranges::find_if(m_monitorStates, [mon](const auto& other) { return other->monitor == mon; }); if (it == m_monitorStates.end()) return m_monitorStates.emplace_back(makeShared(mon)); return *it; diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 419e8bf4..a7660854 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -653,7 +653,7 @@ void CSeatManager::resendEnterEvents() { } bool CSeatGrab::accepts(SP surf) { - return std::find(m_surfs.begin(), m_surfs.end(), surf) != m_surfs.end(); + return std::ranges::find(m_surfs, surf) != m_surfs.end(); } void CSeatGrab::add(SP surf) { diff --git a/src/managers/XCursorManager.cpp b/src/managers/XCursorManager.cpp index 79bb7a5d..9bbf531b 100644 --- a/src/managers/XCursorManager.cpp +++ b/src/managers/XCursorManager.cpp @@ -127,8 +127,8 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale) for (auto const& p : paths) { try { auto dirCursors = loadAllFromDir(p, m_lastLoadSize); - std::copy_if(dirCursors.begin(), dirCursors.end(), std::back_inserter(m_cursors), - [this](auto const& p) { return std::none_of(m_cursors.begin(), m_cursors.end(), [&p](auto const& dp) { return dp->shape == p->shape; }); }); + std::ranges::copy_if(dirCursors, std::back_inserter(m_cursors), + [this](auto const& p) { return std::ranges::none_of(m_cursors, [&p](auto const& dp) { return dp->shape == p->shape; }); }); } catch (std::exception& e) { Debug::log(ERR, "XCursor path {} can't be loaded: threw error {}", p, e.what()); } } } @@ -144,14 +144,14 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale) if (legacyName.empty()) continue; - auto it = std::find_if(m_cursors.begin(), m_cursors.end(), [&legacyName](auto const& c) { return c->shape == legacyName; }); + auto it = std::ranges::find_if(m_cursors, [&legacyName](auto const& c) { return c->shape == legacyName; }); if (it == m_cursors.end()) { Debug::log(LOG, "XCursor failed to find a legacy shape with name {}, skipping", legacyName); continue; } - if (std::any_of(m_cursors.begin(), m_cursors.end(), [&shape](auto const& dp) { return dp->shape == shape; })) { + if (std::ranges::any_of(m_cursors, [&shape](auto const& dp) { return dp->shape == shape; })) { Debug::log(LOG, "XCursor already has a shape {} loaded, skipping", shape); continue; } diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 2d50dbcf..cc0485d8 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -619,7 +619,7 @@ void CInputManager::onMouseButton(IPointer::SButtonEvent e) { if (e.state == WL_POINTER_BUTTON_STATE_PRESSED) { m_currentlyHeldButtons.push_back(e.button); } else { - if (std::find_if(m_currentlyHeldButtons.begin(), m_currentlyHeldButtons.end(), [&](const auto& other) { return other == e.button; }) == m_currentlyHeldButtons.end()) + if (std::ranges::find_if(m_currentlyHeldButtons, [&](const auto& other) { return other == e.button; }) == m_currentlyHeldButtons.end()) return; std::erase_if(m_currentlyHeldButtons, [&](const auto& other) { return other == e.button; }); } @@ -1552,7 +1552,7 @@ void CInputManager::unconstrainMouse() { } bool CInputManager::isConstrained() { - return std::any_of(m_constraints.begin(), m_constraints.end(), [](auto const& c) { + return std::ranges::any_of(m_constraints, [](auto const& c) { const auto constraint = c.lock(); return constraint && constraint->isActive() && constraint->owner()->resource() == g_pCompositor->m_lastFocus; }); @@ -1773,9 +1773,9 @@ void CInputManager::unsetCursorImage() { } std::string CInputManager::deviceNameToInternalString(std::string in) { - std::replace(in.begin(), in.end(), ' ', '-'); - std::replace(in.begin(), in.end(), '\n', '-'); - std::transform(in.begin(), in.end(), in.begin(), ::tolower); + std::ranges::replace(in, ' ', '-'); + std::ranges::replace(in, '\n', '-'); + std::ranges::transform(in, in.begin(), ::tolower); return in; } @@ -1786,7 +1786,7 @@ std::string CInputManager::getNameForNewDevice(std::string internalName) { auto makeNewName = [&]() { return (proposedNewName.empty() ? "unknown-device" : proposedNewName) + (dupeno == 0 ? "" : ("-" + std::to_string(dupeno))); }; - while (std::find_if(m_hids.begin(), m_hids.end(), [&](const auto& other) { return other->m_hlName == makeNewName(); }) != m_hids.end()) + while (std::ranges::find_if(m_hids, [&](const auto& other) { return other->m_hlName == makeNewName(); }) != m_hids.end()) dupeno++; return makeNewName(); diff --git a/src/protocols/AlphaModifier.cpp b/src/protocols/AlphaModifier.cpp index e2408397..ad4bc107 100644 --- a/src/protocols/AlphaModifier.cpp +++ b/src/protocols/AlphaModifier.cpp @@ -81,7 +81,7 @@ void CAlphaModifierProtocol::destroyAlphaModifier(CAlphaModifier* modifier) { void CAlphaModifierProtocol::getSurface(CWpAlphaModifierV1* manager, uint32_t id, SP surface) { CAlphaModifier* alphaModifier = nullptr; - auto iter = std::find_if(m_alphaModifiers.begin(), m_alphaModifiers.end(), [&](const auto& entry) { return entry.second->m_surface == surface; }); + auto iter = std::ranges::find_if(m_alphaModifiers, [&](const auto& entry) { return entry.second->m_surface == surface; }); if (iter != m_alphaModifiers.end()) { if (iter->second->m_resource) { diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index 5ace1f7e..50bded7f 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -281,8 +281,8 @@ CColorManagementSurface::CColorManagementSurface(SP return; } - const auto imageDescription = std::find_if(PROTO::colorManagement->m_imageDescriptions.begin(), PROTO::colorManagement->m_imageDescriptions.end(), - [&](const auto& other) { return other->resource()->resource() == image_description; }); + const auto imageDescription = + std::ranges::find_if(PROTO::colorManagement->m_imageDescriptions, [&](const auto& other) { return other->resource()->resource() == image_description; }); if (imageDescription == PROTO::colorManagement->m_imageDescriptions.end()) { r->error(WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_IMAGE_DESCRIPTION, "Image description not found"); return; diff --git a/src/protocols/DRMLease.cpp b/src/protocols/DRMLease.cpp index c4b5a84a..622c907c 100644 --- a/src/protocols/DRMLease.cpp +++ b/src/protocols/DRMLease.cpp @@ -96,7 +96,7 @@ CDRMLeaseRequestResource::CDRMLeaseRequestResource(SP reso auto CONNECTOR = CDRMLeaseConnectorResource::fromResource(conn); - if (std::find(m_requested.begin(), m_requested.end(), CONNECTOR) != m_requested.end()) { + if (std::ranges::find(m_requested, CONNECTOR) != m_requested.end()) { m_resource->error(WP_DRM_LEASE_REQUEST_V1_ERROR_DUPLICATE_CONNECTOR, "Connector already requested"); return; } @@ -208,7 +208,7 @@ bool CDRMLeaseDeviceResource::good() { } void CDRMLeaseDeviceResource::sendConnector(PHLMONITOR monitor) { - if (std::find_if(m_connectorsSent.begin(), m_connectorsSent.end(), [monitor](const auto& e) { return e && !e->m_dead && e->m_monitor == monitor; }) != m_connectorsSent.end()) + if (std::ranges::find_if(m_connectorsSent, [monitor](const auto& e) { return e && !e->m_dead && e->m_monitor == monitor; }) != m_connectorsSent.end()) return; auto RESOURCE = makeShared(makeShared(m_resource->client(), m_resource->version(), 0), monitor); @@ -294,7 +294,7 @@ void CDRMLeaseProtocol::destroyResource(CDRMLeaseResource* resource) { void CDRMLeaseProtocol::offer(PHLMONITOR monitor) { std::erase_if(m_primaryDevice->m_offeredOutputs, [](const auto& e) { return e.expired(); }); - if (std::find(m_primaryDevice->m_offeredOutputs.begin(), m_primaryDevice->m_offeredOutputs.end(), monitor) != m_primaryDevice->m_offeredOutputs.end()) + if (std::ranges::find(m_primaryDevice->m_offeredOutputs, monitor) != m_primaryDevice->m_offeredOutputs.end()) return; if (monitor->m_output->getBackend()->type() != Aquamarine::AQ_BACKEND_DRM) diff --git a/src/protocols/DataDeviceWlr.cpp b/src/protocols/DataDeviceWlr.cpp index 2e9c032b..e169f666 100644 --- a/src/protocols/DataDeviceWlr.cpp +++ b/src/protocols/DataDeviceWlr.cpp @@ -78,7 +78,7 @@ std::vector CWLRDataSource::mimes() { } void CWLRDataSource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLRDataSource::sendAskSend with non-existent mime"); return; } @@ -87,7 +87,7 @@ void CWLRDataSource::send(const std::string& mime, CFileDescriptor fd) { } void CWLRDataSource::accepted(const std::string& mime) { - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) LOGM(ERR, "Compositor/App bug: CWLRDataSource::sendAccepted with non-existent mime"); // wlr has no accepted @@ -315,7 +315,7 @@ void CDataDeviceWLRProtocol::setSelection(SP source, bool primary) } SP CDataDeviceWLRProtocol::dataDeviceForClient(wl_client* c) { - auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + auto it = std::ranges::find_if(m_devices, [c](const auto& e) { return e->client() == c; }); if (it == m_devices.end()) return nullptr; return *it; diff --git a/src/protocols/FocusGrab.cpp b/src/protocols/FocusGrab.cpp index 9f054953..41396459 100644 --- a/src/protocols/FocusGrab.cpp +++ b/src/protocols/FocusGrab.cpp @@ -36,7 +36,7 @@ bool CFocusGrab::good() { } bool CFocusGrab::isSurfaceComitted(SP surface) { - auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [surface](const auto& o) { return o.first == surface; }); + auto iter = std::ranges::find_if(m_surfaces, [surface](const auto& o) { return o.first == surface; }); if (iter == m_surfaces.end()) return false; @@ -70,7 +70,7 @@ void CFocusGrab::finish(bool sendCleared) { } void CFocusGrab::addSurface(SP surface) { - auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [surface](const auto& e) { return e.first == surface; }); + auto iter = std::ranges::find_if(m_surfaces, [surface](const auto& e) { return e.first == surface; }); if (iter == m_surfaces.end()) m_surfaces.emplace(surface, makeUnique(this, surface)); } diff --git a/src/protocols/ForeignToplevel.cpp b/src/protocols/ForeignToplevel.cpp index e48f0722..ec5943af 100644 --- a/src/protocols/ForeignToplevel.cpp +++ b/src/protocols/ForeignToplevel.cpp @@ -69,7 +69,7 @@ void CForeignToplevelList::onMap(PHLWINDOW pWindow) { SP CForeignToplevelList::handleForWindow(PHLWINDOW pWindow) { std::erase_if(m_handles, [](const auto& wp) { return wp.expired(); }); - const auto IT = std::find_if(m_handles.begin(), m_handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); + const auto IT = std::ranges::find_if(m_handles, [pWindow](const auto& h) { return h->window() == pWindow; }); return IT == m_handles.end() ? SP{} : IT->lock(); } diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp index dccf83b6..600412cb 100644 --- a/src/protocols/ForeignToplevelWlr.cpp +++ b/src/protocols/ForeignToplevelWlr.cpp @@ -247,7 +247,7 @@ void CForeignToplevelWlrManager::onMap(PHLWINDOW pWindow) { SP CForeignToplevelWlrManager::handleForWindow(PHLWINDOW pWindow) { std::erase_if(m_handles, [](const auto& wp) { return wp.expired(); }); - const auto IT = std::find_if(m_handles.begin(), m_handles.end(), [pWindow](const auto& h) { return h->window() == pWindow; }); + const auto IT = std::ranges::find_if(m_handles, [pWindow](const auto& h) { return h->window() == pWindow; }); return IT == m_handles.end() ? SP{} : IT->lock(); } diff --git a/src/protocols/HyprlandSurface.cpp b/src/protocols/HyprlandSurface.cpp index 9c66fba4..2e386027 100644 --- a/src/protocols/HyprlandSurface.cpp +++ b/src/protocols/HyprlandSurface.cpp @@ -109,7 +109,7 @@ void CHyprlandSurfaceProtocol::destroySurface(CHyprlandSurface* surface) { void CHyprlandSurfaceProtocol::getSurface(CHyprlandSurfaceManagerV1* manager, uint32_t id, SP surface) { CHyprlandSurface* hyprlandSurface = nullptr; - auto iter = std::find_if(m_surfaces.begin(), m_surfaces.end(), [&](const auto& entry) { return entry.second->m_surface == surface; }); + auto iter = std::ranges::find_if(m_surfaces, [&](const auto& entry) { return entry.second->m_surface == surface; }); if (iter != m_surfaces.end()) { if (iter->second->m_resource) { diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp index 4cb37ff4..bb5480b6 100644 --- a/src/protocols/LayerShell.cpp +++ b/src/protocols/LayerShell.cpp @@ -130,7 +130,7 @@ CLayerShellResource::CLayerShellResource(SP resource_, SPsetAckConfigure([this](CZwlrLayerSurfaceV1* r, uint32_t serial) { - auto serialFound = std::find_if(m_serials.begin(), m_serials.end(), [serial](const auto& e) { return e.first == serial; }); + auto serialFound = std::ranges::find_if(m_serials, [serial](const auto& e) { return e.first == serial; }); if (serialFound == m_serials.end()) { r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE, "Serial invalid in ack_configure"); diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp index ee64415b..a0fe571a 100644 --- a/src/protocols/LinuxDMABUF.cpp +++ b/src/protocols/LinuxDMABUF.cpp @@ -46,8 +46,7 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec }); } else { // if it wasn't inserted then find its index in vec - auto it = - std::find_if(formatsVec.begin(), formatsVec.end(), [fmt, mod](const SDMABUFFormatTableEntry& oth) { return oth.fmt == fmt.drmFormat && oth.modifier == mod; }); + auto it = std::ranges::find_if(formatsVec, [fmt, mod](const SDMABUFFormatTableEntry& oth) { return oth.fmt == fmt.drmFormat && oth.modifier == mod; }); m_rendererTranche.indicies.push_back(it - formatsVec.begin()); } } @@ -69,8 +68,7 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec .modifier = mod, }); } else { - auto it = std::find_if(formatsVec.begin(), formatsVec.end(), - [fmt, mod](const SDMABUFFormatTableEntry& oth) { return oth.fmt == fmt.drmFormat && oth.modifier == mod; }); + auto it = std::ranges::find_if(formatsVec, [fmt, mod](const SDMABUFFormatTableEntry& oth) { return oth.fmt == fmt.drmFormat && oth.modifier == mod; }); tranche.indicies.push_back(it - formatsVec.begin()); } } @@ -89,7 +87,7 @@ CDMABUFFormatTable::CDMABUFFormatTable(SDMABUFTranche _rendererTranche, std::vec return; } - std::copy(formatsVec.begin(), formatsVec.end(), arr); + std::ranges::copy(formatsVec, arr); munmap(arr, m_tableSize); @@ -169,7 +167,7 @@ CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SPsize = {w, h}; m_attrs->format = fmt; - m_attrs->planes = 4 - std::count(m_attrs->fds.begin(), m_attrs->fds.end(), -1); + m_attrs->planes = 4 - std::ranges::count(m_attrs->fds, -1); create(0); }); @@ -188,7 +186,7 @@ CLinuxDMABUFParamsResource::CLinuxDMABUFParamsResource(SPsize = {w, h}; m_attrs->format = fmt; - m_attrs->planes = 4 - std::count(m_attrs->fds.begin(), m_attrs->fds.end(), -1); + m_attrs->planes = 4 - std::ranges::count(m_attrs->fds, -1); create(id); }); @@ -564,8 +562,8 @@ void CLinuxDMABufV1Protocol::updateScanoutTranche(SP surface return; } - const auto& monitorTranchePair = std::find_if(m_formatTable->m_monitorTranches.begin(), m_formatTable->m_monitorTranches.end(), - [pMonitor](std::pair pair) { return pair.first == pMonitor; }); + const auto& monitorTranchePair = + std::ranges::find_if(m_formatTable->m_monitorTranches, [pMonitor](std::pair pair) { return pair.first == pMonitor; }); if (monitorTranchePair == m_formatTable->m_monitorTranches.end()) { LOGM(LOG, "updateScanoutTranche: monitor has no tranche"); diff --git a/src/protocols/PointerConstraints.cpp b/src/protocols/PointerConstraints.cpp index 425a983d..ea917932 100644 --- a/src/protocols/PointerConstraints.cpp +++ b/src/protocols/PointerConstraints.cpp @@ -229,7 +229,7 @@ void CPointerConstraintsProtocol::onNewConstraint(SP constra const auto OWNER = constraint->owner(); - const auto DUPES = std::count_if(m_constraints.begin(), m_constraints.end(), [OWNER](const auto& c) { return c->owner() == OWNER; }); + const auto DUPES = std::ranges::count_if(m_constraints, [OWNER](const auto& c) { return c->owner() == OWNER; }); if UNLIKELY (DUPES > 1) { LOGM(ERR, "Constraint for surface duped"); diff --git a/src/protocols/PrimarySelection.cpp b/src/protocols/PrimarySelection.cpp index 3c263647..14df7af5 100644 --- a/src/protocols/PrimarySelection.cpp +++ b/src/protocols/PrimarySelection.cpp @@ -79,7 +79,7 @@ std::vector CPrimarySelectionSource::mimes() { } void CPrimarySelectionSource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CPrimarySelectionSource::sendAskSend with non-existent mime"); return; } @@ -88,7 +88,7 @@ void CPrimarySelectionSource::send(const std::string& mime, CFileDescriptor fd) } void CPrimarySelectionSource::accepted(const std::string& mime) { - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) LOGM(ERR, "Compositor/App bug: CPrimarySelectionSource::sendAccepted with non-existent mime"); // primary sel has no accepted @@ -327,7 +327,7 @@ void CPrimarySelectionProtocol::onPointerFocus() { } SP CPrimarySelectionProtocol::dataDeviceForClient(wl_client* c) { - auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + auto it = std::ranges::find_if(m_devices, [c](const auto& e) { return e->client() == c; }); if (it == m_devices.end()) return nullptr; return *it; diff --git a/src/protocols/SecurityContext.cpp b/src/protocols/SecurityContext.cpp index ae3f41b1..acabe0a1 100644 --- a/src/protocols/SecurityContext.cpp +++ b/src/protocols/SecurityContext.cpp @@ -214,5 +214,5 @@ void CSecurityContextProtocol::destroyContext(CSecurityContext* context) { } bool CSecurityContextProtocol::isClientSandboxed(const wl_client* client) { - return std::find_if(m_sandboxedClients.begin(), m_sandboxedClients.end(), [client](const auto& e) { return e->m_client == client; }) != m_sandboxedClients.end(); + return std::ranges::find_if(m_sandboxedClients, [client](const auto& e) { return e->m_client == client; }) != m_sandboxedClients.end(); } diff --git a/src/protocols/VirtualKeyboard.cpp b/src/protocols/VirtualKeyboard.cpp index 48ed7eeb..7512f9bd 100644 --- a/src/protocols/VirtualKeyboard.cpp +++ b/src/protocols/VirtualKeyboard.cpp @@ -31,7 +31,7 @@ CVirtualKeyboardV1Resource::CVirtualKeyboardV1Resource(SP .state = (wl_keyboard_key_state)state, }); - const bool CONTAINS = std::find(m_pressed.begin(), m_pressed.end(), key) != m_pressed.end(); + const bool CONTAINS = std::ranges::find(m_pressed, key) != m_pressed.end(); if (state && !CONTAINS) m_pressed.emplace_back(key); else if (!state && CONTAINS) diff --git a/src/protocols/XDGActivation.cpp b/src/protocols/XDGActivation.cpp index bae3acc3..f25ffca8 100644 --- a/src/protocols/XDGActivation.cpp +++ b/src/protocols/XDGActivation.cpp @@ -33,8 +33,7 @@ CXDGActivationToken::CXDGActivationToken(SP resource_) : PROTO::activation->m_sentTokens.push_back({m_token, m_resource->client()}); - auto count = std::count_if(PROTO::activation->m_sentTokens.begin(), PROTO::activation->m_sentTokens.end(), - [this](const auto& other) { return other.client == m_resource->client(); }); + auto count = std::ranges::count_if(PROTO::activation->m_sentTokens, [this](const auto& other) { return other.client == m_resource->client(); }); if UNLIKELY (count > 10) { // remove first token. Too many, dear app. @@ -68,7 +67,7 @@ void CXDGActivationProtocol::bindManager(wl_client* client, void* data, uint32_t RESOURCE->setDestroy([this](CXdgActivationV1* pMgr) { this->onManagerResourceDestroy(pMgr->resource()); }); RESOURCE->setGetActivationToken([this](CXdgActivationV1* pMgr, uint32_t id) { this->onGetToken(pMgr, id); }); RESOURCE->setActivate([this](CXdgActivationV1* pMgr, const char* token, wl_resource* surface) { - auto TOKEN = std::find_if(m_sentTokens.begin(), m_sentTokens.end(), [token](const auto& t) { return t.token == token; }); + auto TOKEN = std::ranges::find_if(m_sentTokens, [token](const auto& t) { return t.token == token; }); if UNLIKELY (TOKEN == m_sentTokens.end()) { LOGM(WARN, "activate event for non-existent token {}??", token); diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp index d3d5c18e..5351e267 100644 --- a/src/protocols/XDGShell.cpp +++ b/src/protocols/XDGShell.cpp @@ -258,7 +258,7 @@ uint32_t CXDGToplevelResource::setSize(const Vector2D& size) { } uint32_t CXDGToplevelResource::setMaximized(bool maximized) { - bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_MAXIMIZED) != m_pendingApply.states.end(); + bool set = std::ranges::find(m_pendingApply.states, XDG_TOPLEVEL_STATE_MAXIMIZED) != m_pendingApply.states.end(); if (maximized == set) return m_owner->m_scheduledSerial; @@ -272,7 +272,7 @@ uint32_t CXDGToplevelResource::setMaximized(bool maximized) { } uint32_t CXDGToplevelResource::setFullscreen(bool fullscreen) { - bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_FULLSCREEN) != m_pendingApply.states.end(); + bool set = std::ranges::find(m_pendingApply.states, XDG_TOPLEVEL_STATE_FULLSCREEN) != m_pendingApply.states.end(); if (fullscreen == set) return m_owner->m_scheduledSerial; @@ -286,7 +286,7 @@ uint32_t CXDGToplevelResource::setFullscreen(bool fullscreen) { } uint32_t CXDGToplevelResource::setActive(bool active) { - bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_ACTIVATED) != m_pendingApply.states.end(); + bool set = std::ranges::find(m_pendingApply.states, XDG_TOPLEVEL_STATE_ACTIVATED) != m_pendingApply.states.end(); if (active == set) return m_owner->m_scheduledSerial; @@ -303,7 +303,7 @@ uint32_t CXDGToplevelResource::setSuspeneded(bool sus) { if (m_resource->version() < 6) return m_owner->scheduleConfigure(); // SUSPENDED is since 6 - bool set = std::find(m_pendingApply.states.begin(), m_pendingApply.states.end(), XDG_TOPLEVEL_STATE_SUSPENDED) != m_pendingApply.states.end(); + bool set = std::ranges::find(m_pendingApply.states, XDG_TOPLEVEL_STATE_SUSPENDED) != m_pendingApply.states.end(); if (sus == set) return m_owner->m_scheduledSerial; diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index 5a345f40..23b033a0 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -237,8 +237,8 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPm_imageDescriptions.begin(), PROTO::xxColorManagement->m_imageDescriptions.end(), - [&](const auto& other) { return other->resource()->resource() == image_description; }); + const auto imageDescription = + std::ranges::find_if(PROTO::xxColorManagement->m_imageDescriptions, [&](const auto& other) { return other->resource()->resource() == image_description; }); if (imageDescription == PROTO::xxColorManagement->m_imageDescriptions.end()) { r->error(XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_IMAGE_DESCRIPTION, "Image description not found"); return; diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 07bad77b..d1efe2e8 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -268,7 +268,7 @@ wl_client* CWLSurfaceResource::client() { } void CWLSurfaceResource::enter(PHLMONITOR monitor) { - if (std::find(m_enteredOutputs.begin(), m_enteredOutputs.end(), monitor) != m_enteredOutputs.end()) + if (std::ranges::find(m_enteredOutputs, monitor) != m_enteredOutputs.end()) return; if UNLIKELY (!PROTO::outputs.contains(monitor->m_name)) { @@ -295,7 +295,7 @@ void CWLSurfaceResource::enter(PHLMONITOR monitor) { } void CWLSurfaceResource::leave(PHLMONITOR monitor) { - if UNLIKELY (std::find(m_enteredOutputs.begin(), m_enteredOutputs.end(), monitor) == m_enteredOutputs.end()) + if UNLIKELY (std::ranges::find(m_enteredOutputs, monitor) == m_enteredOutputs.end()) return; auto output = PROTO::outputs.at(monitor->m_name)->outputResourceFrom(m_client); diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp index ad580ed1..ec075e8b 100644 --- a/src/protocols/core/DataDevice.cpp +++ b/src/protocols/core/DataDevice.cpp @@ -171,7 +171,7 @@ void CWLDataSourceResource::accepted(const std::string& mime) { return; } - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLDataSourceResource::sendAccepted with non-existent mime"); return; } @@ -184,7 +184,7 @@ std::vector CWLDataSourceResource::mimes() { } void CWLDataSourceResource::send(const std::string& mime, CFileDescriptor fd) { - if (std::find(m_mimeTypes.begin(), m_mimeTypes.end(), mime) == m_mimeTypes.end()) { + if (std::ranges::find(m_mimeTypes, mime) == m_mimeTypes.end()) { LOGM(ERR, "Compositor/App bug: CWLDataSourceResource::sendAskSend with non-existent mime"); return; } @@ -424,7 +424,7 @@ SP CWLDataDeviceProtocol::dataDeviceForClient(wl_client* c) { return g_pXWayland->m_wm->getDataDevice(); #endif - auto it = std::find_if(m_devices.begin(), m_devices.end(), [c](const auto& e) { return e->client() == c; }); + auto it = std::ranges::find_if(m_devices, [c](const auto& e) { return e->client() == c; }); if (it == m_devices.end()) return nullptr; return *it; diff --git a/src/protocols/core/Seat.cpp b/src/protocols/core/Seat.cpp index bc224043..c341f95a 100644 --- a/src/protocols/core/Seat.cpp +++ b/src/protocols/core/Seat.cpp @@ -204,10 +204,10 @@ void CWLPointerResource::sendButton(uint32_t timeMs, uint32_t button, wl_pointer if (!(PROTO::seat->m_currentCaps & eHIDCapabilityType::HID_INPUT_CAPABILITY_POINTER)) return; - if (state == WL_POINTER_BUTTON_STATE_RELEASED && std::find(m_pressedButtons.begin(), m_pressedButtons.end(), button) == m_pressedButtons.end()) { + if (state == WL_POINTER_BUTTON_STATE_RELEASED && std::ranges::find(m_pressedButtons, button) == m_pressedButtons.end()) { LOGM(ERR, "sendButton release on a non-pressed button"); return; - } else if (state == WL_POINTER_BUTTON_STATE_PRESSED && std::find(m_pressedButtons.begin(), m_pressedButtons.end(), button) != m_pressedButtons.end()) { + } else if (state == WL_POINTER_BUTTON_STATE_PRESSED && std::ranges::find(m_pressedButtons, button) != m_pressedButtons.end()) { LOGM(ERR, "sendButton press on a non-pressed button"); return; } diff --git a/src/protocols/core/Shm.cpp b/src/protocols/core/Shm.cpp index 228884b9..8d610fe0 100644 --- a/src/protocols/core/Shm.cpp +++ b/src/protocols/core/Shm.cpp @@ -137,7 +137,7 @@ CWLSHMPoolResource::CWLSHMPoolResource(SP resource_, CFileDescriptor return; } - if UNLIKELY (std::find(PROTO::shm->m_shmFormats.begin(), PROTO::shm->m_shmFormats.end(), fmt) == PROTO::shm->m_shmFormats.end()) { + if UNLIKELY (std::ranges::find(PROTO::shm->m_shmFormats, fmt) == PROTO::shm->m_shmFormats.end()) { r->error(WL_SHM_ERROR_INVALID_FORMAT, "Format invalid"); return; } diff --git a/src/protocols/core/Subcompositor.cpp b/src/protocols/core/Subcompositor.cpp index 4111b5dc..85a0edc4 100644 --- a/src/protocols/core/Subcompositor.cpp +++ b/src/protocols/core/Subcompositor.cpp @@ -30,7 +30,7 @@ CWLSubsurfaceResource::CWLSubsurfaceResource(SP resource_, SPm_subsurfaces, [this](const auto& e) { return e == m_self || !e; }); - auto it = std::find(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), SURF); + auto it = std::ranges::find(m_parent->m_subsurfaces, SURF); if (it == m_parent->m_subsurfaces.end()) { LOGM(ERR, "Invalid surface reference in placeAbove, likely parent"); @@ -43,7 +43,7 @@ CWLSubsurfaceResource::CWLSubsurfaceResource(SP resource_, SPm_subsurfaces.emplace_back(m_self); } - std::sort(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); + std::ranges::sort(m_parent->m_subsurfaces, [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); }); m_resource->setPlaceBelow([this](CWlSubsurface* r, wl_resource* surf) { @@ -61,7 +61,7 @@ CWLSubsurfaceResource::CWLSubsurfaceResource(SP resource_, SPm_subsurfaces, [this](const auto& e) { return e == m_self || !e; }); - auto it = std::find(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), SURF); + auto it = std::ranges::find(m_parent->m_subsurfaces, SURF); if (it == m_parent->m_subsurfaces.end()) { LOGM(ERR, "Invalid surface reference in placeBelow, likely parent"); @@ -74,7 +74,7 @@ CWLSubsurfaceResource::CWLSubsurfaceResource(SP resource_, SPm_subsurfaces.emplace_back(m_self); } - std::sort(m_parent->m_subsurfaces.begin(), m_parent->m_subsurfaces.end(), [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); + std::ranges::sort(m_parent->m_subsurfaces, [](const auto& a, const auto& b) { return a->m_zIndex < b->m_zIndex; }); }); m_listeners.commitSurface = m_surface->m_events.commit.registerListener([this](std::any d) { @@ -116,8 +116,7 @@ Vector2D CWLSubsurfaceResource::posRelativeToParent() { // surfaces we've visited and if we hit a surface we've visited we bail out. std::vector> surfacesVisited; - while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && - std::find_if(surfacesVisited.begin(), surfacesVisited.end(), [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { + while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && std::ranges::find_if(surfacesVisited, [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { surfacesVisited.emplace_back(surf); auto subsurface = ((CSubsurfaceRole*)m_parent->m_role.get())->m_subsurface.lock(); pos += subsurface->m_position; @@ -134,8 +133,7 @@ SP CWLSubsurfaceResource::t1Parent() { SP surf = m_parent.lock(); std::vector> surfacesVisited; - while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && - std::find_if(surfacesVisited.begin(), surfacesVisited.end(), [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { + while (surf->m_role->role() == SURFACE_ROLE_SUBSURFACE && std::ranges::find_if(surfacesVisited, [surf](const auto& other) { return surf == other; }) == surfacesVisited.end()) { surfacesVisited.emplace_back(surf); auto subsurface = ((CSubsurfaceRole*)m_parent->m_role.get())->m_subsurface.lock(); surf = subsurface->m_parent.lock(); diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 855da879..89d769b3 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -255,7 +255,7 @@ EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) { CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmFD) { const std::string EGLEXTENSIONS = (const char*)eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); - Debug::log(LOG, "Supported EGL extensions: ({}) {}", std::count(EGLEXTENSIONS.begin(), EGLEXTENSIONS.end(), ' '), EGLEXTENSIONS); + Debug::log(LOG, "Supported EGL extensions: ({}) {}", std::ranges::count(EGLEXTENSIONS, ' '), EGLEXTENSIONS); m_exts.KHR_display_reference = EGLEXTENSIONS.contains("KHR_display_reference"); @@ -331,7 +331,7 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmFD) { Debug::log(LOG, "Using: {}", (char*)glGetString(GL_VERSION)); Debug::log(LOG, "Vendor: {}", (char*)glGetString(GL_VENDOR)); Debug::log(LOG, "Renderer: {}", (char*)glGetString(GL_RENDERER)); - Debug::log(LOG, "Supported extensions: ({}) {}", std::count(m_extensions.begin(), m_extensions.end(), ' '), m_extensions); + Debug::log(LOG, "Supported extensions: ({}) {}", std::ranges::count(m_extensions, ' '), m_extensions); m_exts.EXT_read_format_bgra = m_extensions.contains("GL_EXT_read_format_bgra"); @@ -415,7 +415,7 @@ std::optional> CHyprOpenGLImpl::getModsForFormat(EGLint fo } // if the driver doesn't mark linear as external, add it. It's allowed unless the driver says otherwise. (e.g. nvidia) - if (!linearIsExternal && std::find(mods.begin(), mods.end(), DRM_FORMAT_MOD_LINEAR) == mods.end() && mods.size() == 0) + if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == mods.end() && mods.size() == 0) mods.push_back(DRM_FORMAT_MOD_LINEAR); return result; @@ -490,7 +490,7 @@ void CHyprOpenGLImpl::initDRMFormats() { free(fmtName); mods.clear(); - std::sort(modifierData.begin(), modifierData.end(), [](const auto& a, const auto& b) { + std::ranges::sort(modifierData, [](const auto& a, const auto& b) { if (a.first == 0) return false; if (a.second.contains("DCC")) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 982e2ed8..28f078aa 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -59,7 +59,7 @@ CHyprRenderer::CHyprRenderer() { if (!DRMV) continue; std::string name = std::string{DRMV->name, DRMV->name_len}; - std::transform(name.begin(), name.end(), name.begin(), tolower); + std::ranges::transform(name, name.begin(), tolower); if (name.contains("nvidia")) m_nvidia = true; @@ -76,7 +76,7 @@ CHyprRenderer::CHyprRenderer() { if (DRMV) { std::string name = std::string{DRMV->name, DRMV->name_len}; - std::transform(name.begin(), name.end(), name.begin(), tolower); + std::ranges::transform(name, name.begin(), tolower); if (name.contains("nvidia")) m_nvidia = true; @@ -1794,7 +1794,7 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) { } for (auto& la : PMONITOR->m_layerSurfaceLayers) { - std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->m_order > b->m_order; }); + std::ranges::stable_sort(la, [](const PHLLSREF& a, const PHLLSREF& b) { return a->m_order > b->m_order; }); } for (auto const& la : PMONITOR->m_layerSurfaceLayers) @@ -2171,7 +2171,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(PHLMONITOR pMonitor) { } SP CHyprRenderer::getOrCreateRenderbuffer(SP buffer, uint32_t fmt) { - auto it = std::find_if(m_renderbuffers.begin(), m_renderbuffers.end(), [&](const auto& other) { return other->m_hlBuffer == buffer; }); + auto it = std::ranges::find_if(m_renderbuffers, [&](const auto& other) { return other->m_hlBuffer == buffer; }); if (it != m_renderbuffers.end()) return *it; @@ -2364,7 +2364,7 @@ SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings(SP("misc:render_unfocused_fps"); - if (std::find(m_renderUnfocused.begin(), m_renderUnfocused.end(), window) != m_renderUnfocused.end()) + if (std::ranges::find(m_renderUnfocused, window) != m_renderUnfocused.end()) return; m_renderUnfocused.emplace_back(window); diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp index 82f2e5a8..178f3b9b 100644 --- a/src/render/decorations/DecorationPositioner.cpp +++ b/src/render/decorations/DecorationPositioner.cpp @@ -59,7 +59,7 @@ Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLWINDOW pW void CDecorationPositioner::uncacheDecoration(IHyprWindowDecoration* deco) { std::erase_if(m_windowPositioningDatas, [&](const auto& data) { return !data->pWindow.lock() || data->pDecoration == deco; }); - const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == deco->m_window.lock(); }); + const auto WIT = std::ranges::find_if(m_windowDatas, [&](const auto& other) { return other.first.lock() == deco->m_window.lock(); }); if (WIT == m_windowDatas.end()) return; @@ -72,7 +72,7 @@ void CDecorationPositioner::repositionDeco(IHyprWindowDecoration* deco) { } CDecorationPositioner::SWindowPositioningData* CDecorationPositioner::getDataFor(IHyprWindowDecoration* pDecoration, PHLWINDOW pWindow) { - auto it = std::find_if(m_windowPositioningDatas.begin(), m_windowPositioningDatas.end(), [&](const auto& el) { return el->pDecoration == pDecoration; }); + auto it = std::ranges::find_if(m_windowPositioningDatas, [&](const auto& el) { return el->pDecoration == pDecoration; }); if (it != m_windowPositioningDatas.end()) return it->get(); @@ -89,15 +89,14 @@ void CDecorationPositioner::sanitizeDatas() { std::erase_if(m_windowPositioningDatas, [](const auto& other) { if (!validMapped(other->pWindow)) return true; - if (std::find_if(other->pWindow->m_windowDecorations.begin(), other->pWindow->m_windowDecorations.end(), [&](const auto& el) { return el.get() == other->pDecoration; }) == - other->pWindow->m_windowDecorations.end()) + if (std::ranges::find_if(other->pWindow->m_windowDecorations, [&](const auto& el) { return el.get() == other->pDecoration; }) == other->pWindow->m_windowDecorations.end()) return true; return false; }); } void CDecorationPositioner::forceRecalcFor(PHLWINDOW pWindow) { - const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); + const auto WIT = std::ranges::find_if(m_windowDatas, [&](const auto& other) { return other.first.lock() == pWindow; }); if (WIT == m_windowDatas.end()) return; @@ -110,7 +109,7 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { if (!validMapped(pWindow)) return; - const auto WIT = std::find_if(m_windowDatas.begin(), m_windowDatas.end(), [&](const auto& other) { return other.first.lock() == pWindow; }); + const auto WIT = std::ranges::find_if(m_windowDatas, [&](const auto& other) { return other.first.lock() == pWindow; }); if (WIT == m_windowDatas.end()) return; @@ -128,8 +127,7 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { } if (WINDOWDATA->lastWindowSize == pWindow->m_realSize->value() /* position not changed */ - && std::all_of(m_windowPositioningDatas.begin(), m_windowPositioningDatas.end(), - [pWindow](const auto& data) { return pWindow != data->pWindow.lock() || !data->needsReposition; }) + && std::ranges::all_of(m_windowPositioningDatas, [pWindow](const auto& data) { return pWindow != data->pWindow.lock() || !data->needsReposition; }) /* all window datas are either not for this window or don't need a reposition */ && !WINDOWDATA->needsRecalc /* window doesn't need recalc */ ) @@ -143,7 +141,7 @@ void CDecorationPositioner::onWindowUpdate(PHLWINDOW pWindow) { WINDOWDATA->needsRecalc = false; const bool EPHEMERAL = pWindow->m_realSize->isBeingAnimated(); - std::sort(datas.begin(), datas.end(), [](const auto& a, const auto& b) { return a->positioningInfo.priority > b->positioningInfo.priority; }); + std::ranges::sort(datas, [](const auto& a, const auto& b) { return a->positioningInfo.priority > b->positioningInfo.priority; }); CBox wb = pWindow->getWindowMainSurfaceBox(); diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 5877d9a9..32296ad7 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -259,7 +259,7 @@ void CRenderPass::renderDebugData() { } } - const auto DISCARDED_ELEMENTS = std::count_if(m_passElements.begin(), m_passElements.end(), [](const auto& e) { return e->discard; }); + const auto DISCARDED_ELEMENTS = std::ranges::count_if(m_passElements, [](const auto& e) { return e->discard; }); auto tex = g_pHyprOpenGL->renderText(std::format("occlusion layers: {}\npass elements: {} ({} discarded)\nviewport: {:X0}", m_occludedRegions.size(), m_passElements.size(), DISCARDED_ELEMENTS, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize), Colors::WHITE, 12); diff --git a/src/xwayland/XSurface.cpp b/src/xwayland/XSurface.cpp index 949649ae..71e710b3 100644 --- a/src/xwayland/XSurface.cpp +++ b/src/xwayland/XSurface.cpp @@ -214,7 +214,7 @@ void CXWaylandSurface::restackToTop() { xcb_configure_window(g_pXWayland->m_wm->m_connection, m_xID, XCB_CONFIG_WINDOW_STACK_MODE, values); auto& stack = g_pXWayland->m_wm->m_mappedSurfacesStacking; - auto it = std::find(stack.begin(), stack.end(), m_self); + auto it = std::ranges::find(stack, m_self); if (it != stack.end()) std::rotate(it, it + 1, stack.end()); diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 8e4f9a87..76ae1d88 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -164,7 +164,7 @@ static bool lookupParentExists(SP XSURF, SP XSURF = XSURF->m_parent.lock(); - if (std::find(visited.begin(), visited.end(), XSURF) != visited.end()) + if (std::ranges::find(visited, XSURF) != visited.end()) return false; } @@ -202,7 +202,7 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ size_t len = xcb_get_property_value_length(reply); char* string = (char*)xcb_get_property_value(reply); XSURF->m_state.appid = std::string{string, len}; - if (std::count(XSURF->m_state.appid.begin(), XSURF->m_state.appid.end(), '\000') == 2) + if (std::ranges::count(XSURF->m_state.appid, '\000') == 2) XSURF->m_state.appid = XSURF->m_state.appid.substr(XSURF->m_state.appid.find_first_of('\000') + 1); // fuck you X if (!XSURF->m_state.appid.empty()) XSURF->m_state.appid.pop_back(); @@ -1109,7 +1109,7 @@ void CXWM::associate(SP surf, SP wlSurf) { if (surf->m_surface) return; - auto existing = std::find_if(m_surfaces.begin(), m_surfaces.end(), [wlSurf](const auto& e) { return e->m_surface == wlSurf; }); + auto existing = std::ranges::find_if(m_surfaces, [wlSurf](const auto& e) { return e->m_surface == wlSurf; }); if (existing != m_surfaces.end()) { Debug::log(WARN, "[xwm] associate() called but surface is already associated to {:x}, ignoring...", (uintptr_t)surf.get()); @@ -1420,7 +1420,7 @@ bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) { if (MIMES.empty()) return false; - if (std::find(MIMES.begin(), MIMES.end(), mime) == MIMES.end()) { + if (std::ranges::find(MIMES, mime) == MIMES.end()) { Debug::log(ERR, "[xwm] X Client asked for an invalid MIME, sending the first advertised. THIS SHIT MAY BREAK!"); mime = *MIMES.begin(); } From af2fdb5d58f5d3017aafd78a8ddafb40f710e34b Mon Sep 17 00:00:00 2001 From: mitsuru Date: Fri, 30 May 2025 22:40:12 +0100 Subject: [PATCH 0228/1077] nix: use gcc15 resolves Nix build/CI failures introduced in 9190443 bumps flake.lock as gcc15Stdenv wasn't available at the pinned version of nixpkgs --- flake.lock | 6 +++--- nix/overlays.nix | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index 22f246d5..01b437e6 100644 --- a/flake.lock +++ b/flake.lock @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748026106, - "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", + "lastModified": 1748460289, + "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", + "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", "type": "github" }, "original": { diff --git a/nix/overlays.nix b/nix/overlays.nix index 6085bf80..ee020eaa 100644 --- a/nix/overlays.nix +++ b/nix/overlays.nix @@ -35,7 +35,7 @@ in { date = mkDate (self.lastModifiedDate or "19700101"); in { hyprland = final.callPackage ./default.nix { - stdenv = final.gcc14Stdenv; + stdenv = final.gcc15Stdenv; version = "${version}+date=${date}_${self.shortRev or "dirty"}"; commit = self.rev or ""; revCount = self.sourceInfo.revCount or ""; From 4078e1d17c0fb1439ee5a0ba1e539f06a8f47aab Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Sat, 31 May 2025 18:02:02 +0500 Subject: [PATCH 0229/1077] refactor: replace all `typedef` with `using` (#10594) --- src/SharedDefs.hpp | 8 ++++---- src/desktop/DesktopTypes.hpp | 16 ++++++++-------- src/helpers/Format.hpp | 6 +++--- src/layout/IHyprLayout.cpp | 2 +- src/managers/HookSystemManager.hpp | 4 ++-- src/managers/XWaylandManager.hpp | 2 +- src/plugins/PluginAPI.hpp | 10 +++++----- src/protocols/types/ColorManagement.hpp | 2 +- src/xwayland/XSurface.hpp | 12 ++++++------ 9 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/SharedDefs.hpp b/src/SharedDefs.hpp index a46a2429..b8094997 100644 --- a/src/SharedDefs.hpp +++ b/src/SharedDefs.hpp @@ -58,8 +58,8 @@ struct SDispatchResult { std::string error; }; -typedef int64_t WINDOWID; -typedef int64_t MONITORID; -typedef int64_t WORKSPACEID; +using WINDOWID = int64_t; +using MONITORID = int64_t; +using WORKSPACEID = int64_t; -typedef std::function HOOK_CALLBACK_FN; +using HOOK_CALLBACK_FN = std::function; diff --git a/src/desktop/DesktopTypes.hpp b/src/desktop/DesktopTypes.hpp index 080f13d3..f724c7b9 100644 --- a/src/desktop/DesktopTypes.hpp +++ b/src/desktop/DesktopTypes.hpp @@ -6,21 +6,21 @@ class CLayerSurface; class CMonitor; /* Shared pointer to a workspace */ -typedef SP PHLWORKSPACE; +using PHLWORKSPACE = SP; /* Weak pointer to a workspace */ -typedef WP PHLWORKSPACEREF; +using PHLWORKSPACEREF = WP; /* Shared pointer to a window */ -typedef SP PHLWINDOW; +using PHLWINDOW = SP; /* Weak pointer to a window */ -typedef WP PHLWINDOWREF; +using PHLWINDOWREF = WP; /* Shared pointer to a layer surface */ -typedef SP PHLLS; +using PHLLS = SP; /* Weak pointer to a layer surface */ -typedef WP PHLLSREF; +using PHLLSREF = WP; /* Shared pointer to a monitor */ -typedef SP PHLMONITOR; +using PHLMONITOR = SP; /* Weak pointer to a monitor */ -typedef WP PHLMONITORREF; +using PHLMONITORREF = WP; diff --git a/src/helpers/Format.hpp b/src/helpers/Format.hpp index b1353dc7..fe68f763 100644 --- a/src/helpers/Format.hpp +++ b/src/helpers/Format.hpp @@ -5,8 +5,8 @@ #include "math/Math.hpp" #include -typedef uint32_t DRMFormat; -typedef uint32_t SHMFormat; +using DRMFormat = uint32_t; +using SHMFormat = uint32_t; struct SPixelFormat { DRMFormat drmFormat = 0; /* DRM_FORMAT_INVALID */ @@ -20,7 +20,7 @@ struct SPixelFormat { Vector2D blockSize; }; -typedef Aquamarine::SDRMFormat SDRMFormat; +using SDRMFormat = Aquamarine::SDRMFormat; namespace NFormatUtils { SHMFormat drmToShm(DRMFormat drm); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 1fe3a936..fbde7344 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -411,7 +411,7 @@ static void snapResize(double& start, double& end, const double P) { start = P; } -typedef std::function SnapFn; +using SnapFn = std::function; static void performSnap(Vector2D& sourcePos, Vector2D& sourceSize, PHLWINDOW DRAGGINGWINDOW, const eMouseBindMode MODE, const int CORNER, const Vector2D& BEGINSIZE) { static auto SNAPWINDOWGAP = CConfigValue("general:snap:window_gap"); diff --git a/src/managers/HookSystemManager.hpp b/src/managers/HookSystemManager.hpp index 69d54a60..647e9670 100644 --- a/src/managers/HookSystemManager.hpp +++ b/src/managers/HookSystemManager.hpp @@ -11,9 +11,9 @@ #define HANDLE void* -// global typedef for hooked functions. Passes itself as a ptr when called, and `data` additionally. +// global type alias for hooked functions. Passes itself as a ptr when called, and `data` additionally. -typedef std::function HOOK_CALLBACK_FN; +using HOOK_CALLBACK_FN = std::function; struct SCallbackFNPtr { WP fn; diff --git a/src/managers/XWaylandManager.hpp b/src/managers/XWaylandManager.hpp index e4f1e17a..59eee4c5 100644 --- a/src/managers/XWaylandManager.hpp +++ b/src/managers/XWaylandManager.hpp @@ -4,7 +4,7 @@ #include class CWindow; // because clangd -typedef SP PHLWINDOW; +using PHLWINDOW = SP; class CWLSurfaceResource; class CHyprXWaylandManager { diff --git a/src/plugins/PluginAPI.hpp b/src/plugins/PluginAPI.hpp index 0f333294..00a1e8b2 100644 --- a/src/plugins/PluginAPI.hpp +++ b/src/plugins/PluginAPI.hpp @@ -31,12 +31,12 @@ Feel like the API is missing something you'd like to use in your plugin? Open an #include #include -typedef struct { +using PLUGIN_DESCRIPTION_INFO = struct { std::string name; std::string description; std::string author; std::string version; -} PLUGIN_DESCRIPTION_INFO; +}; struct SFunctionMatch { void* address = nullptr; @@ -83,7 +83,7 @@ class CWindow; This function should not be modified, see the example plugin. */ -typedef REQUIRED std::string (*PPLUGIN_API_VERSION_FUNC)(); +using PPLUGIN_API_VERSION_FUNC = REQUIRED std::string (*)(); #define PLUGIN_API_VERSION pluginAPIVersion #define PLUGIN_API_VERSION_FUNC_STR "pluginAPIVersion" @@ -93,7 +93,7 @@ typedef REQUIRED std::string (*PPLUGIN_API_VERSION_FUNC)(); Keep in mind this is executed synchronously, and as such any blocking calls to hyprland might hang. (e.g. system("hyprctl ...")) */ -typedef REQUIRED PLUGIN_DESCRIPTION_INFO (*PPLUGIN_INIT_FUNC)(HANDLE); +using PPLUGIN_INIT_FUNC = REQUIRED PLUGIN_DESCRIPTION_INFO (*)(HANDLE); #define PLUGIN_INIT pluginInit #define PLUGIN_INIT_FUNC_STR "pluginInit" @@ -103,7 +103,7 @@ typedef REQUIRED PLUGIN_DESCRIPTION_INFO (*PPLUGIN_INIT_FUNC)(HANDLE); Hooks are unloaded after exit. */ -typedef OPTIONAL void (*PPLUGIN_EXIT_FUNC)(); +using PPLUGIN_EXIT_FUNC = OPTIONAL void (*)(); #define PLUGIN_EXIT pluginExit #define PLUGIN_EXIT_FUNC_STR "pluginExit" diff --git a/src/protocols/types/ColorManagement.hpp b/src/protocols/types/ColorManagement.hpp index 48d8dd31..2dd1c075 100644 --- a/src/protocols/types/ColorManagement.hpp +++ b/src/protocols/types/ColorManagement.hpp @@ -54,7 +54,7 @@ namespace NColorManagement { return (eTransferFunction)tf; } - typedef Hyprgraphics::SPCPRimaries SPCPRimaries; + using SPCPRimaries = Hyprgraphics::SPCPRimaries; namespace NColorPrimaries { static const auto DEFAULT_PRIMARIES = SPCPRimaries{}; diff --git a/src/xwayland/XSurface.hpp b/src/xwayland/XSurface.hpp index dc43acbb..ec71aad3 100644 --- a/src/xwayland/XSurface.hpp +++ b/src/xwayland/XSurface.hpp @@ -9,9 +9,9 @@ class CWLSurfaceResource; class CXWaylandSurfaceResource; #ifdef NO_XWAYLAND -typedef uint32_t xcb_pixmap_t; -typedef uint32_t xcb_window_t; -typedef struct { +using xcb_pixmap_t = uint32_t; +using xcb_window_t = uint32_t; +using xcb_icccm_wm_hints_t = struct { int32_t flags; uint32_t input; int32_t initial_state; @@ -20,8 +20,8 @@ typedef struct { int32_t icon_x, icon_y; xcb_pixmap_t icon_mask; xcb_window_t window_group; -} xcb_icccm_wm_hints_t; -typedef struct { +}; +using xcb_size_hints_t = struct { uint32_t flags; int32_t x, y; int32_t width, height; @@ -32,7 +32,7 @@ typedef struct { int32_t max_aspect_num, max_aspect_den; int32_t base_width, base_height; uint32_t win_gravity; -} xcb_size_hints_t; +}; #else #include #endif From 69c2b2926e128f1fd09080aed43944987a42026f Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Sat, 31 May 2025 23:49:50 +0500 Subject: [PATCH 0230/1077] internal: refactor to use empty() (#10599) --- src/config/ConfigManager.cpp | 22 +++++++++---------- src/debug/HyprCtl.cpp | 8 +++---- src/debug/HyprDebugOverlay.cpp | 8 +++---- src/debug/HyprNotificationOverlay.cpp | 4 ++-- src/desktop/Window.cpp | 4 ++-- src/events/Windows.cpp | 4 ++-- src/helpers/MiscFunctions.cpp | 2 +- src/helpers/Monitor.cpp | 2 +- src/hyprerror/HyprError.cpp | 4 ++-- src/layout/MasterLayout.cpp | 2 +- src/managers/AnimationManager.cpp | 4 ++-- src/managers/CursorManager.cpp | 8 +++---- src/managers/KeybindManager.cpp | 10 ++++----- src/managers/ProtocolManager.cpp | 2 +- src/managers/SeatManager.cpp | 2 +- src/managers/input/InputManager.cpp | 10 ++++----- src/plugins/HookSystem.cpp | 2 +- src/render/OpenGL.cpp | 12 +++++----- src/render/Renderer.cpp | 2 +- .../decorations/CHyprGroupBarDecoration.cpp | 2 +- 20 files changed, 57 insertions(+), 57 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 3ab53a3c..f7fed52f 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -100,7 +100,7 @@ static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** } } - if (DATA->m_colors.size() == 0) { + if (DATA->m_colors.empty()) { Debug::log(WARN, "Error parsing gradient {}", V); if (parseError.empty()) parseError = "Error parsing gradient " + V + ": No colors?"; @@ -2093,7 +2093,7 @@ std::optional CConfigManager::handleMonitor(const std::string& comm int argno = 4; - while (ARGS[argno] != "") { + while (!ARGS[argno].empty()) { if (ARGS[argno] == "mirror") { newrule.mirrorOf = ARGS[argno + 1]; argno++; @@ -2185,23 +2185,23 @@ std::optional CConfigManager::handleBezier(const std::string& comma std::string bezierName = ARGS[0]; - if (ARGS[1] == "") + if (ARGS[1].empty()) return "too few arguments"; float p1x = std::stof(ARGS[1]); - if (ARGS[2] == "") + if (ARGS[2].empty()) return "too few arguments"; float p1y = std::stof(ARGS[2]); - if (ARGS[3] == "") + if (ARGS[3].empty()) return "too few arguments"; float p2x = std::stof(ARGS[3]); - if (ARGS[4] == "") + if (ARGS[4].empty()) return "too few arguments"; float p2y = std::stof(ARGS[4]); - if (ARGS[5] != "") + if (!ARGS[5].empty()) return "too many arguments"; g_pAnimationManager->addBezierWithName(bezierName, Vector2D(p1x, p1y), Vector2D(p2x, p2y)); @@ -2256,10 +2256,10 @@ std::optional CConfigManager::handleAnimation(const std::string& co return "no such bezier"; } - if (ARGS[4] != "") { + if (!ARGS[4].empty()) { auto ERR = g_pAnimationManager->styleValidInConfigVar(ANIMNAME, ARGS[4]); - if (ERR != "") + if (!ERR.empty()) return ERR; } @@ -2384,12 +2384,12 @@ std::optional CConfigManager::handleBind(const std::string& command return "Invalid dispatcher, requested \"" + HANDLER + "\" does not exist"; } - if (MOD == 0 && MODSTR != "") { + if (MOD == 0 && !MODSTR.empty()) { Debug::log(ERR, "Invalid mod: {}", MODSTR); return "Invalid mod, requested mod \"" + MODSTR + "\" is not a valid mod."; } - if ((KEY != "") || multiKey) { + if ((!KEY.empty()) || multiKey) { SParsedKey parsedKey = parseKey(KEY); if (parsedKey.catchAll && m_currentSubmap.empty()) { diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index c8cc5c59..77f54c2b 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -516,7 +516,7 @@ static std::string layersRequest(eHyprCtlOutputFormat format, std::string reques trimTrailingComma(result); - if (level.size() > 0) + if (!level.empty()) result += "\n "; result += "],"; @@ -1144,7 +1144,7 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) Debug::log(LOG, "Hyprctl: keyword {} : {}", COMMAND, VALUE); - if (retval == "") + if (retval.empty()) return "ok"; return retval; @@ -1528,7 +1528,7 @@ static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string reque if (format == eHyprCtlOutputFormat::FORMAT_JSON) { result += "["; - if (PLUGINS.size() == 0) + if (PLUGINS.empty()) return "[]"; for (auto const& p : PLUGINS) { @@ -1546,7 +1546,7 @@ static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::string reque trimTrailingComma(result); result += "]"; } else { - if (PLUGINS.size() == 0) + if (PLUGINS.empty()) return "no plugins loaded"; for (auto const& p : PLUGINS) { diff --git a/src/debug/HyprDebugOverlay.cpp b/src/debug/HyprDebugOverlay.cpp index 332800dd..6c5d8000 100644 --- a/src/debug/HyprDebugOverlay.cpp +++ b/src/debug/HyprDebugOverlay.cpp @@ -83,7 +83,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgFrametime += ft; } float varFrametime = maxFrametime - minFrametime; - avgFrametime /= m_lastFrametimes.size() == 0 ? 1 : m_lastFrametimes.size(); + avgFrametime /= m_lastFrametimes.empty() ? 1 : m_lastFrametimes.size(); float avgRenderTime = 0; float maxRenderTime = 0; @@ -96,7 +96,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgRenderTime += rt; } float varRenderTime = maxRenderTime - minRenderTime; - avgRenderTime /= m_lastRenderTimes.size() == 0 ? 1 : m_lastRenderTimes.size(); + avgRenderTime /= m_lastRenderTimes.empty() ? 1 : m_lastRenderTimes.size(); float avgRenderTimeNoOverlay = 0; float maxRenderTimeNoOverlay = 0; @@ -109,7 +109,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgRenderTimeNoOverlay += rt; } float varRenderTimeNoOverlay = maxRenderTimeNoOverlay - minRenderTimeNoOverlay; - avgRenderTimeNoOverlay /= m_lastRenderTimes.size() == 0 ? 1 : m_lastRenderTimes.size(); + avgRenderTimeNoOverlay /= m_lastRenderTimes.empty() ? 1 : m_lastRenderTimes.size(); float avgAnimMgrTick = 0; float maxAnimMgrTick = 0; @@ -122,7 +122,7 @@ int CHyprMonitorDebugOverlay::draw(int offset) { avgAnimMgrTick += at; } float varAnimMgrTick = maxAnimMgrTick - minAnimMgrTick; - avgAnimMgrTick /= m_lastAnimationTicks.size() == 0 ? 1 : m_lastAnimationTicks.size(); + avgAnimMgrTick /= m_lastAnimationTicks.empty() ? 1 : m_lastAnimationTicks.size(); const float FPS = 1.f / (avgFrametime / 1000.f); // frametimes are in ms const float idealFPS = m_lastFrametimes.size(); diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index bfa5c4e4..c50abfe6 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -23,7 +23,7 @@ static inline auto iconBackendFromLayout(PangoLayout* layout) { CHyprNotificationOverlay::CHyprNotificationOverlay() { static auto P = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) { - if (m_notifications.size() == 0) + if (m_notifications.empty()) return; g_pHyprRenderer->damageBox(m_lastDamage); @@ -210,7 +210,7 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) { } // Draw the notifications - if (m_notifications.size() == 0) + if (m_notifications.empty()) return; // Render to the monitor diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index cc3c9390..555b99f0 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1624,13 +1624,13 @@ PHLWINDOW CWindow::getSwallower() { if (!(*PSWALLOWREGEX).empty()) std::erase_if(candidates, [&](const auto& other) { return !RE2::FullMatch(other->m_class, *PSWALLOWREGEX); }); - if (candidates.size() == 0) + if (candidates.empty()) return nullptr; if (!(*PSWALLOWEXREGEX).empty()) std::erase_if(candidates, [&](const auto& other) { return RE2::FullMatch(other->m_title, *PSWALLOWEXREGEX); }); - if (candidates.size() == 0) + if (candidates.empty()) return nullptr; if (candidates.size() == 1) diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index b019adff..da1e5263 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -418,8 +418,8 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_swallowed->m_currentlySwallowed = true; // emit the IPC event before the layout might focus the window to avoid a focus event first - g_pEventManager->postEvent( - SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_name, PWINDOW->m_class, PWINDOW->m_title)}); + g_pEventManager->postEvent(SHyprIPCEvent{ + "openwindow", std::format("{:x},{},{},{}", PWINDOW, !requestedWorkspace.empty() ? requestedWorkspace : PWORKSPACE->m_name, PWINDOW->m_class, PWINDOW->m_title)}); if (PWINDOW->m_isFloating) { g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW); diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index ddd16144..8069d414 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -326,7 +326,7 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { finalWSID = curID; } if (finalWSID <= 0 || invalidWSes.contains(finalWSID)) { - if (namedWSes.size()) { + if (!namedWSes.empty()) { // Go to the named workspaces // Need remainingWSes more auto namedWSIdx = namedWSes.size() - remainingWSes; diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 5afd0123..b0b31526 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -988,7 +988,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_id); PNEWWORKSPACE->startAnim(true, true, true); } else { - if (newDefaultWorkspaceName == "") + if (newDefaultWorkspaceName.empty()) newDefaultWorkspaceName = std::to_string(wsID); PNEWWORKSPACE = g_pCompositor->m_workspaces.emplace_back(CWorkspace::create(wsID, m_self.lock(), newDefaultWorkspaceName)); diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp index 22744c93..b6080306 100644 --- a/src/hyprerror/HyprError.cpp +++ b/src/hyprerror/HyprError.cpp @@ -165,8 +165,8 @@ void CHyprError::createQueued() { } void CHyprError::draw() { - if (!m_isCreated || m_queued != "") { - if (m_queued != "") + if (!m_isCreated || !m_queued.empty()) { + if (!m_queued.empty()) createQueued(); return; } diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index cb1313a8..abdf8032 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -1359,7 +1359,7 @@ void CHyprMasterLayout::runOrientationCycle(SLayoutMessageHeader& header, CVarLi if (vars != nullptr) buildOrientationCycleVectorFromVars(cycle, *vars); - if (cycle.size() == 0) + if (cycle.empty()) buildOrientationCycleVectorFromEOperation(cycle); const auto PWINDOW = header.pWindow; diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index f935d3dc..d1da1a36 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -306,7 +306,7 @@ void CHyprAnimationManager::animationSlide(PHLWINDOW pWindow, std::string force, Vector2D posOffset; - if (force != "") { + if (!force.empty()) { if (force == "bottom") posOffset = Vector2D(GOALPOS.x, PMONITOR->m_position.y + PMONITOR->m_size.y); else if (force == "left") @@ -490,7 +490,7 @@ std::string CHyprAnimationManager::styleValidInConfigVar(const std::string& conf return ""; return "unknown style"; } else if (config.starts_with("layers")) { - if (style == "fade" || style == "" || style == "slide") + if (style.empty() || style == "fade" || style == "slide") return ""; else if (style.starts_with("popin")) { // try parsing diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index 9211fc20..cb46dd65 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -183,7 +183,7 @@ void CCursorManager::setCursorFromName(const std::string& name) { auto setHyprCursor = [this](auto const& name) { m_currentCursorShapeData = m_hyprcursor->getShape(name.c_str(), m_currentStyleInfo); - if (m_currentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.empty()) { // try with '_' first (old hc, etc) std::string newName = name; std::ranges::replace(newName, '-', '_'); @@ -191,18 +191,18 @@ void CCursorManager::setCursorFromName(const std::string& name) { m_currentCursorShapeData = m_hyprcursor->getShape(newName.c_str(), m_currentStyleInfo); } - if (m_currentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.empty()) { // fallback to a default if available constexpr const std::array fallbackShapes = {"default", "left_ptr", "left-ptr"}; for (auto const& s : fallbackShapes) { m_currentCursorShapeData = m_hyprcursor->getShape(s, m_currentStyleInfo); - if (m_currentCursorShapeData.images.size() > 0) + if (!m_currentCursorShapeData.images.empty()) break; } - if (m_currentCursorShapeData.images.size() < 1) { + if (m_currentCursorShapeData.images.empty()) { Debug::log(ERR, "BUG THIS: No fallback found for a cursor in setCursorFromName"); return false; } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 58951281..976e292d 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -164,7 +164,7 @@ CKeybindManager::CKeybindManager() { m_repeatKeyTimer = makeShared( std::nullopt, [this](SP self, void* data) { - if (m_activeKeybinds.size() == 0 || g_pSeatManager->m_keyboard.expired()) + if (m_activeKeybinds.empty() || g_pSeatManager->m_keyboard.expired()) return; const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock(); @@ -288,7 +288,7 @@ void CKeybindManager::updateXKBTranslationState() { xkb_rule_names rules = {.rules = RULES.c_str(), .model = MODEL.c_str(), .layout = LAYOUT.c_str(), .variant = VARIANT.c_str(), .options = OPTIONS.c_str()}; const auto PCONTEXT = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - FILE* const KEYMAPFILE = FILEPATH == "" ? nullptr : fopen(absolutePath(FILEPATH, g_pConfigManager->m_configCurrentPath).c_str(), "r"); + FILE* const KEYMAPFILE = FILEPATH.empty() ? nullptr : fopen(absolutePath(FILEPATH, g_pConfigManager->m_configCurrentPath).c_str(), "r"); auto PKEYMAP = KEYMAPFILE ? xkb_keymap_new_from_file(PCONTEXT, KEYMAPFILE, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS) : xkb_keymap_new_from_names(PCONTEXT, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); @@ -630,7 +630,7 @@ eMultiKeyCase CKeybindManager::mkKeysymSetMatches(const std::set k if (boundKeysNotPressed.empty() && pressedKeysNotBound.empty()) return MK_FULL_MATCH; - if (boundKeysNotPressed.size() && pressedKeysNotBound.empty()) + if (!boundKeysNotPressed.empty() && pressedKeysNotBound.empty()) return MK_PARTIAL_MATCH; return MK_NO_MATCH; @@ -2398,7 +2398,7 @@ SDispatchResult CKeybindManager::toggleSwallow(std::string args) { } SDispatchResult CKeybindManager::setSubmap(std::string submap) { - if (submap == "reset" || submap == "") { + if (submap == "reset" || submap.empty()) { m_currentSelectedSubmap = ""; Debug::log(LOG, "Reset active submap to the default one."); g_pEventManager->postEvent(SHyprIPCEvent{"submap", ""}); @@ -2576,7 +2576,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) { //if regexp is not empty, send shortcut to current window //else, dont change focus - if (regexp != "") { + if (!regexp.empty()) { PWINDOW = g_pCompositor->getWindowByRegex(regexp); if (!PWINDOW) { diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index ab542fc2..942e7954 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -209,7 +209,7 @@ CProtocolManager::CProtocolManager() { break; } - if (g_pHyprOpenGL->getDRMFormats().size() > 0) { + if (!g_pHyprOpenGL->getDRMFormats().empty()) { PROTO::mesaDRM = makeUnique(&wl_drm_interface, 2, "MesaDRM"); PROTO::linuxDma = makeUnique(&zwp_linux_dmabuf_v1_interface, 5, "LinuxDMABUF"); } else diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index a7660854..9fe2b26b 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -493,7 +493,7 @@ void CSeatManager::refocusGrab() { if (!m_seatGrab) return; - if (m_seatGrab->m_surfs.size() > 0) { + if (!m_seatGrab->m_surfs.empty()) { // try to find a surf in focus first const auto MOUSE = g_pInputManager->getMouseCoordsInternal(); for (auto const& s : m_seatGrab->m_surfs) { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cc0485d8..70f92023 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1082,7 +1082,7 @@ void CInputManager::applyConfigToKeyboard(SP pKeyboard) { pKeyboard->m_allowed = PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW; try { - if (NUMLOCKON == pKeyboard->m_numlockOn && REPEATDELAY == pKeyboard->m_repeatDelay && REPEATRATE == pKeyboard->m_repeatRate && RULES != "" && + if (NUMLOCKON == pKeyboard->m_numlockOn && REPEATDELAY == pKeyboard->m_repeatDelay && REPEATRATE == pKeyboard->m_repeatRate && !RULES.empty() && RULES == pKeyboard->m_currentRules.rules && MODEL == pKeyboard->m_currentRules.model && LAYOUT == pKeyboard->m_currentRules.layout && VARIANT == pKeyboard->m_currentRules.variant && OPTIONS == pKeyboard->m_currentRules.options && FILEPATH == pKeyboard->m_xkbFilePath) { Debug::log(LOG, "Not applying config to keyboard, it did not change."); @@ -1205,7 +1205,7 @@ void CInputManager::setPointerConfigs() { libinput_device_config_middle_emulation_set_enabled(LIBINPUTDEV, LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED); const auto TAP_MAP = g_pConfigManager->getDeviceString(devname, "tap_button_map", "input:touchpad:tap_button_map"); - if (TAP_MAP == "" || TAP_MAP == "lrm") + if (TAP_MAP.empty() || TAP_MAP == "lrm") libinput_device_config_tap_set_button_map(LIBINPUTDEV, LIBINPUT_CONFIG_TAP_MAP_LRM); else if (TAP_MAP == "lmr") libinput_device_config_tap_set_button_map(LIBINPUTDEV, LIBINPUT_CONFIG_TAP_MAP_LMR); @@ -1214,7 +1214,7 @@ void CInputManager::setPointerConfigs() { } const auto SCROLLMETHOD = g_pConfigManager->getDeviceString(devname, "scroll_method", "input:scroll_method"); - if (SCROLLMETHOD == "") { + if (SCROLLMETHOD.empty()) { libinput_device_config_scroll_set_method(LIBINPUTDEV, libinput_device_config_scroll_get_default_method(LIBINPUTDEV)); } else if (SCROLLMETHOD == "no_scroll") { libinput_device_config_scroll_set_method(LIBINPUTDEV, LIBINPUT_CONFIG_SCROLL_NO_SCROLL); @@ -1330,7 +1330,7 @@ void CInputManager::destroyKeyboard(SP pKeyboard) { std::erase_if(m_keyboards, [pKeyboard](const auto& other) { return other == pKeyboard; }); - if (m_keyboards.size() > 0) { + if (!m_keyboards.empty()) { bool found = false; for (auto const& k : m_keyboards | std::views::reverse) { if (!k) @@ -1354,7 +1354,7 @@ void CInputManager::destroyPointer(SP mouse) { std::erase_if(m_pointers, [mouse](const auto& other) { return other == mouse; }); - g_pSeatManager->setMouse(m_pointers.size() > 0 ? m_pointers.front() : nullptr); + g_pSeatManager->setMouse(!m_pointers.empty() ? m_pointers.front() : nullptr); if (!g_pSeatManager->m_mouse.expired()) unconstrainMouse(); diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp index 8bb660e6..f39eb145 100644 --- a/src/plugins/HookSystem.cpp +++ b/src/plugins/HookSystem.cpp @@ -167,7 +167,7 @@ bool CFunctionHook::hook() { const auto PROBEFIXEDASM = fixInstructionProbeRIPCalls(probe); - if (PROBEFIXEDASM.bytes.size() == 0) { + if (PROBEFIXEDASM.bytes.empty()) { Debug::log(ERR, "[functionhook] failed, unsupported asm / failed assembling:\n{}", probe.assembly); return false; } diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 89d769b3..d589e3cf 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -415,7 +415,7 @@ std::optional> CHyprOpenGLImpl::getModsForFormat(EGLint fo } // if the driver doesn't mark linear as external, add it. It's allowed unless the driver says otherwise. (e.g. nvidia) - if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == mods.end() && mods.size() == 0) + if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == mods.end() && mods.empty()) mods.push_back(DRM_FORMAT_MOD_LINEAR); return result; @@ -444,7 +444,7 @@ void CHyprOpenGLImpl::initDRMFormats() { m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, len, formats.data(), &len); } - if (formats.size() == 0) { + if (formats.empty()) { Debug::log(ERR, "EGL: Failed to get formats, DMABufs will not work."); return; } @@ -466,7 +466,7 @@ void CHyprOpenGLImpl::initDRMFormats() { } else mods = {DRM_FORMAT_MOD_LINEAR}; - m_hasModifiers = m_hasModifiers || mods.size() > 0; + m_hasModifiers = m_hasModifiers || !mods.empty(); // EGL can always do implicit modifiers. mods.push_back(DRM_FORMAT_MOD_INVALID); @@ -506,7 +506,7 @@ void CHyprOpenGLImpl::initDRMFormats() { Debug::log(LOG, "EGL: {} formats found in total. Some modifiers may be omitted as they are external-only.", dmaFormats.size()); - if (dmaFormats.size() == 0) + if (dmaFormats.empty()) Debug::log(WARN, "EGL: WARNING: No dmabuf formats were found, dmabuf will be disabled. This will degrade performance, but is most likely a driver issue or a very old GPU."); @@ -1193,7 +1193,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { m_finalScreenShader.destroy(); - if (path == "" || path == STRVAL_EMPTY) + if (path.empty() || path == STRVAL_EMPTY) return; std::ifstream infile(absolutePath(path, g_pConfigManager->getMainConfigPath())); @@ -2362,7 +2362,7 @@ void CHyprOpenGLImpl::renderBorder(const CBox& box, const CGradientValueData& gr glUniform4fv(m_shaders->m_shBORDER1.gradient, grad1.m_colorsOkLabA.size() / 4, (float*)grad1.m_colorsOkLabA.data()); glUniform1i(m_shaders->m_shBORDER1.gradientLength, grad1.m_colorsOkLabA.size() / 4); glUniform1f(m_shaders->m_shBORDER1.angle, (int)(grad1.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); - if (grad2.m_colorsOkLabA.size() > 0) + if (!grad2.m_colorsOkLabA.empty()) glUniform4fv(m_shaders->m_shBORDER1.gradient2, grad2.m_colorsOkLabA.size() / 4, (float*)grad2.m_colorsOkLabA.data()); glUniform1i(m_shaders->m_shBORDER1.gradient2Length, grad2.m_colorsOkLabA.size() / 4); glUniform1f(m_shaders->m_shBORDER1.angle2, (int)(grad2.m_angle / (PI / 180.0)) % 360 * (PI / 180.0)); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 28f078aa..71d22d3c 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2077,7 +2077,7 @@ std::tuple CHyprRenderer::getRenderTimes(PHLMONITOR pMonito minRenderTime = rt; avgRenderTime += rt; } - avgRenderTime /= POVERLAY->m_lastRenderTimes.size() == 0 ? 1 : POVERLAY->m_lastRenderTimes.size(); + avgRenderTime /= POVERLAY->m_lastRenderTimes.empty() ? 1 : POVERLAY->m_lastRenderTimes.size(); return std::make_tuple<>(avgRenderTime, maxRenderTime, minRenderTime); } diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 65d7d7ff..7a6eebba 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -81,7 +81,7 @@ void CHyprGroupBarDecoration::updateWindow(PHLWINDOW pWindow) { damageEntire(); - if (m_dwGroupMembers.size() == 0) { + if (m_dwGroupMembers.empty()) { m_window->removeWindowDeco(this); return; } From 82b854954230a45d590c1287a8c2c1f0076f3392 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Sun, 1 Jun 2025 21:53:20 +0200 Subject: [PATCH 0231/1077] hyprpm: refuse adding a new repo without update --- hyprpm/src/core/PluginManager.cpp | 5 +++++ src/xwayland/Dnd.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index 90eba579..b7316fdb 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -159,6 +159,11 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& DataState::updateGlobalState(GLOBALSTATE); } + if (GLOBALSTATE.headersHashCompiled.empty()) { + std::println("\n{}", failureString("Cannot find headers in the global state. Try running hyprpm update first.")); + return false; + } + std::cout << Colors::GREEN << "✔" << Colors::RESET << Colors::RED << " adding a new plugin repository " << Colors::RESET << "from " << url << "\n " << Colors::RED << "MAKE SURE" << Colors::RESET << " that you trust the authors. " << Colors::RED << "DO NOT" << Colors::RESET << " install random plugins without verifying the code and author.\n " diff --git a/src/xwayland/Dnd.cpp b/src/xwayland/Dnd.cpp index e4c60920..9d2012fb 100644 --- a/src/xwayland/Dnd.cpp +++ b/src/xwayland/Dnd.cpp @@ -286,8 +286,8 @@ void CX11DataDevice::forceCleanupDnd() { if (m_lastOffer) { auto source = m_lastOffer->getSource(); if (source) { - source->cancelled(); source->sendDndFinished(); + source->cancelled(); } } From 2d1c6f88d2202ae40671277759b1edc3ecc51c45 Mon Sep 17 00:00:00 2001 From: Jasson Date: Sun, 1 Jun 2025 16:02:17 -0400 Subject: [PATCH 0232/1077] xwm: Refactored functions in XWM.cpp (#10569) * Refactored SXSelection::onSelection in XWM.cpp - Made the function more readable and less redundant - Extracted repeated conditions into booleans. - Reduced nested conditionals - Reused (conn) pointer * Refectd readProp * Refactor initSelection --- src/xwayland/XWM.cpp | 261 ++++++++++++++++++++++++------------------- 1 file changed, 147 insertions(+), 114 deletions(-) diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 76ae1d88..5b423dca 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -1,5 +1,6 @@ #include "helpers/math/Math.hpp" #include +#include #ifndef NO_XWAYLAND #include @@ -198,104 +199,125 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ if (Debug::m_trace) propName = getAtomName(atom); - if (atom == XCB_ATOM_WM_CLASS) { - size_t len = xcb_get_property_value_length(reply); - char* string = (char*)xcb_get_property_value(reply); - XSURF->m_state.appid = std::string{string, len}; - if (std::ranges::count(XSURF->m_state.appid, '\000') == 2) - XSURF->m_state.appid = XSURF->m_state.appid.substr(XSURF->m_state.appid.find_first_of('\000') + 1); // fuck you X + const auto valueLen = xcb_get_property_value_length(reply); + const auto* value = (const char*)xcb_get_property_value(reply); + + auto handleWMClass = [&]() { + XSURF->m_state.appid = std::string{value, valueLen}; + if (std::count(XSURF->m_state.appid.begin(), XSURF->m_state.appid.end(), '\000') == 2) + XSURF->m_state.appid = XSURF->m_state.appid.substr(XSURF->m_state.appid.find_first_of('\000') + 1); + if (!XSURF->m_state.appid.empty()) XSURF->m_state.appid.pop_back(); XSURF->m_events.metadataChanged.emit(); - } else if (atom == XCB_ATOM_WM_NAME || atom == HYPRATOMS["_NET_WM_NAME"]) { - size_t len = xcb_get_property_value_length(reply); - char* string = (char*)xcb_get_property_value(reply); + }; + + auto handleWMName = [&]() { if (reply->type != HYPRATOMS["UTF8_STRING"] && reply->type != HYPRATOMS["TEXT"] && reply->type != XCB_ATOM_STRING) return; - XSURF->m_state.title = std::string{string, len}; + XSURF->m_state.title = std::string{value, valueLen}; XSURF->m_events.metadataChanged.emit(); - } else if (atom == HYPRATOMS["_NET_WM_WINDOW_TYPE"]) { - xcb_atom_t* atomsArr = (xcb_atom_t*)xcb_get_property_value(reply); - size_t atomsNo = reply->value_len; - XSURF->m_atoms.clear(); - for (size_t i = 0; i < atomsNo; ++i) { - XSURF->m_atoms.push_back(atomsArr[i]); - } - } else if (atom == HYPRATOMS["_NET_WM_STATE"]) { - xcb_atom_t* atoms = (xcb_atom_t*)xcb_get_property_value(reply); + }; + + auto handleWindowType = [&]() { + auto* atomsArr = (xcb_atom_t*)value; + XSURF->m_atoms.assign(atomsArr, atomsArr + reply->value_len); + }; + + auto handleWMState = [&]() { + auto* atoms = (xcb_atom_t*)value; for (uint32_t i = 0; i < reply->value_len; i++) { if (atoms[i] == HYPRATOMS["_NET_WM_STATE_MODAL"]) XSURF->m_modal = true; } - } else if (atom == HYPRATOMS["WM_HINTS"]) { - if (reply->value_len != 0) { - XSURF->m_hints = makeUnique(); - xcb_icccm_get_wm_hints_from_reply(XSURF->m_hints.get(), reply); + }; - if (!(XSURF->m_hints->flags & XCB_ICCCM_WM_HINT_INPUT)) - XSURF->m_hints->input = true; - } - } else if (atom == HYPRATOMS["WM_WINDOW_ROLE"]) { - size_t len = xcb_get_property_value_length(reply); + auto handleWMHints = [&]() { + if (reply->value_len == 0) + return; + XSURF->m_hints = makeUnique(); + xcb_icccm_get_wm_hints_from_reply(XSURF->m_hints.get(), reply); + if (!(XSURF->m_hints->flags & XCB_ICCCM_WM_HINT_INPUT)) + XSURF->m_hints->input = true; + }; - if (len <= 0) + auto handleWMRole = [&]() { + if (valueLen <= 0) XSURF->m_role = ""; else { - XSURF->m_role = std::string{(char*)xcb_get_property_value(reply), len}; + XSURF->m_role = std::string{value, valueLen}; XSURF->m_role = XSURF->m_role.substr(0, XSURF->m_role.find_first_of('\000')); } - } else if (atom == XCB_ATOM_WM_TRANSIENT_FOR) { - if (reply->type == XCB_ATOM_WINDOW) { - const auto XID = (xcb_window_t*)xcb_get_property_value(reply); - XSURF->m_transient = XID; - if (XID) { - if (const auto NEWXSURF = windowForXID(*XID); NEWXSURF && !lookupParentExists(XSURF, NEWXSURF)) { - XSURF->m_parent = NEWXSURF; - NEWXSURF->m_children.emplace_back(XSURF); - } else - Debug::log(LOG, "[xwm] Denying transient because it would create a loop"); - } + }; + + auto handleTransientFor = [&]() { + if (reply->type != XCB_ATOM_WINDOW) + return; + const auto XID = (xcb_window_t*)value; + XSURF->m_transient = XID; + if (!XID) + return; + + if (const auto NEWXSURF = windowForXID(*XID); NEWXSURF && !lookupParentExists(XSURF, NEWXSURF)) { + XSURF->m_parent = NEWXSURF; + NEWXSURF->m_children.emplace_back(XSURF); + } else + Debug::log(LOG, "[xwm] Denying transient because it would create a loop"); + }; + + auto handleSizeHints = [&]() { + if (reply->type != HYPRATOMS["WM_SIZE_HINTS"] || reply->value_len == 0) + return; + + XSURF->m_sizeHints = makeUnique(); + std::memset(XSURF->m_sizeHints.get(), 0, sizeof(xcb_size_hints_t)); + xcb_icccm_get_wm_size_hints_from_reply(XSURF->m_sizeHints.get(), reply); + + const int32_t FLAGS = XSURF->m_sizeHints->flags; + const bool HASMIN = FLAGS & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE; + const bool HASBASE = FLAGS & XCB_ICCCM_SIZE_HINT_BASE_SIZE; + + if (!HASMIN && !HASBASE) { + XSURF->m_sizeHints->min_width = XSURF->m_sizeHints->min_height = -1; + XSURF->m_sizeHints->base_width = XSURF->m_sizeHints->base_height = -1; + } else if (!HASBASE) { + XSURF->m_sizeHints->base_width = XSURF->m_sizeHints->min_width; + XSURF->m_sizeHints->base_height = XSURF->m_sizeHints->min_height; + } else if (!HASMIN) { + XSURF->m_sizeHints->min_width = XSURF->m_sizeHints->base_width; + XSURF->m_sizeHints->min_height = XSURF->m_sizeHints->base_height; } - } else if (atom == HYPRATOMS["WM_NORMAL_HINTS"]) { - if (reply->type == HYPRATOMS["WM_SIZE_HINTS"] && reply->value_len > 0) { - XSURF->m_sizeHints = makeUnique(); - std::memset(XSURF->m_sizeHints.get(), 0, sizeof(xcb_size_hints_t)); - xcb_icccm_get_wm_size_hints_from_reply(XSURF->m_sizeHints.get(), reply); + if (!(FLAGS & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE)) + XSURF->m_sizeHints->max_width = XSURF->m_sizeHints->max_height = -1; + }; - const int32_t FLAGS = XSURF->m_sizeHints->flags; - const bool HASMIN = (FLAGS & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE); - const bool HASBASE = (FLAGS & XCB_ICCCM_SIZE_HINT_BASE_SIZE); + auto handleWMProtocols = [&]() { + if (reply->type != XCB_ATOM_ATOM) + return; + auto* atoms = (xcb_atom_t*)value; + XSURF->m_protocols.assign(atoms, atoms + reply->value_len); + }; - if (!HASMIN && !HASBASE) { - XSURF->m_sizeHints->min_width = -1; - XSURF->m_sizeHints->min_height = -1; - XSURF->m_sizeHints->base_width = -1; - XSURF->m_sizeHints->base_height = -1; - } else if (!HASBASE) { - XSURF->m_sizeHints->base_width = XSURF->m_sizeHints->min_width; - XSURF->m_sizeHints->base_height = XSURF->m_sizeHints->min_height; - } else if (!HASMIN) { - XSURF->m_sizeHints->min_width = XSURF->m_sizeHints->base_width; - XSURF->m_sizeHints->min_height = XSURF->m_sizeHints->base_height; - } - - if (!(FLAGS & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE)) { - XSURF->m_sizeHints->max_width = -1; - XSURF->m_sizeHints->max_height = -1; - } - } - } else if (atom == HYPRATOMS["WM_PROTOCOLS"]) { - if (reply->type == XCB_ATOM_ATOM) { - auto atoms = (xcb_atom_t*)xcb_get_property_value(reply); - std::vector vec; - vec.reserve(reply->value_len); - for (size_t i = 0; i < reply->value_len; ++i) { - vec.emplace_back(atoms[i]); - } - XSURF->m_protocols = vec; - } - } else { + if (atom == XCB_ATOM_WM_CLASS) + handleWMClass(); + else if (atom == XCB_ATOM_WM_NAME || atom == HYPRATOMS["_NET_WM_NAME"]) + handleWMName(); + else if (atom == HYPRATOMS["_NET_WM_WINDOW_TYPE"]) + handleWindowType(); + else if (atom == HYPRATOMS["_NET_WM_STATE"]) + handleWMState(); + else if (atom == HYPRATOMS["WM_HINTS"]) + handleWMHints(); + else if (atom == HYPRATOMS["WM_WINDOW_ROLE"]) + handleWMRole(); + else if (atom == XCB_ATOM_WM_TRANSIENT_FOR) + handleTransientFor(); + else if (atom == HYPRATOMS["WM_NORMAL_HINTS"]) + handleSizeHints(); + else if (atom == HYPRATOMS["WM_PROTOCOLS"]) + handleWMProtocols(); + else { Debug::log(TRACE, "[xwm] Unhandled prop {} -> {}", atom, propName); return; } @@ -757,7 +779,7 @@ bool CXWM::handleSelectionEvent(xcb_generic_event_t* e) { if (e->response_type - m_xfixes->first_event == XCB_XFIXES_SELECTION_NOTIFY) return handleSelectionXFixesNotify((xcb_xfixes_selection_notify_event_t*)e); - return 0; + return false; } int CXWM::onEvent(int fd, uint32_t mask) { @@ -772,14 +794,14 @@ int CXWM::onEvent(int fd, uint32_t mask) { return 0; } - int count = 0; + int processedEventCount = 0; while (42069) { xcb_generic_event_t* event = xcb_poll_for_event(m_connection); if (!event) break; - count++; + processedEventCount++; if (handleSelectionEvent(event)) { free(event); @@ -806,10 +828,10 @@ int CXWM::onEvent(int fd, uint32_t mask) { free(event); } - if (count) + if (processedEventCount) xcb_flush(m_connection); - return count; + return processedEventCount; } void CXWM::gatherResources() { @@ -1171,35 +1193,37 @@ void CXWM::updateOverrideRedirect(SP surf, bool overrideRedire } void CXWM::initSelection() { - m_clipboard.window = xcb_generate_id(m_connection); - uint32_t mask[1] = {XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE}; - xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_clipboard.window, m_screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, - XCB_CW_EVENT_MASK, mask); - xcb_set_selection_owner(m_connection, m_clipboard.window, HYPRATOMS["CLIPBOARD_MANAGER"], XCB_TIME_CURRENT_TIME); - - uint32_t mask2 = + const uint32_t windowMask = XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE; + const uint32_t xfixesMask = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; - xcb_xfixes_select_selection_input(m_connection, m_clipboard.window, HYPRATOMS["CLIPBOARD"], mask2); - m_clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any d) { m_clipboard.onSelection(); }); - m_clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { m_clipboard.onKeyboardFocus(); }); + auto createSelectionWindow = [&](xcb_window_t& window, const std::string& atomName, bool inputOnly = false) { + window = xcb_generate_id(m_connection); + const uint16_t width = inputOnly ? 8192 : 10; + const uint16_t height = inputOnly ? 8192 : 10; - m_primarySelection.window = xcb_generate_id(m_connection); - xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_primarySelection.window, m_screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, - XCB_CW_EVENT_MASK, mask); - xcb_set_selection_owner(m_connection, m_primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, window, m_screen->root, 0, 0, width, height, 0, + inputOnly ? XCB_WINDOW_CLASS_INPUT_ONLY : XCB_WINDOW_CLASS_INPUT_OUTPUT, m_screen->root_visual, XCB_CW_EVENT_MASK, &windowMask); - xcb_xfixes_select_selection_input(m_connection, m_primarySelection.window, HYPRATOMS["PRIMARY"], mask2); + if (!inputOnly) { + xcb_set_selection_owner(m_connection, window, HYPRATOMS[atomName], XCB_TIME_CURRENT_TIME); + xcb_xfixes_select_selection_input(m_connection, window, HYPRATOMS[atomName], xfixesMask); + } - m_primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any d) { m_primarySelection.onSelection(); }); - m_primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { m_primarySelection.onKeyboardFocus(); }); + return window; + }; - m_dndSelection.window = xcb_generate_id(m_connection); - xcb_create_window(m_connection, XCB_COPY_FROM_PARENT, m_dndSelection.window, m_screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, m_screen->root_visual, - XCB_CW_EVENT_MASK, mask); + createSelectionWindow(m_clipboard.window, "CLIPBOARD_MANAGER"); + m_clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any) { m_clipboard.onSelection(); }); + m_clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any) { m_clipboard.onKeyboardFocus(); }); - uint32_t val1 = XDND_VERSION; - xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_dndSelection.window, HYPRATOMS["XdndAware"], XCB_ATOM_ATOM, 32, 1, &val1); + createSelectionWindow(m_primarySelection.window, "PRIMARY"); + m_primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any) { m_primarySelection.onSelection(); }); + m_primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any) { m_primarySelection.onKeyboardFocus(); }); + + createSelectionWindow(m_dndSelection.window, "XdndAware", true); + const uint32_t xdndVersion = XDND_VERSION; + xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_dndSelection.window, HYPRATOMS["XdndAware"], XCB_ATOM_ATOM, 32, 1, &xdndVersion); } void CXWM::setClipboardToWayland(SXSelection& sel) { @@ -1332,18 +1356,27 @@ SP CXWM::createX11DataOffer(SP surf, SPm_wm->m_clipboard && g_pSeatManager->m_selection.currentSelection && g_pSeatManager->m_selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) || - (this == &g_pXWayland->m_wm->m_primarySelection && g_pSeatManager->m_selection.currentPrimarySelection && - g_pSeatManager->m_selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11)) + const bool isClipboard = this == &g_pXWayland->m_wm->m_clipboard; + const bool isPrimary = this == &g_pXWayland->m_wm->m_primarySelection; + + auto currentSel = g_pSeatManager->m_selection.currentSelection; + auto currentPrimSel = g_pSeatManager->m_selection.currentPrimarySelection; + + const bool isX11Clipboard = isClipboard && currentSel && currentSel->type() == DATA_SOURCE_TYPE_X11; + const bool isX11Primary = isPrimary && currentPrimSel && currentPrimSel->type() == DATA_SOURCE_TYPE_X11; + + if (isX11Clipboard || isX11Primary) return; - if (this == &g_pXWayland->m_wm->m_clipboard && g_pSeatManager->m_selection.currentSelection) { - xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, g_pXWayland->m_wm->m_clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->m_wm->m_connection); + xcb_connection_t* conn = g_pXWayland->m_wm->m_connection; + + if (isClipboard && currentSel) { + xcb_set_selection_owner(conn, g_pXWayland->m_wm->m_clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME); + xcb_flush(conn); g_pXWayland->m_wm->m_clipboard.notifyOnFocus = true; - } else if (this == &g_pXWayland->m_wm->m_primarySelection && g_pSeatManager->m_selection.currentPrimarySelection) { - xcb_set_selection_owner(g_pXWayland->m_wm->m_connection, g_pXWayland->m_wm->m_primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); - xcb_flush(g_pXWayland->m_wm->m_connection); + } else if (isPrimary && currentPrimSel) { + xcb_set_selection_owner(conn, g_pXWayland->m_wm->m_primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME); + xcb_flush(conn); g_pXWayland->m_wm->m_primarySelection.notifyOnFocus = true; } } From 16c62a6dbb5f8eee4dcfe903e743f6f144971c06 Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Mon, 2 Jun 2025 01:03:53 +0500 Subject: [PATCH 0233/1077] internal: Fix HyprError not displaying at startup (#10606) --- src/render/OpenGL.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index d589e3cf..817944ef 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1183,7 +1183,6 @@ bool CHyprOpenGLImpl::initShaders() { m_shadersInitialized = true; Debug::log(LOG, "Shaders initialized successfully."); - g_pHyprError->destroy(); return true; } From ef2c73af80d37265babc3287b3e5502a40c39374 Mon Sep 17 00:00:00 2001 From: Kamikadze <40305144+Kam1k4dze@users.noreply.github.com> Date: Mon, 2 Jun 2025 22:36:44 +0500 Subject: [PATCH 0234/1077] internal: embed example config (#10608) --- src/config/ConfigManager.cpp | 2 +- src/config/defaultConfig.hpp | 313 +---------------------------------- 2 files changed, 8 insertions(+), 307 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f7fed52f..8dce9f30 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -849,7 +849,7 @@ std::optional CConfigManager::generateConfig(std::string configPath Debug::log(WARN, "No config file found; attempting to generate."); std::ofstream ofs; ofs.open(configPath, std::ios::trunc); - ofs << AUTOCONFIG; + ofs << AUTOGENERATED_PREFIX << EXAMPLE_CONFIG; ofs.close(); if (!std::filesystem::exists(configPath)) diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp index a9ea6694..8bdfea39 100644 --- a/src/config/defaultConfig.hpp +++ b/src/config/defaultConfig.hpp @@ -2,316 +2,17 @@ #include -inline const std::string AUTOCONFIG = R"#( +inline constexpr std::string_view AUTOGENERATED_PREFIX = R"#( # ####################################################################################### # AUTOGENERATED HYPRLAND CONFIG. -# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT, -# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. # ####################################################################################### autogenerated = 1 # remove this line to remove the warning -# This is an example Hyprland config file. -# Refer to the wiki for more information. -# https://wiki.hyprland.org/Configuring/ - -# Please note not all available settings / options are set here. -# For a full list, see the wiki - -# You can split this configuration into multiple files -# Create your files separately and then link them to this file like this: -# source = ~/.config/hypr/myColors.conf - - -################ -### MONITORS ### -################ - -# See https://wiki.hyprland.org/Configuring/Monitors/ -monitor=,preferred,auto,auto - - -################### -### MY PROGRAMS ### -################### - -# See https://wiki.hyprland.org/Configuring/Keywords/ - -# Set programs that you use -$terminal = kitty -$fileManager = dolphin -$menu = wofi --show drun - - -################# -### AUTOSTART ### -################# - -# Autostart necessary processes (like notifications daemons, status bars, etc.) -# Or execute your favorite apps at launch like this: - -# exec-once = $terminal -# exec-once = nm-applet & -# exec-once = waybar & hyprpaper & firefox - - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -# See https://wiki.hyprland.org/Configuring/Environment-variables/ - -env = XCURSOR_SIZE,24 -env = HYPRCURSOR_SIZE,24 - - -################### -### PERMISSIONS ### -################### - -# See https://wiki.hyprland.org/Configuring/Permissions/ -# Please note permission changes here require a Hyprland restart and are not applied on-the-fly -# for security reasons - -# ecosystem { -# enforce_permissions = 1 -# } - -# permission = /usr/(bin|local/bin)/grim, screencopy, allow -# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow -# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow - - -##################### -### LOOK AND FEEL ### -##################### - -# Refer to https://wiki.hyprland.org/Configuring/Variables/ - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - gaps_in = 5 - gaps_out = 20 - - border_size = 2 - - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg - col.inactive_border = rgba(595959aa) - - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = false - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - rounding = 10 - rounding_power = 2 - - # Change transparency of focused and unfocused windows - active_opacity = 1.0 - inactive_opacity = 1.0 - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - } - - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur { - enabled = true - size = 3 - passes = 1 - - vibrancy = 0.1696 - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#animations -animations { - enabled = yes, please :) - - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade -} - -# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[tv1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] -# windowrule = rounding 0, floating:0, onworkspace:w[tv1] -# windowrule = bordersize 0, floating:0, onworkspace:f[1] -# windowrule = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # You probably want this -} - -# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#misc -misc { - force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( -} - - -############# -### INPUT ### -############# - -# https://wiki.hyprland.org/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - follow_mouse = 1 - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - - touchpad { - natural_scroll = false - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more -device { - name = epic-mouse-v1 - sensitivity = -0.5 -} - - -################### -### KEYBINDINGS ### -################### - -# See https://wiki.hyprland.org/Configuring/Keywords/ -$mainMod = SUPER # Sets "Windows" key as main modifier - -# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more -bind = $mainMod, Q, exec, $terminal -bind = $mainMod, C, killactive, -bind = $mainMod, M, exit, -bind = $mainMod, E, exec, $fileManager -bind = $mainMod, V, togglefloating, -bind = $mainMod, R, exec, $menu -bind = $mainMod, P, pseudo, # dwindle -bind = $mainMod, J, togglesplit, # dwindle - -# Move focus with mainMod + arrow keys -bind = $mainMod, left, movefocus, l -bind = $mainMod, right, movefocus, r -bind = $mainMod, up, movefocus, u -bind = $mainMod, down, movefocus, d - -# Switch workspaces with mainMod + [0-9] -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -# Move active window to a workspace with mainMod + SHIFT + [0-9] -bind = $mainMod SHIFT, 1, movetoworkspace, 1 -bind = $mainMod SHIFT, 2, movetoworkspace, 2 -bind = $mainMod SHIFT, 3, movetoworkspace, 3 -bind = $mainMod SHIFT, 4, movetoworkspace, 4 -bind = $mainMod SHIFT, 5, movetoworkspace, 5 -bind = $mainMod SHIFT, 6, movetoworkspace, 6 -bind = $mainMod SHIFT, 7, movetoworkspace, 7 -bind = $mainMod SHIFT, 8, movetoworkspace, 8 -bind = $mainMod SHIFT, 9, movetoworkspace, 9 -bind = $mainMod SHIFT, 0, movetoworkspace, 10 - -# Example special workspace (scratchpad) -bind = $mainMod, S, togglespecialworkspace, magic -bind = $mainMod SHIFT, S, movetoworkspace, special:magic - -# Scroll through existing workspaces with mainMod + scroll -bind = $mainMod, mouse_down, workspace, e+1 -bind = $mainMod, mouse_up, workspace, e-1 - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $mainMod, mouse:272, movewindow -bindm = $mainMod, mouse:273, resizewindow - -# Laptop multimedia keys for volume and LCD brightness -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- - -# Requires playerctl -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule -# windowrule = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrule = suppressevent maximize, class:.* - -# Fix some dragging issues with XWayland -windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 )#"; +inline constexpr char EXAMPLE_CONFIG_BYTES[] = { +#embed "../../example/hyprland.conf" +}; + +inline constexpr std::string_view EXAMPLE_CONFIG = {EXAMPLE_CONFIG_BYTES, sizeof(EXAMPLE_CONFIG_BYTES)}; From b1d0a727cc594e5329c5971d73391c7529e1c80e Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 3 Jun 2025 02:22:51 +0800 Subject: [PATCH 0235/1077] internal: Center window on parent if available (#10582) Fixes #10537 --- src/layout/IHyprLayout.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index fbde7344..40794b3e 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -158,6 +158,7 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { } // TODO: detect a popup in a more consistent way. + bool centeredOnParent = false; if ((desiredGeometry.x == 0 && desiredGeometry.y == 0) || !visible || !pWindow->m_isX11) { // if the pos isn't set, fall back to the center placement if it's not a child auto pos = PMONITOR->m_position + PMONITOR->m_size / 2.F - desiredGeometry.size() / 2.F; @@ -168,10 +169,11 @@ void IHyprLayout::onWindowCreatedFloating(PHLWINDOW pWindow) { *pWindow->m_realPosition = PARENT->m_realPosition->goal() + PARENT->m_realSize->goal() / 2.F - desiredGeometry.size() / 2.F; pWindow->m_workspace = PARENT->m_workspace; pWindow->m_monitor = PARENT->m_monitor; + centeredOnParent = true; } } - - *pWindow->m_realPosition = pos; + if (!centeredOnParent) + *pWindow->m_realPosition = pos; } else { // if it is, we respect where it wants to put itself, but apply monitor offset if outside // most of these are popups From b5c0d0b8aa8bb095ac447bf6c73486cb1c172b6e Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 4 Jun 2025 02:48:56 +0800 Subject: [PATCH 0236/1077] keybinds: add an option to respect gaps out for floating to movewindow (#9360) --- src/config/ConfigDescriptions.hpp | 7 +++++++ src/config/ConfigManager.cpp | 3 +++ src/config/ConfigManager.hpp | 1 + src/managers/KeybindManager.cpp | 21 +++++++++++++++------ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index a77cf757..98214284 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -32,6 +32,13 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_STRING_SHORT, .data = SConfigOptionDescription::SStringData{"20"}, }, + SConfigOptionDescription{ + .value = "general:float_gaps", + .description = "gaps between windows and monitor edges for floating windows\n\nsupports css style gaps (top, right, bottom, left -> 5 10 15 20). \n-1 means default " + "gaps_in/gaps_out\n0 means no gaps", + .type = CONFIG_OPTION_STRING_SHORT, + .data = SConfigOptionDescription::SStringData{"0"}, + }, SConfigOptionDescription{ .value = "general:gaps_workspaces", .description = "gaps between workspaces. Stacks with gaps_out.", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 8dce9f30..e2fb26ab 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -444,6 +444,7 @@ CConfigManager::CConfigManager() { registerConfigVar("general:no_border_on_floating", Hyprlang::INT{0}); registerConfigVar("general:gaps_in", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "5"}); registerConfigVar("general:gaps_out", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "20"}); + registerConfigVar("general:float_gaps", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "0"}); registerConfigVar("general:gaps_workspaces", Hyprlang::INT{0}); registerConfigVar("general:no_focus_fallback", Hyprlang::INT{0}); registerConfigVar("general:resize_on_border", Hyprlang::INT{0}); @@ -1318,6 +1319,8 @@ SWorkspaceRule CConfigManager::mergeWorkspaceRules(const SWorkspaceRule& rule1, mergedRule.gapsIn = rule2.gapsIn; if (rule2.gapsOut.has_value()) mergedRule.gapsOut = rule2.gapsOut; + if (rule2.floatGaps) + mergedRule.floatGaps = rule2.floatGaps; if (rule2.borderSize.has_value()) mergedRule.borderSize = rule2.borderSize; if (rule2.noBorder.has_value()) diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index 5cb95bac..134292e5 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -36,6 +36,7 @@ struct SWorkspaceRule { bool isPersistent = false; std::optional gapsIn; std::optional gapsOut; + std::optional floatGaps = gapsOut; std::optional borderSize; std::optional decorate; std::optional noRounding; diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 976e292d..43558d9d 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1682,16 +1682,25 @@ SDispatchResult CKeybindManager::moveActiveTo(std::string args) { if (PLASTWINDOW->m_isFloating) { std::optional vPosx, vPosy; - const auto PMONITOR = PLASTWINDOW->m_monitor.lock(); - const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize(); + const auto PMONITOR = PLASTWINDOW->m_monitor.lock(); + const auto BORDERSIZE = PLASTWINDOW->getRealBorderSize(); + static auto PGAPSCUSTOMDATA = CConfigValue("general:float_gaps"); + static auto PGAPSOUTDATA = CConfigValue("general:gaps_out"); + auto* PGAPSOUT = (CCssGapData*)PGAPSCUSTOMDATA.ptr()->getData(); + if (PGAPSOUT->m_left < 0 || PGAPSOUT->m_right < 0 || PGAPSOUT->m_top < 0 || PGAPSOUT->m_bottom < 0) + PGAPSOUT = (CCssGapData*)PGAPSOUTDATA.ptr()->getData(); switch (arg) { - case 'l': vPosx = PMONITOR->m_reservedTopLeft.x + BORDERSIZE + PMONITOR->m_position.x; break; - case 'r': vPosx = PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->m_position.x; break; + case 'l': vPosx = PMONITOR->m_reservedTopLeft.x + BORDERSIZE + PMONITOR->m_position.x + PGAPSOUT->m_left; break; + case 'r': + vPosx = PMONITOR->m_size.x - PMONITOR->m_reservedBottomRight.x - PLASTWINDOW->m_realSize->goal().x - BORDERSIZE + PMONITOR->m_position.x - PGAPSOUT->m_right; + break; case 't': - case 'u': vPosy = PMONITOR->m_reservedTopLeft.y + BORDERSIZE + PMONITOR->m_position.y; break; + case 'u': vPosy = PMONITOR->m_reservedTopLeft.y + BORDERSIZE + PMONITOR->m_position.y + PGAPSOUT->m_top; break; case 'b': - case 'd': vPosy = PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->m_position.y; break; + case 'd': + vPosy = PMONITOR->m_size.y - PMONITOR->m_reservedBottomRight.y - PLASTWINDOW->m_realSize->goal().y - BORDERSIZE + PMONITOR->m_position.y - PGAPSOUT->m_bottom; + break; } *PLASTWINDOW->m_realPosition = Vector2D(vPosx.value_or(PLASTWINDOW->m_realPosition->goal().x), vPosy.value_or(PLASTWINDOW->m_realPosition->goal().y)); From d9f7448d82132f4c1c07105f4bc3a4f717915d30 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Wed, 4 Jun 2025 16:54:12 +0200 Subject: [PATCH 0237/1077] xwayland: pad pid with leading zeroes in lockfile fixes #10652 --- src/xwayland/Server.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/xwayland/Server.cpp b/src/xwayland/Server.cpp index 814bd20c..0cc16fef 100644 --- a/src/xwayland/Server.cpp +++ b/src/xwayland/Server.cpp @@ -199,8 +199,9 @@ bool CXWaylandServer::tryOpenSockets() { continue; } - const std::string pidStr = std::to_string(getpid()); - if (write(fd.get(), pidStr.c_str(), pidStr.length()) != (long)pidStr.length()) { + const std::string pidStr = std::format("{:010d}\n", getpid()); + ASSERT(pidStr.length() == 11); + if (write(fd.get(), pidStr.c_str(), 11) != 11L) { safeRemove(lockPath); continue; } From d7a87ce6e2535f1029fc93b062d2828e8549c525 Mon Sep 17 00:00:00 2001 From: Jasson Date: Wed, 4 Jun 2025 11:00:55 -0400 Subject: [PATCH 0238/1077] xwayland: fix xwayland -> wayland clipboard (#10646) --- src/xwayland/XWM.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 5b423dca..1da8c71e 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -1214,6 +1214,7 @@ void CXWM::initSelection() { }; createSelectionWindow(m_clipboard.window, "CLIPBOARD_MANAGER"); + createSelectionWindow(m_clipboard.window, "CLIPBOARD"); m_clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any) { m_clipboard.onSelection(); }); m_clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any) { m_clipboard.onKeyboardFocus(); }); From 59c886d85500cf4c8ae11eaf2ebe50ec25b596f6 Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 5 Jun 2025 22:19:54 +0800 Subject: [PATCH 0239/1077] internal: Catch filesystem exceptions while iterating RunTimeDir (#10648) --- hyprctl/main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp index 25a4eef3..4a8b9819 100644 --- a/hyprctl/main.cpp +++ b/hyprctl/main.cpp @@ -72,10 +72,13 @@ std::vector instances() { return {}; } catch (std::exception& e) { return {}; } - for (const auto& el : std::filesystem::directory_iterator(getRuntimeDir())) { + std::error_code ec; + std::filesystem::directory_iterator it = std::filesystem::directory_iterator(getRuntimeDir(), std::filesystem::directory_options::skip_permission_denied, ec); + if (ec) + return {}; + for (const auto& el : it) { if (!el.is_directory() || !std::filesystem::exists(el.path().string() + "/hyprland.lock")) continue; - // read lock SInstanceData* data = &result.emplace_back(); data->id = el.path().filename().string(); From abdfc5ea40c0793117f34bf6c465840500cf7cb0 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:56:46 +0300 Subject: [PATCH 0240/1077] config: add a new monitor v2 config syntax (#9761) --- src/config/ConfigManager.cpp | 443 ++++++++++++++++++++++------------- src/config/ConfigManager.hpp | 33 +++ src/debug/HyprCtl.cpp | 3 + 3 files changed, 322 insertions(+), 157 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index e2fb26ab..735d9703 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -791,6 +791,20 @@ CConfigManager::CConfigManager() { m_config->addSpecialConfigValue("device", "flip_y", Hyprlang::INT{0}); // only for touchpads m_config->addSpecialConfigValue("device", "keybinds", Hyprlang::INT{1}); // enable/disable keybinds + m_config->addSpecialCategory("monitorv2", {.key = "output"}); + m_config->addSpecialConfigValue("monitorv2", "disabled", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("monitorv2", "mode", {"preferred"}); + m_config->addSpecialConfigValue("monitorv2", "position", {"auto"}); + m_config->addSpecialConfigValue("monitorv2", "scale", Hyprlang::FLOAT{1.0}); + m_config->addSpecialConfigValue("monitorv2", "addreserved", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("monitorv2", "mirror", {STRVAL_EMPTY}); + m_config->addSpecialConfigValue("monitorv2", "bitdepth", {STRVAL_EMPTY}); // TODO use correct type + m_config->addSpecialConfigValue("monitorv2", "cm", {"auto"}); + m_config->addSpecialConfigValue("monitorv2", "sdrbrightness", Hyprlang::FLOAT{1.0}); + m_config->addSpecialConfigValue("monitorv2", "sdrsaturation", Hyprlang::FLOAT{1.0}); + m_config->addSpecialConfigValue("monitorv2", "vrr", Hyprlang::INT{0}); + m_config->addSpecialConfigValue("monitorv2", "transform", {STRVAL_EMPTY}); // TODO use correct type + // keywords m_config->registerHandler(&::handleExec, "exec", {false}); m_config->registerHandler(&::handleRawExec, "execr", {false}); @@ -918,8 +932,9 @@ void CConfigManager::reload() { resetHLConfig(); m_configCurrentPath = getMainConfigPath(); const auto ERR = m_config->parse(); - m_lastConfigVerificationWasSuccessful = !ERR.error; - postConfigReload(ERR); + const auto monitorError = handleMonitorv2(); + m_lastConfigVerificationWasSuccessful = !ERR.error && !monitorError.error; + postConfigReload(ERR.error || !monitorError.error ? ERR : monitorError); } std::string CConfigManager::verify() { @@ -1009,6 +1024,68 @@ void CConfigManager::updateWatcher() { g_pConfigWatcher->setWatchList(*PDISABLEAUTORELOAD ? std::vector{} : m_configPaths); } +std::optional CConfigManager::handleMonitorv2(const std::string& output) { + auto parser = CMonitorRuleParser(output); + auto VAL = m_config->getSpecialConfigValuePtr("monitorv2", "disabled", output.c_str()); + if (VAL && VAL->m_bSetByUser && std::any_cast(VAL->getValue())) + parser.setDisabled(); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "mode", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.parseMode(std::any_cast(VAL->getValue())); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "position", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.parsePosition(std::any_cast(VAL->getValue())); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "scale", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.rule().scale = std::any_cast(VAL->getValue()); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "addreserved", output.c_str()); + if (VAL && VAL->m_bSetByUser) { + const auto ARGS = CVarList(std::any_cast(VAL->getValue())); + parser.setReserved({.top = std::stoi(ARGS[0]), .bottom = std::stoi(ARGS[1]), .left = std::stoi(ARGS[2]), .right = std::stoi(ARGS[3])}); + } + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "mirror", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.setMirror(std::any_cast(VAL->getValue())); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "bitdepth", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.parseBitdepth(std::any_cast(VAL->getValue())); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "cm", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.parseCM(std::any_cast(VAL->getValue())); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "sdrbrightness", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.rule().sdrBrightness = std::any_cast(VAL->getValue()); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "sdrsaturation", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.rule().sdrSaturation = std::any_cast(VAL->getValue()); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "vrr", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.rule().vrr = std::any_cast(VAL->getValue()); + VAL = m_config->getSpecialConfigValuePtr("monitorv2", "transform", output.c_str()); + if (VAL && VAL->m_bSetByUser) + parser.parseTransform(std::any_cast(VAL->getValue())); + + auto newrule = parser.rule(); + + std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == newrule.name; }); + + m_monitorRules.push_back(newrule); + + return parser.getError(); +} + +Hyprlang::CParseResult CConfigManager::handleMonitorv2() { + Hyprlang::CParseResult result; + for (const auto& output : m_config->listKeysForSpecialCategory("monitorv2")) { + const auto error = handleMonitorv2(output); + if (error.has_value()) { + result.setError(error.value().c_str()); + return result; + } + } + return result; +} + void CConfigManager::postConfigReload(const Hyprlang::CParseResult& result) { static const auto PENABLEEXPLICIT = CConfigValue("render:explicit_sync"); static int prevEnabledExplicit = *PENABLEEXPLICIT; @@ -1607,6 +1684,7 @@ void CConfigManager::dispatchExecShutdown() { } void CConfigManager::performMonitorReload() { + handleMonitorv2(); bool overAgain = false; @@ -1956,30 +2034,207 @@ static bool parseModeLine(const std::string& modeline, drmModeModeInfo& mode) { return true; } +CMonitorRuleParser::CMonitorRuleParser(const std::string& name) { + m_rule.name = name; +} + +const std::string& CMonitorRuleParser::name() { + return m_rule.name; +} + +SMonitorRule& CMonitorRuleParser::rule() { + return m_rule; +} + +std::optional CMonitorRuleParser::getError() { + if (m_error.empty()) + return {}; + return m_error; +} + +bool CMonitorRuleParser::parseMode(const std::string& value) { + if (value.starts_with("pref")) + m_rule.resolution = Vector2D(); + else if (value.starts_with("highrr")) + m_rule.resolution = Vector2D(-1, -1); + else if (value.starts_with("highres")) + m_rule.resolution = Vector2D(-1, -2); + else if (parseModeLine(value, m_rule.drmMode)) { + m_rule.resolution = Vector2D(m_rule.drmMode.hdisplay, m_rule.drmMode.vdisplay); + m_rule.refreshRate = float(m_rule.drmMode.vrefresh) / 1000; + } else { + + if (!value.contains("x")) { + m_error += "invalid resolution "; + m_rule.resolution = Vector2D(); + return false; + } else { + try { + m_rule.resolution.x = stoi(value.substr(0, value.find_first_of('x'))); + m_rule.resolution.y = stoi(value.substr(value.find_first_of('x') + 1, value.find_first_of('@'))); + + if (value.contains("@")) + m_rule.refreshRate = stof(value.substr(value.find_first_of('@') + 1)); + } catch (...) { + m_error += "invalid resolution "; + m_rule.resolution = Vector2D(); + return false; + } + } + } + return true; +} + +bool CMonitorRuleParser::parsePosition(const std::string& value, bool isFirst) { + if (value.starts_with("auto")) { + m_rule.offset = Vector2D(-INT32_MAX, -INT32_MAX); + // If this is the first monitor rule needs to be on the right. + if (value == "auto-right" || value == "auto" || isFirst) + m_rule.autoDir = eAutoDirs::DIR_AUTO_RIGHT; + else if (value == "auto-left") + m_rule.autoDir = eAutoDirs::DIR_AUTO_LEFT; + else if (value == "auto-up") + m_rule.autoDir = eAutoDirs::DIR_AUTO_UP; + else if (value == "auto-down") + m_rule.autoDir = eAutoDirs::DIR_AUTO_DOWN; + else { + Debug::log(WARN, + "Invalid auto direction. Valid options are 'auto'," + "'auto-up', 'auto-down', 'auto-left', and 'auto-right'."); + m_error += "invalid auto direction "; + return false; + } + } else { + if (!value.contains("x")) { + m_error += "invalid offset "; + m_rule.offset = Vector2D(-INT32_MAX, -INT32_MAX); + return false; + } else { + m_rule.offset.x = stoi(value.substr(0, value.find_first_of('x'))); + m_rule.offset.y = stoi(value.substr(value.find_first_of('x') + 1)); + } + } + return true; +} + +bool CMonitorRuleParser::parseScale(const std::string& value) { + if (value.starts_with("auto")) + m_rule.scale = -1; + else { + if (!isNumber(value, true)) { + m_error += "invalid scale "; + return false; + } else { + m_rule.scale = stof(value); + + if (m_rule.scale < 0.25f) { + m_error += "invalid scale "; + m_rule.scale = 1; + return false; + } + } + } + return true; +} + +bool CMonitorRuleParser::parseTransform(const std::string& value) { + const auto TSF = std::stoi(value); + if (std::clamp(TSF, 0, 7) != TSF) { + Debug::log(ERR, "Invalid transform {} in monitor", TSF); + m_error += "invalid transform "; + return false; + } + m_rule.transform = (wl_output_transform)TSF; + return true; +} + +bool CMonitorRuleParser::parseBitdepth(const std::string& value) { + m_rule.enable10bit = value == "10"; + return true; +} + +bool CMonitorRuleParser::parseCM(const std::string& value) { + if (value == "auto") + m_rule.cmType = CM_AUTO; + else if (value == "srgb") + m_rule.cmType = CM_SRGB; + else if (value == "wide") + m_rule.cmType = CM_WIDE; + else if (value == "edid") + m_rule.cmType = CM_EDID; + else if (value == "hdr") + m_rule.cmType = CM_HDR; + else if (value == "hdredid") + m_rule.cmType = CM_HDR_EDID; + else { + m_error += "invalid cm "; + return false; + } + return true; +} + +bool CMonitorRuleParser::parseSDRBrightness(const std::string& value) { + try { + m_rule.sdrBrightness = stof(value); + } catch (...) { + m_error += "invalid sdrbrightness "; + return false; + } + return true; +} + +bool CMonitorRuleParser::parseSDRSaturation(const std::string& value) { + try { + m_rule.sdrSaturation = stof(value); + } catch (...) { + m_error += "invalid sdrsaturation "; + return false; + } + return true; +} + +bool CMonitorRuleParser::parseVRR(const std::string& value) { + if (!isNumber(value)) { + m_error += "invalid vrr "; + return false; + } + + m_rule.vrr = std::stoi(value); + return true; +} + +void CMonitorRuleParser::setDisabled() { + m_rule.disabled = true; +} + +void CMonitorRuleParser::setMirror(const std::string& value) { + m_rule.mirrorOf = value; +} + +bool CMonitorRuleParser::setReserved(const SMonitorAdditionalReservedArea& value) { + g_pConfigManager->m_mAdditionalReservedAreas[name()] = value; + return true; +} + std::optional CConfigManager::handleMonitor(const std::string& command, const std::string& args) { // get the monitor config - SMonitorRule newrule; + const auto ARGS = CVarList(args); - const auto ARGS = CVarList(args); - - newrule.name = ARGS[0]; + auto parser = CMonitorRuleParser(ARGS[0]); if (ARGS[1] == "disable" || ARGS[1] == "disabled" || ARGS[1] == "addreserved" || ARGS[1] == "transform") { if (ARGS[1] == "disable" || ARGS[1] == "disabled") - newrule.disabled = true; + parser.setDisabled(); else if (ARGS[1] == "transform") { - const auto TSF = std::stoi(ARGS[2]); - if (std::clamp(TSF, 0, 7) != TSF) { - Debug::log(ERR, "Invalid transform {} in monitor", TSF); - return "invalid transform"; - } + if (!parser.parseTransform(ARGS[2])) + return parser.getError(); - const auto TRANSFORM = (wl_output_transform)TSF; + const auto TRANSFORM = parser.rule().transform; // overwrite if exists for (auto& r : m_monitorRules) { - if (r.name == newrule.name) { + if (r.name == parser.name()) { r.transform = TRANSFORM; return {}; } @@ -1987,179 +2242,53 @@ std::optional CConfigManager::handleMonitor(const std::string& comm return {}; } else if (ARGS[1] == "addreserved") { - int top = std::stoi(ARGS[2]); - - int bottom = std::stoi(ARGS[3]); - - int left = std::stoi(ARGS[4]); - - int right = std::stoi(ARGS[5]); - - m_mAdditionalReservedAreas[newrule.name] = {top, bottom, left, right}; - + parser.setReserved({.top = std::stoi(ARGS[2]), .bottom = std::stoi(ARGS[3]), .left = std::stoi(ARGS[4]), .right = std::stoi(ARGS[5])}); return {}; } else { Debug::log(ERR, "ConfigManager parseMonitor, curitem bogus???"); return "parse error: curitem bogus"; } - std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == newrule.name; }); + std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == parser.name(); }); - m_monitorRules.push_back(newrule); + m_monitorRules.push_back(parser.rule()); return {}; } - std::string error = ""; - - if (ARGS[1].starts_with("pref")) { - newrule.resolution = Vector2D(); - } else if (ARGS[1].starts_with("highrr")) { - newrule.resolution = Vector2D(-1, -1); - } else if (ARGS[1].starts_with("highres")) { - newrule.resolution = Vector2D(-1, -2); - } else if (ARGS[1].starts_with("maxwidth")) { - newrule.resolution = Vector2D(-1, -3); - } else if (parseModeLine(ARGS[1], newrule.drmMode)) { - newrule.resolution = Vector2D(newrule.drmMode.hdisplay, newrule.drmMode.vdisplay); - newrule.refreshRate = float(newrule.drmMode.vrefresh) / 1000; - } else { - - if (!ARGS[1].contains("x")) { - error += "invalid resolution "; - newrule.resolution = Vector2D(); - } else { - try { - newrule.resolution.x = stoi(ARGS[1].substr(0, ARGS[1].find_first_of('x'))); - newrule.resolution.y = stoi(ARGS[1].substr(ARGS[1].find_first_of('x') + 1, ARGS[1].find_first_of('@'))); - - if (ARGS[1].contains("@")) - newrule.refreshRate = stof(ARGS[1].substr(ARGS[1].find_first_of('@') + 1)); - } catch (...) { - error += "invalid resolution "; - newrule.resolution = Vector2D(); - } - } - } - - if (ARGS[2].starts_with("auto")) { - newrule.offset = Vector2D(-INT32_MAX, -INT32_MAX); - // If this is the first monitor rule needs to be on the right. - if (ARGS[2] == "auto-right" || ARGS[2] == "auto" || m_monitorRules.empty()) - newrule.autoDir = eAutoDirs::DIR_AUTO_RIGHT; - else if (ARGS[2] == "auto-left") - newrule.autoDir = eAutoDirs::DIR_AUTO_LEFT; - else if (ARGS[2] == "auto-up") - newrule.autoDir = eAutoDirs::DIR_AUTO_UP; - else if (ARGS[2] == "auto-down") - newrule.autoDir = eAutoDirs::DIR_AUTO_DOWN; - else if (ARGS[2] == "auto-center-right") - newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_RIGHT; - else if (ARGS[2] == "auto-center-left") - newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_LEFT; - else if (ARGS[2] == "auto-center-up") - newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_UP; - else if (ARGS[2] == "auto-center-down") - newrule.autoDir = eAutoDirs::DIR_AUTO_CENTER_DOWN; - else { - Debug::log(WARN, - "Invalid auto direction. Valid options are 'auto'," - "'auto-up', 'auto-down', 'auto-left', 'auto-right'," - "'auto-center-up', 'auto-center-down'," - "'auto-center-left', and 'auto-center-right'."); - error += "invalid auto direction "; - } - } else { - if (!ARGS[2].contains("x")) { - error += "invalid offset "; - newrule.offset = Vector2D(-INT32_MAX, -INT32_MAX); - } else { - newrule.offset.x = stoi(ARGS[2].substr(0, ARGS[2].find_first_of('x'))); - newrule.offset.y = stoi(ARGS[2].substr(ARGS[2].find_first_of('x') + 1)); - } - } - - if (ARGS[3].starts_with("auto")) { - newrule.scale = -1; - } else { - if (!isNumber(ARGS[3], true)) - error += "invalid scale "; - else { - newrule.scale = stof(ARGS[3]); - - if (newrule.scale < 0.25f) { - error += "invalid scale "; - newrule.scale = 1; - } - } - } + parser.parseMode(ARGS[1]); + parser.parsePosition(ARGS[2]); + parser.parseScale(ARGS[3]); int argno = 4; while (!ARGS[argno].empty()) { if (ARGS[argno] == "mirror") { - newrule.mirrorOf = ARGS[argno + 1]; + parser.setMirror(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "bitdepth") { - newrule.enable10bit = ARGS[argno + 1] == "10"; + parser.parseBitdepth(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "cm") { - if (ARGS[argno + 1] == "auto") - newrule.cmType = CM_AUTO; - else if (ARGS[argno + 1] == "srgb") - newrule.cmType = CM_SRGB; - else if (ARGS[argno + 1] == "wide") - newrule.cmType = CM_WIDE; - else if (ARGS[argno + 1] == "edid") - newrule.cmType = CM_EDID; - else if (ARGS[argno + 1] == "hdr") - newrule.cmType = CM_HDR; - else if (ARGS[argno + 1] == "hdredid") - newrule.cmType = CM_HDR_EDID; - else - error = "invalid cm "; + parser.parseCM(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "sdrsaturation") { - try { - newrule.sdrSaturation = stof(ARGS[argno + 1]); - } catch (...) { error = "invalid sdrsaturation "; } + parser.parseSDRSaturation(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "sdrbrightness") { - try { - newrule.sdrBrightness = stof(ARGS[argno + 1]); - } catch (...) { error = "invalid sdrbrightness "; } + parser.parseSDRBrightness(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "transform") { - if (!isNumber(ARGS[argno + 1])) { - error = "invalid transform "; - argno++; - continue; - } - - const auto NUM = std::stoi(ARGS[argno + 1]); - - if (NUM < 0 || NUM > 7) { - error = "invalid transform "; - argno++; - continue; - } - - newrule.transform = (wl_output_transform)std::stoi(ARGS[argno + 1]); + parser.parseTransform(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "vrr") { - if (!isNumber(ARGS[argno + 1])) { - error = "invalid vrr "; - argno++; - continue; - } - - newrule.vrr = std::stoi(ARGS[argno + 1]); + parser.parseVRR(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "workspace") { const auto& [id, name] = getWorkspaceIDNameFromString(ARGS[argno + 1]); SWorkspaceRule wsRule; - wsRule.monitor = newrule.name; + wsRule.monitor = parser.name(); wsRule.workspaceString = ARGS[argno + 1]; wsRule.workspaceId = id; wsRule.workspaceName = name; @@ -2174,13 +2303,13 @@ std::optional CConfigManager::handleMonitor(const std::string& comm argno++; } + auto newrule = parser.rule(); + std::erase_if(m_monitorRules, [&](const auto& other) { return other.name == newrule.name; }); m_monitorRules.push_back(newrule); - if (error.empty()) - return {}; - return error; + return parser.getError(); } std::optional CConfigManager::handleBezier(const std::string& command, const std::string& args) { diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index 134292e5..2d8446b5 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -27,6 +27,8 @@ #define HANDLE void* +class CConfigManager; + struct SWorkspaceRule { std::string monitor = ""; std::string workspaceString = ""; @@ -170,6 +172,32 @@ namespace std { }; } +class CMonitorRuleParser { + public: + CMonitorRuleParser(const std::string& name); + + const std::string& name(); + SMonitorRule& rule(); + std::optional getError(); + bool parseMode(const std::string& value); + bool parsePosition(const std::string& value, bool isFirst = false); + bool parseScale(const std::string& value); + bool parseTransform(const std::string& value); + bool parseBitdepth(const std::string& value); + bool parseCM(const std::string& value); + bool parseSDRBrightness(const std::string& value); + bool parseSDRSaturation(const std::string& value); + bool parseVRR(const std::string& value); + + void setDisabled(); + void setMirror(const std::string& value); + bool setReserved(const SMonitorAdditionalReservedArea& value); + + private: + SMonitorRule m_rule; + std::string m_error = ""; +}; + class CConfigManager { public: CConfigManager(); @@ -257,6 +285,9 @@ class CConfigManager { std::optional handlePlugin(const std::string&, const std::string&); std::optional handlePermission(const std::string&, const std::string&); + std::optional handleMonitorv2(const std::string& output); + Hyprlang::CParseResult handleMonitorv2(); + std::string m_configCurrentPath; bool m_wantsMonitorReload = false; @@ -307,6 +338,7 @@ class CConfigManager { std::optional resetHLConfig(); std::optional generateConfig(std::string configPath); std::optional verifyConfigExists(); + void postConfigReload(const Hyprlang::CParseResult& result); SWorkspaceRule mergeWorkspaceRules(const SWorkspaceRule&, const SWorkspaceRule&); @@ -319,6 +351,7 @@ class CConfigManager { std::unordered_map m_mStoredFloatingSizes; friend struct SConfigOptionDescription; + friend class CMonitorRuleParser; }; inline UP g_pConfigManager; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 77f54c2b..11f8b39a 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1109,6 +1109,9 @@ static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) if (COMMAND == "monitor" || COMMAND == "source") g_pConfigManager->m_wantsMonitorReload = true; // for monitor keywords + if (COMMAND.contains("monitorv2")) + g_pEventLoopManager->doLater([] { g_pConfigManager->m_wantsMonitorReload = true; }); + if (COMMAND.contains("input") || COMMAND.contains("device") || COMMAND == "source") { g_pInputManager->setKeyboardLayout(); // update kb layout g_pInputManager->setPointerConfigs(); // update mouse cfgs From 423b69f5d3c76762e05c1511a10942714dea4e8e Mon Sep 17 00:00:00 2001 From: Eric Li Date: Thu, 5 Jun 2025 16:17:04 -0400 Subject: [PATCH 0241/1077] config: add group: selector (#10588) --- src/config/ConfigManager.cpp | 19 +++++++++++++++++-- src/desktop/WindowRule.hpp | 3 ++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 735d9703..025be9f7 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1434,6 +1434,7 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, // since some rules will be applied later, we need to store some flags bool hasFloating = pWindow->m_isFloating; bool hasFullscreen = pWindow->isFullscreen(); + bool isGrouped = pWindow->m_groupData.pNextWindow; // local tags for dynamic tag rule match auto tags = pWindow->m_tags; @@ -1482,6 +1483,11 @@ std::vector> CConfigManager::getMatchingRules(PHLWINDOW pWindow, continue; } + if (rule->m_group != -1) { + if (rule->m_group != isGrouped) + continue; + } + if (!rule->m_fullscreenState.empty()) { const auto ARGS = CVarList(rule->m_fullscreenState, 2, ' '); // @@ -2576,6 +2582,7 @@ std::optional CConfigManager::handleWindowRule(const std::string& c const auto ONWORKSPACEPOS = VALUE.find("onworkspace:"); const auto CONTENTTYPEPOS = VALUE.find("content:"); const auto XDGTAGPOS = VALUE.find("xdgTag:"); + const auto GROUPPOS = VALUE.find("group:"); // find workspacepos that isn't onworkspacepos size_t WORKSPACEPOS = std::string::npos; @@ -2588,8 +2595,8 @@ std::optional CConfigManager::handleWindowRule(const std::string& c currentPos = VALUE.find("workspace:", currentPos + 1); } - const auto checkPos = std::unordered_set{TAGPOS, TITLEPOS, CLASSPOS, INITIALTITLEPOS, INITIALCLASSPOS, X11POS, FLOATPOS, FULLSCREENPOS, - PINNEDPOS, FULLSCREENSTATEPOS, WORKSPACEPOS, FOCUSPOS, ONWORKSPACEPOS, CONTENTTYPEPOS, XDGTAGPOS}; + const auto checkPos = std::unordered_set{TAGPOS, TITLEPOS, CLASSPOS, INITIALTITLEPOS, INITIALCLASSPOS, X11POS, FLOATPOS, FULLSCREENPOS, + PINNEDPOS, FULLSCREENSTATEPOS, WORKSPACEPOS, FOCUSPOS, ONWORKSPACEPOS, CONTENTTYPEPOS, XDGTAGPOS, GROUPPOS}; if (checkPos.size() == 1 && checkPos.contains(std::string::npos)) { Debug::log(ERR, "Invalid rulev2 syntax: {}", VALUE); return "Invalid rulev2 syntax: " + VALUE; @@ -2630,6 +2637,8 @@ std::optional CConfigManager::handleWindowRule(const std::string& c min = CONTENTTYPEPOS; if (XDGTAGPOS > pos && XDGTAGPOS < min) min = XDGTAGPOS; + if (GROUPPOS > pos && GROUPPOS < min) + min = GROUPPOS; result = result.substr(0, min - pos); @@ -2694,6 +2703,9 @@ std::optional CConfigManager::handleWindowRule(const std::string& c if (XDGTAGPOS != std::string::npos) rule->m_xdgTag = extract(XDGTAGPOS + 8); + if (GROUPPOS != std::string::npos) + rule->m_group = extract(GROUPPOS + 6) == "1" ? 1 : 0; + if (RULE == "unset") { std::erase_if(m_windowRules, [&](const auto& other) { if (!other->m_v2) @@ -2741,6 +2753,9 @@ std::optional CConfigManager::handleWindowRule(const std::string& c if (!rule->m_contentType.empty() && rule->m_contentType != other->m_contentType) return false; + if (rule->m_group != -1 && rule->m_group != other->m_group) + return false; + return true; } }); diff --git a/src/desktop/WindowRule.hpp b/src/desktop/WindowRule.hpp index 9af3909a..b828c8ee 100644 --- a/src/desktop/WindowRule.hpp +++ b/src/desktop/WindowRule.hpp @@ -58,6 +58,7 @@ class CWindowRule { int m_fullscreen = -1; int m_pinned = -1; int m_focus = -1; + int m_group = -1; std::string m_fullscreenState = ""; // empty means any std::string m_onWorkspace = ""; // empty means any std::string m_workspace = ""; // empty means any @@ -70,4 +71,4 @@ class CWindowRule { CRuleRegexContainer m_initialTitleRegex; CRuleRegexContainer m_initialClassRegex; CRuleRegexContainer m_v1Regex; -}; \ No newline at end of file +}; From fb7548cb41d82f12db2d51b50af29abe4704a1a4 Mon Sep 17 00:00:00 2001 From: XPhyro Date: Thu, 5 Jun 2025 23:29:01 +0300 Subject: [PATCH 0242/1077] screencopy: fix applying `noscreenshare` to invisible special workspaces (#10628) --- src/protocols/Screencopy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp index 8002776a..3ad57ed7 100644 --- a/src/protocols/Screencopy.cpp +++ b/src/protocols/Screencopy.cpp @@ -206,7 +206,7 @@ void CScreencopyFrame::renderMon() { if (!w->m_windowData.noScreenShare.valueOrDefault()) continue; - if (!g_pHyprRenderer->shouldRenderWindow(w)) + if (!g_pHyprRenderer->shouldRenderWindow(w, m_monitor.lock())) continue; const auto PWORKSPACE = w->m_workspace; From d6fbd89336f2f0b631856e6a68a9d62c772ef50f Mon Sep 17 00:00:00 2001 From: Friday Date: Thu, 5 Jun 2025 22:02:58 +0100 Subject: [PATCH 0243/1077] nix: use gcc15-built dependencies --- flake.lock | 66 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/flake.lock b/flake.lock index 01b437e6..ba7d34bf 100644 --- a/flake.lock +++ b/flake.lock @@ -16,11 +16,11 @@ ] }, "locked": { - "lastModified": 1747864449, - "narHash": "sha256-PIjVAWghZhr3L0EFM2UObhX84UQxIACbON0IC0zzSKA=", + "lastModified": 1749155310, + "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "389372c5f4dc1ac0e7645ed29a35fd6d71672ef5", + "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1745948457, - "narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=", + "lastModified": 1749155331, + "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "ac903e80b33ba6a88df83d02232483d99f327573", + "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", "type": "github" }, "original": { @@ -105,11 +105,11 @@ ] }, "locked": { - "lastModified": 1745015490, - "narHash": "sha256-apEJ9zoSzmslhJ2vOKFcXTMZLUFYzh1ghfB6Rbw3Low=", + "lastModified": 1749145600, + "narHash": "sha256-v2kY5RDk9oyo1x9m8u83GdklC96xlJ7ka1rrvZoYL78=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "60754910946b4e2dc1377b967b7156cb989c5873", + "rev": "80b754e38e836777ad3a9d5d1ffc3491b0332471", "type": "github" }, "original": { @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1743714874, - "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", + "lastModified": 1749046714, + "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", + "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", "type": "github" }, "original": { @@ -157,11 +157,11 @@ ] }, "locked": { - "lastModified": 1737634706, - "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "lastModified": 1749154592, + "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", "owner": "hyprwm", "repo": "hyprland-qt-support", - "rev": "8810df502cdee755993cb803eba7b23f189db795", + "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", "type": "github" }, "original": { @@ -189,11 +189,11 @@ ] }, "locked": { - "lastModified": 1745951494, - "narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=", + "lastModified": 1749155776, + "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e", + "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", "type": "github" }, "original": { @@ -215,11 +215,11 @@ ] }, "locked": { - "lastModified": 1747484975, - "narHash": "sha256-+LAQ81HBwG0lwshHlWe0kfWg4KcChIPpnwtnwqmnoEU=", + "lastModified": 1749145882, + "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "163c83b3db48a17c113729c220a60b94596c9291", + "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", "type": "github" }, "original": { @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1746635225, - "narHash": "sha256-W9G9bb0zRYDBRseHbVez0J8qVpD5QbizX67H/vsudhM=", + "lastModified": 1749135356, + "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "674ea57373f08b7609ce93baff131117a0dfe70d", + "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", "type": "github" }, "original": { @@ -261,11 +261,11 @@ ] }, "locked": { - "lastModified": 1747584298, - "narHash": "sha256-PH9qZqWLHvSBQiUnA0NzAyQA3tu2no2z8kz0ZeHWj4w=", + "lastModified": 1749145760, + "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "e511882b9c2e1d7a75d45d8fddd2160daeafcbc3", + "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", "type": "github" }, "original": { @@ -276,11 +276,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748460289, - "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", + "lastModified": 1748929857, + "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", + "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", "type": "github" }, "original": { @@ -365,11 +365,11 @@ ] }, "locked": { - "lastModified": 1745871725, - "narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=", + "lastModified": 1749155346, + "narHash": "sha256-KIkJu3zF8MF3DuGwzAmo3Ww9wsWXolwV30SjJRTAxYE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e", + "rev": "44bf29f1df45786098920c655af523535a9191ae", "type": "github" }, "original": { From c35c2fea409a845b1023151a2b642f4aa077dacc Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:01:19 +0300 Subject: [PATCH 0244/1077] config: Restore auto-center-* for monitors (#10660) --- src/config/ConfigManager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 025be9f7..0632018c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2103,10 +2103,20 @@ bool CMonitorRuleParser::parsePosition(const std::string& value, bool isFirst) { m_rule.autoDir = eAutoDirs::DIR_AUTO_UP; else if (value == "auto-down") m_rule.autoDir = eAutoDirs::DIR_AUTO_DOWN; + else if (value == "auto-center-right") + m_rule.autoDir = eAutoDirs::DIR_AUTO_CENTER_RIGHT; + else if (value == "auto-center-left") + m_rule.autoDir = eAutoDirs::DIR_AUTO_CENTER_LEFT; + else if (value == "auto-center-up") + m_rule.autoDir = eAutoDirs::DIR_AUTO_CENTER_UP; + else if (value == "auto-center-down") + m_rule.autoDir = eAutoDirs::DIR_AUTO_CENTER_DOWN; else { Debug::log(WARN, "Invalid auto direction. Valid options are 'auto'," - "'auto-up', 'auto-down', 'auto-left', and 'auto-right'."); + "'auto-up', 'auto-down', 'auto-left', 'auto-right'," + "'auto-center-up', 'auto-center-down'," + "'auto-center-left', and 'auto-center-right'."); m_error += "invalid auto direction "; return false; } From 456c820d52263579e4afdc3429fdaecab12f37a5 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Fri, 6 Jun 2025 15:11:12 +0200 Subject: [PATCH 0245/1077] assets: update header --- assets/header.svg | 128 ++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 68 deletions(-) diff --git a/assets/header.svg b/assets/header.svg index c8cf8222..a2b32551 100644 --- a/assets/header.svg +++ b/assets/header.svg @@ -1,72 +1,64 @@ - - -
- - - -

Hyprland

-
-
-
-
+ .st4 { + fill: url(#e); + } + + .st5 { + fill: url(#f); + } + + .st6 { + fill: url(#g); + } + + .st7 { + fill: url(#h); + } + + .st8 { + fill: url(#i); + } +