summaryrefslogtreecommitdiff
path: root/src/managers/ANRManager.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-06-11 17:00:16 +0200
committerVaxry <vaxry@vaxry.net>2025-06-11 17:00:16 +0200
commit144885d89fc4689e8dde85822b0d3302db397b20 (patch)
treed97d1013e37619ce40e0d03fdad836db02062888 /src/managers/ANRManager.cpp
parentf7526d6be00d75f3abde72883903f9a7116de097 (diff)
anr: make dialog disappear if the app dies
fixes #10514
Diffstat (limited to 'src/managers/ANRManager.cpp')
-rw-r--r--src/managers/ANRManager.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp
index e4e62ea8..65e0dea1 100644
--- a/src/managers/ANRManager.cpp
+++ b/src/managers/ANRManager.cpp
@@ -35,6 +35,22 @@ CANRManager::CANRManager() {
m_data.emplace_back(makeShared<SANRData>(window));
});
+ static auto P1 = g_pHookSystem->hookDynamic("closeWindow", [this](void* self, SCallbackInfo& info, std::any data) {
+ auto window = std::any_cast<PHLWINDOW>(data);
+
+ for (const auto& d : m_data) {
+ if (!d->fitsWindow(window))
+ continue;
+
+ // kill the dialog, act as if we got a "ping" in case there's more than one
+ // window from this client, in which case the dialog will re-appear.
+ d->killDialog();
+ d->missedResponses = 0;
+ d->dialogSaidWait = false;
+ return;
+ }
+ });
+
m_timer->updateTimeout(TIMER_TIMEOUT);
}