/* EmojiReactionAccounts.c generated by valac 0.56.18-dirty, the Vala compiler
 * generated from EmojiReactionAccounts.vala, do not modify */

#include <adwaita.h>
#include <glib-object.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
#include <gee.h>
#include <stdlib.h>
#include <string.h>
#include <pango/pango.h>
#include <gdk/gdk.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS (tuba_widgets_emoji_reaction_accounts_get_type ())
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS, TubaWidgetsEmojiReactionAccounts))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS, TubaWidgetsEmojiReactionAccountsClass))
#define TUBA_WIDGETS_IS_EMOJI_REACTION_ACCOUNTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS))
#define TUBA_WIDGETS_IS_EMOJI_REACTION_ACCOUNTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS, TubaWidgetsEmojiReactionAccountsClass))

typedef struct _TubaWidgetsEmojiReactionAccounts TubaWidgetsEmojiReactionAccounts;
typedef struct _TubaWidgetsEmojiReactionAccountsClass TubaWidgetsEmojiReactionAccountsClass;
typedef struct _TubaWidgetsEmojiReactionAccountsPrivate TubaWidgetsEmojiReactionAccountsPrivate;
enum  {
	TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_0_PROPERTY,
	TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_NUM_PROPERTIES
};
static GParamSpec* tuba_widgets_emoji_reaction_accounts_properties[TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_NUM_PROPERTIES];

#define TUBA_TYPE_ENTITY (tuba_entity_get_type ())
#define TUBA_ENTITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_TYPE_ENTITY, TubaEntity))
#define TUBA_ENTITY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_TYPE_ENTITY, TubaEntityClass))
#define TUBA_IS_ENTITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_TYPE_ENTITY))
#define TUBA_IS_ENTITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_TYPE_ENTITY))
#define TUBA_ENTITY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_TYPE_ENTITY, TubaEntityClass))

typedef struct _TubaEntity TubaEntity;
typedef struct _TubaEntityClass TubaEntityClass;

#define TUBA_API_TYPE_EMOJI_REACTION (tuba_api_emoji_reaction_get_type ())
#define TUBA_API_EMOJI_REACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_API_TYPE_EMOJI_REACTION, TubaAPIEmojiReaction))
#define TUBA_API_EMOJI_REACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_API_TYPE_EMOJI_REACTION, TubaAPIEmojiReactionClass))
#define TUBA_API_IS_EMOJI_REACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_API_TYPE_EMOJI_REACTION))
#define TUBA_API_IS_EMOJI_REACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_API_TYPE_EMOJI_REACTION))
#define TUBA_API_EMOJI_REACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_API_TYPE_EMOJI_REACTION, TubaAPIEmojiReactionClass))

typedef struct _TubaAPIEmojiReaction TubaAPIEmojiReaction;
typedef struct _TubaAPIEmojiReactionClass TubaAPIEmojiReactionClass;

#define TUBA_API_TYPE_ACCOUNT (tuba_api_account_get_type ())
#define TUBA_API_ACCOUNT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_API_TYPE_ACCOUNT, TubaAPIAccount))
#define TUBA_API_ACCOUNT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_API_TYPE_ACCOUNT, TubaAPIAccountClass))
#define TUBA_API_IS_ACCOUNT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_API_TYPE_ACCOUNT))
#define TUBA_API_IS_ACCOUNT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_API_TYPE_ACCOUNT))
#define TUBA_API_ACCOUNT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_API_TYPE_ACCOUNT, TubaAPIAccountClass))

typedef struct _TubaAPIAccount TubaAPIAccount;
typedef struct _TubaAPIAccountClass TubaAPIAccountClass;
#define _g_free0(var) (var = (g_free (var), NULL))

#define TUBA_WIDGETS_TYPE_EMOJI (tuba_widgets_emoji_get_type ())
#define TUBA_WIDGETS_EMOJI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_WIDGETS_TYPE_EMOJI, TubaWidgetsEmoji))
#define TUBA_WIDGETS_EMOJI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_WIDGETS_TYPE_EMOJI, TubaWidgetsEmojiClass))
#define TUBA_WIDGETS_IS_EMOJI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_WIDGETS_TYPE_EMOJI))
#define TUBA_WIDGETS_IS_EMOJI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_WIDGETS_TYPE_EMOJI))
#define TUBA_WIDGETS_EMOJI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_WIDGETS_TYPE_EMOJI, TubaWidgetsEmojiClass))

typedef struct _TubaWidgetsEmoji TubaWidgetsEmoji;
typedef struct _TubaWidgetsEmojiClass TubaWidgetsEmojiClass;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW (tuba_widgets_emoji_reaction_accounts_account_row_get_type ())
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW, TubaWidgetsEmojiReactionAccountsAccountRow))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW, TubaWidgetsEmojiReactionAccountsAccountRowClass))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_IS_ACCOUNT_ROW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_IS_ACCOUNT_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW))
#define TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW, TubaWidgetsEmojiReactionAccountsAccountRowClass))

typedef struct _TubaWidgetsEmojiReactionAccountsAccountRow TubaWidgetsEmojiReactionAccountsAccountRow;
typedef struct _TubaWidgetsEmojiReactionAccountsAccountRowClass TubaWidgetsEmojiReactionAccountsAccountRowClass;
typedef struct _TubaWidgetsEmojiReactionAccountsAccountRowPrivate TubaWidgetsEmojiReactionAccountsAccountRowPrivate;
enum  {
	TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW_0_PROPERTY,
	TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW_NUM_PROPERTIES
};
static GParamSpec* tuba_widgets_emoji_reaction_accounts_account_row_properties[TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_ACCOUNT_ROW_NUM_PROPERTIES];

#define TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS (tuba_widgets_label_with_widgets_get_type ())
#define TUBA_WIDGETS_LABEL_WITH_WIDGETS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS, TubaWidgetsLabelWithWidgets))
#define TUBA_WIDGETS_LABEL_WITH_WIDGETS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS, TubaWidgetsLabelWithWidgetsClass))
#define TUBA_WIDGETS_IS_LABEL_WITH_WIDGETS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS))
#define TUBA_WIDGETS_IS_LABEL_WITH_WIDGETS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS))
#define TUBA_WIDGETS_LABEL_WITH_WIDGETS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_WIDGETS_TYPE_LABEL_WITH_WIDGETS, TubaWidgetsLabelWithWidgetsClass))

typedef struct _TubaWidgetsLabelWithWidgets TubaWidgetsLabelWithWidgets;
typedef struct _TubaWidgetsLabelWithWidgetsClass TubaWidgetsLabelWithWidgetsClass;

#define TUBA_WIDGETS_TYPE_EMOJI_LABEL (tuba_widgets_emoji_label_get_type ())
#define TUBA_WIDGETS_EMOJI_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_WIDGETS_TYPE_EMOJI_LABEL, TubaWidgetsEmojiLabel))
#define TUBA_WIDGETS_EMOJI_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_WIDGETS_TYPE_EMOJI_LABEL, TubaWidgetsEmojiLabelClass))
#define TUBA_WIDGETS_IS_EMOJI_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_WIDGETS_TYPE_EMOJI_LABEL))
#define TUBA_WIDGETS_IS_EMOJI_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_WIDGETS_TYPE_EMOJI_LABEL))
#define TUBA_WIDGETS_EMOJI_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_WIDGETS_TYPE_EMOJI_LABEL, TubaWidgetsEmojiLabelClass))

typedef struct _TubaWidgetsEmojiLabel TubaWidgetsEmojiLabel;
typedef struct _TubaWidgetsEmojiLabelClass TubaWidgetsEmojiLabelClass;
typedef void (*TubaHelperImageOnItemChangedFn) (GdkPaintable* data, gpointer user_data);

#define TUBA_TYPE_WIDGETIZABLE (tuba_widgetizable_get_type ())
#define TUBA_WIDGETIZABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_TYPE_WIDGETIZABLE, TubaWidgetizable))
#define TUBA_IS_WIDGETIZABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_TYPE_WIDGETIZABLE))
#define TUBA_WIDGETIZABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TUBA_TYPE_WIDGETIZABLE, TubaWidgetizableIface))

typedef struct _TubaWidgetizable TubaWidgetizable;
typedef struct _TubaWidgetizableIface TubaWidgetizableIface;

#define TUBA_TYPE_INSTANCE_ACCOUNT (tuba_instance_account_get_type ())
#define TUBA_INSTANCE_ACCOUNT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TUBA_TYPE_INSTANCE_ACCOUNT, TubaInstanceAccount))
#define TUBA_INSTANCE_ACCOUNT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TUBA_TYPE_INSTANCE_ACCOUNT, TubaInstanceAccountClass))
#define TUBA_IS_INSTANCE_ACCOUNT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TUBA_TYPE_INSTANCE_ACCOUNT))
#define TUBA_IS_INSTANCE_ACCOUNT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TUBA_TYPE_INSTANCE_ACCOUNT))
#define TUBA_INSTANCE_ACCOUNT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TUBA_TYPE_INSTANCE_ACCOUNT, TubaInstanceAccountClass))

typedef struct _TubaInstanceAccount TubaInstanceAccount;
typedef struct _TubaInstanceAccountClass TubaInstanceAccountClass;

struct _TubaWidgetsEmojiReactionAccounts {
	AdwExpanderRow parent_instance;
	TubaWidgetsEmojiReactionAccountsPrivate * priv;
};

struct _TubaWidgetsEmojiReactionAccountsClass {
	AdwExpanderRowClass parent_class;
};

struct _TubaWidgetsEmojiReactionAccountsAccountRow {
	GtkListBoxRow parent_instance;
	TubaWidgetsEmojiReactionAccountsAccountRowPrivate * priv;
};

struct _TubaWidgetsEmojiReactionAccountsAccountRowClass {
	GtkListBoxRowClass parent_class;
};

struct _TubaWidgetsEmojiReactionAccountsAccountRowPrivate {
	TubaAPIAccount* account;
	AdwAvatar* avi;
};

struct _TubaWidgetizableIface {
	GTypeInterface parent_iface;
	GtkWidget* (*to_widget) (TubaWidgetizable* self);
	void (*open) (TubaWidgetizable* self);
	void (*resolve_open) (TubaWidgetizable* self, TubaInstanceAccount* account);
};

static gpointer tuba_widgets_emoji_reaction_accounts_parent_class = NULL;
static gint TubaWidgetsEmojiReactionAccountsAccountRow_private_offset;
static gpointer tuba_widgets_emoji_reaction_accounts_account_row_parent_class = NULL;

VALA_EXTERN GType tuba_widgets_emoji_reaction_accounts_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetsEmojiReactionAccounts, g_object_unref)
VALA_EXTERN GType tuba_entity_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaEntity, g_object_unref)
VALA_EXTERN GType tuba_api_emoji_reaction_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaAPIEmojiReaction, g_object_unref)
VALA_EXTERN TubaWidgetsEmojiReactionAccounts* tuba_widgets_emoji_reaction_accounts_new (TubaAPIEmojiReaction* reaction);
VALA_EXTERN TubaWidgetsEmojiReactionAccounts* tuba_widgets_emoji_reaction_accounts_construct (GType object_type,
                                                                                  TubaAPIEmojiReaction* reaction);
VALA_EXTERN GType tuba_api_account_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaAPIAccount, g_object_unref)
VALA_EXTERN GeeArrayList* tuba_api_emoji_reaction_get_accounts (TubaAPIEmojiReaction* self);
VALA_EXTERN const gchar* tuba_api_emoji_reaction_get_url (TubaAPIEmojiReaction* self);
VALA_EXTERN TubaWidgetsEmoji* tuba_widgets_emoji_new (const gchar* emoji_url,
                                          const gchar* t_shortcode);
VALA_EXTERN TubaWidgetsEmoji* tuba_widgets_emoji_construct (GType object_type,
                                                const gchar* emoji_url,
                                                const gchar* t_shortcode);
VALA_EXTERN GType tuba_widgets_emoji_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetsEmoji, g_object_unref)
VALA_EXTERN const gchar* tuba_api_emoji_reaction_get_name (TubaAPIEmojiReaction* self);
VALA_EXTERN TubaWidgetsEmojiReactionAccountsAccountRow* tuba_widgets_emoji_reaction_accounts_account_row_new (TubaAPIAccount* account);
VALA_EXTERN TubaWidgetsEmojiReactionAccountsAccountRow* tuba_widgets_emoji_reaction_accounts_account_row_construct (GType object_type,
                                                                                                        TubaAPIAccount* account);
