parent
3cba4ba44e
commit
9f7a96b997
5 changed files with 45 additions and 19 deletions
|
|
@ -14,8 +14,7 @@ CSeatManager::CSeatManager() {
|
|||
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;
|
||||
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; }); });
|
||||
}
|
||||
|
|
@ -192,8 +191,12 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
|
|||
if (state.pointerFocus == surf)
|
||||
return;
|
||||
|
||||
if (PROTO::data->dndActive() && surf) {
|
||||
Debug::log(LOG, "[seatmgr] Refusing pointer focus during an active dnd");
|
||||
if (PROTO::data->dndActive()) {
|
||||
if (state.dndPointerFocus == surf)
|
||||
return;
|
||||
Debug::log(LOG, "[seatmgr] Refusing pointer focus during an active dnd, but setting dndPointerFocus");
|
||||
state.dndPointerFocus = surf;
|
||||
events.dndPointerFocusChange.emit();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -221,6 +224,7 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
|
|||
|
||||
auto lastPointerFocusResource = state.pointerFocusResource;
|
||||
|
||||
state.dndPointerFocus.reset();
|
||||
state.pointerFocusResource.reset();
|
||||
state.pointerFocus = surf;
|
||||
|
||||
|
|
@ -230,6 +234,8 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
|
|||
return;
|
||||
}
|
||||
|
||||
state.dndPointerFocus = surf;
|
||||
|
||||
auto client = surf->client();
|
||||
for (auto const& r : seatResources | std::views::reverse) {
|
||||
if (r->resource->client() != client)
|
||||
|
|
@ -252,6 +258,7 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
|
|||
listeners.pointerSurfaceDestroy = surf->events.destroy.registerListener([this](std::any d) { setPointerFocus(nullptr, {}); });
|
||||
|
||||
events.pointerFocusChange.emit();
|
||||
events.dndPointerFocusChange.emit();
|
||||
}
|
||||
|
||||
void CSeatManager::sendPointerMotion(uint32_t timeMs, const Vector2D& local) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue