1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#ifndef _GI_GLIB_GLIB_EXTRA_DEF_HPP_
#define _GI_GLIB_GLIB_EXTRA_DEF_HPP_
namespace gi
{
namespace repository
{
namespace GLib
{
GI_INLINE_DECL gi::rv<guint>::type idle_add(GLib::SourceFunc function)
GI_NOEXCEPT_DECL(true);
GI_INLINE_DECL gi::rv<guint>::type idle_add_once(std::function<void()> function)
GI_NOEXCEPT_DECL(true);
GI_INLINE_DECL gi::rv<guint>::type timeout_add_seconds(
guint interval, GLib::SourceFunc function) GI_NOEXCEPT_DECL(true);
GI_INLINE_DECL gi::rv<guint>::type timeout_add_seconds_once(
guint interval, std::function<void()> function) GI_NOEXCEPT_DECL(true);
GI_INLINE_DECL gi::rv<guint>::type timeout_add(
guint interval, GLib::SourceFunc function) GI_NOEXCEPT_DECL(true);
GI_INLINE_DECL gi::rv<guint>::type timeout_add_once(
guint interval, std::function<void()> function) GI_NOEXCEPT_DECL(true);
// connection helpers
namespace internal
{
class SourceConnection : public detail::connection_impl
{
public:
using connection_impl::connection_impl;
void disconnect() { g_source_remove(id_); }
};
} // namespace internal
using SourceConnection = detail::connection<internal::SourceConnection>;
using SourceScopedConnection = detail::scoped_connection<SourceConnection>;
} // namespace GLib
template<>
struct declare_gtype_of<GLib::Variant>
{
// a get_type() member already exists in base class detail::VariantWrapper
// so get_type() should not be specified here
// otherwise traits::gtype<GLib::Variant> will have 2 ambiguous options
static GLib::Variant get_value(const GValue *val)
{
return wrap(g_value_dup_variant(val), transfer_full);
}
static void set_value(GValue *val, GLib::Variant v)
{
g_value_take_variant(val, v.gobj_copy_());
}
};
} // namespace repository
inline repository::GLib::SourceConnection
make_connection(gulong id, const repository::GLib::SourceFunc &func)
{
return repository::GLib::SourceConnection(id, func.connection());
}
} // namespace gi
#endif
|