VALA_EXTERN GType tuba_widgets_emoji_reaction_accounts_account_row_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetsEmojiReactionAccountsAccountRow, g_object_unref)
VALA_EXTERN const gchar* tuba_api_account_get_display_name (TubaAPIAccount* self);
VALA_EXTERN GType tuba_widgets_label_with_widgets_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetsLabelWithWidgets, g_object_unref)
VALA_EXTERN GType tuba_widgets_emoji_label_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetsEmojiLabel, g_object_unref)
VALA_EXTERN TubaWidgetsEmojiLabel* tuba_widgets_emoji_label_new (const gchar* text,
                                                     GeeHashMap* emojis);
VALA_EXTERN TubaWidgetsEmojiLabel* tuba_widgets_emoji_label_construct (GType object_type,
                                                           const gchar* text,
                                                           GeeHashMap* emojis);
VALA_EXTERN void tuba_widgets_label_with_widgets_set_use_markup (TubaWidgetsLabelWithWidgets* self,
                                                     gboolean value);
VALA_EXTERN GeeHashMap* tuba_api_account_get_emojis_map (TubaAPIAccount* self);
VALA_EXTERN void tuba_widgets_emoji_label_set_instance_emojis (TubaWidgetsEmojiLabel* self,
                                                   GeeHashMap* value);
VALA_EXTERN void tuba_widgets_emoji_label_set_content (TubaWidgetsEmojiLabel* self,
                                           const gchar* value);
VALA_EXTERN gchar* tuba_api_account_get_full_handle (TubaAPIAccount* self);
static void tuba_widgets_emoji_reaction_accounts_account_row_open (TubaWidgetsEmojiReactionAccountsAccountRow* self);
static void _tuba_widgets_emoji_reaction_accounts_account_row_open_gtk_button_clicked (GtkButton* _sender,
                                                                                gpointer self);
VALA_EXTERN void tuba_helper_image_request_paintable (const gchar* url,
                                          const gchar* blurhash,
                                          gboolean disable_cache,
                                          TubaHelperImageOnItemChangedFn cb,
                                          gpointer cb_target,
                                          GDestroyNotify cb_target_destroy_notify);
VALA_EXTERN const gchar* tuba_api_account_get_avatar (TubaAPIAccount* self);
static void tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response (TubaWidgetsEmojiReactionAccountsAccountRow* self,
                                                                             GdkPaintable* data);
static void _tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response_tuba_helper_image_on_item_changed_fn (GdkPaintable* data,
                                                                                                                   gpointer self);
VALA_EXTERN GType tuba_instance_account_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaInstanceAccount, g_object_unref)
VALA_EXTERN GType tuba_widgetizable_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (TubaWidgetizable, g_object_unref)
VALA_EXTERN void tuba_widgetizable_open (TubaWidgetizable* self);
static void tuba_widgets_emoji_reaction_accounts_account_row_finalize (GObject * obj);
static GType tuba_widgets_emoji_reaction_accounts_account_row_get_type_once (void);
static GType tuba_widgets_emoji_reaction_accounts_get_type_once (void);
static void _vala_array_destroy (gpointer array,
                          gssize array_length,
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array,
                       gssize array_length,
                       GDestroyNotify destroy_func);

