summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-10-22 16:43:47 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-10-22 16:43:47 +0100
commit2c714eace5bc903e5e9ef9e2c3048cb65a2ca9b4 (patch)
tree86bfdb5bee027986ec410d1d2caf85217ca57a3f /src/events/Windows.cpp
parent0d7d7a970dc047517ed4d3922c1da3638cb51aed (diff)
handle activate requests
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 8519716f..c0b5ff80 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -688,16 +688,39 @@ void Events::listener_fullscreenWindow(void* owner, void* data) {
g_pXWaylandManager->setWindowFullscreen(PWINDOW, PWINDOW->m_bIsFullscreen);
}
-void Events::listener_activate(void* owner, void* data) {
- // TODO
+void Events::listener_activateXDG(wl_listener* listener, void* data) {
+ const auto E = (wlr_xdg_activation_v1_request_activate_event*)data;
+
+ static auto *const PFOCUSONACTIVATE = &g_pConfigManager->getConfigValuePtr("misc:focus_on_activate")->intValue;
+
+ Debug::log(LOG, "Activate request for surface at %x", E->surface);
+
+ if (!*PFOCUSONACTIVATE || !wlr_surface_is_xdg_surface(E->surface))
+ return;
+
+ const auto PWINDOW = g_pCompositor->getWindowFromSurface(E->surface);
+
+ if (!PWINDOW)
+ return;
+
+ g_pCompositor->focusWindow(PWINDOW);
+ Vector2D middle = PWINDOW->m_vRealPosition.goalv() + PWINDOW->m_vRealSize.goalv() / 2.f;
+ g_pCompositor->warpCursorTo(middle);
}
void Events::listener_activateX11(void* owner, void* data) {
- CWindow* PWINDOW = (CWindow*)owner;
+ const auto PWINDOW = (CWindow*)owner;
- if (PWINDOW->m_iX11Type == 1 /* Managed */) {
- wlr_xwayland_surface_activate(PWINDOW->m_uSurface.xwayland, 1);
- }
+ static auto *const PFOCUSONACTIVATE = &g_pConfigManager->getConfigValuePtr("misc:focus_on_activate")->intValue;
+
+ Debug::log(LOG, "X11 Activate request for window %x", PWINDOW);
+
+ if (!*PFOCUSONACTIVATE || PWINDOW->m_iX11Type != 1)
+ return;
+
+ g_pCompositor->focusWindow(PWINDOW);
+ Vector2D middle = PWINDOW->m_vRealPosition.goalv() + PWINDOW->m_vRealSize.goalv() / 2.f;
+ g_pCompositor->warpCursorTo(middle);
}
void Events::listener_configureX11(void* owner, void* data) {