summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuke Barkess <57995669+Brumus14@users.noreply.github.com>2025-12-14 17:19:35 +0000
committerGitHub <noreply@github.com>2025-12-14 17:19:35 +0000
commit6535ff07c9f16dbd4928f1ef8a12a939db59f7b5 (patch)
tree917747ade2f79ca6e4875363991709c799e282c0 /src
parent05ccbb2f2dc3121a48e9c1925357039b27d22a92 (diff)
anr: don't create for anr dialogs (#12601)
Diffstat (limited to 'src')
-rw-r--r--src/helpers/AsyncDialogBox.cpp4
-rw-r--r--src/helpers/AsyncDialogBox.hpp3
-rw-r--r--src/managers/ANRManager.cpp9
-rw-r--r--src/managers/ANRManager.hpp4
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;