aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-05-08 01:31:16 +0100
committerVaxry <[email protected]>2024-05-08 01:31:22 +0100
commit5e7925eaeba474cfc283e26b7aa3426ec97424f7 (patch)
treeb8cca3a9dc57c52dffc3acbe58dc3f86fe54b15a
parent57a12476deef1b3e9967896cd8b3676131193865 (diff)
downloadHyprland-5e7925eaeba474cfc283e26b7aa3426ec97424f7.tar.gz
Hyprland-5e7925eaeba474cfc283e26b7aa3426ec97424f7.zip
foreign-toplevel: bypass no activate focus checks
ref #5939 those are used by focus switchers so they should bypass stuff like focus_on_activate = false
-rw-r--r--src/desktop/Window.cpp4
-rw-r--r--src/desktop/Window.hpp2
-rw-r--r--src/protocols/ForeignToplevelWlr.cpp7
3 files changed, 6 insertions, 7 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 00066b27..e9e50a56 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1274,7 +1274,7 @@ std::unordered_map<std::string, std::string> CWindow::getEnv() {
return results;
}
-void CWindow::activate() {
+void CWindow::activate(bool force) {
static auto PFOCUSONACTIVATE = CConfigValue<Hyprlang::INT>("misc:focus_on_activate");
g_pEventManager->postEvent(SHyprIPCEvent{"urgent", std::format("{:x}", (uintptr_t)this)});
@@ -1282,7 +1282,7 @@ void CWindow::activate() {
m_bIsUrgent = true;
- if (!*PFOCUSONACTIVATE || (m_eSuppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE))
+ if (!force && (!*PFOCUSONACTIVATE || (m_eSuppressedEvents & SUPPRESS_ACTIVATE_FOCUSONLY) || (m_eSuppressedEvents & SUPPRESS_ACTIVATE)))
return;
if (m_bIsFloating)
diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp
index 40e5db49..ed79c896 100644
--- a/src/desktop/Window.hpp
+++ b/src/desktop/Window.hpp
@@ -422,7 +422,7 @@ class CWindow {
bool visibleOnMonitor(CMonitor* pMonitor);
int workspaceID();
bool onSpecialWorkspace();
- void activate();
+ void activate(bool force = false);
int getRealBorderSize();
void updateSpecialRenderData();
diff --git a/src/protocols/ForeignToplevelWlr.cpp b/src/protocols/ForeignToplevelWlr.cpp
index 38d7a38d..1762ad2a 100644
--- a/src/protocols/ForeignToplevelWlr.cpp
+++ b/src/protocols/ForeignToplevelWlr.cpp
@@ -17,10 +17,9 @@ CForeignToplevelHandleWlr::CForeignToplevelHandleWlr(SP<CZwlrForeignToplevelHand
if (!PWINDOW)
return;
- if (PWINDOW->m_eSuppressedEvents & SUPPRESS_ACTIVATE)
- return;
-
- PWINDOW->activate();
+ // these requests bypass the config'd stuff cuz it's usually like
+ // window switchers and shit
+ PWINDOW->activate(true);
});
resource->setSetFullscreen([this](CZwlrForeignToplevelHandleV1* p, wl_resource* output) {