diff --git a/src/core/PortalManager.cpp b/src/core/PortalManager.cpp index 8e0d266..b02ffce 100644 --- a/src/core/PortalManager.cpp +++ b/src/core/PortalManager.cpp @@ -22,7 +22,6 @@ SOutput::SOutput(SP output_) : output(output_) { refreshRate = refresh; width = width_; height = height_; - Debug::log(LOG, "??? {} {}", flags, refresh); }); output->setGeometry( [this](CCWlOutput* r, int32_t x_, int32_t y_, int32_t physical_width, int32_t physical_height, int32_t subpixel, const char* make, const char* model, int32_t transform_) { @@ -31,7 +30,10 @@ SOutput::SOutput(SP output_) : output(output_) { y = y_; }); output->setScale([this](CCWlOutput* r, uint32_t factor_) { scale = factor_; }); - output->setDone([](CCWlOutput* r) { g_pPortalManager->m_sPortals.inputCapture->zonesChanged(); }); + output->setDone([](CCWlOutput* r) { + if (g_pPortalManager->m_sPortals.inputCapture != nullptr) + g_pPortalManager->m_sPortals.inputCapture->zonesChanged(); + }); } CPortalManager::CPortalManager() { diff --git a/src/portals/InputCapture.cpp b/src/portals/InputCapture.cpp index 9edd8c3..ba02e39 100644 --- a/src/portals/InputCapture.cpp +++ b/src/portals/InputCapture.cpp @@ -432,7 +432,7 @@ void CInputCapturePortal::zonesChanged() { if (!sessionValid(value->sessionHandle)) continue; disable(value->sessionHandle); - if (!value->zoneChanged()) + if (!value->zonesChanged()) continue; std::unordered_map options; @@ -441,7 +441,7 @@ void CInputCapturePortal::zonesChanged() { } } -bool CInputCapturePortal::SSession::zoneChanged() { +bool CInputCapturePortal::SSession::zonesChanged() { eis->resetPointer(); return true; } diff --git a/src/portals/InputCapture.hpp b/src/portals/InputCapture.hpp index 99dcd36..ac66848 100644 --- a/src/portals/InputCapture.hpp +++ b/src/portals/InputCapture.hpp @@ -22,28 +22,12 @@ class CInputCapturePortal { public: CInputCapturePortal(SP mgr); - dbUasv onCreateSession(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::string parentWindow, - std::unordered_map options); - dbUasv onGetZones(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); - dbUasv onSetPointerBarriers(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts, - std::vector> barriers, uint32_t zoneSet); - dbUasv onEnable(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); - dbUasv onDisable(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); - dbUasv onRelease(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); - sdbus::UnixFd onConnectToEIS(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + void zonesChanged(); - void onForceRelease(); - void onMotion(double x, double y, double dx, double dy); - void onKeymap(int32_t fd, uint32_t size); - void onKey(uint32_t key, bool pressed); - void onModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group); - void onButton(uint32_t button, bool pressed); - void onAxis(bool axis, double value); - void onAxisValue120(bool axis, int32_t value120); - void onAxisStop(bool axis); - void onFrame(); - - void zonesChanged(); + private: + struct { + SP manager; + } m_sState; struct SSession { std::string appid; @@ -63,7 +47,7 @@ class CInputCapturePortal { bool activate(double x, double y, uint32_t borderId); bool deactivate(); bool disable(); - bool zoneChanged(); + bool zonesChanged(); void motion(double dx, double dy); void key(uint32_t key, bool pressed); @@ -78,11 +62,6 @@ class CInputCapturePortal { uint32_t isColliding(double px, double py, double nx, double ny); }; - private: - struct { - SP manager; - } m_sState; - std::unordered_map> sessions; // std::unique_ptr m_pObject; @@ -94,9 +73,30 @@ class CInputCapturePortal { const sdbus::InterfaceName INTERFACE_NAME = sdbus::InterfaceName{"org.freedesktop.impl.portal.InputCapture"}; const sdbus::ObjectPath OBJECT_PATH = sdbus::ObjectPath{"/org/freedesktop/portal/desktop"}; - bool sessionValid(sdbus::ObjectPath sessionHandle); + dbUasv onCreateSession(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::string parentWindow, + std::unordered_map options); + dbUasv onGetZones(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + dbUasv onSetPointerBarriers(sdbus::ObjectPath requestHandle, sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts, + std::vector> barriers, uint32_t zoneSet); + dbUasv onEnable(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + dbUasv onDisable(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + dbUasv onRelease(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + sdbus::UnixFd onConnectToEIS(sdbus::ObjectPath sessionHandle, std::string appID, std::unordered_map opts); + + void onForceRelease(); + void onMotion(double x, double y, double dx, double dy); + void onKeymap(int32_t fd, uint32_t size); + void onKey(uint32_t key, bool pressed); + void onModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group); + void onButton(uint32_t button, bool pressed); + void onAxis(bool axis, double value); + void onAxisValue120(bool axis, int32_t value120); + void onAxisStop(bool axis); + void onFrame(); + + bool sessionValid(sdbus::ObjectPath sessionHandle); - void activate(sdbus::ObjectPath sessionHandle, double x, double y, uint32_t borderId); - void deactivate(sdbus::ObjectPath sessionHandle); - void disable(sdbus::ObjectPath sessionHandle); + void activate(sdbus::ObjectPath sessionHandle, double x, double y, uint32_t borderId); + void deactivate(sdbus::ObjectPath sessionHandle); + void disable(sdbus::ObjectPath sessionHandle); }; diff --git a/src/shared/Eis.cpp b/src/shared/Eis.cpp index c5f1163..593cae5 100644 --- a/src/shared/Eis.cpp +++ b/src/shared/Eis.cpp @@ -207,8 +207,6 @@ Keymap EmulatedInputServer::openKeymap() { return _keymap; } -//TODO: remove and re-add devices when monitors change (see: mutter/meta-input-capture-session.c:1107) - void EmulatedInputServer::clearPointer() { if (!client.pointer) return;