diff --git a/hyprbars/barDeco.cpp b/hyprbars/barDeco.cpp index 52840fd..3824357 100644 --- a/hyprbars/barDeco.cpp +++ b/hyprbars/barDeco.cpp @@ -44,7 +44,6 @@ CHyprBar::CHyprBar(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow) { } CHyprBar::~CHyprBar() { - damageEntire(); HyprlandAPI::unregisterCallback(PHANDLE, m_pMouseButtonCallback); HyprlandAPI::unregisterCallback(PHANDLE, m_pTouchDownCallback); HyprlandAPI::unregisterCallback(PHANDLE, m_pTouchUpCallback); @@ -114,7 +113,7 @@ void CHyprBar::onTouchDown(SCallbackInfo& info, ITouch::SDownEvent e) { } void CHyprBar::onMouseMove(Vector2D coords) { - if (!m_bDragPending || m_bTouchEv) + if (!m_bDragPending || m_bTouchEv || !validMapped(m_pWindow)) return; m_bDragPending = false; @@ -122,7 +121,7 @@ void CHyprBar::onMouseMove(Vector2D coords) { } void CHyprBar::onTouchMove(SCallbackInfo& info, ITouch::SMotionEvent e) { - if (!m_bDragPending || !m_bTouchEv) + if (!m_bDragPending || !m_bTouchEv || !validMapped(m_pWindow)) return; g_pInputManager->mouseMoveUnified(e.timeMs); @@ -630,13 +629,14 @@ uint64_t CHyprBar::getDecorationFlags() { } CBox CHyprBar::assignedBoxGlobal() { - const auto PWINDOW = m_pWindow.lock(); + if (!validMapped(m_pWindow)) + return {}; - CBox box = m_bAssignedBox; - box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, PWINDOW)); + CBox box = m_bAssignedBox; + box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, m_pWindow.lock())); - const auto PWORKSPACE = PWINDOW->m_pWorkspace; - const auto WORKSPACEOFFSET = PWORKSPACE && !PWINDOW->m_bPinned ? PWORKSPACE->m_vRenderOffset->value() : Vector2D(); + const auto PWORKSPACE = m_pWindow->m_pWorkspace; + const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset->value() : Vector2D(); return box.translate(WORKSPACEOFFSET); } diff --git a/hyprbars/main.cpp b/hyprbars/main.cpp index 794f098..04ec92d 100644 --- a/hyprbars/main.cpp +++ b/hyprbars/main.cpp @@ -8,6 +8,8 @@ #include #include +#include + #include "barDeco.hpp" #include "globals.hpp" @@ -21,6 +23,9 @@ static void onNewWindow(void* self, std::any data) { const auto PWINDOW = std::any_cast(data); if (!PWINDOW->m_bX11DoesntWantBorders) { + if (std::ranges::any_of(PWINDOW->m_dWindowDecorations, [](const auto& d) { return d->getDisplayName() == "Hyprbar"; })) + return; + auto bar = makeUnique(PWINDOW); g_pGlobalState->bars.emplace_back(bar); bar->m_self = bar; @@ -118,7 +123,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { g_pGlobalState = makeUnique(); static auto P = HyprlandAPI::registerCallbackDynamic(PHANDLE, "openWindow", [&](void* self, SCallbackInfo& info, std::any data) { onNewWindow(self, data); }); - static auto P2 = HyprlandAPI::registerCallbackDynamic(PHANDLE, "closeWindow", [&](void* self, SCallbackInfo& info, std::any data) { onCloseWindow(self, data); }); + // static auto P2 = HyprlandAPI::registerCallbackDynamic(PHANDLE, "closeWindow", [&](void* self, SCallbackInfo& info, std::any data) { onCloseWindow(self, data); }); static auto P3 = HyprlandAPI::registerCallbackDynamic(PHANDLE, "windowUpdateRules", [&](void* self, SCallbackInfo& info, std::any data) { onUpdateWindowRules(std::any_cast(data)); });