diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-28 19:18:10 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-28 19:18:10 +0100 |
| commit | f7174acc4850ac93feb291707de9d9861c9fab56 (patch) | |
| tree | 991cdb86a380bf26acc31b2ea74cb48b9558f550 /src/events/Windows.cpp | |
| parent | c2cd718e894f5ba9bba2a8ef7783204e9f3b62ea (diff) | |
minor fixes for xwayland refocus
Diffstat (limited to 'src/events/Windows.cpp')
| -rw-r--r-- | src/events/Windows.cpp | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index cf31a0f0..07835543 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -413,6 +413,8 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->hyprListener_activateX11.initCallback(&PWINDOW->m_uSurface.xwayland->events.request_activate, &Events::listener_activateX11, PWINDOW, "XWayland Window Late"); PWINDOW->hyprListener_configureX11.initCallback(&PWINDOW->m_uSurface.xwayland->events.request_configure, &Events::listener_configureX11, PWINDOW, "XWayland Window Late"); PWINDOW->hyprListener_setTitleWindow.initCallback(&PWINDOW->m_uSurface.xwayland->events.set_title, &Events::listener_setTitleWindow, PWINDOW, "XWayland Window Late"); + PWINDOW->hyprListener_requestMinimize.initCallback(&PWINDOW->m_uSurface.xwayland->events.request_minimize, &Events::listener_requestMinimize, PWINDOW, "Xwayland Window Late"); + PWINDOW->hyprListener_requestMinimize.initCallback(&PWINDOW->m_uSurface.xwayland->events.request_maximize, &Events::listener_requestMaximize, PWINDOW, "Xwayland Window Late"); if (PWINDOW->m_iX11Type == 2) PWINDOW->hyprListener_setGeometryX11U.initCallback(&PWINDOW->m_uSurface.xwayland->events.set_geometry, &Events::listener_unmanagedSetGeometry, PWINDOW, "XWayland Window Late"); @@ -548,6 +550,8 @@ void Events::listener_unmapWindow(void* owner, void* data) { PWINDOW->hyprListener_configureX11.removeCallback(); PWINDOW->hyprListener_setTitleWindow.removeCallback(); PWINDOW->hyprListener_setGeometryX11U.removeCallback(); + PWINDOW->hyprListener_requestMaximize.removeCallback(); + PWINDOW->hyprListener_requestMinimize.removeCallback(); } if (PWINDOW->m_bIsFullscreen) { @@ -714,14 +718,15 @@ void Events::listener_fullscreenWindow(void* owner, void* data) { wlr_xdg_surface_schedule_configure(PWINDOW->m_uSurface.xdg); } else { - g_pCompositor->setWindowFullscreen(PWINDOW, !PWINDOW->m_bIsFullscreen, FULLSCREEN_FULL); + if (!PWINDOW->m_uSurface.xwayland->mapped) + return; + + g_pCompositor->setWindowFullscreen(PWINDOW, PWINDOW->m_uSurface.xwayland->fullscreen, FULLSCREEN_FULL); } PWINDOW->updateToplevel(); Debug::log(LOG, "Window %x fullscreen to %i", PWINDOW, PWINDOW->m_bIsFullscreen); - - g_pXWaylandManager->setWindowFullscreen(PWINDOW, PWINDOW->m_bIsFullscreen); } void Events::listener_activateXDG(wl_listener* listener, void* data) { @@ -775,7 +780,7 @@ void Events::listener_configureX11(void* owner, void* data) { return; } - if (!PWINDOW->m_uSurface.xwayland->mapped) { + if (!PWINDOW->m_uSurface.xwayland->mapped || !PWINDOW->m_bMappedX11) { wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height); return; } @@ -882,15 +887,35 @@ void Events::listener_NewXDGDeco(wl_listener* listener, void* data) { void Events::listener_requestMaximize(void* owner, void* data) { const auto PWINDOW = (CWindow*)owner; - const auto EV = (wlr_foreign_toplevel_handle_v1_maximized_event*)data; + Debug::log(LOG, "Maximize request for %x", PWINDOW); - g_pCompositor->setWindowFullscreen(PWINDOW, EV ? EV->maximized : !PWINDOW->m_bIsFullscreen, FULLSCREEN_MAXIMIZED); // this will be rejected if there already is a fullscreen window - - wlr_xdg_surface_schedule_configure(PWINDOW->m_uSurface.xdg); + if (!PWINDOW->m_bIsX11) { + const auto EV = (wlr_foreign_toplevel_handle_v1_maximized_event*)data; + + g_pCompositor->setWindowFullscreen(PWINDOW, EV ? EV->maximized : !PWINDOW->m_bIsFullscreen, FULLSCREEN_MAXIMIZED); // this will be rejected if there already is a fullscreen window + + wlr_xdg_surface_schedule_configure(PWINDOW->m_uSurface.xdg); + } else { + if (!PWINDOW->m_bMappedX11 || PWINDOW->m_iX11Type != 1) + return; + + g_pCompositor->setWindowFullscreen(PWINDOW, !PWINDOW->m_bIsFullscreen, FULLSCREEN_MAXIMIZED); + } } void Events::listener_requestMinimize(void* owner, void* data) { - // ignore + const auto PWINDOW = (CWindow*)owner; + + Debug::log(LOG, "Minimize request for %x", PWINDOW); + + // if (PWINDOW->m_bIsX11) { + // if (!PWINDOW->m_bMappedX11 || PWINDOW->m_iX11Type != 1) + // return; + + // const auto E = (wlr_xwayland_minimize_event*)data; + + // wlr_xwayland_surface_set_minimized(PWINDOW->m_uSurface.xwayland, E->minimize && g_pCompositor->m_pLastWindow != PWINDOW); // fucking DXVK + // } } void Events::listener_requestMove(void* owner, void* data) { |
