11 #include <unordered_map> 21 std::unordered_map<std::string, std::unique_ptr<fcitx::SignalBase>>
23 bool destroyed_ =
false;
24 std::unique_ptr<SignalAdaptor<ConnectableObject::Destroyed>> adaptor_;
27 ConnectableObject::ConnectableObject()
28 : d_ptr(std::make_unique<ConnectableObjectPrivate>()) {
30 d->adaptor_ = std::make_unique<decltype(d->adaptor_)::element_type>(
this);
33 ConnectableObject::~ConnectableObject() { destroy(); }
35 void ConnectableObject::_registerSignal(
36 std::string name, std::unique_ptr<fcitx::SignalBase> signal) {
38 d->signals_.emplace(std::move(name), std::move(signal));
40 void ConnectableObject::_unregisterSignal(
const std::string &name) {
42 d->signals_.erase(name);
45 SignalBase *ConnectableObject::findSignal(
const std::string &name) {
46 return std::as_const(*this).findSignal(name);
49 SignalBase *ConnectableObject::findSignal(
const std::string &name)
const {
51 auto iter = d->signals_.find(name);
52 if (iter != d->signals_.end()) {
53 return iter->second.get();
61 emit<ConnectableObject::Destroyed>(
this);
62 disconnectAll<ConnectableObject::Destroyed>();
void destroy()
Allow user to notify the destroy event earlier.
Utilities to enable use object with signal.
A signal-slot implemention.