mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 01:25:58 +01:00
parent
3a1afb53fd
commit
01560c9d7c
2 changed files with 19 additions and 3 deletions
|
@ -38,7 +38,7 @@ CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : point
|
||||||
listeners.holdBegin = pointer->events.holdBegin.registerListener([this](std::any d) { pointerEvents.holdBegin.emit(d); });
|
listeners.holdBegin = pointer->events.holdBegin.registerListener([this](std::any d) { pointerEvents.holdBegin.emit(d); });
|
||||||
listeners.holdEnd = pointer->events.holdEnd.registerListener([this](std::any d) { pointerEvents.holdEnd.emit(d); });
|
listeners.holdEnd = pointer->events.holdEnd.registerListener([this](std::any d) { pointerEvents.holdEnd.emit(d); });
|
||||||
|
|
||||||
boundOutput = resource->boundOutput ? resource->boundOutput->szName : "auto";
|
boundOutput = resource->boundOutput ? resource->boundOutput->szName : "entire";
|
||||||
|
|
||||||
deviceName = pointer->name;
|
deviceName = pointer->name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -676,8 +676,24 @@ void CPointerManager::warpAbsolute(Vector2D abs, SP<IHID> dev) {
|
||||||
}
|
}
|
||||||
case HID_TYPE_POINTER: {
|
case HID_TYPE_POINTER: {
|
||||||
IPointer* POINTER = reinterpret_cast<IPointer*>(dev.get());
|
IPointer* POINTER = reinterpret_cast<IPointer*>(dev.get());
|
||||||
if (!POINTER->boundOutput.empty() && POINTER->boundOutput != "auto") {
|
if (!POINTER->boundOutput.empty()) {
|
||||||
if (const auto PMONITOR = g_pCompositor->getMonitorFromString(POINTER->boundOutput); PMONITOR) {
|
if (POINTER->boundOutput == "entire") {
|
||||||
|
// find x and y size of the entire space
|
||||||
|
Vector2D bottomRight = {-9999999, -9999999}, topLeft = {9999999, 9999999};
|
||||||
|
for (auto& m : g_pCompositor->m_vMonitors) {
|
||||||
|
const auto EXTENT = m->logicalBox().extent();
|
||||||
|
const auto POS = m->logicalBox().pos();
|
||||||
|
if (EXTENT.x > bottomRight.x)
|
||||||
|
bottomRight.x = EXTENT.x;
|
||||||
|
if (EXTENT.y > bottomRight.y)
|
||||||
|
bottomRight.y = EXTENT.y;
|
||||||
|
if (POS.x < topLeft.x)
|
||||||
|
topLeft.x = POS.x;
|
||||||
|
if (POS.y < topLeft.y)
|
||||||
|
topLeft.y = POS.y;
|
||||||
|
}
|
||||||
|
mappedArea = {topLeft, bottomRight - topLeft};
|
||||||
|
} else if (const auto PMONITOR = g_pCompositor->getMonitorFromString(POINTER->boundOutput); PMONITOR) {
|
||||||
currentMonitor = PMONITOR->self.lock();
|
currentMonitor = PMONITOR->self.lock();
|
||||||
mappedArea = currentMonitor->logicalBox();
|
mappedArea = currentMonitor->logicalBox();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue