summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-11-09 22:43:52 +0000
committerVaxry <vaxry@vaxry.net>2023-11-09 22:43:52 +0000
commit8dd02eb5f3d47ce67a33c836ea6d648bd6967962 (patch)
tree0fc6553ec14b3b1a9d1373d9f8a5ea21204eca3d /src/events/Windows.cpp
parent14195835ef1dd25e10b0d873ec75c004b238ccba (diff)
xdg-shell: update reported size on ack_configure
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index f131efa4..1fbc9070 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -504,6 +504,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->hyprListener_requestResize.initCallback(&PWINDOW->m_uSurface.xdg->toplevel->events.request_resize, &Events::listener_requestResize, PWINDOW, "XDG Window Late");
PWINDOW->hyprListener_fullscreenWindow.initCallback(&PWINDOW->m_uSurface.xdg->toplevel->events.request_fullscreen, &Events::listener_fullscreenWindow, PWINDOW,
"XDG Window Late");
+ PWINDOW->hyprListener_ackConfigure.initCallback(&PWINDOW->m_uSurface.xdg->events.ack_configure, &Events::listener_ackConfigure, PWINDOW, "XDG Window Late");
} else {
PWINDOW->hyprListener_fullscreenWindow.initCallback(&PWINDOW->m_uSurface.xwayland->events.request_fullscreen, &Events::listener_fullscreenWindow, PWINDOW,
"XWayland Window Late");
@@ -682,6 +683,7 @@ void Events::listener_unmapWindow(void* owner, void* data) {
PWINDOW->hyprListener_requestMove.removeCallback();
PWINDOW->hyprListener_requestResize.removeCallback();
PWINDOW->hyprListener_fullscreenWindow.removeCallback();
+ PWINDOW->hyprListener_ackConfigure.removeCallback();
} else {
Debug::log(LOG, "Unregistered late callbacks XWL");
PWINDOW->hyprListener_fullscreenWindow.removeCallback();
@@ -788,13 +790,26 @@ void Events::listener_unmapWindow(void* owner, void* data) {
PWINDOW->onUnmap();
}
+void Events::listener_ackConfigure(void* owner, void* data) {
+ CWindow* PWINDOW = (CWindow*)owner;
+ const auto E = (wlr_xdg_surface_configure*)data;
+
+ if (!PWINDOW->m_iPendingSizeAck.has_value() || E->serial != PWINDOW->m_iPendingSizeAck)
+ return;
+
+ PWINDOW->m_bPendingSizeAcked = true;
+ PWINDOW->m_iPendingSizeAck.reset();
+}
+
void Events::listener_commitWindow(void* owner, void* data) {
CWindow* PWINDOW = (CWindow*)owner;
if (!PWINDOW->m_bMappedX11 || PWINDOW->isHidden() || (PWINDOW->m_bIsX11 && !PWINDOW->m_bMappedX11))
return;
- PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize; // apply pending size. We pinged, the window ponged.
+ if (PWINDOW->m_bIsX11 || PWINDOW->m_bPendingSizeAcked)
+ PWINDOW->m_vReportedSize = PWINDOW->m_vPendingReportedSize; // apply pending size. We pinged, the window ponged.
+ PWINDOW->m_bPendingSizeAcked = false;
PWINDOW->updateSurfaceOutputs();