diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index d9e596e..24ef1e0 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -895,7 +895,6 @@ void Aquamarine::CDRMBackend::scanLeases() { } bool Aquamarine::CDRMBackend::start() { - impl->reset(); return true; } diff --git a/src/backend/drm/impl/Atomic.cpp b/src/backend/drm/impl/Atomic.cpp index 3fe92a5..2962d83 100644 --- a/src/backend/drm/impl/Atomic.cpp +++ b/src/backend/drm/impl/Atomic.cpp @@ -100,8 +100,19 @@ void Aquamarine::CDRMAtomicRequest::addConnector(Hyprutils::Memory::CSharedPoint TRACE(backend->log(AQ_LOG_TRACE, std::format("atomic addConnector values: CRTC {}, mode {}", enable ? connector->crtc->id : 0, data.atomic.modeBlob))); conn = connector; + if (enable) { + drmModeModeInfo* currentMode = connector->getCurrentMode(); + bool modeDiffers = true; + if (currentMode) { + modeDiffers = memcmp(currentMode, &data.modeInfo, sizeof(drmModeModeInfo)) != 0; + free(currentMode); + } - addConnectorModeset(connector, data); + if (modeDiffers) + addConnectorModeset(connector, data); + } else + addConnectorModeset(connector, data); + addConnectorCursor(connector, data); add(connector->id, connector->props.crtc_id, enable ? connector->crtc->id : 0); @@ -181,7 +192,7 @@ void Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CShar const auto& STATE = connector->output->state->state(); const bool enable = STATE.enabled && data.mainFB; - add(connector->crtc->id, connector->crtc->props.mode_id, data.atomic.modeBlob); + add(connector->crtc->id, connector->crtc->props.mode_id, enable ? data.atomic.modeBlob : 0); data.atomic.blobbed = true; if (!enable) diff --git a/tests/SimpleWindow.cpp b/tests/SimpleWindow.cpp index 9c7a920..d742992 100644 --- a/tests/SimpleWindow.cpp +++ b/tests/SimpleWindow.cpp @@ -70,15 +70,13 @@ int main(int argc, char** argv, char** envp) { }); newMouseListener = aqBackend->events.newPointer.listen([](const SP& pointer) { - mouseMotionListener = pointer->events.warp.listen([](const Aquamarine::IPointer::SWarpEvent& event) { - std::cout << "[Client] Mouse warped to " << std::format("{}", event.absolute) << "\n"; - }); + mouseMotionListener = pointer->events.warp.listen( + [](const Aquamarine::IPointer::SWarpEvent& event) { std::cout << "[Client] Mouse warped to " << std::format("{}", event.absolute) << "\n"; }); }); newKeyboardListener = aqBackend->events.newKeyboard.listen([](const SP& keyboard) { - keyboardKeyListener = keyboard->events.key.listen([](const Aquamarine::IKeyboard::SKeyEvent& event) { - std::cout << "[Client] Key " << std::format("{}", event.key) << " state: " << event.pressed << " \n"; - }); + keyboardKeyListener = keyboard->events.key.listen( + [](const Aquamarine::IKeyboard::SKeyEvent& event) { std::cout << "[Client] Key " << std::format("{}", event.key) << " state: " << event.pressed << " \n"; }); }); if (!aqBackend || !aqBackend->start()) {