Mercurial > pidgin.yaz
view finch/libgnt/gntmenuitem.c @ 17593:759cd72bd2ff
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
author | Andreas Monitzer <pidgin@monitzer.com> |
---|---|
date | Mon, 18 Jun 2007 12:37:29 +0000 |
parents | f00f2e283ffb |
children | 8410511f4dbb |
line wrap: on
line source
#include "gntmenu.h" #include "gntmenuitem.h" static GObjectClass *parent_class = NULL; static void gnt_menuitem_destroy(GObject *obj) { GntMenuItem *item = GNT_MENU_ITEM(obj); g_free(item->text); item->text = NULL; if (item->submenu) gnt_widget_destroy(GNT_WIDGET(item->submenu)); parent_class->dispose(obj); } static void gnt_menuitem_class_init(GntMenuItemClass *klass) { GObjectClass *obj_class = G_OBJECT_CLASS(klass); parent_class = g_type_class_peek_parent(klass); obj_class->dispose = gnt_menuitem_destroy; } static void gnt_menuitem_init(GTypeInstance *instance, gpointer class) { } /****************************************************************************** * GntMenuItem API *****************************************************************************/ GType gnt_menuitem_get_gtype(void) { static GType type = 0; if(type == 0) { static const GTypeInfo info = { sizeof(GntMenuItemClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc)gnt_menuitem_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GntMenuItem), 0, /* n_preallocs */ gnt_menuitem_init, /* instance_init */ NULL /* value_table */ }; type = g_type_register_static(G_TYPE_OBJECT, "GntMenuItem", &info, 0); } return type; } GntMenuItem *gnt_menuitem_new(const char *text) { GObject *item = g_object_new(GNT_TYPE_MENU_ITEM, NULL); GntMenuItem *menuitem = GNT_MENU_ITEM(item); menuitem->text = g_strdup(text); return menuitem; } void gnt_menuitem_set_callback(GntMenuItem *item, GntMenuItemCallback callback, gpointer data) { item->callback = callback; item->callbackdata = data; } void gnt_menuitem_set_submenu(GntMenuItem *item, GntMenu *menu) { if (item->submenu) gnt_widget_destroy(GNT_WIDGET(item->submenu)); item->submenu = menu; }