diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-06-11 17:00:16 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-06-11 17:00:16 +0200 |
| commit | 144885d89fc4689e8dde85822b0d3302db397b20 (patch) | |
| tree | d97d1013e37619ce40e0d03fdad836db02062888 /src/managers/ANRManager.cpp | |
| parent | f7526d6be00d75f3abde72883903f9a7116de097 (diff) | |
anr: make dialog disappear if the app dies
fixes #10514
Diffstat (limited to 'src/managers/ANRManager.cpp')
| -rw-r--r-- | src/managers/ANRManager.cpp | 16 |
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); } |
