managers: refactor class member vars (#10242)

This commit is contained in:
davc0n 2025-05-02 17:07:20 +02:00 committed by GitHub
parent 6f174a9e08
commit ce821294e2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 930 additions and 932 deletions

View file

@ -93,8 +93,8 @@ static void handleUnrecoverableSignal(int sig) {
signal(SIGABRT, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
if (g_pHookSystem && g_pHookSystem->m_bCurrentEventPlugin) {
longjmp(g_pHookSystem->m_jbHookFaultJumpBuf, 1);
if (g_pHookSystem && g_pHookSystem->m_currentEventPlugin) {
longjmp(g_pHookSystem->m_hookFaultJumpBuf, 1);
return;
}
@ -1132,7 +1132,7 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP<CWLSurfaceResource> pSurface
return;
}
if (m_lastWindow.lock() == pWindow && g_pSeatManager->state.keyboardFocus == pSurface && g_pSeatManager->state.keyboardFocus)
if (m_lastWindow.lock() == pWindow && g_pSeatManager->m_state.keyboardFocus == pSurface && g_pSeatManager->m_state.keyboardFocus)
return;
if (pWindow->m_pinned)
@ -1216,13 +1216,13 @@ void CCompositor::focusWindow(PHLWINDOW pWindow, SP<CWLSurfaceResource> pSurface
void CCompositor::focusSurface(SP<CWLSurfaceResource> pSurface, PHLWINDOW pWindowOwner) {
if (g_pSeatManager->state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->state.keyboardFocus == pWindowOwner->m_wlSurface->resource()))
if (g_pSeatManager->m_state.keyboardFocus == pSurface || (pWindowOwner && g_pSeatManager->m_state.keyboardFocus == pWindowOwner->m_wlSurface->resource()))
return; // Don't focus when already focused on this.
if (g_pSessionLockManager->isSessionLocked() && pSurface && !g_pSessionLockManager->isSurfaceSessionLock(pSurface))
return;
if (g_pSeatManager->seatGrab && !g_pSeatManager->seatGrab->accepts(pSurface)) {
if (g_pSeatManager->m_seatGrab && !g_pSeatManager->m_seatGrab->accepts(pSurface)) {
Debug::log(LOG, "surface {:x} won't receive kb focus becuase grab rejected it", (uintptr_t)pSurface.get());
return;
}
@ -1242,7 +1242,7 @@ void CCompositor::focusSurface(SP<CWLSurfaceResource> pSurface, PHLWINDOW pWindo
return;
}
if (g_pSeatManager->keyboard)
if (g_pSeatManager->m_keyboard)
g_pSeatManager->setKeyboardFocus(pSurface);
if (pWindowOwner)

View file

@ -2359,9 +2359,9 @@ std::optional<std::string> CConfigManager::handleBind(const std::string& command
// to lower
std::transform(HANDLER.begin(), HANDLER.end(), HANDLER.begin(), ::tolower);
const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(HANDLER);
const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(HANDLER);
if (DISPATCHER == g_pKeybindManager->m_mDispatchers.end()) {
if (DISPATCHER == g_pKeybindManager->m_dispatchers.end()) {
Debug::log(ERR, "Invalid dispatcher: {}", HANDLER);
return "Invalid dispatcher, requested \"" + HANDLER + "\" does not exist";
}

View file

@ -866,7 +866,7 @@ static std::string globalShortcutsRequest(eHyprCtlOutputFormat format, std::stri
static std::string bindsRequest(eHyprCtlOutputFormat format, std::string request) {
std::string ret = "";
if (format == eHyprCtlOutputFormat::FORMAT_NORMAL) {
for (auto const& kb : g_pKeybindManager->m_vKeybinds) {
for (auto const& kb : g_pKeybindManager->m_keybinds) {
ret += "bind";
if (kb->locked)
ret += "l";
@ -887,7 +887,7 @@ static std::string bindsRequest(eHyprCtlOutputFormat format, std::string request
} else {
// json
ret += "[";
for (auto const& kb : g_pKeybindManager->m_vKeybinds) {
for (auto const& kb : g_pKeybindManager->m_keybinds) {
ret += std::format(
R"#(
{{
@ -1076,8 +1076,8 @@ static std::string dispatchRequest(eHyprCtlOutputFormat format, std::string in)
if ((int)in.find_first_of(' ') != -1)
DISPATCHARG = in.substr(in.find_first_of(' ') + 1);
const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(DISPATCHSTR);
if (DISPATCHER == g_pKeybindManager->m_mDispatchers.end())
const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(DISPATCHSTR);
if (DISPATCHER == g_pKeybindManager->m_dispatchers.end())
return "Invalid dispatcher";
SDispatchResult res = DISPATCHER->second(DISPATCHARG);
@ -1352,7 +1352,7 @@ static std::string dispatchSeterror(eHyprCtlOutputFormat format, std::string req
}
static std::string dispatchSetProp(eHyprCtlOutputFormat format, std::string request) {
auto result = g_pKeybindManager->m_mDispatchers["setprop"](request.substr(request.find_first_of(' ') + 1));
auto result = g_pKeybindManager->m_dispatchers["setprop"](request.substr(request.find_first_of(' ') + 1));
return "DEPRECATED: use hyprctl dispatch setprop instead" + (result.success ? "" : "\n" + result.error);
}

View file

@ -62,7 +62,7 @@ void CHyprMonitorDebugOverlay::frameData(PHLMONITOR pMonitor) {
if (m_lastAnimationTicks.size() > (long unsigned int)PMONITORFORTICKS->m_refreshRate)
m_lastAnimationTicks.pop_front();
m_lastAnimationTicks.push_back(g_pAnimationManager->m_fLastTickTime);
m_lastAnimationTicks.push_back(g_pAnimationManager->m_lastTickTimeMs);
}
}

View file

@ -163,7 +163,7 @@ void CLayerSurface::onMap() {
const bool GRABSFOCUS = ISEXCLUSIVE ||
(m_layerSurface->current.interactivity != ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE &&
// don't focus if constrained
(g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained()));
(g_pSeatManager->m_mouse.expired() || !g_pInputManager->isConstrained()));
if (GRABSFOCUS) {
// TODO: use the new superb really very cool grab
@ -231,7 +231,7 @@ void CLayerSurface::onUnmap() {
const auto PMONITOR = m_monitor.lock();
const bool WASLASTFOCUS = g_pSeatManager->state.keyboardFocus == m_surface->resource() || g_pSeatManager->state.pointerFocus == m_surface->resource();
const bool WASLASTFOCUS = g_pSeatManager->m_state.keyboardFocus == m_surface->resource() || g_pSeatManager->m_state.pointerFocus == m_surface->resource();
if (!PMONITOR)
return;
@ -333,12 +333,12 @@ void CLayerSurface::onCommit() {
if (m_mapped && (m_layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) {
bool WASLASTFOCUS = false;
m_layerSurface->surface->breadthfirst(
[&WASLASTFOCUS](SP<CWLSurfaceResource> surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->state.keyboardFocus == surf; },
[&WASLASTFOCUS](SP<CWLSurfaceResource> surf, const Vector2D& offset, void* data) { WASLASTFOCUS = WASLASTFOCUS || g_pSeatManager->m_state.keyboardFocus == surf; },
nullptr);
if (!WASLASTFOCUS && m_popupHead) {
m_popupHead->breadthfirst(
[&WASLASTFOCUS](WP<CPopup> popup, void* data) {
WASLASTFOCUS = WASLASTFOCUS || (popup->m_wlSurface && g_pSeatManager->state.keyboardFocus == popup->m_wlSurface->resource());
WASLASTFOCUS = WASLASTFOCUS || (popup->m_wlSurface && g_pSeatManager->m_state.keyboardFocus == popup->m_wlSurface->resource());
},
nullptr);
}

View file

@ -945,13 +945,13 @@ void CWindow::destroyGroup() {
w->m_groupData.head = false;
}
const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked;
g_pKeybindManager->m_bGroupsLocked = true;
const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked;
g_pKeybindManager->m_groupsLocked = true;
for (auto const& w : members) {
g_pLayoutManager->getCurrentLayout()->onWindowCreated(w);
w->updateWindowDecos();
}
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV;
if (m_workspace) {
m_workspace->updateWindows();
@ -1000,7 +1000,7 @@ bool CWindow::canBeGroupedInto(PHLWINDOW pWindow) {
static auto ALLOWGROUPMERGE = CConfigValue<Hyprlang::INT>("group:merge_groups_on_drag");
bool isGroup = m_groupData.pNextWindow;
bool disallowDragIntoGroup = g_pInputManager->m_wasDraggingWindow && isGroup && !bool(*ALLOWGROUPMERGE);
return !g_pKeybindManager->m_bGroupsLocked // global group lock disengaged
return !g_pKeybindManager->m_groupsLocked // global group lock disengaged
&& ((m_groupRules & GROUP_INVADE && m_firstMap) // window ignore local group locks, or
|| (!pWindow->getGroupHead()->m_groupData.locked // target unlocked
&& !(m_groupData.pNextWindow.lock() && getGroupHead()->m_groupData.locked))) // source unlocked or isn't group

View file

@ -169,7 +169,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
const auto PMONITORFROMID = PWINDOW->m_monitor.lock();
if (PWINDOW->m_monitor != PMONITOR) {
g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID()));
g_pKeybindManager->m_dispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID()));
PMONITOR = PMONITORFROMID;
}
PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace;
@ -363,7 +363,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
if (pWorkspace->m_isSpecialWorkspace)
pWorkspace->m_monitor->setSpecialWorkspace(pWorkspace);
else if (PMONITOR->activeWorkspaceID() != REQUESTEDWORKSPACEID && !PWINDOW->m_noInitialFocus)
g_pKeybindManager->m_mDispatchers["workspace"](requestedWorkspaceName);
g_pKeybindManager->m_dispatchers["workspace"](requestedWorkspaceName);
PMONITOR = g_pCompositor->m_lastMonitor.lock();
}
@ -382,7 +382,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
const auto PMONITORFROMID = PWINDOW->m_monitor.lock();
if (PWINDOW->m_monitor != PMONITOR) {
g_pKeybindManager->m_mDispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID()));
g_pKeybindManager->m_dispatchers["focusmonitor"](std::to_string(PWINDOW->monitorID()));
PMONITOR = PMONITORFROMID;
}
PWINDOW->m_workspace = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace;
@ -690,7 +690,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
g_pCompositor->setPreferredScaleForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_scale);
g_pCompositor->setPreferredTransformForSurface(PWINDOW->m_wlSurface->resource(), PMONITOR->m_transform);
if (g_pSeatManager->mouse.expired() || !g_pInputManager->isConstrained())
if (g_pSeatManager->m_mouse.expired() || !g_pInputManager->isConstrained())
g_pInputManager->sendMotionEventsToFocused();
// fix some xwayland apps that don't behave nicely
@ -871,19 +871,19 @@ void Events::listener_commitWindow(void* owner, void* data) {
const auto PMONITOR = PWINDOW->m_monitor.lock();
if (PMONITOR)
PMONITOR->debugLastPresentation(g_pSeatManager->isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow");
PMONITOR->debugLastPresentation(g_pSeatManager->m_isPointerFrameCommit ? "listener_commitWindow skip" : "listener_commitWindow");
if (g_pSeatManager->isPointerFrameCommit) {
g_pSeatManager->isPointerFrameSkipped = false;
g_pSeatManager->isPointerFrameCommit = false;
if (g_pSeatManager->m_isPointerFrameCommit) {
g_pSeatManager->m_isPointerFrameSkipped = false;
g_pSeatManager->m_isPointerFrameCommit = false;
} else
g_pHyprRenderer->damageSurface(PWINDOW->m_wlSurface->resource(), PWINDOW->m_realPosition->goal().x, PWINDOW->m_realPosition->goal().y,
PWINDOW->m_isX11 ? 1.0 / PWINDOW->m_X11SurfaceScaledBy : 1.0);
if (g_pSeatManager->isPointerFrameSkipped) {
if (g_pSeatManager->m_isPointerFrameSkipped) {
g_pPointerManager->sendStoredMovement();
g_pSeatManager->sendPointerFrame();
g_pSeatManager->isPointerFrameCommit = true;
g_pSeatManager->m_isPointerFrameCommit = true;
}
if (!PWINDOW->m_isX11) {

View file

@ -1174,7 +1174,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
return 0;
if (header.pWindow->m_isFloating) {
g_pKeybindManager->m_mDispatchers["swapnext"]("");
g_pKeybindManager->m_dispatchers["swapnext"]("");
return 0;
}
@ -1191,7 +1191,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
return 0;
if (header.pWindow->m_isFloating) {
g_pKeybindManager->m_mDispatchers["swapnext"]("prev");
g_pKeybindManager->m_dispatchers["swapnext"]("prev");
return 0;
}
@ -1296,7 +1296,7 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri
} else if (command == "orientationcycle") {
runOrientationCycle(header, &vars, 1);
} else if (command == "mfact") {
g_pKeybindManager->m_mDispatchers["splitratio"](vars[1] + " " + vars[2]);
g_pKeybindManager->m_dispatchers["splitratio"](vars[1] + " " + vars[2]);
} else if (command == "rollnext") {
const auto PWINDOW = header.pWindow;
const auto PNODE = getNodeFromWindow(PWINDOW);

View file

@ -33,9 +33,9 @@ static int wlTick(SP<CEventLoopTimer> self, void* data) {
}
CHyprAnimationManager::CHyprAnimationManager() {
m_pAnimationTimer = SP<CEventLoopTimer>(new CEventLoopTimer(std::chrono::microseconds(500), wlTick, nullptr));
m_animationTimer = SP<CEventLoopTimer>(new CEventLoopTimer(std::chrono::microseconds(500), wlTick, nullptr));
if (g_pEventLoopManager) // null in --verify-config mode
g_pEventLoopManager->addTimer(m_pAnimationTimer);
g_pEventLoopManager->addTimer(m_animationTimer);
addBezierWithName("linear", Vector2D(0.0, 0.0), Vector2D(1.0, 1.0));
}
@ -213,7 +213,7 @@ static void handleUpdate(CAnimatedVariable<VarType>& av, bool warp) {
void CHyprAnimationManager::tick() {
static std::chrono::time_point lastTick = std::chrono::high_resolution_clock::now();
m_fLastTickTime = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - lastTick).count() / 1000.0;
m_lastTickTimeMs = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - lastTick).count() / 1000.0;
lastTick = std::chrono::high_resolution_clock::now();
static auto PANIMENABLED = CConfigValue<Hyprlang::INT>("animations:enabled");
@ -250,15 +250,15 @@ void CHyprAnimationManager::tick() {
}
void CHyprAnimationManager::scheduleTick() {
if (m_bTickScheduled)
if (m_tickScheduled)
return;
m_bTickScheduled = true;
m_tickScheduled = true;
const auto PMOSTHZ = g_pHyprRenderer->m_pMostHzMonitor;
if (!PMOSTHZ) {
m_pAnimationTimer->updateTimeout(std::chrono::milliseconds(16));
m_animationTimer->updateTimeout(std::chrono::milliseconds(16));
return;
}
@ -268,11 +268,11 @@ void CHyprAnimationManager::scheduleTick() {
const auto TOPRES = std::clamp(refreshDelayMs - SINCEPRES, 1.1f, 1000.f); // we can't send 0, that will disarm it
m_pAnimationTimer->updateTimeout(std::chrono::milliseconds((int)std::floor(TOPRES)));
m_animationTimer->updateTimeout(std::chrono::milliseconds((int)std::floor(TOPRES)));
}
void CHyprAnimationManager::onTicked() {
m_bTickScheduled = false;
m_tickScheduled = false;
}
//

View file

@ -49,12 +49,12 @@ class CHyprAnimationManager : public Hyprutils::Animation::CAnimationManager {
std::string styleValidInConfigVar(const std::string&, const std::string&);
SP<CEventLoopTimer> m_pAnimationTimer;
SP<CEventLoopTimer> m_animationTimer;
float m_fLastTickTime; // in ms
float m_lastTickTimeMs;
private:
bool m_bTickScheduled = false;
bool m_tickScheduled = false;
// Anim stuff
void animationPopin(PHLWINDOW, bool close = false, float minPerc = 0.f);

View file

@ -69,45 +69,45 @@ void CCursorBuffer::endDataPtr() {
}
CCursorManager::CCursorManager() {
m_pHyprcursor = makeUnique<Hyprcursor::CHyprcursorManager>(m_szTheme.empty() ? nullptr : m_szTheme.c_str(), hcLogger);
m_pXcursor = makeUnique<CXCursorManager>();
m_hyprcursor = makeUnique<Hyprcursor::CHyprcursorManager>(m_theme.empty() ? nullptr : m_theme.c_str(), hcLogger);
m_xcursor = makeUnique<CXCursorManager>();
static auto PUSEHYPRCURSOR = CConfigValue<Hyprlang::INT>("cursor:enable_hyprcursor");
if (m_pHyprcursor->valid() && *PUSEHYPRCURSOR) {
if (m_hyprcursor->valid() && *PUSEHYPRCURSOR) {
// find default size. First, HYPRCURSOR_SIZE then default to 24
auto const* SIZE = getenv("HYPRCURSOR_SIZE");
if (SIZE) {
try {
m_iSize = std::stoi(SIZE);
m_size = std::stoi(SIZE);
} catch (...) { ; }
}
if (m_iSize <= 0) {
if (m_size <= 0) {
Debug::log(WARN, "HYPRCURSOR_SIZE size not set, defaulting to size 24");
m_iSize = 24;
m_size = 24;
}
} else {
Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to Xcursor.", m_szTheme);
Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to Xcursor.", m_theme);
auto const* SIZE = getenv("XCURSOR_SIZE");
if (SIZE) {
try {
m_iSize = std::stoi(SIZE);
m_size = std::stoi(SIZE);
} catch (...) { ; }
}
if (m_iSize <= 0) {
if (m_size <= 0) {
Debug::log(WARN, "XCURSOR_SIZE size not set, defaulting to size 24");
m_iSize = 24;
m_size = 24;
}
}
// since we fallback to xcursor always load it on startup. otherwise we end up with a empty theme if hyprcursor is enabled in the config
// and then later is disabled.
m_pXcursor->loadTheme(getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default", m_iSize, m_fCursorScale);
m_xcursor->loadTheme(getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default", m_size, m_cursorScale);
m_pAnimationTimer = makeShared<CEventLoopTimer>(std::nullopt, cursorAnimTimer, this);
g_pEventLoopManager->addTimer(m_pAnimationTimer);
m_animationTimer = makeShared<CEventLoopTimer>(std::nullopt, cursorAnimTimer, this);
g_pEventLoopManager->addTimer(m_animationTimer);
updateTheme();
@ -115,17 +115,17 @@ CCursorManager::CCursorManager() {
}
CCursorManager::~CCursorManager() {
if (m_pAnimationTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_pAnimationTimer);
m_pAnimationTimer.reset();
if (m_animationTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_animationTimer);
m_animationTimer.reset();
}
if (m_pHyprcursor->valid() && m_sCurrentStyleInfo.size > 0)
m_pHyprcursor->cursorSurfaceStyleDone(m_sCurrentStyleInfo);
if (m_hyprcursor->valid() && m_currentStyleInfo.size > 0)
m_hyprcursor->cursorSurfaceStyleDone(m_currentStyleInfo);
}
SP<Aquamarine::IBuffer> CCursorManager::getCursorBuffer() {
return !m_vCursorBuffers.empty() ? m_vCursorBuffers.back() : nullptr;
return !m_cursorBuffers.empty() ? m_cursorBuffers.back() : nullptr;
}
void CCursorManager::setCursorSurface(SP<CWLSurface> surf, const Vector2D& hotspot) {
@ -134,28 +134,28 @@ void CCursorManager::setCursorSurface(SP<CWLSurface> surf, const Vector2D& hotsp
else
g_pPointerManager->setCursorSurface(surf, hotspot);
m_bOurBufferConnected = false;
m_ourBufferConnected = false;
}
void CCursorManager::setCursorBuffer(SP<CCursorBuffer> buf, const Vector2D& hotspot, const float& scale) {
m_vCursorBuffers.emplace_back(buf);
m_cursorBuffers.emplace_back(buf);
g_pPointerManager->setCursorBuffer(getCursorBuffer(), hotspot, scale);
if (m_vCursorBuffers.size() > 1)
std::erase_if(m_vCursorBuffers, [this](const auto& buf) { return buf.get() == m_vCursorBuffers.front().get(); });
if (m_cursorBuffers.size() > 1)
std::erase_if(m_cursorBuffers, [this](const auto& buf) { return buf.get() == m_cursorBuffers.front().get(); });
m_bOurBufferConnected = true;
m_ourBufferConnected = true;
}
void CCursorManager::setAnimationTimer(const int& frame, const int& delay) {
if (delay > 0) {
// arm
m_pAnimationTimer->updateTimeout(std::chrono::milliseconds(delay));
m_animationTimer->updateTimeout(std::chrono::milliseconds(delay));
} else {
// disarm
m_pAnimationTimer->updateTimeout(std::nullopt);
m_animationTimer->updateTimeout(std::nullopt);
}
m_iCurrentAnimationFrame = frame;
m_currentAnimationFrame = frame;
}
void CCursorManager::setCursorFromName(const std::string& name) {
@ -163,9 +163,9 @@ void CCursorManager::setCursorFromName(const std::string& name) {
static auto PUSEHYPRCURSOR = CConfigValue<Hyprlang::INT>("cursor:enable_hyprcursor");
auto setXCursor = [this](auto const& name) {
float scale = std::ceil(m_fCursorScale);
float scale = std::ceil(m_cursorScale);
auto xcursor = m_pXcursor->getShape(name, m_iSize, m_fCursorScale);
auto xcursor = m_xcursor->getShape(name, m_size, m_cursorScale);
auto& icon = xcursor->images.front();
auto buf = makeShared<CCursorBuffer>((uint8_t*)icon.pixels.data(), icon.size, icon.hotspot);
setCursorBuffer(buf, icon.hotspot / scale, scale);
@ -181,90 +181,89 @@ void CCursorManager::setCursorFromName(const std::string& name) {
};
auto setHyprCursor = [this](auto const& name) {
m_sCurrentCursorShapeData = m_pHyprcursor->getShape(name.c_str(), m_sCurrentStyleInfo);
m_currentCursorShapeData = m_hyprcursor->getShape(name.c_str(), m_currentStyleInfo);
if (m_sCurrentCursorShapeData.images.size() < 1) {
if (m_currentCursorShapeData.images.size() < 1) {
// try with '_' first (old hc, etc)
std::string newName = name;
std::replace(newName.begin(), newName.end(), '-', '_');
m_sCurrentCursorShapeData = m_pHyprcursor->getShape(newName.c_str(), m_sCurrentStyleInfo);
m_currentCursorShapeData = m_hyprcursor->getShape(newName.c_str(), m_currentStyleInfo);
}
if (m_sCurrentCursorShapeData.images.size() < 1) {
if (m_currentCursorShapeData.images.size() < 1) {
// fallback to a default if available
constexpr const std::array<const char*, 3> fallbackShapes = {"default", "left_ptr", "left-ptr"};
for (auto const& s : fallbackShapes) {
m_sCurrentCursorShapeData = m_pHyprcursor->getShape(s, m_sCurrentStyleInfo);
m_currentCursorShapeData = m_hyprcursor->getShape(s, m_currentStyleInfo);
if (m_sCurrentCursorShapeData.images.size() > 0)
if (m_currentCursorShapeData.images.size() > 0)
break;
}
if (m_sCurrentCursorShapeData.images.size() < 1) {
if (m_currentCursorShapeData.images.size() < 1) {
Debug::log(ERR, "BUG THIS: No fallback found for a cursor in setCursorFromName");
return false;
}
}
auto buf =
makeShared<CCursorBuffer>(m_sCurrentCursorShapeData.images[0].surface, Vector2D{m_sCurrentCursorShapeData.images[0].size, m_sCurrentCursorShapeData.images[0].size},
Vector2D{m_sCurrentCursorShapeData.images[0].hotspotX, m_sCurrentCursorShapeData.images[0].hotspotY});
auto hotspot = Vector2D{m_sCurrentCursorShapeData.images[0].hotspotX, m_sCurrentCursorShapeData.images[0].hotspotY} / m_fCursorScale;
setCursorBuffer(buf, hotspot, m_fCursorScale);
auto buf = makeShared<CCursorBuffer>(m_currentCursorShapeData.images[0].surface, Vector2D{m_currentCursorShapeData.images[0].size, m_currentCursorShapeData.images[0].size},
Vector2D{m_currentCursorShapeData.images[0].hotspotX, m_currentCursorShapeData.images[0].hotspotY});
auto hotspot = Vector2D{m_currentCursorShapeData.images[0].hotspotX, m_currentCursorShapeData.images[0].hotspotY} / m_cursorScale;
setCursorBuffer(buf, hotspot, m_cursorScale);
int delay = 0;
int frame = 0;
if (m_sCurrentCursorShapeData.images.size() > 1)
delay = m_sCurrentCursorShapeData.images[frame].delay;
if (m_currentCursorShapeData.images.size() > 1)
delay = m_currentCursorShapeData.images[frame].delay;
setAnimationTimer(frame, delay);
return true;
};
if (!m_pHyprcursor->valid() || !*PUSEHYPRCURSOR || !setHyprCursor(name))
if (!m_hyprcursor->valid() || !*PUSEHYPRCURSOR || !setHyprCursor(name))
setXCursor(name);
}
void CCursorManager::tickAnimatedCursor() {
if (!m_bOurBufferConnected)
if (!m_ourBufferConnected)
return;
if (!m_pHyprcursor->valid() && m_currentXcursor->images.size() > 1) {
m_iCurrentAnimationFrame++;
if (!m_hyprcursor->valid() && m_currentXcursor->images.size() > 1) {
m_currentAnimationFrame++;
if ((size_t)m_iCurrentAnimationFrame >= m_currentXcursor->images.size())
m_iCurrentAnimationFrame = 0;
if ((size_t)m_currentAnimationFrame >= m_currentXcursor->images.size())
m_currentAnimationFrame = 0;
float scale = std::ceil(m_fCursorScale);
auto& icon = m_currentXcursor->images.at(m_iCurrentAnimationFrame);
float scale = std::ceil(m_cursorScale);
auto& icon = m_currentXcursor->images.at(m_currentAnimationFrame);
auto buf = makeShared<CCursorBuffer>((uint8_t*)icon.pixels.data(), icon.size, icon.hotspot);
setCursorBuffer(buf, icon.hotspot / scale, scale);
setAnimationTimer(m_iCurrentAnimationFrame, m_currentXcursor->images[m_iCurrentAnimationFrame].delay);
} else if (m_sCurrentCursorShapeData.images.size() > 1) {
m_iCurrentAnimationFrame++;
setAnimationTimer(m_currentAnimationFrame, m_currentXcursor->images[m_currentAnimationFrame].delay);
} else if (m_currentCursorShapeData.images.size() > 1) {
m_currentAnimationFrame++;
if ((size_t)m_iCurrentAnimationFrame >= m_sCurrentCursorShapeData.images.size())
m_iCurrentAnimationFrame = 0;
if ((size_t)m_currentAnimationFrame >= m_currentCursorShapeData.images.size())
m_currentAnimationFrame = 0;
auto hotspot =
Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotX, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotY} / m_fCursorScale;
Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotX, m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotY} / m_cursorScale;
auto buf = makeShared<CCursorBuffer>(
m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].surface,
Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].size, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].size},
Vector2D{m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotX, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].hotspotY});
setCursorBuffer(buf, hotspot, m_fCursorScale);
setAnimationTimer(m_iCurrentAnimationFrame, m_sCurrentCursorShapeData.images[m_iCurrentAnimationFrame].delay);
m_currentCursorShapeData.images[m_currentAnimationFrame].surface,
Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].size, m_currentCursorShapeData.images[m_currentAnimationFrame].size},
Vector2D{m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotX, m_currentCursorShapeData.images[m_currentAnimationFrame].hotspotY});
setCursorBuffer(buf, hotspot, m_cursorScale);
setAnimationTimer(m_currentAnimationFrame, m_currentCursorShapeData.images[m_currentAnimationFrame].delay);
}
}
SCursorImageData CCursorManager::dataFor(const std::string& name) {
if (!m_pHyprcursor->valid())
if (!m_hyprcursor->valid())
return {};
const auto IMAGES = m_pHyprcursor->getShape(name.c_str(), m_sCurrentStyleInfo);
const auto IMAGES = m_hyprcursor->getShape(name.c_str(), m_currentStyleInfo);
if (IMAGES.images.empty())
return {};
@ -279,7 +278,7 @@ void CCursorManager::setXWaylandCursor() {
g_pXWayland->setCursor(cairo_image_surface_get_data(CURSOR.surface), cairo_image_surface_get_stride(CURSOR.surface), {CURSOR.size, CURSOR.size},
{CURSOR.hotspotX, CURSOR.hotspotY});
else {
auto xcursor = m_pXcursor->getShape("left_ptr", m_iSize, 1);
auto xcursor = m_xcursor->getShape("left_ptr", m_size, 1);
auto& icon = xcursor->images.front();
g_pXWayland->setCursor((uint8_t*)icon.pixels.data(), icon.size.x * 4, icon.size, icon.hotspot);
@ -295,16 +294,16 @@ void CCursorManager::updateTheme() {
highestScale = m->m_scale;
}
m_fCursorScale = highestScale;
m_cursorScale = highestScale;
if (*PUSEHYPRCURSOR) {
if (m_sCurrentStyleInfo.size > 0 && m_pHyprcursor->valid())
m_pHyprcursor->cursorSurfaceStyleDone(m_sCurrentStyleInfo);
if (m_currentStyleInfo.size > 0 && m_hyprcursor->valid())
m_hyprcursor->cursorSurfaceStyleDone(m_currentStyleInfo);
m_sCurrentStyleInfo.size = std::round(m_iSize * highestScale);
m_currentStyleInfo.size = std::round(m_size * highestScale);
if (m_pHyprcursor->valid())
m_pHyprcursor->loadThemeStyle(m_sCurrentStyleInfo);
if (m_hyprcursor->valid())
m_hyprcursor->loadThemeStyle(m_currentStyleInfo);
}
for (auto const& m : g_pCompositor->m_monitors) {
@ -315,24 +314,24 @@ void CCursorManager::updateTheme() {
bool CCursorManager::changeTheme(const std::string& name, const int size) {
static auto PUSEHYPRCURSOR = CConfigValue<Hyprlang::INT>("cursor:enable_hyprcursor");
m_szTheme = name.empty() ? "" : name;
m_iSize = size <= 0 ? 24 : size;
m_theme = name.empty() ? "" : name;
m_size = size <= 0 ? 24 : size;
auto xcursor_theme = getenv("XCURSOR_THEME") ? getenv("XCURSOR_THEME") : "default";
if (*PUSEHYPRCURSOR) {
auto options = Hyprcursor::SManagerOptions();
options.logFn = hcLogger;
options.allowDefaultFallback = false;
m_szTheme = name.empty() ? "" : name;
m_iSize = size;
m_theme = name.empty() ? "" : name;
m_size = size;
m_pHyprcursor = makeUnique<Hyprcursor::CHyprcursorManager>(m_szTheme.empty() ? nullptr : m_szTheme.c_str(), options);
if (!m_pHyprcursor->valid()) {
Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to XCursor.", m_szTheme);
m_pXcursor->loadTheme(m_szTheme.empty() ? xcursor_theme : m_szTheme, m_iSize, m_fCursorScale);
m_hyprcursor = makeUnique<Hyprcursor::CHyprcursorManager>(m_theme.empty() ? nullptr : m_theme.c_str(), options);
if (!m_hyprcursor->valid()) {
Debug::log(ERR, "Hyprcursor failed loading theme \"{}\", falling back to XCursor.", m_theme);
m_xcursor->loadTheme(m_theme.empty() ? xcursor_theme : m_theme, m_size, m_cursorScale);
}
} else
m_pXcursor->loadTheme(m_szTheme.empty() ? xcursor_theme : m_szTheme, m_iSize, m_fCursorScale);
m_xcursor->loadTheme(m_theme.empty() ? xcursor_theme : m_theme, m_size, m_cursorScale);
updateTheme();
@ -340,5 +339,5 @@ bool CCursorManager::changeTheme(const std::string& name, const int size) {
}
void CCursorManager::syncGsettings() {
m_pXcursor->syncGsettings();
m_xcursor->syncGsettings();
}

View file

@ -56,22 +56,22 @@ class CCursorManager {
void tickAnimatedCursor();
private:
bool m_bOurBufferConnected = false;
std::vector<SP<CCursorBuffer>> m_vCursorBuffers;
bool m_ourBufferConnected = false;
std::vector<SP<CCursorBuffer>> m_cursorBuffers;
UP<Hyprcursor::CHyprcursorManager> m_pHyprcursor;
UP<CXCursorManager> m_pXcursor;
UP<Hyprcursor::CHyprcursorManager> m_hyprcursor;
UP<CXCursorManager> m_xcursor;
SP<SXCursors> m_currentXcursor;
std::string m_szTheme = "";
int m_iSize = 0;
float m_fCursorScale = 1.0;
std::string m_theme = "";
int m_size = 0;
float m_cursorScale = 1.0;
Hyprcursor::SCursorStyleInfo m_sCurrentStyleInfo;
Hyprcursor::SCursorStyleInfo m_currentStyleInfo;
SP<CEventLoopTimer> m_pAnimationTimer;
int m_iCurrentAnimationFrame = 0;
Hyprcursor::SCursorShapeData m_sCurrentCursorShapeData;
SP<CEventLoopTimer> m_animationTimer;
int m_currentAnimationFrame = 0;
Hyprcursor::SCursorShapeData m_currentCursorShapeData;
};
inline UP<CCursorManager> g_pCursorManager;

View file

@ -102,7 +102,7 @@ CDonationNagManager::CDonationNagManager() {
break;
}
if (!m_bFired)
if (!m_fired)
Debug::log(LOG, "DonationNag: didn't hit any nagging periods, checking update");
if (state.major < currentMajor) {
@ -115,18 +115,18 @@ CDonationNagManager::CDonationNagManager() {
writeState(state);
}
if (!m_bFired)
if (!m_fired)
Debug::log(LOG, "DonationNag: didn't hit nagging conditions");
}
bool CDonationNagManager::fired() {
return m_bFired;
return m_fired;
}
void CDonationNagManager::fire() {
static const auto DATAROOT = NFsUtils::getDataHome();
m_bFired = true;
m_fired = true;
g_pEventLoopManager->doLater([] {
CProcess proc("hyprland-donate-screen", {});

View file

@ -19,7 +19,7 @@ class CDonationNagManager {
void writeState(const SStateData& s);
void fire();
bool m_bFired = false;
bool m_fired = false;
};
inline UP<CDonationNagManager> g_pDonationNagManager;

View file

@ -11,8 +11,8 @@
#include <cstring>
using namespace Hyprutils::OS;
CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) {
if (!m_iSocketFD.isValid()) {
CEventManager::CEventManager() : m_socketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) {
if (!m_socketFD.isValid()) {
Debug::log(ERR, "Couldn't start the Hyprland Socket 2. (1) IPC will not work.");
return;
}
@ -26,27 +26,27 @@ CEventManager::CEventManager() : m_iSocketFD(socket(AF_UNIX, SOCK_STREAM | SOCK_
strncpy(SERVERADDRESS.sun_path, PATH.c_str(), sizeof(SERVERADDRESS.sun_path) - 1);
if (bind(m_iSocketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) {
if (bind(m_socketFD.get(), (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS)) < 0) {
Debug::log(ERR, "Couldn't bind the Hyprland Socket 2. (3) IPC will not work.");
return;
}
// 10 max queued.
if (listen(m_iSocketFD.get(), 10) < 0) {
if (listen(m_socketFD.get(), 10) < 0) {
Debug::log(ERR, "Couldn't listen on the Hyprland Socket 2. (4) IPC will not work.");
return;
}
m_pEventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_iSocketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr);
m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, m_socketFD.get(), WL_EVENT_READABLE, onClientEvent, nullptr);
}
CEventManager::~CEventManager() {
for (const auto& client : m_vClients) {
for (const auto& client : m_clients) {
wl_event_source_remove(client.eventSource);
}
if (m_pEventSource != nullptr)
wl_event_source_remove(m_pEventSource);
if (m_eventSource != nullptr)
wl_event_source_remove(m_eventSource);
}
int CEventManager::onServerEvent(int fd, uint32_t mask, void* data) {
@ -61,22 +61,22 @@ int CEventManager::onServerEvent(int fd, uint32_t mask) {
if (mask & WL_EVENT_ERROR || mask & WL_EVENT_HANGUP) {
Debug::log(ERR, "Socket2 hangup?? IPC broke");
wl_event_source_remove(m_pEventSource);
m_pEventSource = nullptr;
m_iSocketFD.reset();
wl_event_source_remove(m_eventSource);
m_eventSource = nullptr;
m_socketFD.reset();
return 0;
}
sockaddr_in clientAddress;
socklen_t clientSize = sizeof(clientAddress);
CFileDescriptor ACCEPTEDCONNECTION{accept4(m_iSocketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC | SOCK_NONBLOCK)};
CFileDescriptor ACCEPTEDCONNECTION{accept4(m_socketFD.get(), (sockaddr*)&clientAddress, &clientSize, SOCK_CLOEXEC | SOCK_NONBLOCK)};
if (!ACCEPTEDCONNECTION.isValid()) {
if (errno != EAGAIN) {
Debug::log(ERR, "Socket2 failed receiving connection, errno: {}", errno);
wl_event_source_remove(m_pEventSource);
m_pEventSource = nullptr;
m_iSocketFD.reset();
wl_event_source_remove(m_eventSource);
m_eventSource = nullptr;
m_socketFD.reset();
}
return 0;
@ -86,7 +86,7 @@ int CEventManager::onServerEvent(int fd, uint32_t mask) {
// add to event loop so we can close it when we need to
auto* eventSource = wl_event_loop_add_fd(g_pCompositor->m_wlEventLoop, ACCEPTEDCONNECTION.get(), 0, onServerEvent, nullptr);
m_vClients.emplace_back(SClient{
m_clients.emplace_back(SClient{
std::move(ACCEPTEDCONNECTION),
{},
eventSource,
@ -123,14 +123,14 @@ int CEventManager::onClientEvent(int fd, uint32_t mask) {
}
std::vector<CEventManager::SClient>::iterator CEventManager::findClientByFD(int fd) {
return std::find_if(m_vClients.begin(), m_vClients.end(), [fd](const auto& client) { return client.fd.get() == fd; });
return std::find_if(m_clients.begin(), m_clients.end(), [fd](const auto& client) { return client.fd.get() == fd; });
}
std::vector<CEventManager::SClient>::iterator CEventManager::removeClientByFD(int fd) {
const auto CLIENTIT = findClientByFD(fd);
wl_event_source_remove(CLIENTIT->eventSource);
return m_vClients.erase(CLIENTIT);
return m_clients.erase(CLIENTIT);
}
std::string CEventManager::formatEvent(const SHyprIPCEvent& event) const {
@ -148,7 +148,7 @@ void CEventManager::postEvent(const SHyprIPCEvent& event) {
const size_t MAX_QUEUED_EVENTS = 64;
auto sharedEvent = makeShared<std::string>(formatEvent(event));
for (auto it = m_vClients.begin(); it != m_vClients.end();) {
for (auto it = m_clients.begin(); it != m_clients.end();) {
// try to send the event immediately if the queue is empty
const auto QUEUESIZE = it->events.size();
if (QUEUESIZE > 0 || write(it->fd.get(), sharedEvent->c_str(), sharedEvent->length()) < 0) {

View file

@ -35,10 +35,10 @@ class CEventManager {
std::vector<SClient>::iterator removeClientByFD(int fd);
private:
Hyprutils::OS::CFileDescriptor m_iSocketFD;
wl_event_source* m_pEventSource = nullptr;
Hyprutils::OS::CFileDescriptor m_socketFD;
wl_event_source* m_eventSource = nullptr;
std::vector<SClient> m_vClients;
std::vector<SClient> m_clients;
};
inline UP<CEventManager> g_pEventManager;

View file

@ -9,12 +9,12 @@ CHookSystemManager::CHookSystemManager() {
// returns the pointer to the function
SP<HOOK_CALLBACK_FN> CHookSystemManager::hookDynamic(const std::string& event, HOOK_CALLBACK_FN fn, HANDLE handle) {
SP<HOOK_CALLBACK_FN> hookFN = makeShared<HOOK_CALLBACK_FN>(fn);
m_mRegisteredHooks[event].emplace_back(SCallbackFNPtr{.fn = hookFN, .handle = handle});
m_registeredHooks[event].emplace_back(SCallbackFNPtr{.fn = hookFN, .handle = handle});
return hookFN;
}
void CHookSystemManager::unhook(SP<HOOK_CALLBACK_FN> fn) {
for (auto& [k, v] : m_mRegisteredHooks) {
for (auto& [k, v] : m_registeredHooks) {
std::erase_if(v, [&](const auto& other) {
SP<HOOK_CALLBACK_FN> fn_ = other.fn.lock();
@ -32,7 +32,7 @@ void CHookSystemManager::emit(std::vector<SCallbackFNPtr>* const callbacks, SCal
for (auto const& cb : *callbacks) {
m_bCurrentEventPlugin = false;
m_currentEventPlugin = false;
if (!cb.handle) {
// we don't guard hl hooks
@ -44,13 +44,13 @@ void CHookSystemManager::emit(std::vector<SCallbackFNPtr>* const callbacks, SCal
continue;
}
m_bCurrentEventPlugin = true;
m_currentEventPlugin = true;
if (std::find(faultyHandles.begin(), faultyHandles.end(), cb.handle) != faultyHandles.end())
continue;
try {
if (!setjmp(m_jbHookFaultJumpBuf)) {
if (!setjmp(m_hookFaultJumpBuf)) {
if (SP<HOOK_CALLBACK_FN> fn = cb.fn.lock())
(*fn)(fn.get(), info, data);
else
@ -76,8 +76,8 @@ void CHookSystemManager::emit(std::vector<SCallbackFNPtr>* const callbacks, SCal
}
std::vector<SCallbackFNPtr>* CHookSystemManager::getVecForEvent(const std::string& event) {
if (!m_mRegisteredHooks.contains(event))
if (!m_registeredHooks.contains(event))
Debug::log(LOG, "[hookSystem] New hook event registered: {}", event);
return &m_mRegisteredHooks[event];
return &m_registeredHooks[event];
}

View file

@ -50,11 +50,11 @@ class CHookSystemManager {
void emit(std::vector<SCallbackFNPtr>* const callbacks, SCallbackInfo& info, std::any data = 0);
std::vector<SCallbackFNPtr>* getVecForEvent(const std::string& event);
bool m_bCurrentEventPlugin = false;
jmp_buf m_jbHookFaultJumpBuf;
bool m_currentEventPlugin = false;
jmp_buf m_hookFaultJumpBuf;
private:
std::unordered_map<std::string, std::vector<SCallbackFNPtr>> m_mRegisteredHooks;
std::unordered_map<std::string, std::vector<SCallbackFNPtr>> m_registeredHooks;
};
inline UP<CHookSystemManager> g_pHookSystem;

View file

@ -70,109 +70,109 @@ static std::vector<std::pair<std::string, std::string>> getHyprlandLaunchEnv(PHL
CKeybindManager::CKeybindManager() {
// initialize all dispatchers
m_mDispatchers["exec"] = spawn;
m_mDispatchers["execr"] = spawnRaw;
m_mDispatchers["killactive"] = closeActive;
m_mDispatchers["forcekillactive"] = killActive;
m_mDispatchers["closewindow"] = closeWindow;
m_mDispatchers["killwindow"] = killWindow;
m_mDispatchers["signal"] = signalActive;
m_mDispatchers["signalwindow"] = signalWindow;
m_mDispatchers["togglefloating"] = toggleActiveFloating;
m_mDispatchers["setfloating"] = setActiveFloating;
m_mDispatchers["settiled"] = setActiveTiled;
m_mDispatchers["workspace"] = changeworkspace;
m_mDispatchers["renameworkspace"] = renameWorkspace;
m_mDispatchers["fullscreen"] = fullscreenActive;
m_mDispatchers["fullscreenstate"] = fullscreenStateActive;
m_mDispatchers["movetoworkspace"] = moveActiveToWorkspace;
m_mDispatchers["movetoworkspacesilent"] = moveActiveToWorkspaceSilent;
m_mDispatchers["pseudo"] = toggleActivePseudo;
m_mDispatchers["movefocus"] = moveFocusTo;
m_mDispatchers["movewindow"] = moveActiveTo;
m_mDispatchers["swapwindow"] = swapActive;
m_mDispatchers["centerwindow"] = centerWindow;
m_mDispatchers["togglegroup"] = toggleGroup;
m_mDispatchers["changegroupactive"] = changeGroupActive;
m_mDispatchers["movegroupwindow"] = moveGroupWindow;
m_mDispatchers["togglesplit"] = toggleSplit;
m_mDispatchers["swapsplit"] = swapSplit;
m_mDispatchers["splitratio"] = alterSplitRatio;
m_mDispatchers["focusmonitor"] = focusMonitor;
m_mDispatchers["movecursortocorner"] = moveCursorToCorner;
m_mDispatchers["movecursor"] = moveCursor;
m_mDispatchers["workspaceopt"] = workspaceOpt;
m_mDispatchers["exit"] = exitHyprland;
m_mDispatchers["movecurrentworkspacetomonitor"] = moveCurrentWorkspaceToMonitor;
m_mDispatchers["focusworkspaceoncurrentmonitor"] = focusWorkspaceOnCurrentMonitor;
m_mDispatchers["moveworkspacetomonitor"] = moveWorkspaceToMonitor;
m_mDispatchers["togglespecialworkspace"] = toggleSpecialWorkspace;
m_mDispatchers["forcerendererreload"] = forceRendererReload;
m_mDispatchers["resizeactive"] = resizeActive;
m_mDispatchers["moveactive"] = moveActive;
m_mDispatchers["cyclenext"] = circleNext;
m_mDispatchers["focuswindowbyclass"] = focusWindow;
m_mDispatchers["focuswindow"] = focusWindow;
m_mDispatchers["tagwindow"] = tagWindow;
m_mDispatchers["toggleswallow"] = toggleSwallow;
m_mDispatchers["submap"] = setSubmap;
m_mDispatchers["pass"] = pass;
m_mDispatchers["sendshortcut"] = sendshortcut;
m_mDispatchers["sendkeystate"] = sendkeystate;
m_mDispatchers["layoutmsg"] = layoutmsg;
m_mDispatchers["dpms"] = dpms;
m_mDispatchers["movewindowpixel"] = moveWindow;
m_mDispatchers["resizewindowpixel"] = resizeWindow;
m_mDispatchers["swapnext"] = swapnext;
m_mDispatchers["swapactiveworkspaces"] = swapActiveWorkspaces;
m_mDispatchers["pin"] = pinActive;
m_mDispatchers["mouse"] = mouse;
m_mDispatchers["bringactivetotop"] = bringActiveToTop;
m_mDispatchers["alterzorder"] = alterZOrder;
m_mDispatchers["focusurgentorlast"] = focusUrgentOrLast;
m_mDispatchers["focuscurrentorlast"] = focusCurrentOrLast;
m_mDispatchers["lockgroups"] = lockGroups;
m_mDispatchers["lockactivegroup"] = lockActiveGroup;
m_mDispatchers["moveintogroup"] = moveIntoGroup;
m_mDispatchers["moveoutofgroup"] = moveOutOfGroup;
m_mDispatchers["movewindoworgroup"] = moveWindowOrGroup;
m_mDispatchers["setignoregrouplock"] = setIgnoreGroupLock;
m_mDispatchers["denywindowfromgroup"] = denyWindowFromGroup;
m_mDispatchers["event"] = event;
m_mDispatchers["global"] = global;
m_mDispatchers["setprop"] = setProp;
m_dispatchers["exec"] = spawn;
m_dispatchers["execr"] = spawnRaw;
m_dispatchers["killactive"] = closeActive;
m_dispatchers["forcekillactive"] = killActive;
m_dispatchers["closewindow"] = closeWindow;
m_dispatchers["killwindow"] = killWindow;
m_dispatchers["signal"] = signalActive;
m_dispatchers["signalwindow"] = signalWindow;
m_dispatchers["togglefloating"] = toggleActiveFloating;
m_dispatchers["setfloating"] = setActiveFloating;
m_dispatchers["settiled"] = setActiveTiled;
m_dispatchers["workspace"] = changeworkspace;
m_dispatchers["renameworkspace"] = renameWorkspace;
m_dispatchers["fullscreen"] = fullscreenActive;
m_dispatchers["fullscreenstate"] = fullscreenStateActive;
m_dispatchers["movetoworkspace"] = moveActiveToWorkspace;
m_dispatchers["movetoworkspacesilent"] = moveActiveToWorkspaceSilent;
m_dispatchers["pseudo"] = toggleActivePseudo;
m_dispatchers["movefocus"] = moveFocusTo;
m_dispatchers["movewindow"] = moveActiveTo;
m_dispatchers["swapwindow"] = swapActive;
m_dispatchers["centerwindow"] = centerWindow;
m_dispatchers["togglegroup"] = toggleGroup;
m_dispatchers["changegroupactive"] = changeGroupActive;
m_dispatchers["movegroupwindow"] = moveGroupWindow;
m_dispatchers["togglesplit"] = toggleSplit;
m_dispatchers["swapsplit"] = swapSplit;
m_dispatchers["splitratio"] = alterSplitRatio;
m_dispatchers["focusmonitor"] = focusMonitor;
m_dispatchers["movecursortocorner"] = moveCursorToCorner;
m_dispatchers["movecursor"] = moveCursor;
m_dispatchers["workspaceopt"] = workspaceOpt;
m_dispatchers["exit"] = exitHyprland;
m_dispatchers["movecurrentworkspacetomonitor"] = moveCurrentWorkspaceToMonitor;
m_dispatchers["focusworkspaceoncurrentmonitor"] = focusWorkspaceOnCurrentMonitor;
m_dispatchers["moveworkspacetomonitor"] = moveWorkspaceToMonitor;
m_dispatchers["togglespecialworkspace"] = toggleSpecialWorkspace;
m_dispatchers["forcerendererreload"] = forceRendererReload;
m_dispatchers["resizeactive"] = resizeActive;
m_dispatchers["moveactive"] = moveActive;
m_dispatchers["cyclenext"] = circleNext;
m_dispatchers["focuswindowbyclass"] = focusWindow;
m_dispatchers["focuswindow"] = focusWindow;
m_dispatchers["tagwindow"] = tagWindow;
m_dispatchers["toggleswallow"] = toggleSwallow;
m_dispatchers["submap"] = setSubmap;
m_dispatchers["pass"] = pass;
m_dispatchers["sendshortcut"] = sendshortcut;
m_dispatchers["sendkeystate"] = sendkeystate;
m_dispatchers["layoutmsg"] = layoutmsg;
m_dispatchers["dpms"] = dpms;
m_dispatchers["movewindowpixel"] = moveWindow;
m_dispatchers["resizewindowpixel"] = resizeWindow;
m_dispatchers["swapnext"] = swapnext;
m_dispatchers["swapactiveworkspaces"] = swapActiveWorkspaces;
m_dispatchers["pin"] = pinActive;
m_dispatchers["mouse"] = mouse;
m_dispatchers["bringactivetotop"] = bringActiveToTop;
m_dispatchers["alterzorder"] = alterZOrder;
m_dispatchers["focusurgentorlast"] = focusUrgentOrLast;
m_dispatchers["focuscurrentorlast"] = focusCurrentOrLast;
m_dispatchers["lockgroups"] = lockGroups;
m_dispatchers["lockactivegroup"] = lockActiveGroup;
m_dispatchers["moveintogroup"] = moveIntoGroup;
m_dispatchers["moveoutofgroup"] = moveOutOfGroup;
m_dispatchers["movewindoworgroup"] = moveWindowOrGroup;
m_dispatchers["setignoregrouplock"] = setIgnoreGroupLock;
m_dispatchers["denywindowfromgroup"] = denyWindowFromGroup;
m_dispatchers["event"] = event;
m_dispatchers["global"] = global;
m_dispatchers["setprop"] = setProp;
m_tScrollTimer.reset();
m_scrollTimer.reset();
m_pLongPressTimer = makeShared<CEventLoopTimer>(
m_longPressTimer = makeShared<CEventLoopTimer>(
std::nullopt,
[this](SP<CEventLoopTimer> self, void* data) {
if (!m_pLastLongPressKeybind || g_pSeatManager->keyboard.expired())
if (!m_lastLongPressKeybind || g_pSeatManager->m_keyboard.expired())
return;
const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock();
const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock();
if (!PACTIVEKEEB->m_allowBinds)
return;
const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(m_pLastLongPressKeybind->handler);
const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(m_lastLongPressKeybind->handler);
Debug::log(LOG, "Long press timeout passed, calling dispatcher.");
DISPATCHER->second(m_pLastLongPressKeybind->arg);
DISPATCHER->second(m_lastLongPressKeybind->arg);
},
nullptr);
m_pRepeatKeyTimer = makeShared<CEventLoopTimer>(
m_repeatKeyTimer = makeShared<CEventLoopTimer>(
std::nullopt,
[this](SP<CEventLoopTimer> self, void* data) {
if (m_vActiveKeybinds.size() == 0 || g_pSeatManager->keyboard.expired())
if (m_activeKeybinds.size() == 0 || g_pSeatManager->m_keyboard.expired())
return;
const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock();
const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock();
if (!PACTIVEKEEB->m_allowBinds)
return;
for (const auto& k : m_vActiveKeybinds) {
const auto DISPATCHER = g_pKeybindManager->m_mDispatchers.find(k->handler);
for (const auto& k : m_activeKeybinds) {
const auto DISPATCHER = g_pKeybindManager->m_dispatchers.find(k->handler);
Debug::log(LOG, "Keybind repeat triggered, calling dispatcher.");
DISPATCHER->second(k->arg);
@ -184,43 +184,43 @@ CKeybindManager::CKeybindManager() {
// null in --verify-config mode
if (g_pEventLoopManager) {
g_pEventLoopManager->addTimer(m_pLongPressTimer);
g_pEventLoopManager->addTimer(m_pRepeatKeyTimer);
g_pEventLoopManager->addTimer(m_longPressTimer);
g_pEventLoopManager->addTimer(m_repeatKeyTimer);
}
static auto P = g_pHookSystem->hookDynamic("configReloaded", [this](void* hk, SCallbackInfo& info, std::any param) {
// clear cuz realloc'd
m_vActiveKeybinds.clear();
m_pLastLongPressKeybind.reset();
m_vPressedSpecialBinds.clear();
m_activeKeybinds.clear();
m_lastLongPressKeybind.reset();
m_pressedSpecialBinds.clear();
});
}
CKeybindManager::~CKeybindManager() {
if (m_pXKBTranslationState)
xkb_state_unref(m_pXKBTranslationState);
if (m_pLongPressTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_pLongPressTimer);
m_pLongPressTimer.reset();
if (m_xkbTranslationState)
xkb_state_unref(m_xkbTranslationState);
if (m_longPressTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_longPressTimer);
m_longPressTimer.reset();
}
if (m_pRepeatKeyTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_pRepeatKeyTimer);
m_pRepeatKeyTimer.reset();
if (m_repeatKeyTimer && g_pEventLoopManager) {
g_pEventLoopManager->removeTimer(m_repeatKeyTimer);
m_repeatKeyTimer.reset();
}
}
void CKeybindManager::addKeybind(SKeybind kb) {
m_vKeybinds.emplace_back(makeShared<SKeybind>(kb));
m_keybinds.emplace_back(makeShared<SKeybind>(kb));
m_vActiveKeybinds.clear();
m_pLastLongPressKeybind.reset();
m_activeKeybinds.clear();
m_lastLongPressKeybind.reset();
}
void CKeybindManager::removeKeybind(uint32_t mod, const SParsedKey& key) {
std::erase_if(m_vKeybinds, [&mod, &key](const auto& el) { return el->modmask == mod && el->key == key.key && el->keycode == key.keycode && el->catchAll == key.catchAll; });
std::erase_if(m_keybinds, [&mod, &key](const auto& el) { return el->modmask == mod && el->key == key.key && el->keycode == key.keycode && el->catchAll == key.catchAll; });
m_vActiveKeybinds.clear();
m_pLastLongPressKeybind.reset();
m_activeKeybinds.clear();
m_lastLongPressKeybind.reset();
}
uint32_t CKeybindManager::stringToModMask(std::string mods) {
@ -266,10 +266,10 @@ uint32_t CKeybindManager::keycodeToModifier(xkb_keycode_t keycode) {
}
void CKeybindManager::updateXKBTranslationState() {
if (m_pXKBTranslationState) {
xkb_state_unref(m_pXKBTranslationState);
if (m_xkbTranslationState) {
xkb_state_unref(m_xkbTranslationState);
m_pXKBTranslationState = nullptr;
m_xkbTranslationState = nullptr;
}
static auto PFILEPATH = CConfigValue<std::string>("input:kb_file");
@ -308,7 +308,7 @@ void CKeybindManager::updateXKBTranslationState() {
}
xkb_context_unref(PCONTEXT);
m_pXKBTranslationState = xkb_state_new(PKEYMAP);
m_xkbTranslationState = xkb_state_new(PKEYMAP);
xkb_keymap_unref(PKEYMAP);
}
@ -427,18 +427,18 @@ void CKeybindManager::switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool preserveF
bool CKeybindManager::onKeyEvent(std::any event, SP<IKeyboard> pKeyboard) {
if (!g_pCompositor->m_sessionActive || g_pCompositor->m_unsafeState) {
m_dPressedKeys.clear();
m_pressedKeys.clear();
return true;
}
if (!pKeyboard->m_allowBinds)
return true;
if (!m_pXKBTranslationState) {
if (!m_xkbTranslationState) {
Debug::log(ERR, "BUG THIS: m_pXKBTranslationState nullptr!");
updateXKBTranslationState();
if (!m_pXKBTranslationState)
if (!m_xkbTranslationState)
return true;
}
@ -446,7 +446,7 @@ bool CKeybindManager::onKeyEvent(std::any event, SP<IKeyboard> pKeyboard) {
const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput
const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->m_resolveBindsBySym ? pKeyboard->m_xkbSymState : m_pXKBTranslationState, KEYCODE);
const xkb_keysym_t keysym = xkb_state_key_get_one_sym(pKeyboard->m_resolveBindsBySym ? pKeyboard->m_xkbSymState : m_xkbTranslationState, KEYCODE);
const xkb_keysym_t internalKeysym = xkb_state_key_get_one_sym(pKeyboard->m_xkbState, KEYCODE);
if (keysym == XKB_KEY_Escape || internalKeysym == XKB_KEY_Escape)
@ -459,9 +459,9 @@ bool CKeybindManager::onKeyEvent(std::any event, SP<IKeyboard> pKeyboard) {
const auto MODS = g_pInputManager->accumulateModsFromAllKBs();
m_uTimeLastMs = e.timeMs;
m_uLastCode = KEYCODE;
m_uLastMouseCode = 0;
m_timeLastMs = e.timeMs;
m_lastCode = KEYCODE;
m_lastMouseCode = 0;
bool mouseBindWasActive = ensureMouseBindState();
@ -470,34 +470,34 @@ bool CKeybindManager::onKeyEvent(std::any event, SP<IKeyboard> pKeyboard) {
.keycode = KEYCODE,
.modmaskAtPressTime = MODS,
.sent = true,
.submapAtPress = m_szCurrentSelectedSubmap,
.submapAtPress = m_currentSelectedSubmap,
.mousePosAtPress = g_pInputManager->getMouseCoordsInternal(),
};
m_vActiveKeybinds.clear();
m_activeKeybinds.clear();
m_pLastLongPressKeybind.reset();
m_lastLongPressKeybind.reset();
bool suppressEvent = false;
if (e.state == WL_KEYBOARD_KEY_STATE_PRESSED) {
m_dPressedKeys.push_back(KEY);
m_pressedKeys.push_back(KEY);
suppressEvent = !handleKeybinds(MODS, KEY, true).passEvent;
if (suppressEvent)
shadowKeybinds(keysym, KEYCODE);
m_dPressedKeys.back().sent = !suppressEvent;
m_pressedKeys.back().sent = !suppressEvent;
} else { // key release
bool foundInPressedKeys = false;
for (auto it = m_dPressedKeys.begin(); it != m_dPressedKeys.end();) {
for (auto it = m_pressedKeys.begin(); it != m_pressedKeys.end();) {
if (it->keycode == KEYCODE) {
handleKeybinds(MODS, *it, false);
foundInPressedKeys = true;
suppressEvent = !it->sent;
it = m_dPressedKeys.erase(it);
it = m_pressedKeys.erase(it);
} else {
++it;
}
@ -519,14 +519,14 @@ bool CKeybindManager::onAxisEvent(const IPointer::SAxisEvent& e) {
static auto PDELAY = CConfigValue<Hyprlang::INT>("binds:scroll_event_delay");
if (m_tScrollTimer.getMillis() < *PDELAY) {
m_tScrollTimer.reset();
if (m_scrollTimer.getMillis() < *PDELAY) {
m_scrollTimer.reset();
return true; // timer hasn't passed yet!
}
m_tScrollTimer.reset();
m_scrollTimer.reset();
m_vActiveKeybinds.clear();
m_activeKeybinds.clear();
bool found = false;
if (e.source == WL_POINTER_AXIS_SOURCE_WHEEL && e.axis == WL_POINTER_AXIS_VERTICAL_SCROLL) {
@ -552,9 +552,9 @@ bool CKeybindManager::onMouseEvent(const IPointer::SButtonEvent& e) {
bool suppressEvent = false;
m_uLastMouseCode = e.button;
m_uLastCode = 0;
m_uTimeLastMs = e.timeMs;
m_lastMouseCode = e.button;
m_lastCode = 0;
m_timeLastMs = e.timeMs;
bool mouseBindWasActive = ensureMouseBindState();
@ -566,25 +566,25 @@ bool CKeybindManager::onMouseEvent(const IPointer::SButtonEvent& e) {
.mousePosAtPress = g_pInputManager->getMouseCoordsInternal(),
};
m_vActiveKeybinds.clear();
m_activeKeybinds.clear();
if (e.state == WL_POINTER_BUTTON_STATE_PRESSED) {
m_dPressedKeys.push_back(KEY);
m_pressedKeys.push_back(KEY);
suppressEvent = !handleKeybinds(MODS, KEY, true).passEvent;
if (suppressEvent)
shadowKeybinds();
m_dPressedKeys.back().sent = !suppressEvent;
m_pressedKeys.back().sent = !suppressEvent;
} else {
bool foundInPressedKeys = false;
for (auto it = m_dPressedKeys.begin(); it != m_dPressedKeys.end();) {
for (auto it = m_pressedKeys.begin(); it != m_pressedKeys.end();) {
if (it->keyName == KEY_NAME) {
suppressEvent = !handleKeybinds(MODS, *it, false).passEvent;
foundInPressedKeys = true;
suppressEvent = !it->sent;
it = m_dPressedKeys.erase(it);
it = m_pressedKeys.erase(it);
} else {
++it;
}
@ -639,14 +639,14 @@ eMultiKeyCase CKeybindManager::mkKeysymSetMatches(const std::set<xkb_keysym_t> k
}
eMultiKeyCase CKeybindManager::mkBindMatches(const SP<SKeybind> keybind) {
if (mkKeysymSetMatches(keybind->sMkMods, m_sMkMods) != MK_FULL_MATCH)
if (mkKeysymSetMatches(keybind->sMkMods, m_mkMods) != MK_FULL_MATCH)
return MK_NO_MATCH;
return mkKeysymSetMatches(keybind->sMkKeys, m_sMkKeys);
return mkKeysymSetMatches(keybind->sMkKeys, m_mkKeys);
}
std::string CKeybindManager::getCurrentSubmap() {
return m_szCurrentSelectedSubmap;
return m_currentSelectedSubmap;
}
SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SPressedKeyWithMods& key, bool pressed) {
@ -658,20 +658,20 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
if (pressed) {
if (keycodeToModifier(key.keycode))
m_sMkMods.insert(key.keysym);
m_mkMods.insert(key.keysym);
else
m_sMkKeys.insert(key.keysym);
m_mkKeys.insert(key.keysym);
} else {
if (keycodeToModifier(key.keycode))
m_sMkMods.erase(key.keysym);
m_mkMods.erase(key.keysym);
else
m_sMkKeys.erase(key.keysym);
m_mkKeys.erase(key.keysym);
}
for (auto& k : m_vKeybinds) {
for (auto& k : m_keybinds) {
const bool SPECIALDISPATCHER = k->handler == "global" || k->handler == "pass" || k->handler == "sendshortcut" || k->handler == "mouse";
const bool SPECIALTRIGGERED =
std::find_if(m_vPressedSpecialBinds.begin(), m_vPressedSpecialBinds.end(), [&](const auto& other) { return other == k; }) != m_vPressedSpecialBinds.end();
std::find_if(m_pressedSpecialBinds.begin(), m_pressedSpecialBinds.end(), [&](const auto& other) { return other == k; }) != m_pressedSpecialBinds.end();
const bool IGNORECONDITIONS =
SPECIALDISPATCHER && !pressed && SPECIALTRIGGERED; // ignore mods. Pass, global dispatchers should be released immediately once the key is released.
@ -681,7 +681,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
if (!k->locked && g_pSessionLockManager->isSessionLocked())
continue;
if (!IGNORECONDITIONS && ((modmask != k->modmask && !k->ignoreMods) || k->submap != m_szCurrentSelectedSubmap || k->shadowed))
if (!IGNORECONDITIONS && ((modmask != k->modmask && !k->ignoreMods) || k->submap != m_currentSelectedSubmap || k->shadowed))
continue;
if (k->multiKey) {
@ -697,7 +697,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
if (key.keycode != k->keycode)
continue;
} else if (k->catchAll) {
if (found || key.submapAtPress != m_szCurrentSelectedSubmap)
if (found || key.submapAtPress != m_currentSelectedSubmap)
continue;
} else {
// in this case, we only have the keysym to go off of for this keybind, and it's invalid
@ -762,29 +762,29 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
}
if (k->longPress) {
const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock();
const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock();
m_pLongPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay));
m_pLastLongPressKeybind = k;
m_longPressTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay));
m_lastLongPressKeybind = k;
continue;
}
const auto DISPATCHER = m_mDispatchers.find(k->mouse ? "mouse" : k->handler);
const auto DISPATCHER = m_dispatchers.find(k->mouse ? "mouse" : k->handler);
if (SPECIALTRIGGERED && !pressed)
std::erase_if(m_vPressedSpecialBinds, [&](const auto& other) { return other == k; });
std::erase_if(m_pressedSpecialBinds, [&](const auto& other) { return other == k; });
else if (SPECIALDISPATCHER && pressed)
m_vPressedSpecialBinds.emplace_back(k);
m_pressedSpecialBinds.emplace_back(k);
// Should never happen, as we check in the ConfigManager, but oh well
if (DISPATCHER == m_mDispatchers.end()) {
if (DISPATCHER == m_dispatchers.end()) {
Debug::log(ERR, "Invalid handler in a keybind! (handler {} does not exist)", k->handler);
} else {
// call the dispatcher
Debug::log(LOG, "Keybind triggered, calling dispatcher ({}, {}, {}, {})", modmask, key.keyName, key.keysym, DISPATCHER->first);
m_iPassPressed = (int)pressed;
m_passPressed = (int)pressed;
// if the dispatchers says to pass event then we will
if (k->handler == "mouse")
@ -792,7 +792,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
else
res = DISPATCHER->second(k->arg);
m_iPassPressed = -1;
m_passPressed = -1;
if (k->handler == "submap") {
found = true; // don't process keybinds on submap change.
@ -801,10 +801,10 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
}
if (k->repeat) {
const auto PACTIVEKEEB = g_pSeatManager->keyboard.lock();
const auto PACTIVEKEEB = g_pSeatManager->m_keyboard.lock();
m_vActiveKeybinds.emplace_back(k);
m_pRepeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay));
m_activeKeybinds.emplace_back(k);
m_repeatKeyTimer->updateTimeout(std::chrono::milliseconds(PACTIVEKEEB->m_repeatDelay));
}
if (!k->nonConsuming)
@ -830,7 +830,7 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP
void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const uint32_t doesntHaveCode) {
// shadow disables keybinds after one has been triggered
for (auto& k : m_vKeybinds) {
for (auto& k : m_keybinds) {
bool shadow = false;
@ -843,7 +843,7 @@ void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const uint3
const auto KBKEY = xkb_keysym_from_name(k->key.c_str(), XKB_KEYSYM_CASE_INSENSITIVE);
const auto KBKEYUPPER = xkb_keysym_to_upper(KBKEY);
for (auto const& pk : m_dPressedKeys) {
for (auto const& pk : m_pressedKeys) {
if ((pk.keysym != 0 && (pk.keysym == KBKEY || pk.keysym == KBKEYUPPER))) {
shadow = true;
@ -1125,7 +1125,7 @@ SDispatchResult CKeybindManager::signalWindow(std::string args) {
}
void CKeybindManager::clearKeybinds() {
m_vKeybinds.clear();
m_keybinds.clear();
}
static SDispatchResult toggleActiveFloatingCore(std::string args, std::optional<bool> floatState) {
@ -1336,7 +1336,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) {
if (*PWARPONWORKSPACECHANGE > 0) {
auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow();
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock());
if (PLAST && (!HLSurface || HLSurface->getWindow()))
PLAST->warpCursor(*PWARPONWORKSPACECHANGE == 2);
@ -2154,7 +2154,7 @@ SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) {
if (*PWARPONTOGGLESPECIAL > 0) {
auto PLAST = focusedWorkspace->getLastFocusedWindow();
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
auto HLSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock());
if (PLAST && (!HLSurface || HLSurface->getWindow()))
PLAST->warpCursor(*PWARPONTOGGLESPECIAL == 2);
@ -2400,19 +2400,19 @@ SDispatchResult CKeybindManager::toggleSwallow(std::string args) {
SDispatchResult CKeybindManager::setSubmap(std::string submap) {
if (submap == "reset" || submap == "") {
m_szCurrentSelectedSubmap = "";
m_currentSelectedSubmap = "";
Debug::log(LOG, "Reset active submap to the default one.");
g_pEventManager->postEvent(SHyprIPCEvent{"submap", ""});
EMIT_HOOK_EVENT("submap", m_szCurrentSelectedSubmap);
EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap);
return {};
}
for (const auto& k : g_pKeybindManager->m_vKeybinds) {
for (const auto& k : g_pKeybindManager->m_keybinds) {
if (k->submap == submap) {
m_szCurrentSelectedSubmap = submap;
m_currentSelectedSubmap = submap;
Debug::log(LOG, "Changed keybind submap to {}", submap);
g_pEventManager->postEvent(SHyprIPCEvent{"submap", submap});
EMIT_HOOK_EVENT("submap", m_szCurrentSelectedSubmap);
EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap);
return {};
}
}
@ -2431,18 +2431,18 @@ SDispatchResult CKeybindManager::pass(std::string regexp) {
return {.success = false, .error = "pass: window not found"};
}
if (!g_pSeatManager->keyboard) {
if (!g_pSeatManager->m_keyboard) {
Debug::log(ERR, "No kb in pass?");
return {.success = false, .error = "No kb in pass?"};
}
const auto XWTOXW = PWINDOW->m_isX11 && g_pCompositor->m_lastWindow.lock() && g_pCompositor->m_lastWindow->m_isX11;
const auto LASTMOUSESURF = g_pSeatManager->state.pointerFocus.lock();
const auto LASTKBSURF = g_pSeatManager->state.keyboardFocus.lock();
const auto LASTMOUSESURF = g_pSeatManager->m_state.pointerFocus.lock();
const auto LASTKBSURF = g_pSeatManager->m_state.keyboardFocus.lock();
// pass all mf shit
if (!XWTOXW) {
if (g_pKeybindManager->m_uLastCode != 0)
if (g_pKeybindManager->m_lastCode != 0)
g_pSeatManager->setKeyboardFocus(PWINDOW->m_wlSurface->resource());
else
g_pSeatManager->setPointerFocus(PWINDOW->m_wlSurface->resource(), {1, 1});
@ -2450,24 +2450,24 @@ SDispatchResult CKeybindManager::pass(std::string regexp) {
g_pSeatManager->sendKeyboardMods(g_pInputManager->accumulateModsFromAllKBs(), 0, 0, 0);
if (g_pKeybindManager->m_iPassPressed == 1) {
if (g_pKeybindManager->m_uLastCode != 0)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
if (g_pKeybindManager->m_passPressed == 1) {
if (g_pKeybindManager->m_lastCode != 0)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
else
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED);
} else if (g_pKeybindManager->m_iPassPressed == 0)
if (g_pKeybindManager->m_uLastCode != 0)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED);
} else if (g_pKeybindManager->m_passPressed == 0)
if (g_pKeybindManager->m_lastCode != 0)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
else
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED);
else {
// dynamic call of the dispatcher
if (g_pKeybindManager->m_uLastCode != 0) {
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
if (g_pKeybindManager->m_lastCode != 0) {
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastCode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
} else {
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, g_pKeybindManager->m_uLastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_PRESSED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, g_pKeybindManager->m_lastMouseCode, WL_POINTER_BUTTON_STATE_RELEASED);
}
}
@ -2478,18 +2478,18 @@ SDispatchResult CKeybindManager::pass(std::string regexp) {
// this will make g_pSeatManager NOT send the leave event to XWayland apps, provided we are not on an XWayland window already.
// please kill me
if (PWINDOW->m_isX11) {
if (g_pKeybindManager->m_uLastCode != 0) {
g_pSeatManager->state.keyboardFocus.reset();
g_pSeatManager->state.keyboardFocusResource.reset();
if (g_pKeybindManager->m_lastCode != 0) {
g_pSeatManager->m_state.keyboardFocus.reset();
g_pSeatManager->m_state.keyboardFocusResource.reset();
} else {
g_pSeatManager->state.pointerFocus.reset();
g_pSeatManager->state.pointerFocusResource.reset();
g_pSeatManager->m_state.pointerFocus.reset();
g_pSeatManager->m_state.pointerFocusResource.reset();
}
}
const auto SL = PWINDOW->m_realPosition->goal() - g_pInputManager->getMouseCoordsInternal();
if (g_pKeybindManager->m_uLastCode != 0)
if (g_pKeybindManager->m_lastCode != 0)
g_pSeatManager->setKeyboardFocus(LASTKBSURF);
else
g_pSeatManager->setPointerFocus(LASTMOUSESURF, SL);
@ -2531,7 +2531,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
const auto KEYSYM = xkb_keysym_from_name(KEY.c_str(), XKB_KEYSYM_CASE_INSENSITIVE);
keycode = 0;
const auto KB = g_pSeatManager->keyboard;
const auto KB = g_pSeatManager->m_keyboard;
if (!KB) {
Debug::log(ERR, "sendshortcut: no kb");
@ -2540,7 +2540,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
const auto KEYPAIRSTRING = std::format("{}{}", (uintptr_t)KB.get(), KEY);
if (!g_pKeybindManager->m_mKeyToCodeCache.contains(KEYPAIRSTRING)) {
if (!g_pKeybindManager->m_keyToCodeCache.contains(KEYPAIRSTRING)) {
xkb_keymap* km = KB->m_xkbKeymap;
xkb_state* ks = KB->m_xkbState;
@ -2552,8 +2552,8 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
xkb_keysym_t sym = xkb_state_key_get_one_sym(ks, kc);
if (sym == KEYSYM) {
keycode = kc;
g_pKeybindManager->m_mKeyToCodeCache[KEYPAIRSTRING] = keycode;
keycode = kc;
g_pKeybindManager->m_keyToCodeCache[KEYPAIRSTRING] = keycode;
}
}
@ -2563,7 +2563,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
}
} else
keycode = g_pKeybindManager->m_mKeyToCodeCache[KEYPAIRSTRING];
keycode = g_pKeybindManager->m_keyToCodeCache[KEYPAIRSTRING];
}
if (!keycode) {
@ -2585,7 +2585,7 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
return {.success = false, .error = "sendshortcut: window not found"};
}
if (!g_pSeatManager->keyboard) {
if (!g_pSeatManager->m_keyboard) {
Debug::log(ERR, "No kb in sendshortcut?");
return {.success = false, .error = "No kb in sendshortcut?"};
}
@ -2606,24 +2606,24 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
g_pSeatManager->sendKeyboardMods(MOD, 0, 0, 0);
if (g_pKeybindManager->m_iPassPressed == 1) {
if (g_pKeybindManager->m_passPressed == 1) {
if (!isMouse)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
else
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED);
} else if (g_pKeybindManager->m_iPassPressed == 0) {
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED);
} else if (g_pKeybindManager->m_passPressed == 0) {
if (!isMouse)
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
else
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED);
} else {
// dynamic call of the dispatcher
if (!isMouse) {
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_uTimeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_PRESSED);
g_pSeatManager->sendKeyboardKey(g_pKeybindManager->m_timeLastMs, keycode - 8, WL_KEYBOARD_KEY_STATE_RELEASED);
} else {
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_uTimeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_PRESSED);
g_pSeatManager->sendPointerButton(g_pKeybindManager->m_timeLastMs, keycode, WL_POINTER_BUTTON_STATE_RELEASED);
}
}
@ -2634,11 +2634,11 @@ SDispatchResult CKeybindManager::sendshortcut(std::string args) {
if (PWINDOW->m_isX11) { //xwayland hack, see pass
if (!isMouse) {
g_pSeatManager->state.keyboardFocus.reset();
g_pSeatManager->state.keyboardFocusResource.reset();
g_pSeatManager->m_state.keyboardFocus.reset();
g_pSeatManager->m_state.keyboardFocusResource.reset();
} else {
g_pSeatManager->state.pointerFocus.reset();
g_pSeatManager->state.pointerFocusResource.reset();
g_pSeatManager->m_state.pointerFocus.reset();
g_pSeatManager->m_state.pointerFocusResource.reset();
}
}
@ -2877,13 +2877,13 @@ SDispatchResult CKeybindManager::alterZOrder(std::string args) {
SDispatchResult CKeybindManager::lockGroups(std::string args) {
if (args == "lock" || args.empty() || args == "lockgroups")
g_pKeybindManager->m_bGroupsLocked = true;
g_pKeybindManager->m_groupsLocked = true;
else if (args == "toggle")
g_pKeybindManager->m_bGroupsLocked = !g_pKeybindManager->m_bGroupsLocked;
g_pKeybindManager->m_groupsLocked = !g_pKeybindManager->m_groupsLocked;
else
g_pKeybindManager->m_bGroupsLocked = false;
g_pKeybindManager->m_groupsLocked = false;
g_pEventManager->postEvent(SHyprIPCEvent{"lockgroups", g_pKeybindManager->m_bGroupsLocked ? "1" : "0"});
g_pEventManager->postEvent(SHyprIPCEvent{"lockgroups", g_pKeybindManager->m_groupsLocked ? "1" : "0"});
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
return {};
@ -2962,12 +2962,12 @@ void CKeybindManager::moveWindowOutOfGroup(PHLWINDOW pWindow, const std::string&
} else {
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow);
const auto GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked;
g_pKeybindManager->m_bGroupsLocked = true;
const auto GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked;
g_pKeybindManager->m_groupsLocked = true;
g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow, direction);
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV;
}
if (*BFOCUSREMOVEDWINDOW) {
@ -2986,7 +2986,7 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) {
static auto PIGNOREGROUPLOCK = CConfigValue<Hyprlang::INT>("binds:ignore_group_lock");
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked)
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked)
return {};
if (!isDirection(args)) {
@ -3016,7 +3016,7 @@ SDispatchResult CKeybindManager::moveIntoGroup(std::string args) {
SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) {
static auto PIGNOREGROUPLOCK = CConfigValue<Hyprlang::INT>("binds:ignore_group_lock");
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked)
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked)
return {.success = false, .error = "Groups locked"};
PHLWINDOW PWINDOW = nullptr;
@ -3054,7 +3054,7 @@ SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) {
if (PWINDOW->isFullscreen())
return {};
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_bGroupsLocked) {
if (!*PIGNOREGROUPLOCK && g_pKeybindManager->m_groupsLocked) {
g_pLayoutManager->getCurrentLayout()->moveWindowTo(PWINDOW, args);
return {};
}
@ -3130,7 +3130,7 @@ SDispatchResult CKeybindManager::global(std::string args) {
if (!PROTO::globalShortcuts->isTaken(APPID, NAME))
return {};
PROTO::globalShortcuts->sendGlobalShortcutEvent(APPID, NAME, g_pKeybindManager->m_iPassPressed);
PROTO::globalShortcuts->sendGlobalShortcutEvent(APPID, NAME, g_pKeybindManager->m_passPressed);
return {};
}
@ -3296,21 +3296,21 @@ SDispatchResult CKeybindManager::sendkeystate(std::string args) {
std::string modifiedArgs = ARGS[0] + "," + ARGS[1] + "," + ARGS[3];
const int oldPassPressed = g_pKeybindManager->m_iPassPressed;
const int oldPassPressed = g_pKeybindManager->m_passPressed;
if (STATE == "down")
g_pKeybindManager->m_iPassPressed = 1;
g_pKeybindManager->m_passPressed = 1;
else if (STATE == "up")
g_pKeybindManager->m_iPassPressed = 0;
g_pKeybindManager->m_passPressed = 0;
else if (STATE == "repeat")
g_pKeybindManager->m_iPassPressed = 1;
g_pKeybindManager->m_passPressed = 1;
auto result = sendshortcut(modifiedArgs);
if (STATE == "repeat" && result.success)
result = sendshortcut(modifiedArgs);
g_pKeybindManager->m_iPassPressed = oldPassPressed;
g_pKeybindManager->m_passPressed = oldPassPressed;
if (!result.success && !result.error.empty()) {
size_t pos = result.error.find("sendshortcut:");

View file

@ -100,50 +100,52 @@ class CKeybindManager {
void shadowKeybinds(const xkb_keysym_t& doesntHave = 0, const uint32_t doesntHaveCode = 0);
std::string getCurrentSubmap();
std::unordered_map<std::string, std::function<SDispatchResult(std::string)>> m_mDispatchers;
std::unordered_map<std::string, std::function<SDispatchResult(std::string)>> m_dispatchers;
bool m_bGroupsLocked = false;
bool m_groupsLocked = false;
std::vector<SP<SKeybind>> m_vKeybinds;
std::vector<SP<SKeybind>> m_keybinds;
//since we cant find keycode through keyname in xkb:
//on sendshortcut call, we once search for keyname (e.g. "g") the correct keycode (e.g. 42)
//and cache it in this map to make sendshortcut calls faster
//we also store the keyboard pointer (in the string) to differentiate between different keyboard (layouts)
std::unordered_map<std::string, xkb_keycode_t> m_mKeyToCodeCache;
std::unordered_map<std::string, xkb_keycode_t> m_keyToCodeCache;
static SDispatchResult changeMouseBindMode(const eMouseBindMode mode);
private:
std::vector<SPressedKeyWithMods> m_dPressedKeys;
std::vector<SPressedKeyWithMods> m_pressedKeys;
inline static std::string m_szCurrentSelectedSubmap = "";
inline static std::string m_currentSelectedSubmap = "";
std::vector<WP<SKeybind>> m_vActiveKeybinds;
WP<SKeybind> m_pLastLongPressKeybind;
SP<CEventLoopTimer> m_pLongPressTimer, m_pRepeatKeyTimer;
std::vector<WP<SKeybind>> m_activeKeybinds;
WP<SKeybind> m_lastLongPressKeybind;
uint32_t m_uTimeLastMs = 0;
uint32_t m_uLastCode = 0;
uint32_t m_uLastMouseCode = 0;
SP<CEventLoopTimer> m_longPressTimer;
SP<CEventLoopTimer> m_repeatKeyTimer;
std::vector<WP<SKeybind>> m_vPressedSpecialBinds;
uint32_t m_timeLastMs = 0;
uint32_t m_lastCode = 0;
uint32_t m_lastMouseCode = 0;
int m_iPassPressed = -1; // used for pass
std::vector<WP<SKeybind>> m_pressedSpecialBinds;
CTimer m_tScrollTimer;
int m_passPressed = -1; // used for pass
CTimer m_scrollTimer;
SDispatchResult handleKeybinds(const uint32_t, const SPressedKeyWithMods&, bool);
std::set<xkb_keysym_t> m_sMkKeys = {};
std::set<xkb_keysym_t> m_sMkMods = {};
std::set<xkb_keysym_t> m_mkKeys = {};
std::set<xkb_keysym_t> m_mkMods = {};
eMultiKeyCase mkBindMatches(const SP<SKeybind>);
eMultiKeyCase mkKeysymSetMatches(const std::set<xkb_keysym_t>, const std::set<xkb_keysym_t>);
bool handleInternalKeybinds(xkb_keysym_t);
bool handleVT(xkb_keysym_t);
xkb_state* m_pXKBTranslationState = nullptr;
xkb_state* m_xkbTranslationState = nullptr;
void updateXKBTranslationState();
bool ensureMouseBindState();

View file

@ -1,22 +1,22 @@
#include "LayoutManager.hpp"
CLayoutManager::CLayoutManager() {
m_vLayouts.emplace_back(std::make_pair<>("dwindle", &m_cDwindleLayout));
m_vLayouts.emplace_back(std::make_pair<>("master", &m_cMasterLayout));
m_layouts.emplace_back(std::make_pair<>("dwindle", &m_dwindleLayout));
m_layouts.emplace_back(std::make_pair<>("master", &m_masterLayout));
}
IHyprLayout* CLayoutManager::getCurrentLayout() {
return m_vLayouts[m_iCurrentLayoutID].second;
return m_layouts[m_currentLayoutID].second;
}
void CLayoutManager::switchToLayout(std::string layout) {
for (size_t i = 0; i < m_vLayouts.size(); ++i) {
if (m_vLayouts[i].first == layout) {
if (i == (size_t)m_iCurrentLayoutID)
for (size_t i = 0; i < m_layouts.size(); ++i) {
if (m_layouts[i].first == layout) {
if (i == (size_t)m_currentLayoutID)
return;
getCurrentLayout()->onDisable();
m_iCurrentLayoutID = i;
m_currentLayoutID = i;
getCurrentLayout()->onEnable();
return;
}
@ -26,10 +26,10 @@ void CLayoutManager::switchToLayout(std::string layout) {
}
bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) {
if (std::find_if(m_vLayouts.begin(), m_vLayouts.end(), [&](const auto& other) { return other.first == name || other.second == layout; }) != m_vLayouts.end())
if (std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.first == name || other.second == layout; }) != m_layouts.end())
return false;
m_vLayouts.emplace_back(std::make_pair<>(name, layout));
m_layouts.emplace_back(std::make_pair<>(name, layout));
Debug::log(LOG, "Added new layout {} at {:x}", name, (uintptr_t)layout);
@ -37,24 +37,24 @@ bool CLayoutManager::addLayout(const std::string& name, IHyprLayout* layout) {
}
bool CLayoutManager::removeLayout(IHyprLayout* layout) {
const auto IT = std::find_if(m_vLayouts.begin(), m_vLayouts.end(), [&](const auto& other) { return other.second == layout; });
const auto IT = std::find_if(m_layouts.begin(), m_layouts.end(), [&](const auto& other) { return other.second == layout; });
if (IT == m_vLayouts.end() || IT->first == "dwindle" || IT->first == "master")
if (IT == m_layouts.end() || IT->first == "dwindle" || IT->first == "master")
return false;
if (m_iCurrentLayoutID == IT - m_vLayouts.begin())
if (m_currentLayoutID == IT - m_layouts.begin())
switchToLayout("dwindle");
Debug::log(LOG, "Removed a layout {} at {:x}", IT->first, (uintptr_t)layout);
std::erase(m_vLayouts, *IT);
std::erase(m_layouts, *IT);
return true;
}
std::vector<std::string> CLayoutManager::getAllLayoutNames() {
std::vector<std::string> results(m_vLayouts.size());
for (size_t i = 0; i < m_vLayouts.size(); ++i)
results[i] = m_vLayouts[i].first;
std::vector<std::string> results(m_layouts.size());
for (size_t i = 0; i < m_layouts.size(); ++i)
results[i] = m_layouts[i].first;
return results;
}

View file

@ -21,11 +21,11 @@ class CLayoutManager {
LAYOUT_MASTER
};
int m_iCurrentLayoutID = LAYOUT_DWINDLE;
int m_currentLayoutID = LAYOUT_DWINDLE;
CHyprDwindleLayout m_cDwindleLayout;
CHyprMasterLayout m_cMasterLayout;
std::vector<std::pair<std::string, IHyprLayout*>> m_vLayouts;
CHyprDwindleLayout m_dwindleLayout;
CHyprMasterLayout m_masterLayout;
std::vector<std::pair<std::string, IHyprLayout*>> m_layouts;
};
inline UP<CLayoutManager> g_pLayoutManager;

View file

@ -24,7 +24,7 @@
using namespace Hyprutils::Utils;
CPointerManager::CPointerManager() {
hooks.monitorAdded = g_pHookSystem->hookDynamic("monitorAdded", [this](void* self, SCallbackInfo& info, std::any data) {
m_hooks.monitorAdded = g_pHookSystem->hookDynamic("monitorAdded", [this](void* self, SCallbackInfo& info, std::any data) {
auto PMONITOR = std::any_cast<PHLMONITOR>(data);
onMonitorLayoutChange();
@ -34,12 +34,12 @@ CPointerManager::CPointerManager() {
PMONITOR->m_events.destroy.registerStaticListener(
[this](void* owner, std::any data) {
if (g_pCompositor && !g_pCompositor->m_isShuttingDown)
std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); });
std::erase_if(m_monitorStates, [](const auto& other) { return other->monitor.expired(); });
},
nullptr);
});
hooks.monitorPreRender = g_pHookSystem->hookDynamic("preMonitorCommit", [this](void* self, SCallbackInfo& info, std::any data) {
m_hooks.monitorPreRender = g_pHookSystem->hookDynamic("preMonitorCommit", [this](void* self, SCallbackInfo& info, std::any data) {
auto state = stateFor(std::any_cast<PHLMONITOR>(data));
if (!state)
return;
@ -49,14 +49,14 @@ CPointerManager::CPointerManager() {
}
void CPointerManager::lockSoftwareAll() {
for (auto const& state : monitorStates)
for (auto const& state : m_monitorStates)
state->softwareLocks++;
updateCursorBackend();
}
void CPointerManager::unlockSoftwareAll() {
for (auto const& state : monitorStates)
for (auto const& state : m_monitorStates)
state->softwareLocks--;
updateCursorBackend();
@ -86,26 +86,26 @@ bool CPointerManager::softwareLockedFor(PHLMONITOR mon) {
}
Vector2D CPointerManager::position() {
return pointerPos;
return m_pointerPos;
}
bool CPointerManager::hasCursor() {
return currentCursorImage.pBuffer || currentCursorImage.surface;
return m_currentCursorImage.pBuffer || m_currentCursorImage.surface;
}
SP<CPointerManager::SMonitorPointerState> CPointerManager::stateFor(PHLMONITOR mon) {
auto it = std::find_if(monitorStates.begin(), monitorStates.end(), [mon](const auto& other) { return other->monitor == mon; });
if (it == monitorStates.end())
return monitorStates.emplace_back(makeShared<CPointerManager::SMonitorPointerState>(mon));
auto it = std::find_if(m_monitorStates.begin(), m_monitorStates.end(), [mon](const auto& other) { return other->monitor == mon; });
if (it == m_monitorStates.end())
return m_monitorStates.emplace_back(makeShared<CPointerManager::SMonitorPointerState>(mon));
return *it;
}
void CPointerManager::setCursorBuffer(SP<Aquamarine::IBuffer> buf, const Vector2D& hotspot, const float& scale) {
damageIfSoftware();
if (buf == currentCursorImage.pBuffer) {
if (hotspot != currentCursorImage.hotspot || scale != currentCursorImage.scale) {
currentCursorImage.hotspot = hotspot;
currentCursorImage.scale = scale;
if (buf == m_currentCursorImage.pBuffer) {
if (hotspot != m_currentCursorImage.hotspot || scale != m_currentCursorImage.scale) {
m_currentCursorImage.hotspot = hotspot;
m_currentCursorImage.scale = scale;
updateCursorBackend();
damageIfSoftware();
}
@ -116,12 +116,12 @@ void CPointerManager::setCursorBuffer(SP<Aquamarine::IBuffer> buf, const Vector2
resetCursorImage(false);
if (buf) {
currentCursorImage.size = buf->size;
currentCursorImage.pBuffer = buf;
m_currentCursorImage.size = buf->size;
m_currentCursorImage.pBuffer = buf;
}
currentCursorImage.hotspot = hotspot;
currentCursorImage.scale = scale;
m_currentCursorImage.hotspot = hotspot;
m_currentCursorImage.scale = scale;
updateCursorBackend();
damageIfSoftware();
@ -130,10 +130,10 @@ void CPointerManager::setCursorBuffer(SP<Aquamarine::IBuffer> buf, const Vector2
void CPointerManager::setCursorSurface(SP<CWLSurface> surf, const Vector2D& hotspot) {
damageIfSoftware();
if (surf == currentCursorImage.surface) {
if (hotspot != currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->current.scale : 1.F) != currentCursorImage.scale) {
currentCursorImage.hotspot = hotspot;
currentCursorImage.scale = surf && surf->resource() ? surf->resource()->current.scale : 1.F;
if (surf == m_currentCursorImage.surface) {
if (hotspot != m_currentCursorImage.hotspot || (surf && surf->resource() ? surf->resource()->current.scale : 1.F) != m_currentCursorImage.scale) {
m_currentCursorImage.hotspot = hotspot;
m_currentCursorImage.scale = surf && surf->resource() ? surf->resource()->current.scale : 1.F;
updateCursorBackend();
damageIfSoftware();
}
@ -144,28 +144,28 @@ void CPointerManager::setCursorSurface(SP<CWLSurface> surf, const Vector2D& hots
resetCursorImage(false);
if (surf) {
currentCursorImage.surface = surf;
currentCursorImage.scale = surf->resource()->current.scale;
m_currentCursorImage.surface = surf;
m_currentCursorImage.scale = surf->resource()->current.scale;
surf->resource()->map();
currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); });
currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) {
m_currentCursorImage.destroySurface = surf->m_events.destroy.registerListener([this](std::any data) { resetCursorImage(); });
m_currentCursorImage.commitSurface = surf->resource()->events.commit.registerListener([this](std::any data) {
damageIfSoftware();
currentCursorImage.size = currentCursorImage.surface->resource()->current.texture ? currentCursorImage.surface->resource()->current.bufferSize : Vector2D{};
currentCursorImage.scale = currentCursorImage.surface ? currentCursorImage.surface->resource()->current.scale : 1.F;
m_currentCursorImage.size = m_currentCursorImage.surface->resource()->current.texture ? m_currentCursorImage.surface->resource()->current.bufferSize : Vector2D{};
m_currentCursorImage.scale = m_currentCursorImage.surface ? m_currentCursorImage.surface->resource()->current.scale : 1.F;
recheckEnteredOutputs();
updateCursorBackend();
damageIfSoftware();
});
if (surf->resource()->current.texture) {
currentCursorImage.size = surf->resource()->current.bufferSize;
m_currentCursorImage.size = surf->resource()->current.bufferSize;
surf->resource()->frame(Time::steadyNow());
}
}
currentCursorImage.hotspot = hotspot;
m_currentCursorImage.hotspot = hotspot;
recheckEnteredOutputs();
updateCursorBackend();
@ -178,7 +178,7 @@ void CPointerManager::recheckEnteredOutputs() {
auto box = getCursorBoxGlobal();
for (auto const& s : monitorStates) {
for (auto const& s : m_monitorStates) {
if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled)
continue;
@ -187,12 +187,12 @@ void CPointerManager::recheckEnteredOutputs() {
if (!s->entered && overlaps) {
s->entered = true;
if (!currentCursorImage.surface)
if (!m_currentCursorImage.surface)
continue;
currentCursorImage.surface->resource()->enter(s->monitor.lock());
PROTO::fractional->sendScale(currentCursorImage.surface->resource(), s->monitor->m_scale);
g_pCompositor->setPreferredScaleForSurface(currentCursorImage.surface->resource(), s->monitor->m_scale);
m_currentCursorImage.surface->resource()->enter(s->monitor.lock());
PROTO::fractional->sendScale(m_currentCursorImage.surface->resource(), s->monitor->m_scale);
g_pCompositor->setPreferredScaleForSurface(m_currentCursorImage.surface->resource(), s->monitor->m_scale);
} else if (s->entered && !overlaps) {
s->entered = false;
@ -202,10 +202,10 @@ void CPointerManager::recheckEnteredOutputs() {
(s->monitor->m_output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER))
setHWCursorBuffer(s, nullptr);
if (!currentCursorImage.surface)
if (!m_currentCursorImage.surface)
continue;
currentCursorImage.surface->resource()->leave(s->monitor.lock());
m_currentCursorImage.surface->resource()->leave(s->monitor.lock());
}
}
}
@ -213,26 +213,26 @@ void CPointerManager::recheckEnteredOutputs() {
void CPointerManager::resetCursorImage(bool apply) {
damageIfSoftware();
if (currentCursorImage.surface) {
if (m_currentCursorImage.surface) {
for (auto const& m : g_pCompositor->m_monitors) {
currentCursorImage.surface->resource()->leave(m);
m_currentCursorImage.surface->resource()->leave(m);
}
currentCursorImage.surface->resource()->unmap();
m_currentCursorImage.surface->resource()->unmap();
currentCursorImage.destroySurface.reset();
currentCursorImage.commitSurface.reset();
currentCursorImage.surface.reset();
} else if (currentCursorImage.pBuffer)
currentCursorImage.pBuffer = nullptr;
m_currentCursorImage.destroySurface.reset();
m_currentCursorImage.commitSurface.reset();
m_currentCursorImage.surface.reset();
} else if (m_currentCursorImage.pBuffer)
m_currentCursorImage.pBuffer = nullptr;
if (currentCursorImage.bufferTex)
currentCursorImage.bufferTex = nullptr;
if (m_currentCursorImage.bufferTex)
m_currentCursorImage.bufferTex = nullptr;
currentCursorImage.scale = 1.F;
currentCursorImage.hotspot = {0, 0};
m_currentCursorImage.scale = 1.F;
m_currentCursorImage.hotspot = {0, 0};
for (auto const& s : monitorStates) {
for (auto const& s : m_monitorStates) {
if (s->monitor.expired() || s->monitor->isMirror() || !s->monitor->m_enabled)
continue;
@ -242,7 +242,7 @@ void CPointerManager::resetCursorImage(bool apply) {
if (!apply)
return;
for (auto const& ms : monitorStates) {
for (auto const& ms : m_monitorStates) {
if (!ms->monitor || !ms->monitor->m_enabled || !ms->monitor->m_dpmsStatus) {
Debug::log(TRACE, "Not updating hw cursors: disabled / dpms off display");
continue;
@ -392,7 +392,7 @@ bool CPointerManager::setHWCursorBuffer(SP<SMonitorPointerState> state, SP<Aquam
SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager::SMonitorPointerState> state, SP<CTexture> texture) {
auto maxSize = state->monitor->m_output->cursorPlaneSize();
auto const& cursorSize = currentCursorImage.size;
auto const& cursorSize = m_currentCursorImage.size;
static auto PCPUBUFFER = CConfigValue<Hyprlang::INT>("cursor:use_cpu_buffer");
@ -403,7 +403,7 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
if (maxSize != Vector2D{-1, -1}) {
if (cursorSize.x > maxSize.x || cursorSize.y > maxSize.y) {
Debug::log(TRACE, "hardware cursor too big! {} > {}", currentCursorImage.size, maxSize);
Debug::log(TRACE, "hardware cursor too big! {} > {}", m_currentCursorImage.size, maxSize);
return nullptr;
}
} else
@ -464,8 +464,8 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
// get the texture data if available.
auto texData = texture->dataCopy();
if (texData.empty()) {
if (currentCursorImage.surface && currentCursorImage.surface->resource()->role->role() == SURFACE_ROLE_CURSOR) {
const auto SURFACE = currentCursorImage.surface->resource();
if (m_currentCursorImage.surface && m_currentCursorImage.surface->resource()->role->role() == SURFACE_ROLE_CURSOR) {
const auto SURFACE = m_currentCursorImage.surface->resource();
auto& shmBuffer = CCursorSurfaceRole::cursorPixelData(SURFACE);
bool flipRB = false;
@ -523,7 +523,7 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
const auto TR = state->monitor->m_transform;
// we need to scale the cursor to the right size, because it might not be (esp with XCursor)
const auto SCALE = texture->m_vSize / (currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale);
const auto SCALE = texture->m_vSize / (m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale);
cairo_matrix_scale(&matrixPre, SCALE.x, SCALE.y);
if (TR) {
@ -577,9 +577,9 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
g_pHyprOpenGL->beginSimple(state->monitor.lock(), {0, 0, INT16_MAX, INT16_MAX}, RBO);
g_pHyprOpenGL->clear(CHyprColor{0.F, 0.F, 0.F, 0.F});
CBox xbox = {{}, Vector2D{currentCursorImage.size / currentCursorImage.scale * state->monitor->m_scale}.round()};
Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->m_name, currentCursorImage.size, cursorSize,
currentCursorImage.scale, state->monitor->m_scale, xbox.size());
CBox xbox = {{}, Vector2D{m_currentCursorImage.size / m_currentCursorImage.scale * state->monitor->m_scale}.round()};
Debug::log(TRACE, "[pointer] monitor: {}, size: {}, hw buf: {}, scale: {:.2f}, monscale: {:.2f}, xbox: {}", state->monitor->m_name, m_currentCursorImage.size, cursorSize,
m_currentCursorImage.scale, state->monitor->m_scale, xbox.size());
g_pHyprOpenGL->renderTexture(texture, xbox, 1.F);
@ -599,8 +599,8 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::
auto state = stateFor(pMonitor);
if (!state->hardwareFailed && state->softwareLocks == 0 && !forceRender) {
if (currentCursorImage.surface)
currentCursorImage.surface->resource()->frame(now);
if (m_currentCursorImage.surface)
m_currentCursorImage.surface->resource()->frame(now);
return;
}
@ -627,12 +627,12 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::
g_pHyprRenderer->m_sRenderPass.add(makeShared<CTexPassElement>(data));
if (currentCursorImage.surface)
currentCursorImage.surface->resource()->frame(now);
if (m_currentCursorImage.surface)
m_currentCursorImage.surface->resource()->frame(now);
}
Vector2D CPointerManager::getCursorPosForMonitor(PHLMONITOR pMonitor) {
return CBox{pointerPos - pMonitor->m_position, {0, 0}}
return CBox{m_pointerPos - pMonitor->m_position, {0, 0}}
.transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_transformedSize.x / pMonitor->m_scale,
pMonitor->m_transformedSize.y / pMonitor->m_scale)
.pos() *
@ -643,7 +643,7 @@ Vector2D CPointerManager::transformedHotspot(PHLMONITOR pMonitor) {
if (!pMonitor->m_cursorSwapchain)
return {}; // doesn't matter, we have no hw cursor, and this is only for hw cursors
return CBox{currentCursorImage.hotspot * pMonitor->m_scale, {0, 0}}
return CBox{m_currentCursorImage.hotspot * pMonitor->m_scale, {0, 0}}
.transform(wlTransformToHyprutils(invertTransform(pMonitor->m_transform)), pMonitor->m_cursorSwapchain->currentOptions().size.x,
pMonitor->m_cursorSwapchain->currentOptions().size.y)
.pos();
@ -654,7 +654,7 @@ CBox CPointerManager::getCursorBoxLogicalForMonitor(PHLMONITOR pMonitor) {
}
CBox CPointerManager::getCursorBoxGlobal() {
return CBox{pointerPos, currentCursorImage.size / currentCursorImage.scale}.translate(-currentCursorImage.hotspot);
return CBox{m_pointerPos, m_currentCursorImage.size / m_currentCursorImage.scale}.translate(-m_currentCursorImage.hotspot);
}
Vector2D CPointerManager::closestValid(const Vector2D& pos) {
@ -665,7 +665,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) {
//
static auto INSIDE_LAYOUT = [this](const CBox& box) -> bool {
for (auto const& b : currentMonitorLayout.monitorBoxes) {
for (auto const& b : m_currentMonitorLayout.monitorBoxes) {
if (box.inside(b))
return true;
}
@ -673,7 +673,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) {
};
static auto INSIDE_LAYOUT_COORD = [this](const Vector2D& vec) -> bool {
for (auto const& b : currentMonitorLayout.monitorBoxes) {
for (auto const& b : m_currentMonitorLayout.monitorBoxes) {
if (b.containsPoint(vec))
return true;
}
@ -684,7 +684,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) {
Vector2D leader;
float distanceSq = __FLT_MAX__;
for (auto const& b : currentMonitorLayout.monitorBoxes) {
for (auto const& b : m_currentMonitorLayout.monitorBoxes) {
auto p = b.closestPoint(vec);
auto distSq = p.distanceSq(vec);
@ -736,7 +736,7 @@ Vector2D CPointerManager::closestValid(const Vector2D& pos) {
void CPointerManager::damageIfSoftware() {
auto b = getCursorBoxGlobal().expand(4);
for (auto const& mw : monitorStates) {
for (auto const& mw : m_monitorStates) {
if (mw->monitor.expired() || !mw->monitor->m_output)
continue;
@ -751,7 +751,7 @@ void CPointerManager::damageIfSoftware() {
void CPointerManager::warpTo(const Vector2D& logical) {
damageIfSoftware();
pointerPos = closestValid(logical);
m_pointerPos = closestValid(logical);
if (!g_pInputManager->isLocked()) {
recheckEnteredOutputs();
@ -762,7 +762,7 @@ void CPointerManager::warpTo(const Vector2D& logical) {
}
void CPointerManager::move(const Vector2D& deltaLogical) {
const auto oldPos = pointerPos;
const auto oldPos = m_pointerPos;
auto newPos = oldPos + Vector2D{std::isnan(deltaLogical.x) ? 0.0 : deltaLogical.x, std::isnan(deltaLogical.y) ? 0.0 : deltaLogical.y};
warpTo(newPos);
@ -839,10 +839,10 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP<IHID> dev) {
damageIfSoftware();
if (std::isnan(abs.x) || std::isnan(abs.y)) {
pointerPos.x = std::isnan(abs.x) ? pointerPos.x : mappedArea.x + mappedArea.w * abs.x;
pointerPos.y = std::isnan(abs.y) ? pointerPos.y : mappedArea.y + mappedArea.h * abs.y;
m_pointerPos.x = std::isnan(abs.x) ? m_pointerPos.x : mappedArea.x + mappedArea.w * abs.x;
m_pointerPos.y = std::isnan(abs.y) ? m_pointerPos.y : mappedArea.y + mappedArea.h * abs.y;
} else
pointerPos = mappedArea.pos() + mappedArea.size() * abs;
m_pointerPos = mappedArea.pos() + mappedArea.size() * abs;
onCursorMoved();
recheckEnteredOutputs();
@ -851,17 +851,17 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP<IHID> dev) {
}
void CPointerManager::onMonitorLayoutChange() {
currentMonitorLayout.monitorBoxes.clear();
m_currentMonitorLayout.monitorBoxes.clear();
for (auto const& m : g_pCompositor->m_monitors) {
if (m->isMirror() || !m->m_enabled || !m->m_output)
continue;
currentMonitorLayout.monitorBoxes.emplace_back(m->m_position, m->m_size);
m_currentMonitorLayout.monitorBoxes.emplace_back(m->m_position, m->m_size);
}
damageIfSoftware();
pointerPos = closestValid(pointerPos);
m_pointerPos = closestValid(m_pointerPos);
updateCursorBackend();
recheckEnteredOutputs();
@ -869,16 +869,16 @@ void CPointerManager::onMonitorLayoutChange() {
}
SP<CTexture> CPointerManager::getCurrentCursorTexture() {
if (!currentCursorImage.pBuffer && (!currentCursorImage.surface || !currentCursorImage.surface->resource()->current.texture))
if (!m_currentCursorImage.pBuffer && (!m_currentCursorImage.surface || !m_currentCursorImage.surface->resource()->current.texture))
return nullptr;
if (currentCursorImage.pBuffer) {
if (!currentCursorImage.bufferTex)
currentCursorImage.bufferTex = makeShared<CTexture>(currentCursorImage.pBuffer, true);
return currentCursorImage.bufferTex;
if (m_currentCursorImage.pBuffer) {
if (!m_currentCursorImage.bufferTex)
m_currentCursorImage.bufferTex = makeShared<CTexture>(m_currentCursorImage.pBuffer, true);
return m_currentCursorImage.bufferTex;
}
return currentCursorImage.surface->resource()->current.texture;
return m_currentCursorImage.surface->resource()->current.texture;
}
void CPointerManager::attachPointer(SP<IPointer> pointer) {
@ -888,7 +888,7 @@ void CPointerManager::attachPointer(SP<IPointer> pointer) {
static auto PMOUSEDPMS = CConfigValue<Hyprlang::INT>("misc:mouse_move_enables_dpms");
//
auto listener = pointerListeners.emplace_back(makeShared<SPointerListener>());
auto listener = m_pointerListeners.emplace_back(makeShared<SPointerListener>());
listener->pointer = pointer;
@ -937,12 +937,12 @@ void CPointerManager::attachPointer(SP<IPointer> pointer) {
listener->frame = pointer->m_pointerEvents.frame.registerListener([] (std::any e) {
bool shouldSkip = false;
if (!g_pSeatManager->mouse.expired() && g_pInputManager->isLocked()) {
if (!g_pSeatManager->m_mouse.expired() && g_pInputManager->isLocked()) {
auto PMONITOR = g_pCompositor->m_lastMonitor.get();
shouldSkip = PMONITOR && PMONITOR->shouldSkipScheduleFrameOnMouseEvent();
}
g_pSeatManager->isPointerFrameSkipped = shouldSkip;
if (!g_pSeatManager->isPointerFrameSkipped)
g_pSeatManager->m_isPointerFrameSkipped = shouldSkip;
if (!g_pSeatManager->m_isPointerFrameSkipped)
g_pSeatManager->sendPointerFrame();
});
@ -1027,7 +1027,7 @@ void CPointerManager::attachTouch(SP<ITouch> touch) {
static auto PMOUSEDPMS = CConfigValue<Hyprlang::INT>("misc:mouse_move_enables_dpms");
//
auto listener = touchListeners.emplace_back(makeShared<STouchListener>());
auto listener = m_touchListeners.emplace_back(makeShared<STouchListener>());
listener->touch = touch;
@ -1082,7 +1082,7 @@ void CPointerManager::attachTablet(SP<CTablet> tablet) {
static auto PMOUSEDPMS = CConfigValue<Hyprlang::INT>("misc:mouse_move_enables_dpms");
//
auto listener = tabletListeners.emplace_back(makeShared<STabletListener>());
auto listener = m_tabletListeners.emplace_back(makeShared<STabletListener>());
listener->tablet = tablet;
@ -1134,19 +1134,19 @@ void CPointerManager::attachTablet(SP<CTablet> tablet) {
}
void CPointerManager::detachPointer(SP<IPointer> pointer) {
std::erase_if(pointerListeners, [pointer](const auto& e) { return e->pointer.expired() || e->pointer == pointer; });
std::erase_if(m_pointerListeners, [pointer](const auto& e) { return e->pointer.expired() || e->pointer == pointer; });
}
void CPointerManager::detachTouch(SP<ITouch> touch) {
std::erase_if(touchListeners, [touch](const auto& e) { return e->touch.expired() || e->touch == touch; });
std::erase_if(m_touchListeners, [touch](const auto& e) { return e->touch.expired() || e->touch == touch; });
}
void CPointerManager::detachTablet(SP<CTablet> tablet) {
std::erase_if(tabletListeners, [tablet](const auto& e) { return e->tablet.expired() || e->tablet == tablet; });
std::erase_if(m_tabletListeners, [tablet](const auto& e) { return e->tablet.expired() || e->tablet == tablet; });
}
void CPointerManager::damageCursor(PHLMONITOR pMonitor) {
for (auto const& mw : monitorStates) {
for (auto const& mw : m_monitorStates) {
if (mw->monitor != pMonitor)
continue;
@ -1162,24 +1162,24 @@ void CPointerManager::damageCursor(PHLMONITOR pMonitor) {
}
Vector2D CPointerManager::cursorSizeLogical() {
return currentCursorImage.size / currentCursorImage.scale;
return m_currentCursorImage.size / m_currentCursorImage.scale;
}
void CPointerManager::storeMovement(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) {
storedTime = time;
storedDelta += delta;
storedUnaccel += deltaUnaccel;
m_storedTime = time;
m_storedDelta += delta;
m_storedUnaccel += deltaUnaccel;
}
void CPointerManager::setStoredMovement(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) {
storedTime = time;
storedDelta = delta;
storedUnaccel = deltaUnaccel;
m_storedTime = time;
m_storedDelta = delta;
m_storedUnaccel = deltaUnaccel;
}
void CPointerManager::sendStoredMovement() {
PROTO::relativePointer->sendRelativeMotion((uint64_t)storedTime * 1000, storedDelta, storedUnaccel);
storedTime = 0;
storedDelta = Vector2D{};
storedUnaccel = Vector2D{};
PROTO::relativePointer->sendRelativeMotion((uint64_t)m_storedTime * 1000, m_storedDelta, m_storedUnaccel);
m_storedTime = 0;
m_storedDelta = Vector2D{};
m_storedUnaccel = Vector2D{};
}

View file

@ -110,7 +110,7 @@ class CPointerManager {
WP<IPointer> pointer;
};
std::vector<SP<SPointerListener>> pointerListeners;
std::vector<SP<SPointerListener>> m_pointerListeners;
struct STouchListener {
CHyprSignalListener destroy;
@ -122,7 +122,7 @@ class CPointerManager {
WP<ITouch> touch;
};
std::vector<SP<STouchListener>> touchListeners;
std::vector<SP<STouchListener>> m_touchListeners;
struct STabletListener {
CHyprSignalListener destroy;
@ -133,11 +133,11 @@ class CPointerManager {
WP<CTablet> tablet;
};
std::vector<SP<STabletListener>> tabletListeners;
std::vector<SP<STabletListener>> m_tabletListeners;
struct {
std::vector<CBox> monitorBoxes;
} currentMonitorLayout;
} m_currentMonitorLayout;
struct {
SP<Aquamarine::IBuffer> pBuffer;
@ -150,13 +150,13 @@ class CPointerManager {
CHyprSignalListener destroySurface;
CHyprSignalListener commitSurface;
} currentCursorImage; // TODO: support various sizes per-output so we can have pixel-perfect cursors
} m_currentCursorImage; // TODO: support various sizes per-output so we can have pixel-perfect cursors
Vector2D pointerPos = {0, 0};
Vector2D m_pointerPos = {0, 0};
uint64_t storedTime = 0;
Vector2D storedDelta = {0, 0};
Vector2D storedUnaccel = {0, 0};
uint64_t m_storedTime = 0;
Vector2D m_storedDelta = {0, 0};
Vector2D m_storedUnaccel = {0, 0};
struct SMonitorPointerState {
SMonitorPointerState(const PHLMONITOR& m) : monitor(m) {}
@ -174,7 +174,7 @@ class CPointerManager {
SP<Aquamarine::IBuffer> cursorFrontBuffer;
};
std::vector<SP<SMonitorPointerState>> monitorStates;
std::vector<SP<SMonitorPointerState>> m_monitorStates;
SP<SMonitorPointerState> stateFor(PHLMONITOR mon);
bool attemptHardwareCursor(SP<SMonitorPointerState> state);
SP<Aquamarine::IBuffer> renderHWCursorBuffer(SP<SMonitorPointerState> state, SP<CTexture> texture);
@ -183,7 +183,7 @@ class CPointerManager {
struct {
SP<HOOK_CALLBACK_FN> monitorAdded;
SP<HOOK_CALLBACK_FN> monitorPreRender;
} hooks;
} m_hooks;
};
inline UP<CPointerManager> g_pPointerManager;

View file

@ -122,7 +122,7 @@ CProtocolManager::CProtocolManager() {
PROTO::outputs.emplace(M->m_name, ref);
ref->self = ref;
m_mModeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); });
m_modeChangeListeners[M->m_name] = M->m_events.modeChanged.registerListener([M, this](std::any d) { onMonitorModeChange(M); });
});
static auto P2 = g_pHookSystem->hookDynamic("monitorRemoved", [this](void* self, SCallbackInfo& info, std::any param) {
@ -130,7 +130,7 @@ CProtocolManager::CProtocolManager() {
if (!PROTO::outputs.contains(M->m_name))
return;
PROTO::outputs.at(M->m_name)->remove();
m_mModeChangeListeners.erase(M->m_name);
m_modeChangeListeners.erase(M->m_name);
});
// Core

View file

@ -13,7 +13,7 @@ class CProtocolManager {
bool isGlobalPrivileged(const wl_global* global);
private:
std::unordered_map<std::string, CHyprSignalListener> m_mModeChangeListeners;
std::unordered_map<std::string, CHyprSignalListener> m_modeChangeListeners;
void onMonitorModeChange(PHLMONITOR pMonitor);
};

View file

@ -14,20 +14,20 @@
#include <ranges>
CSeatManager::CSeatManager() {
listeners.newSeatResource = PROTO::seat->events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast<SP<CWLSeatResource>>(res)); });
m_listeners.newSeatResource = PROTO::seat->events.newSeatResource.registerListener([this](std::any res) { onNewSeatResource(std::any_cast<SP<CWLSeatResource>>(res)); });
}
CSeatManager::SSeatResourceContainer::SSeatResourceContainer(SP<CWLSeatResource> res) : resource(res) {
listeners.destroy = res->events.destroy.registerListener(
[this](std::any data) { std::erase_if(g_pSeatManager->seatResources, [this](const auto& e) { return e->resource.expired() || e->resource == resource; }); });
[this](std::any data) { std::erase_if(g_pSeatManager->m_seatResources, [this](const auto& e) { return e->resource.expired() || e->resource == resource; }); });
}
void CSeatManager::onNewSeatResource(SP<CWLSeatResource> resource) {
seatResources.emplace_back(makeShared<SSeatResourceContainer>(resource));
m_seatResources.emplace_back(makeShared<SSeatResourceContainer>(resource));
}
SP<CSeatManager::SSeatResourceContainer> CSeatManager::containerForResource(SP<CWLSeatResource> seatResource) {
for (auto const& c : seatResources) {
for (auto const& c : m_seatResources) {
if (c->resource == seatResource)
return c;
}
@ -76,19 +76,19 @@ void CSeatManager::updateCapabilities(uint32_t capabilities) {
}
void CSeatManager::setMouse(SP<IPointer> MAUZ) {
if (mouse == MAUZ)
if (m_mouse == MAUZ)
return;
mouse = MAUZ;
m_mouse = MAUZ;
}
void CSeatManager::setKeyboard(SP<IKeyboard> KEEB) {
if (keyboard == KEEB)
if (m_keyboard == KEEB)
return;
if (keyboard)
keyboard->m_active = false;
keyboard = KEEB;
if (m_keyboard)
m_keyboard->m_active = false;
m_keyboard = KEEB;
if (KEEB)
KEEB->m_active = true;
@ -97,25 +97,25 @@ void CSeatManager::setKeyboard(SP<IKeyboard> KEEB) {
}
void CSeatManager::updateActiveKeyboardData() {
if (keyboard)
PROTO::seat->updateRepeatInfo(keyboard->m_repeatRate, keyboard->m_repeatDelay);
if (m_keyboard)
PROTO::seat->updateRepeatInfo(m_keyboard->m_repeatRate, m_keyboard->m_repeatDelay);
PROTO::seat->updateKeymap();
}
void CSeatManager::setKeyboardFocus(SP<CWLSurfaceResource> surf) {
if (state.keyboardFocus == surf)
if (m_state.keyboardFocus == surf)
return;
if (!keyboard) {
if (!m_keyboard) {
Debug::log(ERR, "BUG THIS: setKeyboardFocus without a valid keyboard set");
return;
}
listeners.keyboardSurfaceDestroy.reset();
m_listeners.keyboardSurfaceDestroy.reset();
if (state.keyboardFocusResource) {
auto client = state.keyboardFocusResource->client();
for (auto const& s : seatResources) {
if (m_state.keyboardFocusResource) {
auto client = m_state.keyboardFocusResource->client();
for (auto const& s : m_seatResources) {
if (s->resource->client() != client)
continue;
@ -128,40 +128,40 @@ void CSeatManager::setKeyboardFocus(SP<CWLSurfaceResource> surf) {
}
}
state.keyboardFocusResource.reset();
state.keyboardFocus = surf;
m_state.keyboardFocusResource.reset();
m_state.keyboardFocus = surf;
if (!surf) {
events.keyboardFocusChange.emit();
m_events.keyboardFocusChange.emit();
return;
}
auto client = surf->client();
for (auto const& r : seatResources | std::views::reverse) {
for (auto const& r : m_seatResources | std::views::reverse) {
if (r->resource->client() != client)
continue;
state.keyboardFocusResource = r->resource;
m_state.keyboardFocusResource = r->resource;
for (auto const& k : r->resource->keyboards) {
if (!k)
continue;
k->sendEnter(surf);
k->sendMods(keyboard->m_modifiersState.depressed, keyboard->m_modifiersState.latched, keyboard->m_modifiersState.locked, keyboard->m_modifiersState.group);
k->sendMods(m_keyboard->m_modifiersState.depressed, m_keyboard->m_modifiersState.latched, m_keyboard->m_modifiersState.locked, m_keyboard->m_modifiersState.group);
}
}
listeners.keyboardSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); });
m_listeners.keyboardSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setKeyboardFocus(nullptr); });
events.keyboardFocusChange.emit();
m_events.keyboardFocusChange.emit();
}
void CSeatManager::sendKeyboardKey(uint32_t timeMs, uint32_t key, wl_keyboard_key_state state_) {
if (!state.keyboardFocusResource)
if (!m_state.keyboardFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.keyboardFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.keyboardFocusResource->client())
continue;
for (auto const& k : s->resource->keyboards) {
@ -174,11 +174,11 @@ void CSeatManager::sendKeyboardKey(uint32_t timeMs, uint32_t key, wl_keyboard_ke
}
void CSeatManager::sendKeyboardMods(uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group) {
if (!state.keyboardFocusResource)
if (!m_state.keyboardFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.keyboardFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.keyboardFocusResource->client())
continue;
for (auto const& k : s->resource->keyboards) {
@ -191,28 +191,28 @@ void CSeatManager::sendKeyboardMods(uint32_t depressed, uint32_t latched, uint32
}
void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D& local) {
if (state.pointerFocus == surf)
if (m_state.pointerFocus == surf)
return;
if (PROTO::data->dndActive() && surf) {
if (state.dndPointerFocus == surf)
if (m_state.dndPointerFocus == surf)
return;
Debug::log(LOG, "[seatmgr] Refusing pointer focus during an active dnd, but setting dndPointerFocus");
state.dndPointerFocus = surf;
events.dndPointerFocusChange.emit();
m_state.dndPointerFocus = surf;
m_events.dndPointerFocusChange.emit();
return;
}
if (!mouse) {
if (!m_mouse) {
Debug::log(ERR, "BUG THIS: setPointerFocus without a valid mouse set");
return;
}
listeners.pointerSurfaceDestroy.reset();
m_listeners.pointerSurfaceDestroy.reset();
if (state.pointerFocusResource) {
auto client = state.pointerFocusResource->client();
for (auto const& s : seatResources) {
if (m_state.pointerFocusResource) {
auto client = m_state.pointerFocusResource->client();
for (auto const& s : m_seatResources) {
if (s->resource->client() != client)
continue;
@ -225,26 +225,26 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
}
}
auto lastPointerFocusResource = state.pointerFocusResource;
auto lastPointerFocusResource = m_state.pointerFocusResource;
state.dndPointerFocus.reset();
state.pointerFocusResource.reset();
state.pointerFocus = surf;
m_state.dndPointerFocus.reset();
m_state.pointerFocusResource.reset();
m_state.pointerFocus = surf;
if (!surf) {
sendPointerFrame(lastPointerFocusResource);
events.pointerFocusChange.emit();
m_events.pointerFocusChange.emit();
return;
}
state.dndPointerFocus = surf;
m_state.dndPointerFocus = surf;
auto client = surf->client();
for (auto const& r : seatResources | std::views::reverse) {
for (auto const& r : m_seatResources | std::views::reverse) {
if (r->resource->client() != client)
continue;
state.pointerFocusResource = r->resource;
m_state.pointerFocusResource = r->resource;
for (auto const& p : r->resource->pointers) {
if (!p)
continue;
@ -253,23 +253,23 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
}
}
if (state.pointerFocusResource != lastPointerFocusResource)
if (m_state.pointerFocusResource != lastPointerFocusResource)
sendPointerFrame(lastPointerFocusResource);
sendPointerFrame();
listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); });
m_listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); });
events.pointerFocusChange.emit();
events.dndPointerFocusChange.emit();
m_events.pointerFocusChange.emit();
m_events.dndPointerFocusChange.emit();
}
void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) {
if (!state.pointerFocusResource)
if (!m_state.pointerFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.pointerFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.pointerFocusResource->client())
continue;
for (auto const& p : s->resource->pointers) {
@ -280,15 +280,15 @@ void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) {
}
}
lastLocalCoords = local;
m_lastLocalCoords = local;
}
void CSeatManager::sendPointerButton(uint32_t timeMs, uint32_t key, wl_pointer_button_state state_) {
if (!state.pointerFocusResource || PROTO::data->dndActive())
if (!m_state.pointerFocusResource || PROTO::data->dndActive())
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.pointerFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.pointerFocusResource->client())
continue;
for (auto const& p : s->resource->pointers) {
@ -301,17 +301,17 @@ void CSeatManager::sendPointerButton(uint32_t timeMs, uint32_t key, wl_pointer_b
}
void CSeatManager::sendPointerFrame() {
if (!state.pointerFocusResource)
if (!m_state.pointerFocusResource)
return;
sendPointerFrame(state.pointerFocusResource);
sendPointerFrame(m_state.pointerFocusResource);
}
void CSeatManager::sendPointerFrame(WP<CWLSeatResource> pResource) {
if (!pResource)
return;
for (auto const& s : seatResources) {
for (auto const& s : m_seatResources) {
if (s->resource->client() != pResource->client())
continue;
@ -326,11 +326,11 @@ void CSeatManager::sendPointerFrame(WP<CWLSeatResource> pResource) {
void CSeatManager::sendPointerAxis(uint32_t timeMs, wl_pointer_axis axis, double value, int32_t discrete, int32_t value120, wl_pointer_axis_source source,
wl_pointer_axis_relative_direction relative) {
if (!state.pointerFocusResource)
if (!m_state.pointerFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.pointerFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.pointerFocusResource->client())
continue;
for (auto const& p : s->resource->pointers) {
@ -353,17 +353,17 @@ void CSeatManager::sendPointerAxis(uint32_t timeMs, wl_pointer_axis axis, double
}
void CSeatManager::sendTouchDown(SP<CWLSurfaceResource> surf, uint32_t timeMs, int32_t id, const Vector2D& local) {
listeners.touchSurfaceDestroy.reset();
m_listeners.touchSurfaceDestroy.reset();
state.touchFocusResource.reset();
state.touchFocus = surf;
m_state.touchFocusResource.reset();
m_state.touchFocus = surf;
auto client = surf->client();
for (auto const& r : seatResources | std::views::reverse) {
for (auto const& r : m_seatResources | std::views::reverse) {
if (r->resource->client() != client)
continue;
state.touchFocusResource = r->resource;
m_state.touchFocusResource = r->resource;
for (auto const& t : r->resource->touches) {
if (!t)
continue;
@ -372,24 +372,24 @@ void CSeatManager::sendTouchDown(SP<CWLSurfaceResource> surf, uint32_t timeMs, i
}
}
listeners.touchSurfaceDestroy = surf->events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); });
m_listeners.touchSurfaceDestroy = surf->events.destroy.registerListener([this, timeMs, id](std::any d) { sendTouchUp(timeMs + 10, id); });
touchLocks++;
m_touchLocks++;
if (touchLocks <= 1)
events.touchFocusChange.emit();
if (m_touchLocks <= 1)
m_events.touchFocusChange.emit();
}
void CSeatManager::sendTouchUp(uint32_t timeMs, int32_t id) {
if (!state.touchFocusResource || touchLocks <= 0)
if (!m_state.touchFocusResource || m_touchLocks <= 0)
return;
auto client = state.touchFocusResource->client();
for (auto const& r : seatResources | std::views::reverse) {
auto client = m_state.touchFocusResource->client();
for (auto const& r : m_seatResources | std::views::reverse) {
if (r->resource->client() != client)
continue;
state.touchFocusResource = r->resource;
m_state.touchFocusResource = r->resource;
for (auto const& t : r->resource->touches) {
if (!t)
continue;
@ -398,18 +398,18 @@ void CSeatManager::sendTouchUp(uint32_t timeMs, int32_t id) {
}
}
touchLocks--;
m_touchLocks--;
if (touchLocks <= 0)
events.touchFocusChange.emit();
if (m_touchLocks <= 0)
m_events.touchFocusChange.emit();
}
void CSeatManager::sendTouchMotion(uint32_t timeMs, int32_t id, const Vector2D& local) {
if (!state.touchFocusResource)
if (!m_state.touchFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.touchFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.touchFocusResource->client())
continue;
for (auto const& t : s->resource->touches) {
@ -422,11 +422,11 @@ void CSeatManager::sendTouchMotion(uint32_t timeMs, int32_t id, const Vector2D&
}
void CSeatManager::sendTouchFrame() {
if (!state.touchFocusResource)
if (!m_state.touchFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.touchFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.touchFocusResource->client())
continue;
for (auto const& t : s->resource->touches) {
@ -439,11 +439,11 @@ void CSeatManager::sendTouchFrame() {
}
void CSeatManager::sendTouchCancel() {
if (!state.touchFocusResource)
if (!m_state.touchFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.touchFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.touchFocusResource->client())
continue;
for (auto const& t : s->resource->touches) {
@ -456,11 +456,11 @@ void CSeatManager::sendTouchCancel() {
}
void CSeatManager::sendTouchShape(int32_t id, const Vector2D& shape) {
if (!state.touchFocusResource)
if (!m_state.touchFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.touchFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.touchFocusResource->client())
continue;
for (auto const& t : s->resource->touches) {
@ -473,11 +473,11 @@ void CSeatManager::sendTouchShape(int32_t id, const Vector2D& shape) {
}
void CSeatManager::sendTouchOrientation(int32_t id, double angle) {
if (!state.touchFocusResource)
if (!m_state.touchFocusResource)
return;
for (auto const& s : seatResources) {
if (s->resource->client() != state.touchFocusResource->client())
for (auto const& s : m_seatResources) {
if (s->resource->client() != m_state.touchFocusResource->client())
continue;
for (auto const& t : s->resource->touches) {
@ -490,13 +490,13 @@ void CSeatManager::sendTouchOrientation(int32_t id, double angle) {
}
void CSeatManager::refocusGrab() {
if (!seatGrab)
if (!m_seatGrab)
return;
if (seatGrab->surfs.size() > 0) {
if (m_seatGrab->m_surfs.size() > 0) {
// try to find a surf in focus first
const auto MOUSE = g_pInputManager->getMouseCoordsInternal();
for (auto const& s : seatGrab->surfs) {
for (auto const& s : m_seatGrab->m_surfs) {
auto hlSurf = CWLSurface::fromResource(s.lock());
if (!hlSurf)
continue;
@ -508,23 +508,23 @@ void CSeatManager::refocusGrab() {
if (!b->containsPoint(MOUSE))
continue;
if (seatGrab->keyboard)
if (m_seatGrab->m_keyboard)
setKeyboardFocus(s.lock());
if (seatGrab->pointer)
if (m_seatGrab->m_pointer)
setPointerFocus(s.lock(), MOUSE - b->pos());
return;
}
SP<CWLSurfaceResource> surf = seatGrab->surfs.at(0).lock();
if (seatGrab->keyboard)
SP<CWLSurfaceResource> surf = m_seatGrab->m_surfs.at(0).lock();
if (m_seatGrab->m_keyboard)
setKeyboardFocus(surf);
if (seatGrab->pointer)
if (m_seatGrab->m_pointer)
setPointerFocus(surf, {});
}
}
void CSeatManager::onSetCursor(SP<CWLSeatResource> seatResource, uint32_t serial, SP<CWLSurfaceResource> surf, const Vector2D& hotspot) {
if (!state.pointerFocusResource || !seatResource || seatResource->client() != state.pointerFocusResource->client()) {
if (!m_state.pointerFocusResource || !seatResource || seatResource->client() != m_state.pointerFocusResource->client()) {
Debug::log(LOG, "[seatmgr] Rejecting a setCursor because the client ain't in focus");
return;
}
@ -535,7 +535,7 @@ void CSeatManager::onSetCursor(SP<CWLSeatResource> seatResource, uint32_t serial
// return;
// }
events.setCursor.emit(SSetCursorEvent{surf, hotspot});
m_events.setCursor.emit(SSetCursorEvent{surf, hotspot});
}
SP<CWLSeatResource> CSeatManager::seatResourceForClient(wl_client* client) {
@ -543,62 +543,62 @@ SP<CWLSeatResource> CSeatManager::seatResourceForClient(wl_client* client) {
}
void CSeatManager::setCurrentSelection(SP<IDataSource> source) {
if (source == selection.currentSelection) {
if (source == m_selection.currentSelection) {
Debug::log(WARN, "[seat] duplicated setCurrentSelection?");
return;
}
selection.destroySelection.reset();
m_selection.destroySelection.reset();
if (selection.currentSelection)
selection.currentSelection->cancelled();
if (m_selection.currentSelection)
m_selection.currentSelection->cancelled();
if (!source)
PROTO::data->setSelection(nullptr);
selection.currentSelection = source;
m_selection.currentSelection = source;
if (source) {
selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); });
m_selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); });
PROTO::data->setSelection(source);
PROTO::dataWlr->setSelection(source, false);
}
events.setSelection.emit();
m_events.setSelection.emit();
}
void CSeatManager::setCurrentPrimarySelection(SP<IDataSource> source) {
if (source == selection.currentPrimarySelection) {
if (source == m_selection.currentPrimarySelection) {
Debug::log(WARN, "[seat] duplicated setCurrentPrimarySelection?");
return;
}
selection.destroyPrimarySelection.reset();
m_selection.destroyPrimarySelection.reset();
if (selection.currentPrimarySelection)
selection.currentPrimarySelection->cancelled();
if (m_selection.currentPrimarySelection)
m_selection.currentPrimarySelection->cancelled();
if (!source)
PROTO::primarySelection->setSelection(nullptr);
selection.currentPrimarySelection = source;
m_selection.currentPrimarySelection = source;
if (source) {
selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); });
m_selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); });
PROTO::primarySelection->setSelection(source);
PROTO::dataWlr->setSelection(source, true);
}
events.setPrimarySelection.emit();
m_events.setPrimarySelection.emit();
}
void CSeatManager::setGrab(SP<CSeatGrab> grab) {
if (seatGrab) {
auto oldGrab = seatGrab;
seatGrab.reset();
if (m_seatGrab) {
auto oldGrab = m_seatGrab;
m_seatGrab.reset();
g_pInputManager->refocus();
auto currentFocus = state.keyboardFocus.lock();
auto currentFocus = m_state.keyboardFocus.lock();
auto refocus = !currentFocus;
SP<CWLSurface> surf;
@ -627,23 +627,23 @@ void CSeatManager::setGrab(SP<CSeatGrab> grab) {
g_pCompositor->focusWindow(candidate);
}
if (oldGrab->onEnd)
oldGrab->onEnd();
if (oldGrab->m_onEnd)
oldGrab->m_onEnd();
}
if (!grab)
return;
seatGrab = grab;
m_seatGrab = grab;
refocusGrab();
}
void CSeatManager::resendEnterEvents() {
SP<CWLSurfaceResource> kb = state.keyboardFocus.lock();
SP<CWLSurfaceResource> pt = state.pointerFocus.lock();
SP<CWLSurfaceResource> kb = m_state.keyboardFocus.lock();
SP<CWLSurfaceResource> pt = m_state.pointerFocus.lock();
auto last = lastLocalCoords;
auto last = m_lastLocalCoords;
setKeyboardFocus(nullptr);
setPointerFocus(nullptr, {});
@ -653,23 +653,23 @@ void CSeatManager::resendEnterEvents() {
}
bool CSeatGrab::accepts(SP<CWLSurfaceResource> surf) {
return std::find(surfs.begin(), surfs.end(), surf) != surfs.end();
return std::find(m_surfs.begin(), m_surfs.end(), surf) != m_surfs.end();
}
void CSeatGrab::add(SP<CWLSurfaceResource> surf) {
surfs.emplace_back(surf);
m_surfs.emplace_back(surf);
}
void CSeatGrab::remove(SP<CWLSurfaceResource> surf) {
std::erase(surfs, surf);
if ((keyboard && g_pSeatManager->state.keyboardFocus == surf) || (pointer && g_pSeatManager->state.pointerFocus == surf))
std::erase(m_surfs, surf);
if ((m_keyboard && g_pSeatManager->m_state.keyboardFocus == surf) || (m_pointer && g_pSeatManager->m_state.pointerFocus == surf))
g_pSeatManager->refocusGrab();
}
void CSeatGrab::setCallback(std::function<void()> onEnd_) {
onEnd = onEnd_;
m_onEnd = onEnd_;
}
void CSeatGrab::clear() {
surfs.clear();
m_surfs.clear();
}

View file

@ -33,15 +33,12 @@ class CSeatGrab {
void setCallback(std::function<void()> onEnd_);
void clear();
bool keyboard = false;
bool pointer = false;
bool touch = false;
bool removeOnInput = true; // on hard input e.g. click outside, remove
bool m_keyboard = false;
bool m_pointer = false;
private:
std::vector<WP<CWLSurfaceResource>> surfs;
std::function<void()> onEnd;
std::vector<WP<CWLSurfaceResource>> m_surfs;
std::function<void()> m_onEnd;
friend class CSeatManager;
};
@ -96,7 +93,7 @@ class CSeatManager {
WP<CWLSeatResource> touchFocusResource;
WP<CWLSurfaceResource> dndPointerFocus;
} state;
} m_state;
struct SSetCursorEvent {
SP<CWLSurfaceResource> surf = nullptr;
@ -111,27 +108,27 @@ class CSeatManager {
CSignal setCursor; // SSetCursorEvent
CSignal setSelection;
CSignal setPrimarySelection;
} events;
} m_events;
struct {
WP<IDataSource> currentSelection;
CHyprSignalListener destroySelection;
WP<IDataSource> currentPrimarySelection;
CHyprSignalListener destroyPrimarySelection;
} selection;
} m_selection;
void setCurrentSelection(SP<IDataSource> source);
void setCurrentPrimarySelection(SP<IDataSource> source);
// do not write to directly, use set...
WP<IPointer> mouse;
WP<IKeyboard> keyboard;
WP<IPointer> m_mouse;
WP<IKeyboard> m_keyboard;
void setGrab(SP<CSeatGrab> grab); // nullptr removes
SP<CSeatGrab> seatGrab;
SP<CSeatGrab> m_seatGrab;
bool isPointerFrameSkipped = false;
bool isPointerFrameCommit = false;
bool m_isPointerFrameSkipped = false;
bool m_isPointerFrameCommit = false;
private:
struct SSeatResourceContainer {
@ -145,7 +142,7 @@ class CSeatManager {
} listeners;
};
std::vector<SP<SSeatResourceContainer>> seatResources;
std::vector<SP<SSeatResourceContainer>> m_seatResources;
void onNewSeatResource(SP<CWLSeatResource> resource);
SP<SSeatResourceContainer> containerForResource(SP<CWLSeatResource> seatResource);
@ -156,10 +153,10 @@ class CSeatManager {
CHyprSignalListener keyboardSurfaceDestroy;
CHyprSignalListener pointerSurfaceDestroy;
CHyprSignalListener touchSurfaceDestroy;
} listeners;
} m_listeners;
Vector2D lastLocalCoords;
int touchLocks = 0; // we assume there aint like 20 touch devices at once...
Vector2D m_lastLocalCoords;
int m_touchLocks = 0; // we assume there aint like 20 touch devices at once...
friend struct SSeatResourceContainer;
friend class CSeatGrab;

View file

@ -42,7 +42,7 @@ SSessionLockSurface::SSessionLockSurface(SP<CSessionLockSurface> surface_) : sur
}
CSessionLockManager::CSessionLockManager() {
listeners.newLock = PROTO::sessionLock->events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast<SP<CSessionLock>>(data)); });
m_listeners.newLock = PROTO::sessionLock->events.newLock.registerListener([this](std::any data) { this->onNewSessionLock(std::any_cast<SP<CSessionLock>>(data)); });
}
void CSessionLockManager::onNewSessionLock(SP<CSessionLock> pLock) {
@ -57,30 +57,30 @@ void CSessionLockManager::onNewSessionLock(SP<CSessionLock> pLock) {
Debug::log(LOG, "Session got locked by {:x}", (uintptr_t)pLock.get());
m_pSessionLock = makeUnique<SSessionLock>();
m_pSessionLock->lock = pLock;
m_pSessionLock->mLockTimer.reset();
m_sessionLock = makeUnique<SSessionLock>();
m_sessionLock->lock = pLock;
m_sessionLock->mLockTimer.reset();
m_pSessionLock->listeners.newSurface = pLock->events.newLockSurface.registerListener([this](std::any data) {
m_sessionLock->listeners.newSurface = pLock->events.newLockSurface.registerListener([this](std::any data) {
auto SURFACE = std::any_cast<SP<CSessionLockSurface>>(data);
const auto PMONITOR = SURFACE->monitor();
const auto NEWSURFACE = m_pSessionLock->vSessionLockSurfaces.emplace_back(makeUnique<SSessionLockSurface>(SURFACE)).get();
const auto NEWSURFACE = m_sessionLock->vSessionLockSurfaces.emplace_back(makeUnique<SSessionLockSurface>(SURFACE)).get();
NEWSURFACE->iMonitorID = PMONITOR->m_id;
PROTO::fractional->sendScale(SURFACE->surface(), PMONITOR->m_scale);
});
m_pSessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) {
m_pSessionLock.reset();
m_sessionLock->listeners.unlock = pLock->events.unlockAndDestroy.registerListener([this](std::any data) {
m_sessionLock.reset();
g_pInputManager->refocus();
for (auto const& m : g_pCompositor->m_monitors)
g_pHyprRenderer->damageMonitor(m);
});
m_pSessionLock->listeners.destroy = pLock->events.destroyed.registerListener([this](std::any data) {
m_pSessionLock.reset();
m_sessionLock->listeners.destroy = pLock->events.destroyed.registerListener([this](std::any data) {
m_sessionLock.reset();
g_pCompositor->focusSurface(nullptr);
for (auto const& m : g_pCompositor->m_monitors)
@ -93,8 +93,8 @@ void CSessionLockManager::onNewSessionLock(SP<CSessionLock> pLock) {
// Normally the locked event is sent after each output rendered a lock screen frame.
// When there are no outputs, send it right away.
if (g_pCompositor->m_unsafeState) {
m_pSessionLock->lock->sendLocked();
m_pSessionLock->m_hasSentLocked = true;
m_sessionLock->lock->sendLocked();
m_sessionLock->hasSentLocked = true;
}
}
@ -103,10 +103,10 @@ bool CSessionLockManager::isSessionLocked() {
}
WP<SSessionLockSurface> CSessionLockManager::getSessionLockSurfaceForMonitor(uint64_t id) {
if (!m_pSessionLock)
if (!m_sessionLock)
return {};
for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) {
for (auto const& sls : m_sessionLock->vSessionLockSurfaces) {
if (sls->iMonitorID == id) {
if (sls->mapped)
return sls;
@ -120,14 +120,14 @@ WP<SSessionLockSurface> CSessionLockManager::getSessionLockSurfaceForMonitor(uin
// We don't want the red screen to flash.
float CSessionLockManager::getRedScreenAlphaForMonitor(uint64_t id) {
if (!m_pSessionLock)
if (!m_sessionLock)
return 1.F;
const auto& NOMAPPEDSURFACETIMER = m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.find(id);
const auto& NOMAPPEDSURFACETIMER = m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.find(id);
if (NOMAPPEDSURFACETIMER == m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.end()) {
m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers.emplace(id, CTimer());
m_pSessionLock->mMonitorsWithoutMappedSurfaceTimers[id].reset();
if (NOMAPPEDSURFACETIMER == m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.end()) {
m_sessionLock->mMonitorsWithoutMappedSurfaceTimers.emplace(id, CTimer());
m_sessionLock->mMonitorsWithoutMappedSurfaceTimers[id].reset();
return 0.f;
}
@ -135,13 +135,13 @@ float CSessionLockManager::getRedScreenAlphaForMonitor(uint64_t id) {
}
void CSessionLockManager::onLockscreenRenderedOnMonitor(uint64_t id) {
if (!m_pSessionLock || m_pSessionLock->m_hasSentLocked)
if (!m_sessionLock || m_sessionLock->hasSentLocked)
return;
m_pSessionLock->m_lockedMonitors.emplace(id);
const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_pSessionLock->m_lockedMonitors.contains(m->m_id); });
if (LOCKED && m_pSessionLock->lock->good()) {
m_pSessionLock->lock->sendLocked();
m_pSessionLock->m_hasSentLocked = true;
m_sessionLock->lockedMonitors.emplace(id);
const bool LOCKED = std::ranges::all_of(g_pCompositor->m_monitors, [this](auto m) { return m_sessionLock->lockedMonitors.contains(m->m_id); });
if (LOCKED && m_sessionLock->lock->good()) {
m_sessionLock->lock->sendLocked();
m_sessionLock->hasSentLocked = true;
}
}
@ -149,10 +149,10 @@ bool CSessionLockManager::isSurfaceSessionLock(SP<CWLSurfaceResource> pSurface)
// TODO: this has some edge cases when it's wrong (e.g. destroyed lock but not yet surfaces)
// but can be easily fixed when I rewrite wlr_surface
if (!m_pSessionLock)
if (!m_sessionLock)
return false;
for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) {
for (auto const& sls : m_sessionLock->vSessionLockSurfaces) {
if (sls->surface->surface() == pSurface)
return true;
}
@ -161,15 +161,15 @@ bool CSessionLockManager::isSurfaceSessionLock(SP<CWLSurfaceResource> pSurface)
}
void CSessionLockManager::removeSessionLockSurface(SSessionLockSurface* pSLS) {
if (!m_pSessionLock)
if (!m_sessionLock)
return;
std::erase_if(m_pSessionLock->vSessionLockSurfaces, [&](const auto& other) { return pSLS == other.get(); });
std::erase_if(m_sessionLock->vSessionLockSurfaces, [&](const auto& other) { return pSLS == other.get(); });
if (g_pCompositor->m_lastFocus)
return;
for (auto const& sls : m_pSessionLock->vSessionLockSurfaces) {
for (auto const& sls : m_sessionLock->vSessionLockSurfaces) {
if (!sls->mapped)
continue;
@ -179,18 +179,18 @@ void CSessionLockManager::removeSessionLockSurface(SSessionLockSurface* pSLS) {
}
bool CSessionLockManager::isSessionLockPresent() {
return m_pSessionLock && !m_pSessionLock->vSessionLockSurfaces.empty();
return m_sessionLock && !m_sessionLock->vSessionLockSurfaces.empty();
}
bool CSessionLockManager::anySessionLockSurfacesPresent() {
return m_pSessionLock && std::ranges::any_of(m_pSessionLock->vSessionLockSurfaces, [](const auto& surf) { return surf->mapped; });
return m_sessionLock && std::ranges::any_of(m_sessionLock->vSessionLockSurfaces, [](const auto& surf) { return surf->mapped; });
}
bool CSessionLockManager::shallConsiderLockMissing() {
if (!m_pSessionLock)
if (!m_sessionLock)
return false;
static auto LOCKDEAD_SCREEN_DELAY = CConfigValue<Hyprlang::INT>("misc:lockdead_screen_delay");
return m_pSessionLock->mLockTimer.getMillis() > *LOCKDEAD_SCREEN_DELAY;
return m_sessionLock->mLockTimer.getMillis() > *LOCKDEAD_SCREEN_DELAY;
}

View file

@ -40,8 +40,8 @@ struct SSessionLock {
CHyprSignalListener destroy;
} listeners;
bool m_hasSentLocked = false;
std::unordered_set<uint64_t> m_lockedMonitors;
bool hasSentLocked = false;
std::unordered_set<uint64_t> lockedMonitors;
};
class CSessionLockManager {
@ -65,11 +65,11 @@ class CSessionLockManager {
bool shallConsiderLockMissing();
private:
UP<SSessionLock> m_pSessionLock;
UP<SSessionLock> m_sessionLock;
struct {
CHyprSignalListener newLock;
} listeners;
} m_listeners;
void onNewSessionLock(SP<CSessionLock> pWlrLock);
};

View file

@ -18,7 +18,7 @@ std::string CTokenManager::getRandomUUID() {
uuid = std::format("{:02x}{:02x}{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}{:02x}{:02x}{:02x}{:02x}", (uint16_t)uuid_[0], (uint16_t)uuid_[1],
(uint16_t)uuid_[2], (uint16_t)uuid_[3], (uint16_t)uuid_[4], (uint16_t)uuid_[5], (uint16_t)uuid_[6], (uint16_t)uuid_[7], (uint16_t)uuid_[8],
(uint16_t)uuid_[9], (uint16_t)uuid_[10], (uint16_t)uuid_[11], (uint16_t)uuid_[12], (uint16_t)uuid_[13], (uint16_t)uuid_[14], (uint16_t)uuid_[15]);
} while (m_mTokens.contains(uuid));
} while (m_tokens.contains(uuid));
return uuid;
}
@ -26,7 +26,7 @@ std::string CTokenManager::getRandomUUID() {
std::string CTokenManager::registerNewToken(std::any data, Time::steady_dur expires) {
std::string uuid = getRandomUUID();
m_mTokens[uuid] = makeShared<CUUIDToken>(uuid, data, expires);
m_tokens[uuid] = makeShared<CUUIDToken>(uuid, data, expires);
return uuid;
}
@ -34,16 +34,16 @@ SP<CUUIDToken> CTokenManager::getToken(const std::string& uuid) {
// cleanup expired tokens
const auto NOW = Time::steadyNow();
std::erase_if(m_mTokens, [&NOW](const auto& el) { return el.second->m_expiresAt < NOW; });
std::erase_if(m_tokens, [&NOW](const auto& el) { return el.second->m_expiresAt < NOW; });
if (!m_mTokens.contains(uuid))
if (!m_tokens.contains(uuid))
return {};
return m_mTokens.at(uuid);
return m_tokens.at(uuid);
}
void CTokenManager::removeToken(SP<CUUIDToken> token) {
if (!token)
return;
m_mTokens.erase(token->m_uuid);
m_tokens.erase(token->m_uuid);
}

View file

@ -31,7 +31,7 @@ class CTokenManager {
void removeToken(SP<CUUIDToken> token);
private:
std::unordered_map<std::string, SP<CUUIDToken>> m_mTokens;
std::unordered_map<std::string, SP<CUUIDToken>> m_tokens;
};
inline UP<CTokenManager> g_pTokenManager;

View file

@ -50,7 +50,7 @@ CVersionKeeperManager::CVersionKeeperManager() {
return;
}
m_bFired = true;
m_fired = true;
g_pEventLoopManager->doLater([]() {
CProcess proc("hyprland-update-screen", {"--new-version", HYPRLAND_VERSION});
@ -81,5 +81,5 @@ bool CVersionKeeperManager::isVersionOlderThanRunning(const std::string& ver) {
}
bool CVersionKeeperManager::fired() {
return m_bFired;
return m_fired;
}

View file

@ -12,7 +12,7 @@ class CVersionKeeperManager {
private:
bool isVersionOlderThanRunning(const std::string& ver);
bool m_bFired = false;
bool m_fired = false;
};
inline UP<CVersionKeeperManager> g_pVersionKeeperMgr;

View file

@ -97,45 +97,45 @@ static std::vector<uint32_t> HYPR_XCURSOR_PIXELS = {
// clang-format on
CXCursorManager::CXCursorManager() {
hyprCursor = makeShared<SXCursors>();
m_hyprCursor = makeShared<SXCursors>();
SXCursorImage image;
image.size = {32, 32};
image.hotspot = {3, 2};
image.pixels = HYPR_XCURSOR_PIXELS;
image.delay = 0;
hyprCursor->images.push_back(image);
hyprCursor->shape = "left_ptr";
defaultCursor = hyprCursor;
m_hyprCursor->images.push_back(image);
m_hyprCursor->shape = "left_ptr";
m_defaultCursor = m_hyprCursor;
}
void CXCursorManager::loadTheme(std::string const& name, int size, float scale) {
if (lastLoadSize == (size * std::ceil(scale)) && themeName == name && lastLoadScale == scale)
if (m_lastLoadSize == (size * std::ceil(scale)) && m_themeName == name && m_lastLoadScale == scale)
return;
lastLoadSize = size * std::ceil(scale);
lastLoadScale = scale;
themeName = name.empty() ? "default" : name;
defaultCursor.reset();
cursors.clear();
m_lastLoadSize = size * std::ceil(scale);
m_lastLoadScale = scale;
m_themeName = name.empty() ? "default" : name;
m_defaultCursor.reset();
m_cursors.clear();
auto paths = themePaths(themeName);
auto paths = themePaths(m_themeName);
if (paths.empty()) {
Debug::log(ERR, "XCursor librarypath is empty loading standard XCursors");
cursors = loadStandardCursors(themeName, lastLoadSize);
m_cursors = loadStandardCursors(m_themeName, m_lastLoadSize);
} else {
for (auto const& p : paths) {
try {
auto dirCursors = loadAllFromDir(p, lastLoadSize);
std::copy_if(dirCursors.begin(), dirCursors.end(), std::back_inserter(cursors),
[this](auto const& p) { return std::none_of(cursors.begin(), cursors.end(), [&p](auto const& dp) { return dp->shape == p->shape; }); });
auto dirCursors = loadAllFromDir(p, m_lastLoadSize);
std::copy_if(dirCursors.begin(), dirCursors.end(), std::back_inserter(m_cursors),
[this](auto const& p) { return std::none_of(m_cursors.begin(), m_cursors.end(), [&p](auto const& dp) { return dp->shape == p->shape; }); });
} catch (std::exception& e) { Debug::log(ERR, "XCursor path {} can't be loaded: threw error {}", p, e.what()); }
}
}
if (cursors.empty()) {
Debug::log(ERR, "XCursor failed finding any shapes in theme \"{}\".", themeName);
defaultCursor = hyprCursor;
if (m_cursors.empty()) {
Debug::log(ERR, "XCursor failed finding any shapes in theme \"{}\".", m_themeName);
m_defaultCursor = m_hyprCursor;
return;
}
@ -144,14 +144,14 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale)
if (legacyName.empty())
continue;
auto it = std::find_if(cursors.begin(), cursors.end(), [&legacyName](auto const& c) { return c->shape == legacyName; });
auto it = std::find_if(m_cursors.begin(), m_cursors.end(), [&legacyName](auto const& c) { return c->shape == legacyName; });
if (it == cursors.end()) {
if (it == m_cursors.end()) {
Debug::log(LOG, "XCursor failed to find a legacy shape with name {}, skipping", legacyName);
continue;
}
if (std::any_of(cursors.begin(), cursors.end(), [&shape](auto const& dp) { return dp->shape == shape; })) {
if (std::any_of(m_cursors.begin(), m_cursors.end(), [&shape](auto const& dp) { return dp->shape == shape; })) {
Debug::log(LOG, "XCursor already has a shape {} loaded, skipping", shape);
continue;
}
@ -160,7 +160,7 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale)
cursor->images = it->get()->images;
cursor->shape = shape;
cursors.emplace_back(cursor);
m_cursors.emplace_back(cursor);
}
syncGsettings();
@ -168,11 +168,11 @@ void CXCursorManager::loadTheme(std::string const& name, int size, float scale)
SP<SXCursors> CXCursorManager::getShape(std::string const& shape, int size, float scale) {
// monitor scaling changed etc, so reload theme with new size.
if ((size * std::ceil(scale)) != lastLoadSize || scale != lastLoadScale)
loadTheme(themeName, size, scale);
if ((size * std::ceil(scale)) != m_lastLoadSize || scale != m_lastLoadScale)
loadTheme(m_themeName, size, scale);
// try to get an icon we know if we have one
for (auto const& c : cursors) {
for (auto const& c : m_cursors) {
if (c->shape != shape)
continue;
@ -180,7 +180,7 @@ SP<SXCursors> CXCursorManager::getShape(std::string const& shape, int size, floa
}
Debug::log(WARN, "XCursor couldn't find shape {} , using default cursor instead", shape);
return defaultCursor;
return m_defaultCursor;
}
SP<SXCursors> CXCursorManager::createCursor(std::string const& shape, void* ximages) {
@ -504,15 +504,15 @@ std::vector<SP<SXCursors>> CXCursorManager::loadStandardCursors(std::string cons
auto cursor = createCursor(shape, xImages);
newCursors.emplace_back(cursor);
if (!defaultCursor && (shape == "left_ptr" || shape == "arrow"))
defaultCursor = cursor;
if (!m_defaultCursor && (shape == "left_ptr" || shape == "arrow"))
m_defaultCursor = cursor;
XcursorImagesDestroy(xImages);
}
// broken theme.. just set it.
if (!newCursors.empty() && !defaultCursor)
defaultCursor = newCursors.front();
if (!newCursors.empty() && !m_defaultCursor)
m_defaultCursor = newCursors.front();
return newCursors;
}
@ -551,16 +551,16 @@ std::vector<SP<SXCursors>> CXCursorManager::loadAllFromDir(std::string const& pa
auto cursor = createCursor(shape, xImages);
newCursors.emplace_back(cursor);
if (!defaultCursor && (shape == "left_ptr" || shape == "arrow"))
defaultCursor = cursor;
if (!m_defaultCursor && (shape == "left_ptr" || shape == "arrow"))
m_defaultCursor = cursor;
XcursorImagesDestroy(xImages);
}
}
// broken theme.. just set it.
if (!newCursors.empty() && !defaultCursor)
defaultCursor = newCursors.front();
if (!newCursors.empty() && !m_defaultCursor)
m_defaultCursor = newCursors.front();
return newCursors;
}
@ -617,7 +617,7 @@ void CXCursorManager::syncGsettings() {
g_object_unref(gsettings);
};
int unscaledSize = lastLoadSize / std::ceil(lastLoadScale);
setValue("cursor-theme", themeName, "org.gnome.desktop.interface");
int unscaledSize = m_lastLoadSize / std::ceil(m_lastLoadScale);
setValue("cursor-theme", m_themeName, "org.gnome.desktop.interface");
setValue("cursor-size", unscaledSize, "org.gnome.desktop.interface");
}

View file

@ -36,10 +36,10 @@ class CXCursorManager {
std::vector<SP<SXCursors>> loadStandardCursors(std::string const& name, int size);
std::vector<SP<SXCursors>> loadAllFromDir(std::string const& path, int size);
int lastLoadSize = 0;
float lastLoadScale = 0;
std::string themeName = "";
SP<SXCursors> defaultCursor;
SP<SXCursors> hyprCursor;
std::vector<SP<SXCursors>> cursors;
int m_lastLoadSize = 0;
float m_lastLoadScale = 0;
std::string m_themeName = "";
SP<SXCursors> m_defaultCursor;
SP<SXCursors> m_hyprCursor;
std::vector<SP<SXCursors>> m_cursors;
};

View file

@ -48,10 +48,10 @@ CInputManager::CInputManager() {
auto event = std::any_cast<CCursorShapeProtocol::SSetShapeEvent>(data);
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
if (wl_resource_get_client(event.pMgr->resource()) != g_pSeatManager->state.pointerFocusResource->client())
if (wl_resource_get_client(event.pMgr->resource()) != g_pSeatManager->m_state.pointerFocusResource->client())
return;
Debug::log(LOG, "cursorImage request: shape {} -> {}", (uint32_t)event.shape, event.shapeName);
@ -74,7 +74,7 @@ CInputManager::CInputManager() {
this->newVirtualMouse(std::any_cast<SP<CVirtualPointerV1Resource>>(data));
updateCapabilities();
});
m_listeners.setCursor = g_pSeatManager->events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); });
m_listeners.setCursor = g_pSeatManager->m_events.setCursor.registerListener([this](std::any d) { this->processMouseRequest(d); });
m_cursorSurfaceInfo.wlSurface = CWLSurface::create();
}
@ -112,7 +112,7 @@ void CInputManager::onMouseMoved(IPointer::SMotionEvent e) {
const auto DELTA = *PNOACCEL == 1 ? unaccel : delta;
if (g_pSeatManager->isPointerFrameSkipped)
if (g_pSeatManager->m_isPointerFrameSkipped)
g_pPointerManager->storeMovement((uint64_t)e.timeMs, DELTA, unaccel);
else
g_pPointerManager->setStoredMovement((uint64_t)e.timeMs, DELTA, unaccel);
@ -221,7 +221,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) {
g_pCompositor->scheduleFrameForMonitor(PMONITOR, Aquamarine::IOutput::AQ_SCHEDULE_CURSOR_MOVE);
// constraints
if (!g_pSeatManager->mouse.expired() && isConstrained()) {
if (!g_pSeatManager->m_mouse.expired() && isConstrained()) {
const auto SURF = CWLSurface::fromResource(g_pCompositor->m_lastFocus.lock());
const auto CONSTRAINT = SURF ? SURF->constraint() : nullptr;
@ -289,9 +289,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) {
// if we are holding a pointer button,
// and we're not dnd-ing, don't refocus. Keep focus on last surface.
if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->state.pointerFocus &&
if (!PROTO::data->dndActive() && !m_currentlyHeldButtons.empty() && g_pCompositor->m_lastFocus && g_pCompositor->m_lastFocus->mapped && g_pSeatManager->m_state.pointerFocus &&
!m_hardInput) {
foundSurface = g_pSeatManager->state.pointerFocus.lock();
foundSurface = g_pSeatManager->m_state.pointerFocus.lock();
// IME popups aren't desktop-like elements
// TODO: make them.
@ -436,13 +436,13 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) {
// FIXME: This will be disabled during DnD operations because we do not exactly follow the spec
// xdg-popup grabs should be keyboard-only, while they are absolute in our case...
if (g_pSeatManager->seatGrab && !g_pSeatManager->seatGrab->accepts(foundSurface) && !PROTO::data->dndActive()) {
if (g_pSeatManager->m_seatGrab && !g_pSeatManager->m_seatGrab->accepts(foundSurface) && !PROTO::data->dndActive()) {
if (m_hardInput || refocus) {
g_pSeatManager->setGrab(nullptr);
return; // setGrab will refocus
} else {
// we need to grab the last surface.
foundSurface = g_pSeatManager->state.pointerFocus.lock();
foundSurface = g_pSeatManager->m_state.pointerFocus.lock();
auto HLSurface = CWLSurface::fromResource(foundSurface);
@ -548,7 +548,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) {
if (FOLLOWMOUSE != 0 || pFoundWindow == g_pCompositor->m_lastWindow)
g_pSeatManager->setPointerFocus(foundSurface, surfaceLocal);
if (g_pSeatManager->state.pointerFocus == foundSurface)
if (g_pSeatManager->m_state.pointerFocus == foundSurface)
g_pSeatManager->sendPointerMotion(time, surfaceLocal);
m_lastFocusOnLS = false;
@ -573,7 +573,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse) {
}
}
if (g_pSeatManager->state.keyboardFocus == nullptr)
if (g_pSeatManager->m_state.keyboardFocus == nullptr)
g_pCompositor->focusWindow(pFoundWindow, foundSurface);
m_lastFocusOnLS = false;
@ -761,7 +761,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) {
if (*PFOLLOWMOUSE == 3) // don't refocus on full loose
break;
if ((g_pSeatManager->mouse.expired() || !isConstrained()) /* No constraints */
if ((g_pSeatManager->m_mouse.expired() || !isConstrained()) /* No constraints */
&& (w && g_pCompositor->m_lastWindow.lock() != w) /* window should change */) {
// a bit hacky
// if we only pressed one button, allow us to refocus. m_lCurrentlyHeldButtons.size() > 0 will stick the focus
@ -775,10 +775,10 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) {
}
// if clicked on a floating window make it top
if (!g_pSeatManager->state.pointerFocus)
if (!g_pSeatManager->m_state.pointerFocus)
break;
auto HLSurf = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
auto HLSurf = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock());
if (HLSurf && HLSurf->getWindow())
g_pCompositor->changeWindowZOrder(HLSurf->getWindow(), true);
@ -794,7 +794,7 @@ void CInputManager::processMouseDownNormal(const IPointer::SButtonEvent& e) {
if (const auto PMON = g_pCompositor->getMonitorFromVector(mouseCoords); PMON != g_pCompositor->m_lastMonitor && PMON)
g_pCompositor->setActiveMonitor(PMON);
if (g_pSeatManager->seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) {
if (g_pSeatManager->m_seatGrab && e.state == WL_POINTER_BUTTON_STATE_PRESSED) {
m_hardInput = true;
simulateMouseMovement();
m_hardInput = false;
@ -870,8 +870,8 @@ void CInputManager::onMouseWheel(IPointer::SAxisEvent e) {
}
}
if (g_pSeatManager->state.pointerFocus) {
const auto PCURRWINDOW = g_pCompositor->getWindowFromSurface(g_pSeatManager->state.pointerFocus.lock());
if (g_pSeatManager->m_state.pointerFocus) {
const auto PCURRWINDOW = g_pCompositor->getWindowFromSurface(g_pSeatManager->m_state.pointerFocus.lock());
if (*PFOLLOWMOUSE == 1 && PCURRWINDOW && PWINDOW != PCURRWINDOW)
simulateMouseMovement();
@ -995,9 +995,9 @@ void CInputManager::setupKeyboard(SP<IKeyboard> keeb) {
auto PKEEB = ((IKeyboard*)owner)->m_self.lock();
const auto LAYOUT = PKEEB->getActiveLayout();
if (PKEEB == g_pSeatManager->keyboard) {
if (PKEEB == g_pSeatManager->m_keyboard) {
g_pSeatManager->updateActiveKeyboardData();
g_pKeybindManager->m_mKeyToCodeCache.clear();
g_pKeybindManager->m_keyToCodeCache.clear();
}
g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEEB->m_hlName + "," + LAYOUT});
@ -1323,7 +1323,7 @@ void CInputManager::destroyPointer(SP<IPointer> mouse) {
g_pSeatManager->setMouse(m_pointers.size() > 0 ? m_pointers.front() : nullptr);
if (!g_pSeatManager->mouse.expired())
if (!g_pSeatManager->m_mouse.expired())
unconstrainMouse();
removeFromHIDs(mouse);
@ -1502,7 +1502,7 @@ bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) {
}
void CInputManager::unconstrainMouse() {
if (g_pSeatManager->mouse.expired())
if (g_pSeatManager->m_mouse.expired())
return;
for (auto const& c : m_constraints) {

View file

@ -36,7 +36,7 @@ static void focusTool(SP<CTabletTool> tool, SP<CTablet> tablet, SP<CWLSurfaceRes
}
static void refocusTablet(SP<CTablet> tab, SP<CTabletTool> tool, bool motion = false) {
const auto LASTHLSURFACE = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
const auto LASTHLSURFACE = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock());
if (!LASTHLSURFACE || !tool->m_active) {
if (tool->getSurface())
@ -56,7 +56,7 @@ static void refocusTablet(SP<CTablet> tab, SP<CTabletTool> tool, bool motion = f
const auto CURSORPOS = g_pInputManager->getMouseCoordsInternal();
focusTool(tool, tab, g_pSeatManager->state.pointerFocus.lock());
focusTool(tool, tab, g_pSeatManager->m_state.pointerFocus.lock());
if (!motion)
return;

View file

@ -200,7 +200,7 @@ APICALL bool HyprlandAPI::addDispatcher(HANDLE handle, const std::string& name,
PLUGIN->registeredDispatchers.push_back(name);
g_pKeybindManager->m_mDispatchers[name] = [handler](std::string arg1) -> SDispatchResult {
g_pKeybindManager->m_dispatchers[name] = [handler](std::string arg1) -> SDispatchResult {
handler(arg1);
return {};
};
@ -216,7 +216,7 @@ APICALL bool HyprlandAPI::addDispatcherV2(HANDLE handle, const std::string& name
PLUGIN->registeredDispatchers.push_back(name);
g_pKeybindManager->m_mDispatchers[name] = handler;
g_pKeybindManager->m_dispatchers[name] = handler;
return true;
}
@ -227,7 +227,7 @@ APICALL bool HyprlandAPI::removeDispatcher(HANDLE handle, const std::string& nam
if (!PLUGIN)
return false;
std::erase_if(g_pKeybindManager->m_mDispatchers, [&](const auto& other) { return other.first == name; });
std::erase_if(g_pKeybindManager->m_dispatchers, [&](const auto& other) { return other.first == name; });
std::erase_if(PLUGIN->registeredDispatchers, [&](const auto& other) { return other == name; });
return true;

View file

@ -154,8 +154,8 @@ wl_client* CWLRDataDevice::client() {
}
void CWLRDataDevice::sendInitialSelections() {
PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->selection.currentSelection.lock(), false);
PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->selection.currentPrimarySelection.lock(), true);
PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->m_selection.currentSelection.lock(), false);
PROTO::dataWlr->sendSelectionToDevice(self.lock(), g_pSeatManager->m_selection.currentPrimarySelection.lock(), true);
}
void CWLRDataDevice::sendDataOffer(SP<CWLRDataOffer> offer) {

View file

@ -15,9 +15,9 @@ CFocusGrab::CFocusGrab(SP<CHyprlandFocusGrabV1> resource_) : resource(resource_)
if UNLIKELY (!resource->resource())
return;
grab = makeShared<CSeatGrab>();
grab->keyboard = true;
grab->pointer = true;
grab = makeShared<CSeatGrab>();
grab->m_keyboard = true;
grab->m_pointer = true;
grab->setCallback([this]() { finish(true); });
resource->setDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); });
@ -58,7 +58,7 @@ void CFocusGrab::finish(bool sendCleared) {
if (m_bGrabActive) {
m_bGrabActive = false;
if (g_pSeatManager->seatGrab == grab)
if (g_pSeatManager->m_seatGrab == grab)
g_pSeatManager->setGrab(nullptr);
grab->clear();
@ -91,7 +91,7 @@ void CFocusGrab::eraseSurface(SP<CWLSurfaceResource> surface) {
}
void CFocusGrab::refocusKeyboard() {
auto keyboardSurface = g_pSeatManager->state.keyboardFocus;
auto keyboardSurface = g_pSeatManager->m_state.keyboardFocus;
if (keyboardSurface && isSurfaceComitted(keyboardSurface.lock()))
return;

View file

@ -13,12 +13,12 @@ CInputMethodKeyboardGrabV2::CInputMethodKeyboardGrabV2(SP<CZwpInputMethodKeyboar
resource->setRelease([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); });
resource->setOnDestroy([this](CZwpInputMethodKeyboardGrabV2* r) { PROTO::ime->destroyResource(this); });
if (!g_pSeatManager->keyboard) {
if (!g_pSeatManager->m_keyboard) {
LOGM(ERR, "IME called but no active keyboard???");
return;
}
sendKeyboardData(g_pSeatManager->keyboard.lock());
sendKeyboardData(g_pSeatManager->m_keyboard.lock());
}
CInputMethodKeyboardGrabV2::~CInputMethodKeyboardGrabV2() {

View file

@ -125,7 +125,7 @@ void CPointerConstraint::activate() {
return;
// TODO: hack, probably not a super duper great idea
if (g_pSeatManager->state.pointerFocus != pHLSurface->resource()) {
if (g_pSeatManager->m_state.pointerFocus != pHLSurface->resource()) {
const auto SURFBOX = pHLSurface->getSurfaceBoxGlobal();
const auto LOCAL = SURFBOX.has_value() ? logicPositionHint() - SURFBOX->pos() : Vector2D{};
g_pSeatManager->setPointerFocus(pHLSurface->resource(), LOCAL);

View file

@ -103,26 +103,26 @@ void CPointerGesturesProtocol::onGetHoldGesture(CZwpPointerGesturesV1* pMgr, uin
}
void CPointerGesturesProtocol::swipeBegin(uint32_t timeMs, uint32_t fingers) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vSwipes) {
if (sw->resource->client() != FOCUSEDCLIENT)
continue;
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers);
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers);
}
}
void CPointerGesturesProtocol::swipeUpdate(uint32_t timeMs, const Vector2D& delta) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
for (auto const& sw : m_vSwipes) {
if (sw->resource->client() != FOCUSEDCLIENT)
@ -133,12 +133,12 @@ void CPointerGesturesProtocol::swipeUpdate(uint32_t timeMs, const Vector2D& delt
}
void CPointerGesturesProtocol::swipeEnd(uint32_t timeMs, bool cancelled) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vSwipes) {
if (sw->resource->client() != FOCUSEDCLIENT)
@ -149,26 +149,26 @@ void CPointerGesturesProtocol::swipeEnd(uint32_t timeMs, bool cancelled) {
}
void CPointerGesturesProtocol::pinchBegin(uint32_t timeMs, uint32_t fingers) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vPinches) {
if (sw->resource->client() != FOCUSEDCLIENT)
continue;
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers);
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers);
}
}
void CPointerGesturesProtocol::pinchUpdate(uint32_t timeMs, const Vector2D& delta, double scale, double rotation) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
for (auto const& sw : m_vPinches) {
if (sw->resource->client() != FOCUSEDCLIENT)
@ -179,12 +179,12 @@ void CPointerGesturesProtocol::pinchUpdate(uint32_t timeMs, const Vector2D& delt
}
void CPointerGesturesProtocol::pinchEnd(uint32_t timeMs, bool cancelled) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vPinches) {
if (sw->resource->client() != FOCUSEDCLIENT)
@ -195,28 +195,28 @@ void CPointerGesturesProtocol::pinchEnd(uint32_t timeMs, bool cancelled) {
}
void CPointerGesturesProtocol::holdBegin(uint32_t timeMs, uint32_t fingers) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vHolds) {
if (sw->resource->client() != FOCUSEDCLIENT)
continue;
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->state.pointerFocus->getResource()->resource(), fingers);
sw->resource->sendBegin(SERIAL, timeMs, g_pSeatManager->m_state.pointerFocus->getResource()->resource(), fingers);
}
}
void CPointerGesturesProtocol::holdEnd(uint32_t timeMs, bool cancelled) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSEDCLIENT = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSEDCLIENT = g_pSeatManager->m_state.pointerFocusResource->client();
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->state.pointerFocusResource.lock());
const auto SERIAL = g_pSeatManager->nextSerial(g_pSeatManager->m_state.pointerFocusResource.lock());
for (auto const& sw : m_vHolds) {
if (sw->resource->client() != FOCUSEDCLIENT)

View file

@ -228,7 +228,7 @@ void CPrimarySelectionProtocol::bindManager(wl_client* client, void* data, uint3
// we need to do it here because protocols come before seatMgr
if (!listeners.onPointerFocusChange)
listeners.onPointerFocusChange = g_pSeatManager->events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); });
listeners.onPointerFocusChange = g_pSeatManager->m_events.pointerFocusChange.registerListener([this](std::any d) { this->onPointerFocus(); });
}
void CPrimarySelectionProtocol::destroyResource(CPrimarySelectionManager* resource) {
@ -279,10 +279,10 @@ void CPrimarySelectionProtocol::setSelection(SP<IDataSource> source) {
if (!source) {
LOGM(LOG, "resetting selection");
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client());
if (DESTDEVICE)
sendSelectionToDevice(DESTDEVICE, nullptr);
@ -291,10 +291,10 @@ void CPrimarySelectionProtocol::setSelection(SP<IDataSource> source) {
LOGM(LOG, "New selection for data source {:x}", (uintptr_t)source.get());
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client());
if (!DESTDEVICE) {
LOGM(LOG, "CWLDataDeviceProtocol::setSelection: cannot send selection to a client without a data_device");
@ -305,17 +305,17 @@ void CPrimarySelectionProtocol::setSelection(SP<IDataSource> source) {
}
void CPrimarySelectionProtocol::updateSelection() {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.pointerFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.pointerFocusResource->client());
if (!DESTDEVICE) {
LOGM(LOG, "CPrimarySelectionProtocol::updateSelection: cannot send selection to a client without a data_device");
return;
}
sendSelectionToDevice(DESTDEVICE, g_pSeatManager->selection.currentPrimarySelection.lock());
sendSelectionToDevice(DESTDEVICE, g_pSeatManager->m_selection.currentPrimarySelection.lock());
}
void CPrimarySelectionProtocol::onPointerFocus() {

View file

@ -59,10 +59,10 @@ void CRelativePointerProtocol::onGetRelativePointer(CZwpRelativePointerManagerV1
void CRelativePointerProtocol::sendRelativeMotion(uint64_t time, const Vector2D& delta, const Vector2D& deltaUnaccel) {
if (!g_pSeatManager->state.pointerFocusResource)
if (!g_pSeatManager->m_state.pointerFocusResource)
return;
const auto FOCUSED = g_pSeatManager->state.pointerFocusResource->client();
const auto FOCUSED = g_pSeatManager->m_state.pointerFocusResource->client();
for (auto const& rp : m_vRelativePointers) {
if (FOCUSED != rp->client())

View file

@ -157,7 +157,7 @@ CTabletToolV2Resource::CTabletToolV2Resource(SP<CZwpTabletToolV2> resource_, SP<
resource->setOnDestroy([this](CZwpTabletToolV2* r) { PROTO::tablet->destroyResource(this); });
resource->setSetCursor([](CZwpTabletToolV2* r, uint32_t serial, wl_resource* surf, int32_t hot_x, int32_t hot_y) {
if (!g_pSeatManager->state.pointerFocusResource || g_pSeatManager->state.pointerFocusResource->client() != r->client())
if (!g_pSeatManager->m_state.pointerFocusResource || g_pSeatManager->m_state.pointerFocusResource->client() != r->client())
return;
g_pInputManager->processMouseRequest(CSeatManager::SSetCursorEvent{surf ? CWLSurfaceResource::fromResource(surf) : nullptr, {hot_x, hot_y}});

View file

@ -372,7 +372,7 @@ bool CToplevelExportFrame::shouldOverlayCursor() const {
if (!cursorOverlayRequested)
return false;
auto pointerSurfaceResource = g_pSeatManager->state.pointerFocus.lock();
auto pointerSurfaceResource = g_pSeatManager->m_state.pointerFocus.lock();
if (!pointerSurfaceResource)
return false;

View file

@ -764,9 +764,9 @@ void CXDGWMBase::ping() {
}
CXDGShellProtocol::CXDGShellProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {
grab = makeShared<CSeatGrab>();
grab->keyboard = true;
grab->pointer = true;
grab = makeShared<CSeatGrab>();
grab->m_keyboard = true;
grab->m_pointer = true;
grab->setCallback([this]() {
for (auto const& g : grabbed) {
g->done();

View file

@ -385,8 +385,8 @@ bool CWLDataDeviceManagerResource::good() {
CWLDataDeviceProtocol::CWLDataDeviceProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) {
g_pEventLoopManager->doLater([this]() {
listeners.onKeyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); });
listeners.onDndPointerFocusChange = g_pSeatManager->events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); });
listeners.onKeyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { onKeyboardFocus(); });
listeners.onDndPointerFocusChange = g_pSeatManager->m_events.dndPointerFocusChange.registerListener([this](std::any d) { onDndPointerFocus(); });
});
}
@ -451,7 +451,7 @@ void CWLDataDeviceProtocol::sendSelectionToDevice(SP<IDataDevice> dev, SP<IDataS
}
#ifndef NO_XWAYLAND
else if (const auto X11 = dev->getX11(); X11)
offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->state.keyboardFocus.lock(), sel);
offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), sel);
#endif
if UNLIKELY (!offer) {
@ -482,10 +482,10 @@ void CWLDataDeviceProtocol::setSelection(SP<IDataSource> source) {
if (!source) {
LOGM(LOG, "resetting selection");
if (!g_pSeatManager->state.keyboardFocusResource)
if (!g_pSeatManager->m_state.keyboardFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client());
if (DESTDEVICE && DESTDEVICE->type() == DATA_SOURCE_TYPE_WAYLAND)
sendSelectionToDevice(DESTDEVICE, nullptr);
@ -494,10 +494,10 @@ void CWLDataDeviceProtocol::setSelection(SP<IDataSource> source) {
LOGM(LOG, "New selection for data source {:x}", (uintptr_t)source.get());
if (!g_pSeatManager->state.keyboardFocusResource)
if (!g_pSeatManager->m_state.keyboardFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client());
if (!DESTDEVICE) {
LOGM(LOG, "CWLDataDeviceProtocol::setSelection: cannot send selection to a client without a data_device");
@ -513,17 +513,17 @@ void CWLDataDeviceProtocol::setSelection(SP<IDataSource> source) {
}
void CWLDataDeviceProtocol::updateSelection() {
if (!g_pSeatManager->state.keyboardFocusResource)
if (!g_pSeatManager->m_state.keyboardFocusResource)
return;
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->state.keyboardFocusResource->client());
auto DESTDEVICE = dataDeviceForClient(g_pSeatManager->m_state.keyboardFocusResource->client());
if (!DESTDEVICE) {
LOGM(LOG, "CWLDataDeviceProtocol::onKeyboardFocus: cannot send selection to a client without a data_device");
return;
}
sendSelectionToDevice(DESTDEVICE, g_pSeatManager->selection.currentSelection.lock());
sendSelectionToDevice(DESTDEVICE, g_pSeatManager->m_selection.currentSelection.lock());
}
void CWLDataDeviceProtocol::onKeyboardFocus() {
@ -593,8 +593,8 @@ void CWLDataDeviceProtocol::initiateDrag(WP<CWLDataSourceResource> currentSource
dnd.mouseMove = g_pHookSystem->hookDynamic("mouseMove", [this](void* self, SCallbackInfo& info, std::any e) {
auto V = std::any_cast<const Vector2D>(e);
if (dnd.focusedDevice && g_pSeatManager->state.dndPointerFocus) {
auto surf = CWLSurface::fromResource(g_pSeatManager->state.dndPointerFocus.lock());
if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) {
auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock());
if (!surf)
return;
@ -611,8 +611,8 @@ void CWLDataDeviceProtocol::initiateDrag(WP<CWLDataSourceResource> currentSource
dnd.touchMove = g_pHookSystem->hookDynamic("touchMove", [this](void* self, SCallbackInfo& info, std::any e) {
auto E = std::any_cast<ITouch::SMotionEvent>(e);
if (dnd.focusedDevice && g_pSeatManager->state.dndPointerFocus) {
auto surf = CWLSurface::fromResource(g_pSeatManager->state.dndPointerFocus.lock());
if (dnd.focusedDevice && g_pSeatManager->m_state.dndPointerFocus) {
auto surf = CWLSurface::fromResource(g_pSeatManager->m_state.dndPointerFocus.lock());
if (!surf)
return;
@ -630,9 +630,9 @@ void CWLDataDeviceProtocol::initiateDrag(WP<CWLDataSourceResource> currentSource
// unfocus the pointer from the surface, this is part of """standard""" wayland procedure and gtk will freak out if this isn't happening.
// BTW, the spec does NOT require this explicitly...
// Fuck you gtk.
const auto LASTDNDFOCUS = g_pSeatManager->state.dndPointerFocus;
const auto LASTDNDFOCUS = g_pSeatManager->m_state.dndPointerFocus;
g_pSeatManager->setPointerFocus(nullptr, {});
g_pSeatManager->state.dndPointerFocus = LASTDNDFOCUS;
g_pSeatManager->m_state.dndPointerFocus = LASTDNDFOCUS;
// make a new offer, etc
updateDrag();
@ -645,10 +645,10 @@ void CWLDataDeviceProtocol::updateDrag() {
if (dnd.focusedDevice)
dnd.focusedDevice->sendLeave();
if (!g_pSeatManager->state.dndPointerFocus)
if (!g_pSeatManager->m_state.dndPointerFocus)
return;
dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->state.dndPointerFocus->client());
dnd.focusedDevice = dataDeviceForClient(g_pSeatManager->m_state.dndPointerFocus->client());
if (!dnd.focusedDevice)
return;
@ -669,7 +669,7 @@ void CWLDataDeviceProtocol::updateDrag() {
}
#ifndef NO_XWAYLAND
else if (const auto X11 = dnd.focusedDevice->getX11(); X11)
offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->state.keyboardFocus.lock(), dnd.currentSource.lock());
offer = g_pXWayland->pWM->createX11DataOffer(g_pSeatManager->m_state.keyboardFocus.lock(), dnd.currentSource.lock());
#endif
if (!offer) {
@ -683,8 +683,8 @@ void CWLDataDeviceProtocol::updateDrag() {
dnd.focusedDevice->sendDataOffer(offer);
if (const auto WL = offer->getWayland(); WL)
WL->sendData();
dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->state.dndPointerFocus.lock(),
g_pSeatManager->state.dndPointerFocus->current.size / 2.F, offer);
dnd.focusedDevice->sendEnter(wl_display_next_serial(g_pCompositor->m_wlDisplay), g_pSeatManager->m_state.dndPointerFocus.lock(),
g_pSeatManager->m_state.dndPointerFocus->current.size / 2.F, offer);
}
void CWLDataDeviceProtocol::cleanupDndState(bool resetDevice, bool resetSource, bool simulateInput) {

View file

@ -133,8 +133,8 @@ CWLPointerResource::CWLPointerResource(SP<CWlPointer> resource_, SP<CWLSeatResou
g_pSeatManager->onSetCursor(owner.lock(), serial, surfResource, {hotX, hotY});
});
if (g_pSeatManager->state.pointerFocus && g_pSeatManager->state.pointerFocus->client() == resource->client())
sendEnter(g_pSeatManager->state.pointerFocus.lock(), {-1, -1} /* Coords don't really matter that much, they will be updated next move */);
if (g_pSeatManager->m_state.pointerFocus && g_pSeatManager->m_state.pointerFocus->client() == resource->client())
sendEnter(g_pSeatManager->m_state.pointerFocus.lock(), {-1, -1} /* Coords don't really matter that much, they will be updated next move */);
}
int CWLPointerResource::version() {
@ -297,16 +297,16 @@ CWLKeyboardResource::CWLKeyboardResource(SP<CWlKeyboard> resource_, SP<CWLSeatRe
resource->setRelease([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); });
resource->setOnDestroy([this](CWlKeyboard* r) { PROTO::seat->destroyResource(this); });
if (!g_pSeatManager->keyboard) {
if (!g_pSeatManager->m_keyboard) {
LOGM(ERR, "No keyboard on bound wl_keyboard??");
return;
}
sendKeymap(g_pSeatManager->keyboard.lock());
repeatInfo(g_pSeatManager->keyboard->m_repeatRate, g_pSeatManager->keyboard->m_repeatDelay);
sendKeymap(g_pSeatManager->m_keyboard.lock());
repeatInfo(g_pSeatManager->m_keyboard->m_repeatRate, g_pSeatManager->m_keyboard->m_repeatDelay);
if (g_pSeatManager->state.keyboardFocus && g_pSeatManager->state.keyboardFocus->client() == resource->client())
sendEnter(g_pSeatManager->state.keyboardFocus.lock());
if (g_pSeatManager->m_state.keyboardFocus && g_pSeatManager->m_state.keyboardFocus->client() == resource->client())
sendEnter(g_pSeatManager->m_state.keyboardFocus.lock());
}
bool CWLKeyboardResource::good() {
@ -533,7 +533,7 @@ void CWLSeatProtocol::updateKeymap() {
return;
for (auto const& k : m_vKeyboards) {
k->sendKeymap(g_pSeatManager->keyboard.lock());
k->sendKeymap(g_pSeatManager->m_keyboard.lock());
}
}

View file

@ -149,7 +149,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) {
rect.scale(pMonitor->m_scale).round();
const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_bGroupsLocked;
const bool GROUPLOCKED = m_pWindow->getGroupHead()->m_groupData.locked || g_pKeybindManager->m_groupsLocked;
const auto* const PCOLACTIVE = GROUPLOCKED ? GROUPCOLACTIVELOCKED : GROUPCOLACTIVE;
const auto* const PCOLINACTIVE = GROUPLOCKED ? GROUPCOLINACTIVELOCKED : GROUPCOLINACTIVE;
@ -398,10 +398,10 @@ bool CHyprGroupBarDecoration::onBeginWindowDragOnDeco(const Vector2D& pos) {
// hack
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(pWindow);
if (!pWindow->m_isFloating) {
const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_bGroupsLocked;
g_pKeybindManager->m_bGroupsLocked = true;
const bool GROUPSLOCKEDPREV = g_pKeybindManager->m_groupsLocked;
g_pKeybindManager->m_groupsLocked = true;
g_pLayoutManager->getCurrentLayout()->onWindowCreated(pWindow);
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
g_pKeybindManager->m_groupsLocked = GROUPSLOCKEDPREV;
}
g_pInputManager->m_currentlyDraggedWindow = pWindow;

View file

@ -238,19 +238,19 @@ void CRenderPass::renderDebugData() {
offsets[surface.get()] += texture->m_vSize.y;
};
renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F));
renderHLSurface(debugData.pointerFocusText, g_pSeatManager->state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F));
renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->m_state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F));
renderHLSurface(debugData.pointerFocusText, g_pSeatManager->m_state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F));
if (g_pCompositor->m_lastWindow)
renderHLSurface(debugData.lastWindowText, g_pCompositor->m_lastWindow->m_wlSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F));
if (g_pSeatManager->state.pointerFocus) {
if (g_pSeatManager->state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->state.pointerFocus->current.size}).getExtents().size() !=
g_pSeatManager->state.pointerFocus->current.size) {
auto hlSurface = CWLSurface::fromResource(g_pSeatManager->state.pointerFocus.lock());
if (g_pSeatManager->m_state.pointerFocus) {
if (g_pSeatManager->m_state.pointerFocus->current.input.intersect(CBox{{}, g_pSeatManager->m_state.pointerFocus->current.size}).getExtents().size() !=
g_pSeatManager->m_state.pointerFocus->current.size) {
auto hlSurface = CWLSurface::fromResource(g_pSeatManager->m_state.pointerFocus.lock());
if (hlSurface) {
auto BOX = hlSurface->getSurfaceBoxGlobal();
if (BOX) {
auto region = g_pSeatManager->state.pointerFocus->current.input.copy()
auto region = g_pSeatManager->m_state.pointerFocus->current.input.copy()
.scale(g_pHyprOpenGL->m_RenderData.pMonitor->m_scale)
.translate(BOX->pos() - g_pHyprOpenGL->m_RenderData.pMonitor->m_position);
g_pHyprOpenGL->renderRectWithDamage(box, CHyprColor{0.8F, 0.8F, 0.2F, 0.4F}, region);

View file

@ -650,7 +650,7 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) {
return;
}
if (!g_pSeatManager->state.keyboardFocusResource || g_pSeatManager->state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) {
if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient) {
Debug::log(TRACE, "[xwm] Ignoring clipboard access: xwayland not in focus");
selectionSendNotify(e, false);
return;
@ -659,8 +659,8 @@ void CXWM::handleSelectionRequest(xcb_selection_request_event_t* e) {
if (e->target == HYPRATOMS["TARGETS"]) {
// send mime types
std::vector<std::string> mimes;
if (sel == &clipboard && g_pSeatManager->selection.currentSelection)
mimes = g_pSeatManager->selection.currentSelection->mimes();
if (sel == &clipboard && g_pSeatManager->m_selection.currentSelection)
mimes = g_pSeatManager->m_selection.currentSelection->mimes();
else if (sel == &dndSelection && !dndDataOffers.empty() && dndDataOffers.at(0)->source)
mimes = dndDataOffers.at(0)->source->mimes();
@ -1179,8 +1179,8 @@ void CXWM::initSelection() {
XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE;
xcb_xfixes_select_selection_input(connection, clipboard.window, HYPRATOMS["CLIPBOARD"], mask2);
clipboard.listeners.setSelection = g_pSeatManager->events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); });
clipboard.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); });
clipboard.listeners.setSelection = g_pSeatManager->m_events.setSelection.registerListener([this](std::any d) { clipboard.onSelection(); });
clipboard.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { clipboard.onKeyboardFocus(); });
primarySelection.window = xcb_generate_id(connection);
xcb_create_window(connection, XCB_COPY_FROM_PARENT, primarySelection.window, screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual,
@ -1189,8 +1189,8 @@ void CXWM::initSelection() {
xcb_xfixes_select_selection_input(connection, primarySelection.window, HYPRATOMS["PRIMARY"], mask2);
primarySelection.listeners.setSelection = g_pSeatManager->events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); });
primarySelection.listeners.keyboardFocusChange = g_pSeatManager->events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); });
primarySelection.listeners.setSelection = g_pSeatManager->m_events.setPrimarySelection.registerListener([this](std::any d) { primarySelection.onSelection(); });
primarySelection.listeners.keyboardFocusChange = g_pSeatManager->m_events.keyboardFocusChange.registerListener([this](std::any d) { primarySelection.onKeyboardFocus(); });
dndSelection.window = xcb_generate_id(connection);
xcb_create_window(connection, XCB_COPY_FROM_PARENT, dndSelection.window, screen->root, 0, 0, 8192, 8192, 0, XCB_WINDOW_CLASS_INPUT_ONLY, screen->root_visual, XCB_CW_EVENT_MASK,
@ -1330,16 +1330,16 @@ SP<IDataOffer> CXWM::createX11DataOffer(SP<CWLSurfaceResource> surf, SP<IDataSou
}
void SXSelection::onSelection() {
if ((this == &g_pXWayland->pWM->clipboard && g_pSeatManager->selection.currentSelection && g_pSeatManager->selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) ||
(this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection &&
g_pSeatManager->selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11))
if ((this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection && g_pSeatManager->m_selection.currentSelection->type() == DATA_SOURCE_TYPE_X11) ||
(this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection &&
g_pSeatManager->m_selection.currentPrimarySelection->type() == DATA_SOURCE_TYPE_X11))
return;
if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->selection.currentSelection) {
if (this == &g_pXWayland->pWM->clipboard && g_pSeatManager->m_selection.currentSelection) {
xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->clipboard.window, HYPRATOMS["CLIPBOARD"], XCB_TIME_CURRENT_TIME);
xcb_flush(g_pXWayland->pWM->connection);
g_pXWayland->pWM->clipboard.notifyOnFocus = true;
} else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->selection.currentPrimarySelection) {
} else if (this == &g_pXWayland->pWM->primarySelection && g_pSeatManager->m_selection.currentPrimarySelection) {
xcb_set_selection_owner(g_pXWayland->pWM->connection, g_pXWayland->pWM->primarySelection.window, HYPRATOMS["PRIMARY"], XCB_TIME_CURRENT_TIME);
xcb_flush(g_pXWayland->pWM->connection);
g_pXWayland->pWM->primarySelection.notifyOnFocus = true;
@ -1347,7 +1347,7 @@ void SXSelection::onSelection() {
}
void SXSelection::onKeyboardFocus() {
if (!g_pSeatManager->state.keyboardFocusResource || g_pSeatManager->state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient)
if (!g_pSeatManager->m_state.keyboardFocusResource || g_pSeatManager->m_state.keyboardFocusResource->client() != g_pXWayland->pServer->xwaylandClient)
return;
if (this == &g_pXWayland->pWM->clipboard && g_pXWayland->pWM->clipboard.notifyOnFocus) {
@ -1404,9 +1404,9 @@ static int readDataSource(int fd, uint32_t mask, void* data) {
bool SXSelection::sendData(xcb_selection_request_event_t* e, std::string mime) {
WP<IDataSource> selection;
if (this == &g_pXWayland->pWM->clipboard)
selection = g_pSeatManager->selection.currentSelection;
selection = g_pSeatManager->m_selection.currentSelection;
else if (this == &g_pXWayland->pWM->primarySelection)
selection = g_pSeatManager->selection.currentPrimarySelection;
selection = g_pSeatManager->m_selection.currentPrimarySelection;
else if (!g_pXWayland->pWM->dndDataOffers.empty())
selection = g_pXWayland->pWM->dndDataOffers.at(0)->getSource();