diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-22 16:43:47 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-22 16:43:47 +0100 |
| commit | 2c714eace5bc903e5e9ef9e2c3048cb65a2ca9b4 (patch) | |
| tree | 86bfdb5bee027986ec410d1d2caf85217ca57a3f /src/events/Windows.cpp | |
| parent | 0d7d7a970dc047517ed4d3922c1da3638cb51aed (diff) | |
handle activate requests
Diffstat (limited to 'src/events/Windows.cpp')
| -rw-r--r-- | src/events/Windows.cpp | 35 |
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) { |
