mirror of
https://github.com/hyprwm/hyprlock.git
synced 2024-11-16 23:05:58 +01:00
parent
d45ffd53e7
commit
2fa0da47ab
2 changed files with 17 additions and 0 deletions
|
@ -293,6 +293,11 @@ static void handleUnlockSignal(int sig) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleCriticalSignal(int sig) {
|
||||||
|
g_pHyprlock->attemptRestoreOnDeath();
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
void CHyprlock::run() {
|
void CHyprlock::run() {
|
||||||
m_sWaylandState.registry = wl_display_get_registry(m_sWaylandState.display);
|
m_sWaylandState.registry = wl_display_get_registry(m_sWaylandState.display);
|
||||||
|
|
||||||
|
@ -332,6 +337,8 @@ void CHyprlock::run() {
|
||||||
lockSession();
|
lockSession();
|
||||||
|
|
||||||
signal(SIGUSR1, handleUnlockSignal);
|
signal(SIGUSR1, handleUnlockSignal);
|
||||||
|
signal(SIGSEGV, handleCriticalSignal);
|
||||||
|
signal(SIGABRT, handleCriticalSignal);
|
||||||
|
|
||||||
pollfd pollfds[] = {
|
pollfd pollfds[] = {
|
||||||
{
|
{
|
||||||
|
@ -346,6 +353,7 @@ void CHyprlock::run() {
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
Debug::log(CRIT, "[core] Polling fds failed with {}", errno);
|
Debug::log(CRIT, "[core] Polling fds failed with {}", errno);
|
||||||
|
attemptRestoreOnDeath();
|
||||||
m_bTerminate = true;
|
m_bTerminate = true;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -353,6 +361,7 @@ void CHyprlock::run() {
|
||||||
for (size_t i = 0; i < 1; ++i) {
|
for (size_t i = 0; i < 1; ++i) {
|
||||||
if (pollfds[i].revents & POLLHUP) {
|
if (pollfds[i].revents & POLLHUP) {
|
||||||
Debug::log(CRIT, "[core] Disconnected from pollfd id {}", i);
|
Debug::log(CRIT, "[core] Disconnected from pollfd id {}", i);
|
||||||
|
attemptRestoreOnDeath();
|
||||||
m_bTerminate = true;
|
m_bTerminate = true;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -872,4 +881,10 @@ std::string CHyprlock::spawnSync(const std::string& cmd) {
|
||||||
|
|
||||||
zwlr_screencopy_manager_v1* CHyprlock::getScreencopy() {
|
zwlr_screencopy_manager_v1* CHyprlock::getScreencopy() {
|
||||||
return m_sWaylandState.screencopy;
|
return m_sWaylandState.screencopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CHyprlock::attemptRestoreOnDeath() {
|
||||||
|
// dirty hack
|
||||||
|
spawnSync("hyprctl keyword misc:allow_session_lock_restore true");
|
||||||
|
spawnAsync("sleep 2 && hyprlock & disown");
|
||||||
}
|
}
|
|
@ -43,6 +43,8 @@ class CHyprlock {
|
||||||
void lockSession();
|
void lockSession();
|
||||||
void unlockSession();
|
void unlockSession();
|
||||||
|
|
||||||
|
void attemptRestoreOnDeath();
|
||||||
|
|
||||||
void spawnAsync(const std::string& cmd);
|
void spawnAsync(const std::string& cmd);
|
||||||
std::string spawnSync(const std::string& cmd);
|
std::string spawnSync(const std::string& cmd);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue