46 void submit(Watched&& watched, Args&&... args)
48 using decayed = std::remove_cvref_t<Watched>;
49 const QObject* target{};
50 if constexpr(std::is_pointer_v<decayed>)
52 static_assert(std::is_base_of_v<QObject, std::remove_cvref_t<
decltype(*watched)>>);
57 static_assert(std::is_base_of_v<QObject, decayed>);
68 if(m_cmd && (m_watched != target || m_cmd->key() != TheCommand::static_key()))
73 if(m_cmd->key() != TheCommand::static_key())
75 qDebug() <<
"OngoingCommandDispatcher: closing unfinished"
76 << m_cmd->key().toString().c_str() <<
"to start"
77 << TheCommand::static_key().toString().c_str();
86 stack().disableActions();
87 m_cmd = std::make_unique<TheCommand>(watched, std::forward<Args>(args)...);
88 m_cmd->redo(stack().context());
92 safe_cast<TheCommand*>(m_cmd.get())->update(watched, std::forward<Args>(args)...);
93 m_cmd->redo(stack().context());