Собственно, первичная цель проста - сделать виджет MyButton, отличающий от обычного GtkButton только тем, что при создании у MyButton сразу будет вбита некоторая надпись (label).
С горем пополам были созданы такие строчки:
Код: Выделить всё
//////// MYBUTTON.H /////////
...
typedef struct _MyButton MyButton;
typedef struct _MyButtonClass MyButtonClass;
struct _MyButton
{
GtkButton button;
};
struct _MyButtonClass
{
GtkButtonClass parent_class;
};
.....
///// MYBUTTON.CPP ////////
#include <gtk/gtkbutton.h>
#include "mybutton.h"
static void mybutton_class_init (MyButtonClass *klass);
static void mybutton_init (MyButton *btn);
GType
mybutton_get_type (void)
{
static GType ttt_type = 0;
if (!ttt_type)
{
static const GTypeInfo ttt_info =
{
sizeof (MyButtonClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) mybutton_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (MyButton),
0,
(GInstanceInitFunc) mybutton_init,
};
ttt_type = g_type_register_static (GTK_TYPE_BUTTON, "MyButton", &ttt_info, (GTypeFlags)0);
}
return ttt_type;
}
static void
mybutton_class_init (MyButtonClass *klass)
{
}
static void
mybutton_init (MyButton *btn)
{
}
GtkWidget*
mybutton_new ()
{
return GTK_WIDGET (g_object_new (mybutton_get_type (), "label", "My super-super button!", NULL));
}Все работает, но хотелось бы перенести назначение надписи в ф-цию mybutton_init(). имхо, это логичнее.
Однако, вот такой код:
Код: Выделить всё
..
static void
mybutton_init (MyButton *btn)
{
gtk_button_set_label(GTK_BUTTON(btn), "My super-super button!");
}
GtkWidget*
mybutton_new ()
{
return GTK_WIDGET (g_object_new (mybutton_get_type (), NULL));
}
..создает кнопку вообще без подписи. В чем ошибочность такого варианта? И как исправить это дело?
З.Ы. В приложенном архиве исходный код целиком с тем самым "проблемным" вариантом, который создает кнопку без подписи.