From af58123b3296b57000b2ade4fc37c63ead065bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Kosobucki?= Date: Fri, 28 Jun 2024 16:34:45 +0200 Subject: [PATCH] Fix [[nodiscard]] warnings coming from KDBindings std::ignore used in cases where we don't need to store the connection. I think it's more descriptive than (void). Technically, using std::ignore is UB until Peppe's P2968 is ratified in C++26 but every implementation we target does the right thing so I don't care. Sue me. --- examples/gui_window/gui_window.cpp | 2 +- src/KDFoundation/platform/linux/linux_platform_timer.cpp | 6 +++--- src/KDFoundation/platform/linux/linux_platform_timer.h | 5 +++++ src/KDFoundation/platform/win32/win32_platform_timer.cpp | 4 ++-- src/KDFoundation/platform/win32/win32_platform_timer.h | 3 +++ src/KDGui/abstract_platform_window.cpp | 2 +- src/KDGui/abstract_platform_window.h | 3 +++ .../linux/wayland/linux_wayland_platform_input.cpp | 8 +++++--- .../linux/wayland/linux_wayland_platform_window.cpp | 5 +++-- .../linux/wayland/linux_wayland_platform_window.h | 1 + .../platform/linux/xcb/linux_xcb_platform_event_loop.cpp | 4 +++- src/KDGui/window.cpp | 8 +++++--- tests/auto/foundation/common/signal_spy.h | 3 ++- .../foundation/core_application/tst_core_application.cpp | 5 +++-- tests/auto/foundation/object/tst_object.cpp | 3 ++- .../tst_win32_platform_event_loop.cpp | 7 ++++--- tests/auto/utils/signal/tst_signal.cpp | 9 +++++---- 17 files changed, 51 insertions(+), 27 deletions(-) diff --git a/examples/gui_window/gui_window.cpp b/examples/gui_window/gui_window.cpp index 59b0a99..c02896b 100644 --- a/examples/gui_window/gui_window.cpp +++ b/examples/gui_window/gui_window.cpp @@ -68,7 +68,7 @@ int main() w.title = "KDGui window example"; w.visible = true; - w.visible.valueChanged().connect([&app](bool visible) { + KDBindings::ScopedConnection conn = w.visible.valueChanged().connect([&app](bool visible) { if (!visible) { app.quit(); } diff --git a/src/KDFoundation/platform/linux/linux_platform_timer.cpp b/src/KDFoundation/platform/linux/linux_platform_timer.cpp index cfb4630..983cb74 100644 --- a/src/KDFoundation/platform/linux/linux_platform_timer.cpp +++ b/src/KDFoundation/platform/linux/linux_platform_timer.cpp @@ -23,21 +23,21 @@ using namespace KDFoundation; LinuxPlatformTimer::LinuxPlatformTimer(Timer *timer) : m_notifier(timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC), FileDescriptorNotifier::NotificationType::Read) { - m_notifier.triggered.connect([this, timer]() { + m_notifierConnection = m_notifier.triggered.connect([this, timer]() { char buf[8]; const auto bytes = read(m_notifier.fileDescriptor(), buf, 8); KD_UNUSED(bytes); timer->timeout.emit(); }); - timer->running.valueChanged().connect([this, timer](bool running) { + m_timerRunningConnection = timer->running.valueChanged().connect([this, timer](bool running) { if (running) { arm(timer->interval.get()); } else { disarm(); } }); - timer->interval.valueChanged().connect([this, timer]() { + m_timerIntervalConnection = timer->interval.valueChanged().connect([this, timer]() { if (timer->running.get()) { arm(timer->interval.get()); } diff --git a/src/KDFoundation/platform/linux/linux_platform_timer.h b/src/KDFoundation/platform/linux/linux_platform_timer.h index 0cdca59..2c7aef5 100644 --- a/src/KDFoundation/platform/linux/linux_platform_timer.h +++ b/src/KDFoundation/platform/linux/linux_platform_timer.h @@ -13,6 +13,8 @@ #include +#include + #include #include @@ -35,6 +37,9 @@ class KDFOUNDATION_API LinuxPlatformTimer : public AbstractPlatformTimer int fd; } m_fdCloser; FileDescriptorNotifier m_notifier; + KDBindings::ScopedConnection m_notifierConnection; + KDBindings::ScopedConnection m_timerRunningConnection; + KDBindings::ScopedConnection m_timerIntervalConnection; }; } // namespace KDFoundation diff --git a/src/KDFoundation/platform/win32/win32_platform_timer.cpp b/src/KDFoundation/platform/win32/win32_platform_timer.cpp index 3a19ce0..e7a6803 100644 --- a/src/KDFoundation/platform/win32/win32_platform_timer.cpp +++ b/src/KDFoundation/platform/win32/win32_platform_timer.cpp @@ -27,14 +27,14 @@ inline Win32PlatformEventLoop *eventLoop() Win32PlatformTimer::Win32PlatformTimer(Timer *timer) : m_timer(timer) { - timer->running.valueChanged().connect([this, timer](bool running) { + m_timerRunningConnection = timer->running.valueChanged().connect([this, timer](bool running) { if (running) { arm(timer->interval.get()); } else { disarm(); } }); - timer->interval.valueChanged().connect([this, timer]() { + m_timerIntervalConnection = timer->interval.valueChanged().connect([this, timer]() { if (timer->running.get()) { arm(timer->interval.get()); } diff --git a/src/KDFoundation/platform/win32/win32_platform_timer.h b/src/KDFoundation/platform/win32/win32_platform_timer.h index 8a47f1d..beac29d 100644 --- a/src/KDFoundation/platform/win32/win32_platform_timer.h +++ b/src/KDFoundation/platform/win32/win32_platform_timer.h @@ -13,6 +13,7 @@ #include #include +#include #undef max #include @@ -33,6 +34,8 @@ class KDFOUNDATION_API Win32PlatformTimer : public AbstractPlatformTimer static void callback(HWND hwnd, UINT uMsg, UINT_PTR timerId, DWORD dwTime); Timer *m_timer; + KDBindings::ScopedConnection m_timerRunningConnection; + KDBindings::ScopedConnection m_timerIntervalConnection; uintptr_t m_id{ 0 }; }; diff --git a/src/KDGui/abstract_platform_window.cpp b/src/KDGui/abstract_platform_window.cpp index 6f41172..ac84d45 100644 --- a/src/KDGui/abstract_platform_window.cpp +++ b/src/KDGui/abstract_platform_window.cpp @@ -21,7 +21,7 @@ AbstractPlatformWindow::AbstractPlatformWindow(Window *window, AbstractPlatformW , m_type(type) { assert(window); - window->title.valueChanged().connect(&AbstractPlatformWindow::setTitle, this); + m_titleChangedConnection = window->title.valueChanged().connect(&AbstractPlatformWindow::setTitle, this); } AbstractPlatformWindow::Type AbstractPlatformWindow::type() const diff --git a/src/KDGui/abstract_platform_window.h b/src/KDGui/abstract_platform_window.h index a664278..5bf14e0 100644 --- a/src/KDGui/abstract_platform_window.h +++ b/src/KDGui/abstract_platform_window.h @@ -15,6 +15,8 @@ #include #include +#include + #include namespace KDGui { @@ -86,6 +88,7 @@ class KDGUI_API AbstractPlatformWindow protected: Window *m_window; + KDBindings::ScopedConnection m_titleChangedConnection; AbstractPlatformWindow::Type m_type; }; diff --git a/src/KDGui/platform/linux/wayland/linux_wayland_platform_input.cpp b/src/KDGui/platform/linux/wayland/linux_wayland_platform_input.cpp index 0de203e..ccaf456 100644 --- a/src/KDGui/platform/linux/wayland/linux_wayland_platform_input.cpp +++ b/src/KDGui/platform/linux/wayland/linux_wayland_platform_input.cpp @@ -26,6 +26,8 @@ #include #include +#include + using namespace KDGui; LinuxWaylandPlatformInput::LinuxWaylandPlatformInput(LinuxWaylandPlatformIntegration *integration, @@ -41,7 +43,7 @@ LinuxWaylandPlatformInput::LinuxWaylandPlatformInput(LinuxWaylandPlatformIntegra }; wl_seat_add_listener(seat, &listener, this); - m_keyboard.repeat.timer.timeout.connect(&LinuxWaylandPlatformInput::keyboardRepeatKey, this); + std::ignore = m_keyboard.repeat.timer.timeout.connect(&LinuxWaylandPlatformInput::keyboardRepeatKey, this); } LinuxWaylandPlatformInput::~LinuxWaylandPlatformInput() @@ -223,7 +225,7 @@ void LinuxWaylandPlatformInput::pointerEnter(wl_pointer *pointer, uint32_t seria m_pointer.accumulatedEvent.focusChange = true; } else { m_pointer.focus = LinuxWaylandPlatformWindow::fromSurface(surface); - m_pointer.focus->cursorChanged.connect(&LinuxWaylandPlatformInput::setCursor, this); + std::ignore = m_pointer.focus->cursorChanged.connect(&LinuxWaylandPlatformInput::setCursor, this); setCursor(); } } @@ -333,7 +335,7 @@ void LinuxWaylandPlatformInput::pointerFrame(wl_pointer *pointer) auto &ev = m_pointer.accumulatedEvent; if (ev.focusChange && ev.focus) { m_pointer.focus = ev.focus; - m_pointer.focus->cursorChanged.connect(&LinuxWaylandPlatformInput::setCursor, this); + std::ignore = m_pointer.focus->cursorChanged.connect(&LinuxWaylandPlatformInput::setCursor, this); setCursor(); } diff --git a/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.cpp b/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.cpp index 20e2670..86eb89b 100644 --- a/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.cpp +++ b/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.cpp @@ -24,6 +24,7 @@ #include #include +#include using namespace KDFoundation; using namespace KDGui; @@ -34,12 +35,12 @@ LinuxWaylandPlatformWindow::LinuxWaylandPlatformWindow( : AbstractPlatformWindow(window, AbstractPlatformWindow::Type::Wayland) , m_platformIntegration{ platformIntegration } { - CoreApplication::instance()->applicationName.valueChanged().connect([this]() { + std::ignore = CoreApplication::instance()->applicationName.valueChanged().connect([this]() { if (m_toplevel) { setAppId(); } }); - window->scaleFactor.valueChanged().connect([this](float value) { + m_scaleChangedConnection = window->scaleFactor.valueChanged().connect([this](float value) { if (m_surface) { wl_surface_set_buffer_scale(m_surface, int32_t(value)); } diff --git a/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.h b/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.h index ff1a7e6..1191189 100644 --- a/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.h +++ b/src/KDGui/platform/linux/wayland/linux_wayland_platform_window.h @@ -115,6 +115,7 @@ class KDGUI_API LinuxWaylandPlatformWindow : public AbstractPlatformWindow CursorMode m_cursorMode{ CursorMode::Normal }; MouseButtons m_mouseButtons{ MouseButton::NoButton }; std::vector m_enteredOutputs; + KDBindings::ScopedConnection m_scaleChangedConnection; }; } // namespace KDGui diff --git a/src/KDGui/platform/linux/xcb/linux_xcb_platform_event_loop.cpp b/src/KDGui/platform/linux/xcb/linux_xcb_platform_event_loop.cpp index 0f81dc6..a4b1e56 100644 --- a/src/KDGui/platform/linux/xcb/linux_xcb_platform_event_loop.cpp +++ b/src/KDGui/platform/linux/xcb/linux_xcb_platform_event_loop.cpp @@ -21,6 +21,8 @@ #include +#include + using namespace KDFoundation; using namespace KDGui; @@ -39,7 +41,7 @@ LinuxXcbPlatformEventLoop::LinuxXcbPlatformEventLoop(LinuxXcbPlatformIntegration auto xcbfd = xcb_get_file_descriptor(connection); SPDLOG_LOGGER_DEBUG(m_logger, "Registering xcb fd {} with event loop", xcbfd); m_xcbNotifier = std::make_unique(xcbfd, FileDescriptorNotifier::NotificationType::Read); - m_xcbNotifier->triggered.connect([this](const int &) { + std::ignore = m_xcbNotifier->triggered.connect([this](const int &) { this->m_xcbEventsPending = true; }); diff --git a/src/KDGui/window.cpp b/src/KDGui/window.cpp index fe73e00..53bfeb6 100644 --- a/src/KDGui/window.cpp +++ b/src/KDGui/window.cpp @@ -16,6 +16,8 @@ #include #include +#include + using namespace KDFoundation; using namespace KDGui; @@ -24,13 +26,13 @@ Window::Window() , m_logger{ KDUtils::Logger::logger("window", spdlog::level::info) } { - visible.valueChanged().connect(&Window::onVisibleChanged, this); + std::ignore = visible.valueChanged().connect(&Window::onVisibleChanged, this); m_resizeConnectionIds = { width.valueChanged().connect(&Window::onSizeChanged, this), height.valueChanged().connect(&Window::onSizeChanged, this) }; - cursorEnabled.valueChanged().connect(&Window::onCursorEnabledChanged, this); - rawMouseInputEnabled.valueChanged().connect(&Window::onRawMouseInputEnabledChanged, this); + std::ignore = cursorEnabled.valueChanged().connect(&Window::onCursorEnabledChanged, this); + std::ignore = rawMouseInputEnabled.valueChanged().connect(&Window::onRawMouseInputEnabledChanged, this); } Window::~Window() diff --git a/tests/auto/foundation/common/signal_spy.h b/tests/auto/foundation/common/signal_spy.h index dae7277..028e06f 100644 --- a/tests/auto/foundation/common/signal_spy.h +++ b/tests/auto/foundation/common/signal_spy.h @@ -23,7 +23,7 @@ class SignalSpy template explicit SignalSpy(Signal &s) { - s.connect([this](Args... args) { + m_connection = s.connect([this](Args... args) { callback(args...); }); } @@ -74,4 +74,5 @@ class SignalSpy uint32_t m_count = 0; std::tuple m_args; + KDBindings::ScopedConnection m_connection; }; diff --git a/tests/auto/foundation/core_application/tst_core_application.cpp b/tests/auto/foundation/core_application/tst_core_application.cpp index 9fd06f5..5597980 100644 --- a/tests/auto/foundation/core_application/tst_core_application.cpp +++ b/tests/auto/foundation/core_application/tst_core_application.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include @@ -203,7 +204,7 @@ TEST_CASE("Timer handling") int timeout = 0; auto startTime = std::chrono::steady_clock::now(); auto time = startTime; - timer.timeout.connect([&]() { + std::ignore = timer.timeout.connect([&]() { const auto endTime = std::chrono::steady_clock::now(); REQUIRE(endTime - time > 50ms); REQUIRE(endTime - time < 150ms); @@ -240,7 +241,7 @@ TEST_CASE("Timer handling") bool fired = false; - timer.timeout.connect([&] { + std::ignore = timer.timeout.connect([&] { fired = true; }); diff --git a/tests/auto/foundation/object/tst_object.cpp b/tests/auto/foundation/object/tst_object.cpp index e9d2803..bc70cc6 100644 --- a/tests/auto/foundation/object/tst_object.cpp +++ b/tests/auto/foundation/object/tst_object.cpp @@ -19,6 +19,7 @@ #include #include +#include #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include @@ -288,7 +289,7 @@ TEST_CASE("Object destruction") for (int i = 0; i < 10; ++i) { auto child = parent->createChild(i); - child->aboutToBeDestroyed.connect(onAboutToBeDestroyed); + std::ignore = child->aboutToBeDestroyed.connect(onAboutToBeDestroyed); } // THEN REQUIRE(childRemovedSpy.count() == 0); diff --git a/tests/auto/foundation/win32_platform_event_loop/tst_win32_platform_event_loop.cpp b/tests/auto/foundation/win32_platform_event_loop/tst_win32_platform_event_loop.cpp index 8f93459..74fa02a 100644 --- a/tests/auto/foundation/win32_platform_event_loop/tst_win32_platform_event_loop.cpp +++ b/tests/auto/foundation/win32_platform_event_loop/tst_win32_platform_event_loop.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -185,7 +186,7 @@ TEST_CASE("Wait for events") // A notifier for testing deregistration int unregisteredCalls = 0; FileDescriptorNotifier unregistered(clientSock, FileDescriptorNotifier::NotificationType::Read); - unregistered.triggered.connect([&unregisteredCalls] { + std::ignore = unregistered.triggered.connect([&unregisteredCalls] { unregisteredCalls++; }); loop.registerNotifier(&unregistered); @@ -193,7 +194,7 @@ TEST_CASE("Wait for events") // Set up read notifier to receive the data FileDescriptorNotifier readNotifier(clientSock, FileDescriptorNotifier::NotificationType::Read); - readNotifier.triggered.connect([&dataReceived](int fd) { + std::ignore = readNotifier.triggered.connect([&dataReceived](int fd) { char buf[128] = {}; recv(fd, buf, 128, 0); const int recvSize = recv(fd, buf, 128, 0); @@ -205,7 +206,7 @@ TEST_CASE("Wait for events") // A notifier for testing Write notification type FileDescriptorNotifier writeNotifier(clientSock, FileDescriptorNotifier::NotificationType::Write); int writeTriggered = 0; - writeNotifier.triggered.connect([&writeTriggered]() { + std::ignore = writeNotifier.triggered.connect([&writeTriggered]() { writeTriggered++; }); loop.registerNotifier(&writeNotifier); diff --git a/tests/auto/utils/signal/tst_signal.cpp b/tests/auto/utils/signal/tst_signal.cpp index 4e8da0d..d2f4740 100644 --- a/tests/auto/utils/signal/tst_signal.cpp +++ b/tests/auto/utils/signal/tst_signal.cpp @@ -14,6 +14,7 @@ #include #include +#include using namespace KDUtils; @@ -31,13 +32,13 @@ TEST_SUITE("Signal") KDBindings::Signal signal2; std::thread thread1([&] { - signal1.connectDeferred(app.connectionEvaluator(), [&val](int value) { + std::ignore = signal1.connectDeferred(app.connectionEvaluator(), [&val](int value) { val += value; }); }); std::thread thread2([&] { - signal2.connectDeferred(app.connectionEvaluator(), [&val](int value) { + std::ignore = signal2.connectDeferred(app.connectionEvaluator(), [&val](int value) { val += value; }); }); @@ -91,11 +92,11 @@ TEST_SUITE("Signal") int val1 = 4; int val2 = 4; - signal1.connectDeferred(app.connectionEvaluator(), [&val1](int value) { + std::ignore = signal1.connectDeferred(app.connectionEvaluator(), [&val1](int value) { val1 += value; }); - signal2.connectDeferred(app.connectionEvaluator(), [&val2](int value) { + std::ignore = signal2.connectDeferred(app.connectionEvaluator(), [&val2](int value) { val2 += value; });