SignalBlocking.h 881 B

123456789101112131415161718192021222324252627282930313233
  1. // Copyright 2022 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <QSignalBlocker>
  5. // Helper class for populating a GUI element without triggering its data change signals.
  6. template <typename T>
  7. class SignalBlockerProxy
  8. {
  9. public:
  10. explicit SignalBlockerProxy(T* object) : m_object(object), m_blocker(object) {}
  11. SignalBlockerProxy(const SignalBlockerProxy& other) = delete;
  12. SignalBlockerProxy(SignalBlockerProxy&& other) = default;
  13. SignalBlockerProxy& operator=(const SignalBlockerProxy& other) = delete;
  14. SignalBlockerProxy& operator=(SignalBlockerProxy&& other) = default;
  15. ~SignalBlockerProxy() = default;
  16. T* operator->() const { return m_object; }
  17. private:
  18. T* m_object;
  19. QSignalBlocker m_blocker;
  20. };
  21. template <typename T>
  22. SignalBlockerProxy<T> SignalBlocking(T* object)
  23. {
  24. return SignalBlockerProxy<T>(object);
  25. }