summaryrefslogtreecommitdiff
path: root/src/managers/ANRManager.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-02-21 21:26:53 +0100
committerGitHub <noreply@github.com>2025-02-21 21:26:53 +0100
commitf4b148df1e2d8edc96bd878a4cfde32ca6515ac8 (patch)
treec8c4976280c0bbf450b572df33f312bdb6caab44 /src/managers/ANRManager.hpp
parent0e24f9c0d55fcd9a5b2461a865d0e5dc2ea195c8 (diff)
anr: add xwayland support (#9456)
Adds XWayland support to ANR dialogs
Diffstat (limited to 'src/managers/ANRManager.hpp')
-rw-r--r--src/managers/ANRManager.hpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/managers/ANRManager.hpp b/src/managers/ANRManager.hpp
index 7d67e872..26319776 100644
--- a/src/managers/ANRManager.hpp
+++ b/src/managers/ANRManager.hpp
@@ -5,20 +5,22 @@
#include <chrono>
#include <hyprutils/os/Process.hpp>
#include <hyprutils/os/FileDescriptor.hpp>
-#include <map>
#include "./eventLoop/EventLoopTimer.hpp"
#include "../helpers/signal/Signal.hpp"
#include <atomic>
#include <thread>
+#include <vector>
class CXDGWMBase;
+class CXWaylandSurface;
class CANRManager {
public:
CANRManager();
void onResponse(SP<CXDGWMBase> wmBase);
- bool isNotResponding(SP<CXDGWMBase> wmBase);
+ void onResponse(SP<CXWaylandSurface> xwaylandSurface);
+ bool isNotResponding(PHLWINDOW pWindow);
private:
bool m_active = false;
@@ -27,8 +29,12 @@ class CANRManager {
void onTick();
struct SANRData {
+ SANRData(PHLWINDOW pWindow);
~SANRData();
+ WP<CXWaylandSurface> xwaylandSurface;
+ WP<CXDGWMBase> xdgBase;
+
int missedResponses = 0;
std::thread dialogThread;
SP<Hyprutils::OS::CProcess> dialogProc;
@@ -38,9 +44,19 @@ class CANRManager {
void runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID);
bool isThreadRunning();
void killDialog() const;
+ bool isDefunct() const;
+ bool fitsWindow(PHLWINDOW pWindow) const;
+ pid_t getPid() const;
+ void ping();
};
- std::map<WP<CXDGWMBase>, SP<SANRData>> m_data;
+ void onResponse(SP<SANRData> data);
+ bool isNotResponding(SP<SANRData> data);
+ SP<SANRData> dataFor(PHLWINDOW pWindow);
+ SP<SANRData> dataFor(SP<CXDGWMBase> wmBase);
+ SP<SANRData> dataFor(SP<CXWaylandSurface> pXwaylandSurface);
+
+ std::vector<SP<SANRData>> m_data;
};
inline UP<CANRManager> g_pANRManager; \ No newline at end of file