#include "factory.h" #include "contact-view.h" static void item_factory_init (gpointer g_iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (LolFactory, lol_factory, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (MX_TYPE_ITEM_FACTORY, item_factory_init)) struct _LolFactoryPrivate { LolContactView *selected; }; static void lol_factory_init (LolFactory *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, LOL_TYPE_FACTORY, LolFactoryPrivate); } static void lol_factory_class_init (LolFactoryClass *cls) { g_type_class_add_private (cls, sizeof (LolFactoryPrivate)); } LolFactory * lol_factory_new (void) { return g_object_new (LOL_TYPE_FACTORY, NULL); } static void selected_cb (LolContactView *view, gboolean status, LolFactory *self) { LolFactoryPrivate *priv = self->priv; /* current selected contact has been de-selected */ if (priv->selected == view && !status) { priv->selected = NULL; return; } /* unselect the curently selected contact */ if (priv->selected != NULL) lol_contact_view_toggle_selected (LOL_CONTACT_VIEW (priv->selected)); priv->selected = view; } static gboolean button_press_event_cb (ClutterActor *actor, ClutterEvent *event, LolFactory *self) { lol_contact_view_toggle_selected (LOL_CONTACT_VIEW (actor)); return TRUE; } static ClutterActor * create (MxItemFactory *factory) { ClutterActor *out = CLUTTER_ACTOR (lol_contact_view_new ()); g_signal_connect (out, "button-press-event", G_CALLBACK (button_press_event_cb), factory); g_signal_connect (out, "selected", G_CALLBACK (selected_cb), factory); return out; } static void item_factory_init (gpointer g_iface, gpointer data G_GNUC_UNUSED) { MxItemFactoryIface *iface = g_iface; iface->create = create; }