mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-26 06:05:59 +01:00
Fix a crash with setting title
This commit is contained in:
parent
8fe1cec87c
commit
c58b15c6da
3 changed files with 28 additions and 11 deletions
|
@ -89,6 +89,9 @@ void Events::listener_destroyWindow(wl_listener* listener, void* data) {
|
||||||
void Events::listener_setTitleWindow(wl_listener* listener, void* data) {
|
void Events::listener_setTitleWindow(wl_listener* listener, void* data) {
|
||||||
CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_setTitleWindow);
|
CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_setTitleWindow);
|
||||||
|
|
||||||
|
if (!g_pCompositor->windowValidMapped(PWINDOW))
|
||||||
|
return;
|
||||||
|
|
||||||
PWINDOW->m_szTitle = g_pXWaylandManager->getTitle(PWINDOW);
|
PWINDOW->m_szTitle = g_pXWaylandManager->getTitle(PWINDOW);
|
||||||
|
|
||||||
Debug::log(LOG, "Window %x set title to %s", PWINDOW, PWINDOW->m_szTitle.c_str());
|
Debug::log(LOG, "Window %x set title to %s", PWINDOW, PWINDOW->m_szTitle.c_str());
|
||||||
|
@ -188,4 +191,4 @@ void Events::listener_newSubsurfaceWindow(wl_listener* listener, void* data) {
|
||||||
const auto PSUBSURFACE = (wlr_subsurface*)data;
|
const auto PSUBSURFACE = (wlr_subsurface*)data;
|
||||||
|
|
||||||
createSubsurface(PWINDOW, PSUBSURFACE);
|
createSubsurface(PWINDOW, PSUBSURFACE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,17 +271,18 @@ void CHyprDwindleLayout::onBeginDragWindow() {
|
||||||
|
|
||||||
m_vBeginDragSizeXY = Vector2D();
|
m_vBeginDragSizeXY = Vector2D();
|
||||||
|
|
||||||
if (DRAGGINGWINDOW->m_bIsFullscreen) {
|
|
||||||
Debug::log(LOG, "Rejecting drag on a fullscreen window.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Window will be floating. Let's check if it's valid. It should be, but I don't like crashing.
|
// Window will be floating. Let's check if it's valid. It should be, but I don't like crashing.
|
||||||
if (!g_pCompositor->windowValidMapped(DRAGGINGWINDOW)) {
|
if (!g_pCompositor->windowValidMapped(DRAGGINGWINDOW)) {
|
||||||
Debug::log(ERR, "Dragging attempted on an invalid window!");
|
Debug::log(ERR, "Dragging attempted on an invalid window!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DRAGGINGWINDOW->m_bIsFullscreen) {
|
||||||
|
Debug::log(LOG, "Rejecting drag on a fullscreen window.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal();
|
m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal();
|
||||||
m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition;
|
m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition;
|
||||||
m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize;
|
m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize;
|
||||||
|
@ -400,4 +401,4 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow) {
|
||||||
// we need to fix XWayland windows by sending them to NARNIA
|
// we need to fix XWayland windows by sending them to NARNIA
|
||||||
// because otherwise they'd still be recieving mouse events
|
// because otherwise they'd still be recieving mouse events
|
||||||
g_pCompositor->fixXWaylandWindowsOnWorkspace(PMONITOR->activeWorkspace);
|
g_pCompositor->fixXWaylandWindowsOnWorkspace(PMONITOR->activeWorkspace);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,10 +49,23 @@ void CHyprXWaylandManager::getGeometryForWindow(CWindow* pWindow, wlr_box* pbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CHyprXWaylandManager::getTitle(CWindow* pWindow) {
|
std::string CHyprXWaylandManager::getTitle(CWindow* pWindow) {
|
||||||
if (pWindow->m_bIsX11)
|
if (pWindow->m_bIsX11) {
|
||||||
return pWindow->m_uSurface.xwayland->title;
|
if (pWindow->m_uSurface.xwayland) {
|
||||||
|
return pWindow->m_uSurface.xwayland->title;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pWindow->m_uSurface.xdg) {
|
||||||
|
if (pWindow->m_uSurface.xdg->toplevel) {
|
||||||
|
return pWindow->m_uSurface.xdg->toplevel->title;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
return pWindow->m_uSurface.xdg->toplevel->title;
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprXWaylandManager::sendCloseWindow(CWindow* pWindow) {
|
void CHyprXWaylandManager::sendCloseWindow(CWindow* pWindow) {
|
||||||
|
@ -114,4 +127,4 @@ void CHyprXWaylandManager::moveXWaylandWindow(CWindow* pWindow, const Vector2D&
|
||||||
if (pWindow->m_bIsX11) {
|
if (pWindow->m_bIsX11) {
|
||||||
wlr_xwayland_surface_configure(pWindow->m_uSurface.xwayland, pos.x, pos.y, pWindow->m_vRealSize.x, pWindow->m_vRealSize.y);
|
wlr_xwayland_surface_configure(pWindow->m_uSurface.xwayland, pos.x, pos.y, pWindow->m_vRealSize.x, pWindow->m_vRealSize.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue