summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2024-10-12 03:29:51 +0300
committerGitHub <noreply@github.com>2024-10-12 01:29:51 +0100
commitee8116ac5dc412dce924a0163074ce7988dd0cfc (patch)
treed7c4785660a0d9112e57f20780d60e7542934117 /src/events/Windows.cpp
parentf5db4839730643169b7e8b7fb6ae2fbb8743ebe9 (diff)
input: Fix VRR for constrained cursors (#6877)
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 37f29130..e549907e 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -12,6 +12,7 @@
#include "../protocols/core/Compositor.hpp"
#include "../protocols/ToplevelExport.hpp"
#include "../xwayland/XSurface.hpp"
+#include "managers/PointerManager.hpp"
#include <hyprutils/string/String.hpp>
using namespace Hyprutils::String;
@@ -758,8 +759,21 @@ void Events::listener_commitWindow(void* owner, void* data) {
if (!PWINDOW->m_pWorkspace->m_bVisible)
return;
- 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);
+ const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
+
+ PMONITOR->debugLastPresentation(g_pSeatManager->isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow");
+ if (g_pSeatManager->isPointerFrameCommit) {
+ 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);
+
+ if (g_pSeatManager->isPointerFrameSkipped) {
+ g_pPointerManager->sendStoredMovement();
+ g_pSeatManager->sendPointerFrame();
+ g_pSeatManager->isPointerFrameCommit = true;
+ }
if (!PWINDOW->m_bIsX11) {
PWINDOW->m_pSubsurfaceHead->recheckDamageForSubsurfaces();
@@ -767,7 +781,6 @@ void Events::listener_commitWindow(void* owner, void* data) {
}
// tearing: if solitary, redraw it. This still might be a single surface window
- const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
if (PMONITOR && PMONITOR->solitaryClient.lock() == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->tearingState.canTear && PWINDOW->m_pWLSurface->resource()->current.texture) {
CRegion damageBox{PWINDOW->m_pWLSurface->resource()->accumulateCurrentBufferDamage()};