# HG changeset patch # User Sadrul Habib Chowdhury # Date 1194572710 0 # Node ID a14c663152cce5bb144b5fa043edcb9197a6ad4c # Parent d7d3f31d52fbfd3bb0780aa26357a47faaaa0ee5 Use gobject properties for labels. diff -r d7d3f31d52fb -r a14c663152cc finch/libgnt/gntlabel.c --- a/finch/libgnt/gntlabel.c Tue Nov 06 21:19:19 2007 +0000 +++ b/finch/libgnt/gntlabel.c Fri Nov 09 01:45:10 2007 +0000 @@ -27,6 +27,13 @@ enum { + PROP_0, + PROP_TEXT, + PROP_TEXT_FLAG +}; + +enum +{ SIGS = 1, }; @@ -61,14 +68,72 @@ } static void +gnt_label_set_property(GObject *obj, guint prop_id, const GValue *value, + GParamSpec *spec) +{ + GntLabel *label = GNT_LABEL(obj); + switch (prop_id) { + case PROP_TEXT: + g_free(label->text); + label->text = gnt_util_onscreen_fit_string(g_value_get_string(value), -1); + break; + case PROP_TEXT_FLAG: + label->flags = g_value_get_int(value); + break; + default: + g_return_if_reached(); + break; + } +} + +static void +gnt_label_get_property(GObject *obj, guint prop_id, GValue *value, + GParamSpec *spec) +{ + GntLabel *label = GNT_LABEL(obj); + switch (prop_id) { + case PROP_TEXT: + g_value_set_string(value, label->text); + break; + case PROP_TEXT_FLAG: + g_value_set_int(value, label->flags); + break; + default: + break; + } +} + +static void gnt_label_class_init(GntLabelClass *klass) { + GObjectClass *gclass = G_OBJECT_CLASS(klass); + parent_class = GNT_WIDGET_CLASS(klass); parent_class->destroy = gnt_label_destroy; parent_class->draw = gnt_label_draw; parent_class->map = NULL; parent_class->size_request = gnt_label_size_request; + gclass->set_property = gnt_label_set_property; + gclass->get_property = gnt_label_get_property; + + g_object_class_install_property(gclass, + PROP_TEXT, + g_param_spec_string("text", "Text", + "The text for the label.", + NULL, + G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB + ) + ); + + g_object_class_install_property(gclass, + PROP_TEXT_FLAG, + g_param_spec_int("text-flag", "Text flag", + "Text attribute to use when displaying the text in the label.", + GNT_TEXT_FLAG_NORMAL, GNT_TEXT_FLAG_HIGHLIGHT, GNT_TEXT_FLAG_NORMAL, + G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB + ) + ); GNTDEBUG; } @@ -76,6 +141,8 @@ gnt_label_init(GTypeInstance *instance, gpointer class) { GntWidget *widget = GNT_WIDGET(instance); + gnt_widget_set_take_focus(widget, FALSE); + GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_GROW_X); widget->priv.minw = 3; widget->priv.minh = 1; @@ -120,21 +187,13 @@ GntWidget *gnt_label_new_with_format(const char *text, GntTextFormatFlags flags) { - GntWidget *widget = g_object_new(GNT_TYPE_LABEL, NULL); - GntLabel *label = GNT_LABEL(widget); - - label->text = gnt_util_onscreen_fit_string(text, -1); - label->flags = flags; - gnt_widget_set_take_focus(widget, FALSE); - GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); - + GntWidget *widget = g_object_new(GNT_TYPE_LABEL, "text-flag", flags, "text", text, NULL); return widget; } void gnt_label_set_text(GntLabel *label, const char *text) { - g_free(label->text); - label->text = gnt_util_onscreen_fit_string(text, -1); + g_object_set(label, "text", text, NULL); if (GNT_WIDGET(label)->window) {