Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package aquamarine for openSUSE:Factory checked in at 2026-01-06 17:45:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aquamarine (Old) and /work/SRC/openSUSE:Factory/.aquamarine.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aquamarine" Tue Jan 6 17:45:17 2026 rev:9 rq:1325495 version:0.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/aquamarine/aquamarine.changes 2025-09-11 14:43:24.350111721 +0200 +++ /work/SRC/openSUSE:Factory/.aquamarine.new.1928/aquamarine.changes 2026-01-06 17:46:50.555200595 +0100 @@ -1,0 +2,13 @@ +Mon Dec 29 22:10:17 UTC 2025 - Florian "sp1rit" <[email protected]> + +- Update to aquamarine-0.10.0: + - A new ABI-breaking release. + - Changes: + * wayland: send commit after frame + * backend: implement hyprutils' cli::logger + * rendernode: dont bother finding one on evdi + * Ensure disconnect called for removed connectors + * minor renderer changes + * prevent use-after-free during DRM backend shutdown + +------------------------------------------------------------------- Old: ---- aquamarine-0.9.4.tar.xz New: ---- aquamarine-0.10.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aquamarine.spec ++++++ --- /var/tmp/diff_new_pack.wF3GeZ/_old 2026-01-06 17:46:51.351233342 +0100 +++ /var/tmp/diff_new_pack.wF3GeZ/_new 2026-01-06 17:46:51.351233342 +0100 @@ -16,13 +16,13 @@ # -%define sover 8 +%define sover 9 %define _description %{expand: Aquamarine is a very light linux rendering backend library. It provides basic abstractions for an application to render on a Wayland session (in a window) or a native DRM session.} Name: aquamarine -Version: 0.9.4 +Version: 0.10.0 Release: 0 Summary: Rendering backend library License: BSD-3-Clause ++++++ aquamarine-0.9.4.tar.xz -> aquamarine-0.10.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/CMakeLists.txt new/aquamarine-0.10.0/CMakeLists.txt --- old/aquamarine-0.9.4/CMakeLists.txt 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/CMakeLists.txt 2025-11-23 19:33:09.000000000 +0100 @@ -66,7 +66,7 @@ PUBLIC "./include" PRIVATE "./src" "./src/include" "./protocols" "${CMAKE_BINARY_DIR}") set_target_properties(aquamarine PROPERTIES VERSION ${AQUAMARINE_VERSION} - SOVERSION 8) + SOVERSION 9) target_link_libraries(aquamarine OpenGL::EGL OpenGL::OpenGL PkgConfig::deps) check_include_file("sys/timerfd.h" HAS_TIMERFD) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/VERSION new/aquamarine-0.10.0/VERSION --- old/aquamarine-0.9.4/VERSION 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/VERSION 2025-11-23 19:33:09.000000000 +0100 @@ -1 +1 @@ -0.9.4 +0.10.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/flake.lock new/aquamarine-0.10.0/flake.lock --- old/aquamarine-0.9.4/flake.lock 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/flake.lock 2025-11-23 19:33:09.000000000 +0100 @@ -10,11 +10,11 @@ ] }, "locked": { - "lastModified": 1755795954, - "narHash": "sha256-9QoDVkjLwjiZDR+y4cMWc/FVudRu5jCIG4rn15Afa9w=", + "lastModified": 1763913838, + "narHash": "sha256-Q4ZfdlEGQU2LJ/Dif0qzF88xgIkpD6/uRsGfxOpu9jc=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "b364dcb7391709acb4492e100fe750ca722992e1", + "rev": "a9fe9748ae27ec40e03c8c064cf97f483097bd22", "type": "github" }, "original": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/include/aquamarine/backend/Backend.hpp new/aquamarine-0.10.0/include/aquamarine/backend/Backend.hpp --- old/aquamarine-0.9.4/include/aquamarine/backend/Backend.hpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/include/aquamarine/backend/Backend.hpp 2025-11-23 19:33:09.000000000 +0100 @@ -3,6 +3,7 @@ #include <hyprutils/memory/SharedPtr.hpp> #include <hyprutils/memory/WeakPtr.hpp> #include <hyprutils/signal/Signal.hpp> +#include <hyprutils/cli/Logger.hpp> #include <vector> #include <functional> #include <mutex> @@ -25,6 +26,7 @@ AQ_BACKEND_WAYLAND = 0, AQ_BACKEND_DRM, AQ_BACKEND_HEADLESS, + AQ_BACKEND_NULL, }; enum eBackendRequestMode : uint32_t { @@ -58,7 +60,8 @@ struct SBackendOptions { explicit SBackendOptions(); - std::function<void(eBackendLogLevel, std::string)> logFunction; + std::function<void(eBackendLogLevel, std::string)> logFunction; + Hyprutils::Memory::CSharedPointer<Hyprutils::CLI::CLoggerConnection> logConnection; }; struct SPollFD { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/include/aquamarine/backend/Null.hpp new/aquamarine-0.10.0/include/aquamarine/backend/Null.hpp --- old/aquamarine-0.9.4/include/aquamarine/backend/Null.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/aquamarine-0.10.0/include/aquamarine/backend/Null.hpp 2025-11-23 19:33:09.000000000 +0100 @@ -0,0 +1,45 @@ +#pragma once + +#include "./Backend.hpp" +#include "../allocator/Swapchain.hpp" +#include "../output/Output.hpp" +#include <hyprutils/memory/WeakPtr.hpp> + +namespace Aquamarine { + class CBackend; + class IAllocator; + + class CNullBackend : public IBackendImplementation { + public: + virtual ~CNullBackend(); + virtual eBackendType type(); + virtual bool start(); + virtual std::vector<Hyprutils::Memory::CSharedPointer<SPollFD>> pollFDs(); + virtual int drmFD(); + virtual bool dispatchEvents(); + virtual uint32_t capabilities(); + virtual bool setCursor(Hyprutils::Memory::CSharedPointer<IBuffer> buffer, const Hyprutils::Math::Vector2D& hotspot); + virtual void onReady(); + virtual std::vector<SDRMFormat> getRenderFormats(); + virtual std::vector<SDRMFormat> getCursorFormats(); + virtual bool createOutput(const std::string& name = ""); + virtual Hyprutils::Memory::CSharedPointer<IAllocator> preferredAllocator(); + virtual std::vector<Hyprutils::Memory::CSharedPointer<IAllocator>> getAllocators(); + virtual Hyprutils::Memory::CWeakPointer<IBackendImplementation> getPrimary(); + + Hyprutils::Memory::CWeakPointer<CNullBackend> self; + virtual int drmRenderNodeFD(); + + void setFormats(const std::vector<SDRMFormat>& fmts); + + private: + CNullBackend(Hyprutils::Memory::CSharedPointer<CBackend> backend_); + + Hyprutils::Memory::CWeakPointer<CBackend> backend; + + std::vector<SDRMFormat> m_formats; + + friend class CBackend; + friend class CHeadlessOutput; + }; +}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Backend.cpp new/aquamarine-0.10.0/src/backend/Backend.cpp --- old/aquamarine-0.9.4/src/backend/Backend.cpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/src/backend/Backend.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -2,6 +2,7 @@ #include <aquamarine/backend/Wayland.hpp> #include <aquamarine/backend/Headless.hpp> #include <aquamarine/backend/DRM.hpp> +#include <aquamarine/backend/Null.hpp> #include <aquamarine/allocator/GBM.hpp> #include <ranges> #include <sys/timerfd.h> @@ -11,6 +12,8 @@ #include <fcntl.h> #include <unistd.h> +#include "Logger.hpp" + using namespace Hyprutils::Memory; using namespace Aquamarine; #define SP CSharedPointer @@ -59,6 +62,10 @@ backend->implementationOptions = backends; backend->self = backend; + g_logger->m_loggerConnection = options.logConnection; + g_logger->m_logFn = options.logFunction; + g_logger->updateLevels(); + if (backends.size() <= 0) return nullptr; @@ -83,6 +90,10 @@ auto ref = SP<CHeadlessBackend>(new CHeadlessBackend(backend)); backend->implementations.emplace_back(ref); ref->self = ref; + } else if (b.backendType == AQ_BACKEND_NULL) { + auto ref = SP<CNullBackend>(new CNullBackend(backend)); + backend->implementations.emplace_back(ref); + ref->self = ref; } else { backend->log(AQ_LOG_ERROR, std::format("Unknown backend id: {}", (int)b.backendType)); continue; @@ -133,7 +144,7 @@ // erase failed impls std::erase_if(implementations, [this](const auto& i) { - bool failed = i->pollFDs().empty(); + bool failed = i->pollFDs().empty() && i->type() != AQ_BACKEND_NULL; if (failed) log(AQ_LOG_ERROR, std::format("Implementation {} failed, erasing.", backendTypeToName(i->type()))); return failed; @@ -153,7 +164,7 @@ } } - if (!primaryAllocator) { + if (!primaryAllocator && (implementations.empty() || implementations.at(0)->type() != AQ_BACKEND_NULL)) { log(AQ_LOG_CRITICAL, "Cannot open backend: no allocator available"); return false; } @@ -172,10 +183,7 @@ } void Aquamarine::CBackend::log(eBackendLogLevel level, const std::string& msg) { - if (!options.logFunction) - return; - - options.logFunction(level, msg); + g_logger->log(level, msg); } std::vector<Hyprutils::Memory::CSharedPointer<SPollFD>> Aquamarine::CBackend::getPollFDs() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Logger.cpp new/aquamarine-0.10.0/src/backend/Logger.cpp --- old/aquamarine-0.9.4/src/backend/Logger.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/aquamarine-0.10.0/src/backend/Logger.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -0,0 +1,35 @@ +#include "Logger.hpp" +#include "../include/Shared.hpp" + +using namespace Aquamarine; + +static Hyprutils::CLI::eLogLevel levelToHU(eBackendLogLevel l) { + switch (l) { + case Aquamarine::AQ_LOG_DEBUG: return Hyprutils::CLI::LOG_DEBUG; + case Aquamarine::AQ_LOG_ERROR: return Hyprutils::CLI::LOG_ERR; + case Aquamarine::AQ_LOG_WARNING: return Hyprutils::CLI::LOG_WARN; + case Aquamarine::AQ_LOG_CRITICAL: return Hyprutils::CLI::LOG_CRIT; + case Aquamarine::AQ_LOG_TRACE: return Hyprutils::CLI::LOG_TRACE; + } + return Hyprutils::CLI::LOG_DEBUG; +} + +CLogger::CLogger() = default; + +void CLogger::updateLevels() { + const auto IS_TRACE = Aquamarine::isTrace(); + if (m_loggerConnection && IS_TRACE) + m_loggerConnection->setLogLevel(Hyprutils::CLI::LOG_TRACE); +} + +void CLogger::log(eBackendLogLevel level, const std::string& str) { + if (m_logFn) { + m_logFn(level, str); + return; + } + + if (m_loggerConnection) { + m_loggerConnection->log(levelToHU(level), str); + return; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Logger.hpp new/aquamarine-0.10.0/src/backend/Logger.hpp --- old/aquamarine-0.9.4/src/backend/Logger.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/aquamarine-0.10.0/src/backend/Logger.hpp 2025-11-23 19:33:09.000000000 +0100 @@ -0,0 +1,39 @@ +#pragma once + +#include <aquamarine/backend/Backend.hpp> + +#include <hyprutils/cli/Logger.hpp> + +namespace Aquamarine { + class CLogger { + public: + CLogger(); + ~CLogger() = default; + + void log(eBackendLogLevel level, const std::string& str); + void updateLevels(); + + template <typename... Args> + //NOLINTNEXTLINE + void log(eBackendLogLevel level, std::format_string<Args...> fmt, Args&&... args) { + if (!m_loggerConnection && !m_logFn) + return; + + std::string logMsg = ""; + + // no need for try {} catch {} because std::format_string<Args...> ensures that vformat never throw std::format_error + // because + // 1. any faulty format specifier that sucks will cause a compilation error. + // 2. and `std::bad_alloc` is catastrophic, (Almost any operation in stdlib could throw this.) + // 3. this is actually what std::format in stdlib does + logMsg += std::vformat(fmt.get(), std::make_format_args(args...)); + + log(level, logMsg); + } + + std::function<void(eBackendLogLevel, std::string)> m_logFn; + Hyprutils::Memory::CSharedPointer<Hyprutils::CLI::CLoggerConnection> m_loggerConnection; + }; + + inline Hyprutils::Memory::CSharedPointer<CLogger> g_logger = Hyprutils::Memory::makeShared<CLogger>(); +}; \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Null.cpp new/aquamarine-0.10.0/src/backend/Null.cpp --- old/aquamarine-0.9.4/src/backend/Null.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/aquamarine-0.10.0/src/backend/Null.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -0,0 +1,89 @@ +#include <aquamarine/backend/Null.hpp> +#include <fcntl.h> +#include <ctime> +#include <sys/timerfd.h> +#include <cstring> +#include "Shared.hpp" + +using namespace Aquamarine; +using namespace Hyprutils::Memory; +using namespace Hyprutils::Math; +#define SP CSharedPointer + +Aquamarine::CNullBackend::~CNullBackend() { + ; +} + +Aquamarine::CNullBackend::CNullBackend(SP<CBackend> backend_) : backend(backend_) { + ; +} + +eBackendType Aquamarine::CNullBackend::type() { + return eBackendType::AQ_BACKEND_NULL; +} + +bool Aquamarine::CNullBackend::start() { + return true; +} + +std::vector<SP<SPollFD>> Aquamarine::CNullBackend::pollFDs() { + return {}; +} + +int Aquamarine::CNullBackend::drmFD() { + return -1; +} + +int Aquamarine::CNullBackend::drmRenderNodeFD() { + return -1; +} + +bool Aquamarine::CNullBackend::dispatchEvents() { + return true; +} + +uint32_t Aquamarine::CNullBackend::capabilities() { + return 0; +} + +bool Aquamarine::CNullBackend::setCursor(SP<IBuffer> buffer, const Hyprutils::Math::Vector2D& hotspot) { + return false; +} + +void Aquamarine::CNullBackend::onReady() { + ; +} + +std::vector<SDRMFormat> Aquamarine::CNullBackend::getRenderFormats() { + for (const auto& impl : backend->getImplementations()) { + if (impl->type() != AQ_BACKEND_DRM || impl->getRenderableFormats().empty()) + continue; + return impl->getRenderableFormats(); + } + + return m_formats; +} + +void Aquamarine::CNullBackend::setFormats(const std::vector<SDRMFormat>& fmts) { + m_formats = fmts; +} + +std::vector<SDRMFormat> Aquamarine::CNullBackend::getCursorFormats() { + return {}; // No cursor support +} + +bool Aquamarine::CNullBackend::createOutput(const std::string& name) { + return false; +} + +SP<IAllocator> Aquamarine::CNullBackend::preferredAllocator() { + return backend->primaryAllocator; +} + +std::vector<SP<IAllocator>> Aquamarine::CNullBackend::getAllocators() { + return {backend->primaryAllocator}; +} + +Hyprutils::Memory::CWeakPointer<IBackendImplementation> Aquamarine::CNullBackend::getPrimary() { + return {}; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/Wayland.cpp new/aquamarine-0.10.0/src/backend/Wayland.cpp --- old/aquamarine-0.9.4/src/backend/Wayland.cpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/src/backend/Wayland.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -645,6 +645,8 @@ waylandState.frameCallback = makeShared<CCWlCallback>(waylandState.surface->sendFrame()); waylandState.frameCallback->setDone([this](CCWlCallback* r, uint32_t ms) { onFrameDone(); }); + + waylandState.surface->sendCommit(); } void Aquamarine::CWaylandOutput::onFrameDone() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/DRM.cpp new/aquamarine-0.10.0/src/backend/drm/DRM.cpp --- old/aquamarine-0.9.4/src/backend/drm/DRM.cpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/src/backend/drm/DRM.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -150,7 +150,12 @@ continue; } - sessionDevice->resolveMatchingRenderNode(device); + auto drmVer = drmGetVersion(sessionDevice->fd); + auto drmVerName = drmVer->name ? drmVer->name : "unknown"; + if (std::string_view(drmVerName) != "evdi") + sessionDevice->resolveMatchingRenderNode(device); + + drmFreeVersion(drmVer); udev_device_unref(device); @@ -842,12 +847,12 @@ } // cleanup hot unplugged connectors - std::erase_if(connectors, [resources](const auto& conn) { + std::erase_if(connectors, [resources](auto& conn) { for (int i = 0; i < resources->count_connectors; ++i) { if (resources->connectors[i] == conn->id) return false; } - + conn->disconnect(); return true; }); @@ -1560,7 +1565,8 @@ } Aquamarine::CDRMOutput::~CDRMOutput() { - backend->backend->removeIdleEvent(frameIdle); + if (backend && backend->backend) + backend->backend->removeIdleEvent(frameIdle); connector->isPageFlipPending = false; connector->frameEventScheduled = false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/Renderer.cpp new/aquamarine-0.10.0/src/backend/drm/Renderer.cpp --- old/aquamarine-0.9.4/src/backend/drm/Renderer.cpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/src/backend/drm/Renderer.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -307,7 +307,7 @@ } // if the driver doesn't mark linear as external, add it. It's allowed unless the driver says otherwise. (e.g. nvidia) - if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == mods.end() && mods.empty()) + if (!linearIsExternal && std::ranges::find(mods, DRM_FORMAT_MOD_LINEAR) == mods.end()) result.emplace_back(DRM_FORMAT_MOD_LINEAR, true); return result; @@ -656,14 +656,15 @@ } EGLImageKHR CDRMRenderer::createEGLImage(const SDMABUFAttrs& attrs) { - std::vector<uint32_t> attribs; + std::array<EGLint, 50> attribs; + size_t idx = 0; - attribs.push_back(EGL_WIDTH); - attribs.push_back(attrs.size.x); - attribs.push_back(EGL_HEIGHT); - attribs.push_back(attrs.size.y); - attribs.push_back(EGL_LINUX_DRM_FOURCC_EXT); - attribs.push_back(attrs.format); + attribs[idx++] = EGL_WIDTH; + attribs[idx++] = attrs.size.x; + attribs[idx++] = EGL_HEIGHT; + attribs[idx++] = attrs.size.y; + attribs[idx++] = EGL_LINUX_DRM_FOURCC_EXT; + attribs[idx++] = attrs.format; TRACE(backend->log(AQ_LOG_TRACE, std::format("EGL: createEGLImage: size {} with format {} and modifier 0x{:x}", attrs.size, fourccToName(attrs.format), attrs.modifier))); @@ -695,26 +696,27 @@ .modhi = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}}; for (int i = 0; i < attrs.planes; i++) { - attribs.push_back(attrNames[i].fd); - attribs.push_back(attrs.fds[i]); - attribs.push_back(attrNames[i].offset); - attribs.push_back(attrs.offsets[i]); - attribs.push_back(attrNames[i].pitch); - attribs.push_back(attrs.strides[i]); + attribs[idx++] = attrNames[i].fd; + attribs[idx++] = attrs.fds[i]; + attribs[idx++] = attrNames[i].offset; + attribs[idx++] = attrs.offsets[i]; + attribs[idx++] = attrNames[i].pitch; + attribs[idx++] = attrs.strides[i]; if (hasModifiers && attrs.modifier != DRM_FORMAT_MOD_INVALID) { - attribs.push_back(attrNames[i].modlo); - attribs.push_back(attrs.modifier & 0xFFFFFFFF); - attribs.push_back(attrNames[i].modhi); - attribs.push_back(attrs.modifier >> 32); + attribs[idx++] = attrNames[i].modlo; + attribs[idx++] = attrs.modifier & 0xFFFFFFFF; + attribs[idx++] = attrNames[i].modhi; + attribs[idx++] = attrs.modifier >> 32; } } - attribs.push_back(EGL_IMAGE_PRESERVED_KHR); - attribs.push_back(EGL_TRUE); + attribs[idx++] = EGL_IMAGE_PRESERVED_KHR; + attribs[idx++] = EGL_TRUE; - attribs.push_back(EGL_NONE); + attribs[idx++] = EGL_NONE; + RASSERT(idx <= attribs.size(), "EGL: EGLCreateImageKHR: attribs array out of bounds."); - EGLImageKHR image = proc.eglCreateImageKHR(egl.display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, (int*)attribs.data()); + EGLImageKHR image = proc.eglCreateImageKHR(egl.display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, attribs.data()); if (image == EGL_NO_IMAGE_KHR) { backend->log(AQ_LOG_ERROR, std::format("EGL: EGLCreateImageKHR failed: {}", eglGetError())); return EGL_NO_IMAGE_KHR; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aquamarine-0.9.4/src/backend/drm/impl/Atomic.cpp new/aquamarine-0.10.0/src/backend/drm/impl/Atomic.cpp --- old/aquamarine-0.9.4/src/backend/drm/impl/Atomic.cpp 2025-08-23 12:55:32.000000000 +0200 +++ new/aquamarine-0.10.0/src/backend/drm/impl/Atomic.cpp 2025-11-23 19:33:09.000000000 +0100 @@ -196,7 +196,6 @@ } } - void Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CSharedPointer<SDRMConnector> connector, SDRMConnectorCommitData& data) { if (!data.modeset) return; ++++++ aquamarine.obsinfo ++++++ --- /var/tmp/diff_new_pack.wF3GeZ/_old 2026-01-06 17:46:51.551241571 +0100 +++ /var/tmp/diff_new_pack.wF3GeZ/_new 2026-01-06 17:46:51.563242064 +0100 @@ -1,5 +1,5 @@ name: aquamarine -version: 0.9.4 -mtime: 1755946532 -commit: 81584dae2df6ac79f6b6dae0ecb7705e95129ada +version: 0.10.0 +mtime: 1763922789 +commit: a20a0e67a33b6848378a91b871b89588d3a12573
