From 60d769a89908c29e19100059985db15a7b6bab6a Mon Sep 17 00:00:00 2001 From: vaxerski Date: Thu, 14 Aug 2025 17:13:15 +0200 Subject: [PATCH] internal: unify VT getting --- src/Compositor.cpp | 21 +++++++++++++++++++++ src/Compositor.hpp | 1 + src/managers/KeybindManager.cpp | 19 +++---------------- src/render/OpenGL.cpp | 8 +++----- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 8f9a64ec..7b6a9e08 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -3213,3 +3213,24 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector CCompositor::getVTNr() { + if (!m_aqBackend->hasSession()) + return std::nullopt; + + unsigned int ttynum = 0; + Hyprutils::OS::CFileDescriptor fd{open("/dev/tty", O_RDONLY | O_NOCTTY)}; + if (fd.isValid()) { +#if defined(VT_GETSTATE) + struct vt_stat st; + if (!ioctl(fd.get(), VT_GETSTATE, &st)) + ttynum = st.v_active; +#elif defined(VT_GETACTIVE) + int vt; + if (!ioctl(fd.get(), VT_GETACTIVE, &vt)) + ttynum = vt; +#endif + } + + return ttynum; +} diff --git a/src/Compositor.hpp b/src/Compositor.hpp index d18b5a93..dffe3565 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -156,6 +156,7 @@ class CCompositor { void updateSuspendedStates(); void onNewMonitor(SP output); void ensurePersistentWorkspacesPresent(const std::vector& rules, PHLWORKSPACE pWorkspace = nullptr); + std::optional getVTNr(); NColorManagement::SImageDescription getPreferredImageDescription(); bool shouldChangePreferredImageDescription(); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index bb1222ad..5f3aac1c 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -875,25 +875,12 @@ bool CKeybindManager::handleVT(xkb_keysym_t keysym) { if (g_pCompositor->m_aqBackend->hasSession()) { const unsigned int TTY = keysym - XKB_KEY_XF86Switch_VT_1 + 1; - // vtnr is bugged for some reason. - unsigned int ttynum = 0; - Hyprutils::OS::CFileDescriptor fd{open("/dev/tty", O_RDONLY | O_NOCTTY)}; - if (fd.isValid()) { -#if defined(VT_GETSTATE) - struct vt_stat st; - if (!ioctl(fd.get(), VT_GETSTATE, &st)) - ttynum = st.v_active; -#elif defined(VT_GETACTIVE) - int vt; - if (!ioctl(fd.get(), VT_GETACTIVE, &vt)) - ttynum = vt; -#endif - } + const auto CURRENT_TTY = g_pCompositor->getVTNr(); - if (ttynum == TTY) + if (!CURRENT_TTY.has_value() || *CURRENT_TTY == TTY) return true; - Debug::log(LOG, "Switching from VT {} to VT {}", ttynum, TTY); + Debug::log(LOG, "Switching from VT {} to VT {}", *CURRENT_TTY, TTY); g_pCompositor->m_aqBackend->session->switchVT(TTY); } diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index bff6d9c4..e4d55f71 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2856,11 +2856,9 @@ void CHyprOpenGLImpl::ensureLockTexturesRendered(bool load) { m_lockDeadTexture = loadAsset("lockdead.png"); m_lockDead2Texture = loadAsset("lockdead2.png"); - 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); + const auto VT = g_pCompositor->getVTNr(); + + m_lockTtyTextTexture = renderText(std::format("Running on tty {}", VT.has_value() ? std::to_string(*VT) : "unknown"), CHyprColor{0.9F, 0.9F, 0.9F, 0.7F}, 20, true); } else { m_lockDeadTexture.reset(); m_lockDead2Texture.reset();