mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-07 18:45:59 +01:00
internal: store matched windowrules and emit event
new event for plugins, windowUpdateRules
This commit is contained in:
parent
02bfb2857e
commit
56de72f357
4 changed files with 12 additions and 7 deletions
|
@ -1980,7 +1980,7 @@ bool windowRuleValid(const std::string& RULE) {
|
||||||
RULE == "nomaxsize" || RULE == "pin" || RULE == "noanim" || RULE == "dimaround" || RULE == "windowdance" || RULE == "maximize" || RULE == "keepaspectratio" ||
|
RULE == "nomaxsize" || RULE == "pin" || RULE == "noanim" || RULE == "dimaround" || RULE == "windowdance" || RULE == "maximize" || RULE == "keepaspectratio" ||
|
||||||
RULE.starts_with("animation") || RULE.starts_with("rounding") || RULE.starts_with("workspace") || RULE.starts_with("bordercolor") || RULE == "forcergbx" ||
|
RULE.starts_with("animation") || RULE.starts_with("rounding") || RULE.starts_with("workspace") || RULE.starts_with("bordercolor") || RULE == "forcergbx" ||
|
||||||
RULE == "noinitialfocus" || RULE == "stayfocused" || RULE.starts_with("bordersize") || RULE.starts_with("xray") || RULE.starts_with("center") ||
|
RULE == "noinitialfocus" || RULE == "stayfocused" || RULE.starts_with("bordersize") || RULE.starts_with("xray") || RULE.starts_with("center") ||
|
||||||
RULE.starts_with("group") || RULE == "immediate" || RULE == "nearestneighbor" || RULE.starts_with("suppressevent");
|
RULE.starts_with("group") || RULE == "immediate" || RULE == "nearestneighbor" || RULE.starts_with("suppressevent") || RULE.starts_with("plugin:");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool layerRuleValid(const std::string& RULE) {
|
bool layerRuleValid(const std::string& RULE) {
|
||||||
|
|
|
@ -748,11 +748,13 @@ void CWindow::updateDynamicRules() {
|
||||||
m_sAdditionalConfigData.nearestNeighbor = false;
|
m_sAdditionalConfigData.nearestNeighbor = false;
|
||||||
m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
||||||
|
|
||||||
const auto WINDOWRULES = g_pConfigManager->getMatchingRules(m_pSelf.lock());
|
m_vMatchedRules = g_pConfigManager->getMatchingRules(m_pSelf.lock());
|
||||||
for (auto& r : WINDOWRULES) {
|
for (auto& r : m_vMatchedRules) {
|
||||||
applyDynamicRule(r);
|
applyDynamicRule(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EMIT_HOOK_EVENT("windowUpdateRules", m_pSelf.lock());
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_iMonitorID);
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m_iMonitorID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -378,6 +378,9 @@ class CWindow {
|
||||||
|
|
||||||
bool m_bTearingHint = false;
|
bool m_bTearingHint = false;
|
||||||
|
|
||||||
|
// stores the currently matched window rules
|
||||||
|
std::vector<SWindowRule> m_vMatchedRules;
|
||||||
|
|
||||||
// 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 &&
|
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 &&
|
||||||
|
|
|
@ -144,8 +144,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// window rules
|
// window rules
|
||||||
const auto WINDOWRULES = g_pConfigManager->getMatchingRules(PWINDOW, false);
|
PWINDOW->m_vMatchedRules = g_pConfigManager->getMatchingRules(PWINDOW, false);
|
||||||
bool requestsFullscreen = PWINDOW->m_bWantsInitialFullscreen ||
|
bool requestsFullscreen = PWINDOW->m_bWantsInitialFullscreen ||
|
||||||
(!PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xdg->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL && PWINDOW->m_uSurface.xdg->toplevel->requested.fullscreen) ||
|
(!PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xdg->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL && PWINDOW->m_uSurface.xdg->toplevel->requested.fullscreen) ||
|
||||||
(PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xwayland->fullscreen);
|
(PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xwayland->fullscreen);
|
||||||
bool requestsFakeFullscreen = false;
|
bool requestsFakeFullscreen = false;
|
||||||
|
@ -153,7 +153,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
bool overridingNoFullscreen = false;
|
bool overridingNoFullscreen = false;
|
||||||
bool overridingNoMaximize = false;
|
bool overridingNoMaximize = false;
|
||||||
|
|
||||||
for (auto& r : WINDOWRULES) {
|
for (auto& r : PWINDOW->m_vMatchedRules) {
|
||||||
if (r.szRule.starts_with("monitor")) {
|
if (r.szRule.starts_with("monitor")) {
|
||||||
try {
|
try {
|
||||||
const auto MONITORSTR = removeBeginEndSpacesTabs(r.szRule.substr(r.szRule.find(' ')));
|
const auto MONITORSTR = removeBeginEndSpacesTabs(r.szRule.substr(r.szRule.find(' ')));
|
||||||
|
@ -343,7 +343,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
PWINDOW->m_bCreatedOverFullscreen = true;
|
PWINDOW->m_bCreatedOverFullscreen = true;
|
||||||
|
|
||||||
// size and move rules
|
// size and move rules
|
||||||
for (auto& r : WINDOWRULES) {
|
for (auto& r : PWINDOW->m_vMatchedRules) {
|
||||||
if (r.szRule.starts_with("size")) {
|
if (r.szRule.starts_with("size")) {
|
||||||
try {
|
try {
|
||||||
const auto VALUE = r.szRule.substr(r.szRule.find(' ') + 1);
|
const auto VALUE = r.szRule.substr(r.szRule.find(' ') + 1);
|
||||||
|
|
Loading…
Reference in a new issue