mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-26 06:05:59 +01:00
Add an idleinhibit windowrule
This commit is contained in:
parent
b6e33830af
commit
a69fd21a1a
5 changed files with 52 additions and 1 deletions
|
@ -728,6 +728,8 @@ void CCompositor::focusWindow(CWindow* pWindow, wlr_surface* pSurface) {
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowFocusChange(nullptr);
|
g_pLayoutManager->getCurrentLayout()->onWindowFocusChange(nullptr);
|
||||||
|
|
||||||
m_pLastFocus = nullptr;
|
m_pLastFocus = nullptr;
|
||||||
|
|
||||||
|
g_pInputManager->recheckIdleInhibitorStatus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,7 +789,8 @@ void CCompositor::focusWindow(CWindow* pWindow, wlr_surface* pSurface) {
|
||||||
if (PCONSTRAINT)
|
if (PCONSTRAINT)
|
||||||
g_pInputManager->constrainMouse(m_sSeat.mouse, PCONSTRAINT);
|
g_pInputManager->constrainMouse(m_sSeat.mouse, PCONSTRAINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_pInputManager->recheckIdleInhibitorStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::focusSurface(wlr_surface* pSurface, CWindow* pWindowOwner) {
|
void CCompositor::focusSurface(wlr_surface* pSurface, CWindow* pWindowOwner) {
|
||||||
|
@ -1691,6 +1694,8 @@ void CCompositor::setWindowFullscreen(CWindow* pWindow, bool on, eFullscreenMode
|
||||||
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv(), true);
|
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv(), true);
|
||||||
|
|
||||||
forceReportSizesToWindowsOnWorkspace(pWindow->m_iWorkspaceID);
|
forceReportSizesToWindowsOnWorkspace(pWindow->m_iWorkspaceID);
|
||||||
|
|
||||||
|
g_pInputManager->recheckIdleInhibitorStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCompositor::moveUnmanagedX11ToWindows(CWindow* pWindow) {
|
void CCompositor::moveUnmanagedX11ToWindows(CWindow* pWindow) {
|
||||||
|
|
|
@ -7,6 +7,13 @@
|
||||||
#include "render/decorations/IHyprWindowDecoration.hpp"
|
#include "render/decorations/IHyprWindowDecoration.hpp"
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
|
enum eIdleInhibitMode {
|
||||||
|
IDLEINHIBIT_NONE = 0,
|
||||||
|
IDLEINHIBIT_ALWAYS,
|
||||||
|
IDLEINHIBIT_FULLSCREEN,
|
||||||
|
IDLEINHIBIT_FOCUS
|
||||||
|
};
|
||||||
|
|
||||||
struct SWindowSpecialRenderData {
|
struct SWindowSpecialRenderData {
|
||||||
float alpha = 1.f;
|
float alpha = 1.f;
|
||||||
float alphaInactive = -1.f; // -1 means unset
|
float alphaInactive = -1.f; // -1 means unset
|
||||||
|
@ -154,6 +161,9 @@ public:
|
||||||
uint64_t m_iLastToplevelMonitorID = -1;
|
uint64_t m_iLastToplevelMonitorID = -1;
|
||||||
uint64_t m_iLastSurfaceMonitorID = -1;
|
uint64_t m_iLastSurfaceMonitorID = -1;
|
||||||
|
|
||||||
|
// for idle inhibiting windows
|
||||||
|
eIdleInhibitMode m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
||||||
|
|
||||||
// For the list lookup
|
// For the list lookup
|
||||||
bool operator==(const CWindow& rhs) {
|
bool operator==(const CWindow& rhs) {
|
||||||
return m_uSurface.xdg == rhs.m_uSurface.xdg && m_uSurface.xwayland == rhs.m_uSurface.xwayland && m_vPosition == rhs.m_vPosition && m_vSize == rhs.m_vSize && m_bFadingOut == rhs.m_bFadingOut;
|
return m_uSurface.xdg == rhs.m_uSurface.xdg && m_uSurface.xwayland == rhs.m_uSurface.xwayland && m_vPosition == rhs.m_vPosition && m_vSize == rhs.m_vSize && m_bFadingOut == rhs.m_bFadingOut;
|
||||||
|
|
|
@ -756,6 +756,7 @@ bool windowRuleValid(const std::string& RULE) {
|
||||||
&& RULE.find("maxsize") != 0
|
&& RULE.find("maxsize") != 0
|
||||||
&& RULE.find("pseudo") != 0
|
&& RULE.find("pseudo") != 0
|
||||||
&& RULE.find("monitor") != 0
|
&& RULE.find("monitor") != 0
|
||||||
|
&& RULE.find("idleinhibit") != 0
|
||||||
&& RULE != "nofocus"
|
&& RULE != "nofocus"
|
||||||
&& RULE != "noblur"
|
&& RULE != "noblur"
|
||||||
&& RULE != "noshadow"
|
&& RULE != "noshadow"
|
||||||
|
|
|
@ -201,6 +201,20 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
} else if (r.szRule.find("animation") == 0) {
|
} else if (r.szRule.find("animation") == 0) {
|
||||||
auto STYLE = r.szRule.substr(r.szRule.find_first_of(' ') + 1);
|
auto STYLE = r.szRule.substr(r.szRule.find_first_of(' ') + 1);
|
||||||
PWINDOW->m_sAdditionalConfigData.animationStyle = STYLE;
|
PWINDOW->m_sAdditionalConfigData.animationStyle = STYLE;
|
||||||
|
} else if (r.szRule.find("idleinhibit") == 0) {
|
||||||
|
auto IDLERULE = r.szRule.substr(r.szRule.find_first_of(' ') + 1);
|
||||||
|
|
||||||
|
if (IDLERULE == "none") {
|
||||||
|
PWINDOW->m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
||||||
|
} else if (IDLERULE == "always") {
|
||||||
|
PWINDOW->m_eIdleInhibitMode = IDLEINHIBIT_ALWAYS;
|
||||||
|
} else if (IDLERULE == "focus") {
|
||||||
|
PWINDOW->m_eIdleInhibitMode = IDLEINHIBIT_FOCUS;
|
||||||
|
} else if (IDLERULE == "fullscreen") {
|
||||||
|
PWINDOW->m_eIdleInhibitMode = IDLEINHIBIT_FULLSCREEN;
|
||||||
|
} else {
|
||||||
|
Debug::log(ERR, "Rule idleinhibit: unknown mode %s", IDLERULE.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,27 @@ void CInputManager::recheckIdleInhibitorStatus() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check manual user-set inhibitors
|
||||||
|
for (auto& w : g_pCompositor->m_vWindows) {
|
||||||
|
if (w->m_eIdleInhibitMode == IDLEINHIBIT_NONE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (w->m_eIdleInhibitMode == IDLEINHIBIT_ALWAYS) {
|
||||||
|
wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (w->m_eIdleInhibitMode == IDLEINHIBIT_FOCUS && g_pCompositor->isWindowActive(w.get())) {
|
||||||
|
wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (w->m_eIdleInhibitMode == IDLEINHIBIT_FULLSCREEN && w->m_bIsFullscreen && g_pCompositor->isWorkspaceVisible(w->m_iWorkspaceID)) {
|
||||||
|
wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, true);
|
wlr_idle_set_enabled(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sSeat.seat, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
Loading…
Reference in a new issue