TubaWidgetsEmojiReactionAccounts*
tuba_widgets_emoji_reaction_accounts_construct (GType object_type,
                                                TubaAPIEmojiReaction* reaction)
{
	TubaWidgetsEmojiReactionAccounts * self = NULL;
	GeeArrayList* _tmp0_;
	GeeArrayList* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	GeeArrayList* _tmp4_;
	GeeArrayList* _tmp5_;
	gint _tmp6_;
	gint _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	const gchar* _tmp10_;
	const gchar* _tmp11_;
	g_return_val_if_fail (reaction != NULL, NULL);
	self = (TubaWidgetsEmojiReactionAccounts*) g_object_new (object_type, NULL);
	gtk_widget_add_css_class ((GtkWidget*) self, "emoji-reaction-expander");
	_tmp0_ = tuba_api_emoji_reaction_get_accounts (reaction);
	_tmp1_ = _tmp0_;
	_tmp2_ = gee_abstract_collection_get_size ((GeeAbstractCollection*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = tuba_api_emoji_reaction_get_accounts (reaction);
	_tmp5_ = _tmp4_;
	_tmp6_ = gee_abstract_collection_get_size ((GeeAbstractCollection*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = g_strdup_printf (ngettext ("%d Reaction", "%d Reactions", (gulong) _tmp3_), _tmp7_);
	_tmp9_ = _tmp8_;
	adw_preferences_row_set_title ((AdwPreferencesRow*) self, _tmp9_);
	_g_free0 (_tmp9_);
	_tmp10_ = tuba_api_emoji_reaction_get_url (reaction);
	_tmp11_ = _tmp10_;
	if (_tmp11_ != NULL) {
		const gchar* _tmp12_;
		const gchar* _tmp13_;
		TubaWidgetsEmoji* _tmp14_;
		TubaWidgetsEmoji* _tmp15_;
		_tmp12_ = tuba_api_emoji_reaction_get_url (reaction);
		_tmp13_ = _tmp12_;
		_tmp14_ = tuba_widgets_emoji_new (_tmp13_, NULL);
		g_object_ref_sink (_tmp14_);
		_tmp15_ = _tmp14_;
		adw_expander_row_add_prefix ((AdwExpanderRow*) self, (GtkWidget*) _tmp15_);
		_g_object_unref0 (_tmp15_);
	} else {
		const gchar* _tmp16_;
		const gchar* _tmp17_;
		GtkLabel* _tmp18_;
		GtkLabel* _tmp19_;
		_tmp16_ = tuba_api_emoji_reaction_get_name (reaction);
		_tmp17_ = _tmp16_;
		_tmp18_ = (GtkLabel*) gtk_label_new (_tmp17_);
		g_object_ref_sink (_tmp18_);
		_tmp19_ = _tmp18_;
		adw_expander_row_add_prefix ((AdwExpanderRow*) self, (GtkWidget*) _tmp19_);
		_g_object_unref0 (_tmp19_);
	}
	{
		GeeArrayList* _account_list = NULL;
		GeeArrayList* _tmp20_;
		GeeArrayList* _tmp21_;
		gint _account_size = 0;
		GeeArrayList* _tmp22_;
		gint _tmp23_;
		gint _tmp24_;
		gint _account_index = 0;
		_tmp20_ = tuba_api_emoji_reaction_get_accounts (reaction);
		_tmp21_ = _tmp20_;
		_account_list = _tmp21_;
		_tmp22_ = _account_list;
		_tmp23_ = gee_abstract_collection_get_size ((GeeAbstractCollection*) _tmp22_);
		_tmp24_ = _tmp23_;
		_account_size = _tmp24_;
		_account_index = -1;
		while (TRUE) {
			gint _tmp25_;
			gint _tmp26_;
			TubaAPIAccount* account = NULL;
			GeeArrayList* _tmp27_;
			gpointer _tmp28_;
			TubaAPIAccount* _tmp29_;
			TubaWidgetsEmojiReactionAccountsAccountRow* _tmp30_;
			TubaWidgetsEmojiReactionAccountsAccountRow* _tmp31_;
			_account_index = _account_index + 1;
			_tmp25_ = _account_index;
			_tmp26_ = _account_size;
			if (!(_tmp25_ < _tmp26_)) {
				break;
			}
			_tmp27_ = _account_list;
			_tmp28_ = gee_abstract_list_get ((GeeAbstractList*) _tmp27_, _account_index);
			account = (TubaAPIAccount*) _tmp28_;
			_tmp29_ = account;
			_tmp30_ = tuba_widgets_emoji_reaction_accounts_account_row_new (_tmp29_);
			g_object_ref_sink (_tmp30_);
			_tmp31_ = _tmp30_;
			adw_expander_row_add_row ((AdwExpanderRow*) self, (GtkWidget*) _tmp31_);
			_g_object_unref0 (_tmp31_);
			_g_object_unref0 (account);
		}
	}
	return self;
}

TubaWidgetsEmojiReactionAccounts*
tuba_widgets_emoji_reaction_accounts_new (TubaAPIEmojiReaction* reaction)
{
	return tuba_widgets_emoji_reaction_accounts_construct (TUBA_WIDGETS_TYPE_EMOJI_REACTION_ACCOUNTS, reaction);
}

static inline gpointer
tuba_widgets_emoji_reaction_accounts_account_row_get_instance_private (TubaWidgetsEmojiReactionAccountsAccountRow* self)
{
	return G_STRUCT_MEMBER_P (self, TubaWidgetsEmojiReactionAccountsAccountRow_private_offset);
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

static void
_tuba_widgets_emoji_reaction_accounts_account_row_open_gtk_button_clicked (GtkButton* _sender,
                                                                           gpointer self)
{
	tuba_widgets_emoji_reaction_accounts_account_row_open ((TubaWidgetsEmojiReactionAccountsAccountRow*) self);
}

static void
_tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response_tuba_helper_image_on_item_changed_fn (GdkPaintable* data,
                                                                                                              gpointer self)
{
	tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response ((TubaWidgetsEmojiReactionAccountsAccountRow*) self, data);
}

TubaWidgetsEmojiReactionAccountsAccountRow*
tuba_widgets_emoji_reaction_accounts_account_row_construct (GType object_type,
                                                            TubaAPIAccount* account)
{
	TubaWidgetsEmojiReactionAccountsAccountRow * self = NULL;
	TubaAPIAccount* _tmp0_;
	GtkBox* main_box = NULL;
	GtkBox* _tmp1_ = NULL;
	AdwAvatar* _tmp2_;
	AdwAvatar* _tmp3_;
	const gchar* _tmp4_;
	const gchar* _tmp5_;
	AdwAvatar* _tmp6_;
	GtkBox* info_box = NULL;
	GtkBox* _tmp7_ = NULL;
	TubaWidgetsEmojiLabel* title_label = NULL;
	TubaWidgetsEmojiLabel* _tmp8_ = NULL;
	GeeHashMap* _tmp9_;
	GeeHashMap* _tmp10_;
	GeeHashMap* _tmp11_;
	const gchar* _tmp12_;
	const gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar** _tmp18_;
	GtkLabel* _tmp19_ = NULL;
	GtkLabel* _tmp20_;
	GtkButton* open_button = NULL;
	GtkButton* _tmp21_ = NULL;
	const gchar* _tmp22_;
	const gchar* _tmp23_;
	g_return_val_if_fail (account != NULL, NULL);
	self = (TubaWidgetsEmojiReactionAccountsAccountRow*) g_object_new (object_type, NULL);
	gtk_list_box_row_set_activatable ((GtkListBoxRow*) self, FALSE);
	_tmp0_ = _g_object_ref0 (account);
	_g_object_unref0 (self->priv->account);
	self->priv->account = _tmp0_;
	_tmp1_ = (GtkBox*) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
	gtk_widget_set_vexpand ((GtkWidget*) _tmp1_, TRUE);
	gtk_widget_set_margin_bottom ((GtkWidget*) _tmp1_, 12);
	gtk_widget_set_margin_end ((GtkWidget*) _tmp1_, 12);
	gtk_widget_set_margin_start ((GtkWidget*) _tmp1_, 12);
	gtk_widget_set_margin_top ((GtkWidget*) _tmp1_, 12);
	g_object_ref_sink (_tmp1_);
	main_box = _tmp1_;
	_tmp2_ = (AdwAvatar*) adw_avatar_new (36, NULL, TRUE);
	g_object_ref_sink (_tmp2_);
	_g_object_unref0 (self->priv->avi);
	self->priv->avi = _tmp2_;
	_tmp3_ = self->priv->avi;
	_tmp4_ = tuba_api_account_get_display_name (account);
	_tmp5_ = _tmp4_;
	gtk_widget_set_name ((GtkWidget*) _tmp3_, _tmp5_);
	_tmp6_ = self->priv->avi;
	gtk_box_prepend (main_box, (GtkWidget*) _tmp6_);
	_tmp7_ = (GtkBox*) gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
	gtk_widget_set_hexpand ((GtkWidget*) _tmp7_, TRUE);
	g_object_ref_sink (_tmp7_);
	info_box = _tmp7_;
	_tmp8_ = tuba_widgets_emoji_label_new (NULL, NULL);
	tuba_widgets_label_with_widgets_set_use_markup ((TubaWidgetsLabelWithWidgets*) _tmp8_, FALSE);
	g_object_ref_sink (_tmp8_);
	title_label = _tmp8_;
	_tmp9_ = tuba_api_account_get_emojis_map (account);
	_tmp10_ = _tmp9_;
	_tmp11_ = _tmp10_;
	tuba_widgets_emoji_label_set_instance_emojis (title_label, _tmp11_);
	_g_object_unref0 (_tmp11_);
	_tmp12_ = tuba_api_account_get_display_name (account);
	_tmp13_ = _tmp12_;
	tuba_widgets_emoji_label_set_content (title_label, _tmp13_);
	gtk_box_prepend (info_box, (GtkWidget*) title_label);
	_tmp14_ = tuba_api_account_get_full_handle (account);
	_tmp15_ = _tmp14_;
	_tmp16_ = _tmp15_;
	_tmp17_ = g_strdup ("dim-label");
	_tmp18_ = g_new0 (gchar*, 1 + 1);
	_tmp18_[0] = _tmp17_;
	_tmp19_ = (GtkLabel*) gtk_label_new (_tmp16_);
	gtk_widget_set_hexpand ((GtkWidget*) _tmp19_, TRUE);
	gtk_label_set_xalign (_tmp19_, 0.0f);
	gtk_label_set_wrap (_tmp19_, TRUE);
	gtk_label_set_wrap_mode (_tmp19_, PANGO_WRAP_WORD_CHAR);
	gtk_label_set_use_markup (_tmp19_, FALSE);
	gtk_widget_set_css_classes ((GtkWidget*) _tmp19_, _tmp18_);
	_tmp18_ = (_vala_array_free (_tmp18_, 1, (GDestroyNotify) g_free), NULL);
	g_object_ref_sink (_tmp19_);
	_tmp20_ = _tmp19_;
	gtk_box_append (info_box, (GtkWidget*) _tmp20_);
	_g_object_unref0 (_tmp20_);
	_g_free0 (_tmp16_);
	gtk_box_append (main_box, (GtkWidget*) info_box);
	_tmp21_ = (GtkButton*) gtk_button_new_with_label (_ ("Open"));
	gtk_widget_set_valign ((GtkWidget*) _tmp21_, GTK_ALIGN_CENTER);
	g_object_ref_sink (_tmp21_);
	open_button = _tmp21_;
	g_signal_connect_object (open_button, "clicked", (GCallback) _tuba_widgets_emoji_reaction_accounts_account_row_open_gtk_button_clicked, self, 0);
	gtk_box_append (main_box, (GtkWidget*) open_button);
	gtk_list_box_row_set_child ((GtkListBoxRow*) self, (GtkWidget*) main_box);
	_tmp22_ = tuba_api_account_get_avatar (account);
	_tmp23_ = _tmp22_;
	tuba_helper_image_request_paintable (_tmp23_, NULL, FALSE, _tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response_tuba_helper_image_on_item_changed_fn, g_object_ref (self), g_object_unref);
	_g_object_unref0 (open_button);
	_g_object_unref0 (title_label);
	_g_object_unref0 (info_box);
	_g_object_unref0 (main_box);
	return self;
}

TubaWidgetsEmojiReactionAccountsAccountRow*
tuba_widgets_emoji_reaction_accounts_account_row_new (TubaAPIAccount* account)
{
	return tuba_widgets_emoji_reaction_accounts_account_row_construct (TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW, account);
}

static void
tuba_widgets_emoji_reaction_accounts_account_row_open (TubaWidgetsEmojiReactionAccountsAccountRow* self)
{
	TubaAPIAccount* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->account;
	tuba_widgetizable_open ((TubaWidgetizable*) _tmp0_);
}

static void
tuba_widgets_emoji_reaction_accounts_account_row_on_avi_cache_response (TubaWidgetsEmojiReactionAccountsAccountRow* self,
                                                                        GdkPaintable* data)
{
	AdwAvatar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->avi;
	adw_avatar_set_custom_image (_tmp0_, data);
}

static void
tuba_widgets_emoji_reaction_accounts_account_row_class_init (TubaWidgetsEmojiReactionAccountsAccountRowClass * klass,
                                                             gpointer klass_data)
{
	tuba_widgets_emoji_reaction_accounts_account_row_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &TubaWidgetsEmojiReactionAccountsAccountRow_private_offset);
	G_OBJECT_CLASS (klass)->finalize = tuba_widgets_emoji_reaction_accounts_account_row_finalize;
}

static void
tuba_widgets_emoji_reaction_accounts_account_row_instance_init (TubaWidgetsEmojiReactionAccountsAccountRow * self,
                                                                gpointer klass)
{
	self->priv = tuba_widgets_emoji_reaction_accounts_account_row_get_instance_private (self);
}

static void
tuba_widgets_emoji_reaction_accounts_account_row_finalize (GObject * obj)
{
	TubaWidgetsEmojiReactionAccountsAccountRow * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, TUBA_WIDGETS_EMOJI_REACTION_ACCOUNTS_TYPE_ACCOUNT_ROW, TubaWidgetsEmojiReactionAccountsAccountRow);
	_g_object_unref0 (self->priv->account);
	_g_object_unref0 (self->priv->avi);
	G_OBJECT_CLASS (tuba_widgets_emoji_reaction_accounts_account_row_parent_class)->finalize (obj);
}

 G_GNUC_NO_INLINE static GType
tuba_widgets_emoji_reaction_accounts_account_row_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (TubaWidgetsEmojiReactionAccountsAccountRowClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tuba_widgets_emoji_reaction_accounts_account_row_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TubaWidgetsEmojiReactionAccountsAccountRow), 0, (GInstanceInitFunc) tuba_widgets_emoji_reaction_accounts_account_row_instance_init, NULL };
	GType tuba_widgets_emoji_reaction_accounts_account_row_type_id;
	tuba_widgets_emoji_reaction_accounts_account_row_type_id = g_type_register_static (gtk_list_box_row_get_type (), "TubaWidgetsEmojiReactionAccountsAccountRow", &g_define_type_info, 0);
	TubaWidgetsEmojiReactionAccountsAccountRow_private_offset = g_type_add_instance_private (tuba_widgets_emoji_reaction_accounts_account_row_type_id, sizeof (TubaWidgetsEmojiReactionAccountsAccountRowPrivate));
	return tuba_widgets_emoji_reaction_accounts_account_row_type_id;
}

GType
tuba_widgets_emoji_reaction_accounts_account_row_get_type (void)
{
	static gsize tuba_widgets_emoji_reaction_accounts_account_row_type_id__once = 0;
	if (g_once_init_enter (&tuba_widgets_emoji_reaction_accounts_account_row_type_id__once)) {
		GType tuba_widgets_emoji_reaction_accounts_account_row_type_id;
		tuba_widgets_emoji_reaction_accounts_account_row_type_id = tuba_widgets_emoji_reaction_accounts_account_row_get_type_once ();
		g_once_init_leave (&tuba_widgets_emoji_reaction_accounts_account_row_type_id__once, tuba_widgets_emoji_reaction_accounts_account_row_type_id);
	}
	return tuba_widgets_emoji_reaction_accounts_account_row_type_id__once;
}

static void
tuba_widgets_emoji_reaction_accounts_class_init (TubaWidgetsEmojiReactionAccountsClass * klass,
                                                 gpointer klass_data)
{
	tuba_widgets_emoji_reaction_accounts_parent_class = g_type_class_peek_parent (klass);
}

static void
tuba_widgets_emoji_reaction_accounts_instance_init (TubaWidgetsEmojiReactionAccounts * self,
                                                    gpointer klass)
{
}

 G_GNUC_NO_INLINE static GType
tuba_widgets_emoji_reaction_accounts_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (TubaWidgetsEmojiReactionAccountsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tuba_widgets_emoji_reaction_accounts_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TubaWidgetsEmojiReactionAccounts), 0, (GInstanceInitFunc) tuba_widgets_emoji_reaction_accounts_instance_init, NULL };
	GType tuba_widgets_emoji_reaction_accounts_type_id;
	tuba_widgets_emoji_reaction_accounts_type_id = g_type_register_static (adw_expander_row_get_type (), "TubaWidgetsEmojiReactionAccounts", &g_define_type_info, 0);
	return tuba_widgets_emoji_reaction_accounts_type_id;
}

GType
tuba_widgets_emoji_reaction_accounts_get_type (void)
{
	static gsize tuba_widgets_emoji_reaction_accounts_type_id__once = 0;
	if (g_once_init_enter (&tuba_widgets_emoji_reaction_accounts_type_id__once)) {
		GType tuba_widgets_emoji_reaction_accounts_type_id;
		tuba_widgets_emoji_reaction_accounts_type_id = tuba_widgets_emoji_reaction_accounts_get_type_once ();
		g_once_init_leave (&tuba_widgets_emoji_reaction_accounts_type_id__once, tuba_widgets_emoji_reaction_accounts_type_id);
	}
	return tuba_widgets_emoji_reaction_accounts_type_id__once;
}

static void
_vala_array_destroy (gpointer array,
                     gssize array_length,
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		gssize i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}

static void
_vala_array_free (gpointer array,
                  gssize array_length,
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}

