2025-02-18 15:10:40 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "../helpers/memory/Memory.hpp"
|
|
|
|
|
#include "../desktop/DesktopTypes.hpp"
|
|
|
|
|
#include <chrono>
|
|
|
|
|
#include <hyprutils/os/Process.hpp>
|
|
|
|
|
#include <hyprutils/os/FileDescriptor.hpp>
|
|
|
|
|
#include "./eventLoop/EventLoopTimer.hpp"
|
|
|
|
|
#include "../helpers/signal/Signal.hpp"
|
2025-04-06 17:31:58 +02:00
|
|
|
#include "../helpers/AsyncDialogBox.hpp"
|
2025-02-21 21:26:53 +01:00
|
|
|
#include <vector>
|
2025-02-18 15:10:40 +00:00
|
|
|
|
|
|
|
|
class CXDGWMBase;
|
2025-02-21 21:26:53 +01:00
|
|
|
class CXWaylandSurface;
|
2025-02-18 15:10:40 +00:00
|
|
|
|
|
|
|
|
class CANRManager {
|
|
|
|
|
public:
|
|
|
|
|
CANRManager();
|
|
|
|
|
|
|
|
|
|
void onResponse(SP<CXDGWMBase> wmBase);
|
2025-02-21 21:26:53 +01:00
|
|
|
void onResponse(SP<CXWaylandSurface> xwaylandSurface);
|
|
|
|
|
bool isNotResponding(PHLWINDOW pWindow);
|
2025-02-18 15:10:40 +00:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
bool m_active = false;
|
|
|
|
|
SP<CEventLoopTimer> m_timer;
|
|
|
|
|
|
|
|
|
|
void onTick();
|
|
|
|
|
|
|
|
|
|
struct SANRData {
|
2025-02-21 21:26:53 +01:00
|
|
|
SANRData(PHLWINDOW pWindow);
|
2025-02-18 15:10:40 +00:00
|
|
|
~SANRData();
|
|
|
|
|
|
2025-04-06 17:31:58 +02:00
|
|
|
WP<CXWaylandSurface> xwaylandSurface;
|
|
|
|
|
WP<CXDGWMBase> xdgBase;
|
|
|
|
|
|
|
|
|
|
int missedResponses = 0;
|
|
|
|
|
|
|
|
|
|
bool dialogSaidWait = false;
|
|
|
|
|
SP<CAsyncDialogBox> dialogBox;
|
|
|
|
|
|
2025-11-16 14:51:14 +00:00
|
|
|
void runDialog(const std::string& appName, const std::string appClass, pid_t dialogWmPID);
|
2025-04-06 17:31:58 +02:00
|
|
|
bool isRunning();
|
|
|
|
|
void killDialog();
|
|
|
|
|
bool isDefunct() const;
|
|
|
|
|
bool fitsWindow(PHLWINDOW pWindow) const;
|
|
|
|
|
pid_t getPid() const;
|
|
|
|
|
void ping();
|
2025-02-18 15:10:40 +00:00
|
|
|
};
|
|
|
|
|
|
2025-02-21 21:26:53 +01:00
|
|
|
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;
|
2025-02-18 15:10:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
inline UP<CANRManager> g_pANRManager;
|