mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 14:21:16 +00:00

We were not parsing CodeBlock node from the signal handler correctly, we wer eonly taking the first expression instead of the whole codeblock In JS, emitting signal before the show() did not update the GLOBAL_CONTEXT needed to emit signals defined in JS
35 lines
878 B
C++
35 lines
878 B
C++
#pragma once
|
|
#include <string_view>
|
|
#include "sixtyfps_properties_internal.h"
|
|
|
|
namespace sixtyfps {
|
|
|
|
// template<typename... Args>
|
|
struct Signal
|
|
{
|
|
Signal() { internal::sixtyfps_signal_init(&inner); }
|
|
~Signal() { internal::sixtyfps_signal_drop(&inner); }
|
|
Signal(const Signal &) = delete;
|
|
Signal(Signal &&) = delete;
|
|
Signal &operator=(const Signal &) = delete;
|
|
|
|
template<typename F>
|
|
void set_handler(F binding)
|
|
{
|
|
internal::sixtyfps_signal_set_handler(
|
|
&inner,
|
|
[](void *user_data) {
|
|
(*reinterpret_cast<F *>(user_data))();
|
|
},
|
|
new F(std::move(binding)), [](void *user_data) { delete reinterpret_cast<F *>(user_data); });
|
|
}
|
|
|
|
void emit() const
|
|
{
|
|
internal::sixtyfps_signal_emit(&inner);
|
|
}
|
|
|
|
private:
|
|
internal::SignalOpaque inner;
|
|
};
|
|
}
|