diff options
| author | Luke Barkess <57995669+Brumus14@users.noreply.github.com> | 2025-12-14 17:19:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-14 17:19:35 +0000 |
| commit | 6535ff07c9f16dbd4928f1ef8a12a939db59f7b5 (patch) | |
| tree | 917747ade2f79ca6e4875363991709c799e282c0 /src | |
| parent | 05ccbb2f2dc3121a48e9c1925357039b27d22a92 (diff) | |
anr: don't create for anr dialogs (#12601)
Diffstat (limited to 'src')
| -rw-r--r-- | src/helpers/AsyncDialogBox.cpp | 4 | ||||
| -rw-r--r-- | src/helpers/AsyncDialogBox.hpp | 3 | ||||
| -rw-r--r-- | src/managers/ANRManager.cpp | 9 | ||||
| -rw-r--r-- | src/managers/ANRManager.hpp | 4 |
4 files changed, 15 insertions, 5 deletions
diff --git a/src/helpers/AsyncDialogBox.cpp b/src/helpers/AsyncDialogBox.cpp index 6257dcb0..b3688680 100644 --- a/src/helpers/AsyncDialogBox.cpp +++ b/src/helpers/AsyncDialogBox.cpp @@ -147,6 +147,10 @@ bool CAsyncDialogBox::isRunning() const { return m_readEventSource; } +pid_t CAsyncDialogBox::getPID() const { + return m_dialogPid; +} + SP<CAsyncDialogBox> CAsyncDialogBox::lockSelf() { return m_selfWeakReference.lock(); } diff --git a/src/helpers/AsyncDialogBox.hpp b/src/helpers/AsyncDialogBox.hpp index 5f94be0d..8db516ce 100644 --- a/src/helpers/AsyncDialogBox.hpp +++ b/src/helpers/AsyncDialogBox.hpp @@ -26,6 +26,7 @@ class CAsyncDialogBox { SP<CPromise<std::string>> open(); void kill(); bool isRunning() const; + pid_t getPID() const; SP<CAsyncDialogBox> lockSelf(); @@ -51,4 +52,4 @@ class CAsyncDialogBox { // WARNING: cyclic reference. This will be removed once the event source is removed to avoid dangling pointers SP<CAsyncDialogBox> m_selfReference; WP<CAsyncDialogBox> m_selfWeakReference; -};
\ No newline at end of file +}; diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index daab4d0a..db7a245f 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -1,4 +1,5 @@ #include "ANRManager.hpp" + #include "../helpers/fs/FsUtils.hpp" #include "../debug/Log.hpp" #include "../macros.hpp" @@ -29,6 +30,10 @@ CANRManager::CANRManager() { auto window = std::any_cast<PHLWINDOW>(data); for (const auto& d : m_data) { + // Window is ANR dialog + if (d->isRunning() && d->dialogBox->getPID() == window->getPID()) + return; + if (d->fitsWindow(window)) return; } @@ -84,7 +89,7 @@ void CANRManager::onTick() { if (data->missedResponses >= *PANRTHRESHOLD) { if (!data->isRunning() && !data->dialogSaidWait) { - data->runDialog(firstWindow->m_title, firstWindow->m_class, data->getPid()); + data->runDialog(firstWindow->m_title, firstWindow->m_class, data->getPID()); for (const auto& w : g_pCompositor->m_windows) { if (!w->m_isMapped) @@ -240,7 +245,7 @@ bool CANRManager::SANRData::isDefunct() const { return xdgBase.expired() && xwaylandSurface.expired(); } -pid_t CANRManager::SANRData::getPid() const { +pid_t CANRManager::SANRData::getPID() const { if (xdgBase) { pid_t pid = 0; wl_client_get_credentials(xdgBase->client(), &pid, nullptr, nullptr); diff --git a/src/managers/ANRManager.hpp b/src/managers/ANRManager.hpp index 286e834f..3880249d 100644 --- a/src/managers/ANRManager.hpp +++ b/src/managers/ANRManager.hpp @@ -44,7 +44,7 @@ class CANRManager { void killDialog(); bool isDefunct() const; bool fitsWindow(PHLWINDOW pWindow) const; - pid_t getPid() const; + pid_t getPID() const; void ping(); }; @@ -57,4 +57,4 @@ class CANRManager { std::vector<SP<SANRData>> m_data; }; -inline UP<CANRManager> g_pANRManager;
\ No newline at end of file +inline UP<CANRManager> g_pANRManager; |
