summaryrefslogtreecommitdiff
path: root/gtk/gtklabel.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2001-06-24 15:34:48 +0000
committerOwen Taylor <otaylor@src.gnome.org>2001-06-24 15:34:48 +0000
commitcc223eeff6d60f1b4ab77b09d3d6cdede6372916 (patch)
tree14c6426d96a95a70756dce3dd7154b9aeda15616 /gtk/gtklabel.c
parent5a5580a8e77dda9b7746012405f8e813a0e6c87b (diff)
downloadgtk+-cc223eeff6d60f1b4ab77b09d3d6cdede6372916.tar.gz
Fix stupid error introduced last night that was making things decidedly
Sun Jun 24 11:29:35 2001 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkimage-x11.c (gdk_image_new): Fix stupid error introduced last night that was making things decidedly not work. * gtk/*.[ch]: Patch from Kristian Rietveld adding 80 getters so that we have getter/setter pairing everywhere it makes sense. (#55767) * gtk/gtkradiobutton.[ch] gtk/gtktoolbar.c tests/testgtk.: Rename gtk_radio_button_group to gtk_radio_button_get_group, add a deprecated compat macro. (#55516) * gtk/gtklabel.[ch]: Add functions gtk_label_set/get_use_underline(), gtk_label_set/get_use_markup(), gtk_label_set_label(), which mirror the property API for GtkLabel. Make gtk_label_get_attributes() only reflect the attributes set by gtk_label_set_attributes. * gtk/gtknotebook.c (gtk_notebook_set_current_page) gtk/gtkcompat.h: Rename from gtk_notebook_set_page().
Diffstat (limited to 'gtk/gtklabel.c')
-rw-r--r--gtk/gtklabel.c278
1 files changed, 248 insertions, 30 deletions
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index c9a5272d9a..b1e85ffff2 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -285,24 +285,16 @@ gtk_label_set_property (GObject *object,
switch (prop_id)
{
case PROP_LABEL:
- gtk_label_set_label_internal (label,
- g_strdup (g_value_get_string (value)));
- gtk_label_recalculate (label);
- if (last_keyval != label->mnemonic_keyval)
- gtk_label_setup_mnemonic (label, last_keyval);
+ gtk_label_set_label (label, g_value_get_string (value));
break;
case PROP_ATTRIBUTES:
gtk_label_set_attributes (label, g_value_get_boxed (value));
break;
case PROP_USE_MARKUP:
- gtk_label_set_use_markup_internal (label, g_value_get_boolean (value));
- gtk_label_recalculate (label);
+ gtk_label_set_use_markup (label, g_value_get_boolean (value));
break;
case PROP_USE_UNDERLINE:
- gtk_label_set_use_underline_internal (label, g_value_get_boolean (value));
- gtk_label_recalculate (label);
- if (label->use_underline)
- gtk_label_setup_mnemonic (label, last_keyval);
+ gtk_label_set_use_underline (label, g_value_get_boolean (value));
break;
case PROP_JUSTIFY:
gtk_label_set_justify (label, g_value_get_enum (value));
@@ -398,9 +390,10 @@ gtk_label_init (GtkLabel *label)
/**
* gtk_label_new:
* @str: The text of the label
- * @returns: a new #GtkLabel
*
* Creates a new #GtkLabel, containing the text in @str.
+ *
+ * Return value: the new #GtkLabel
**/
GtkWidget*
gtk_label_new (const gchar *str)
@@ -419,7 +412,6 @@ gtk_label_new (const gchar *str)
* gtk_label_new_with_mnemonic:
* @str: The text of the label, with an underscore in front of the
* mnemonic character
- * @returns: a new #GtkLabel
*
* Creates a new #GtkLabel, containing the text in @str.
*
@@ -435,6 +427,8 @@ gtk_label_new (const gchar *str)
* label is inside a button or menu item, the button or menu item will
* automatically become the mnemonic widget and be activated by
* the mnemonic.
+ *
+ * Return value: the new #GtkLabel
**/
GtkWidget*
gtk_label_new_with_mnemonic (const gchar *str)
@@ -550,6 +544,23 @@ gtk_label_set_mnemonic_widget (GtkLabel *label,
gtk_widget_ref (label->mnemonic_widget);
}
+/**
+ * gtk_label_get_mnemonic_widget:
+ * @label: a #GtkLabel
+ *
+ * Retrieves the target of the mnemonic (keyboard shortcut) of this
+ * label. See gtk_label_set_mnemonic_widget ().
+ *
+ * Return value: the target of the label's mnemonic, or %NULL if none
+ * has been set and the default algorithm will be used.
+ **/
+GtkWidget *
+gtk_label_get_mnemonic_widget (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), NULL);
+
+ return label->mnemonic_widget;
+}
/**
* gtk_label_get_mnemonic_keyval:
@@ -593,12 +604,14 @@ gtk_label_set_label_internal (GtkLabel *label,
static void
gtk_label_set_use_markup_internal (GtkLabel *label,
- gboolean val)
+ gboolean val)
{
val = val != FALSE;
if (label->use_markup != val)
- g_object_notify (G_OBJECT (label), "use_markup");
- label->use_markup = val;
+ {
+ g_object_notify (G_OBJECT (label), "use_markup");
+ label->use_markup = val;
+ }
}
static void
@@ -607,13 +620,15 @@ gtk_label_set_use_underline_internal (GtkLabel *label,
{
val = val != FALSE;
if (label->use_underline != val)
- g_object_notify (G_OBJECT (label), "use_underline");
- label->use_underline = val;
+ {
+ g_object_notify (G_OBJECT (label), "use_underline");
+ label->use_underline = val;
+ }
}
static void
-gtk_label_set_attributes_internal (GtkLabel *label,
- PangoAttrList *attrs)
+gtk_label_set_attributes_internal (GtkLabel *label,
+ PangoAttrList *attrs)
{
if (attrs)
pango_attr_list_ref (attrs);
@@ -621,6 +636,14 @@ gtk_label_set_attributes_internal (GtkLabel *label,
if (label->attrs)
pango_attr_list_unref (label->attrs);
+ if (!label->use_markup && !label->use_underline)
+ {
+ pango_attr_list_ref (attrs);
+ if (label->effective_attrs)
+ pango_attr_list_unref (label->effective_attrs);
+ label->effective_attrs = attrs;
+ }
+
label->attrs = attrs;
g_object_notify (G_OBJECT (label), "attributes");
}
@@ -633,7 +656,7 @@ static void
gtk_label_recalculate (GtkLabel *label)
{
if (label->use_markup)
- set_markup (label, label->label, label->use_underline);
+ set_markup (label, label->label, label->use_underline);
else
{
if (label->use_underline)
@@ -641,7 +664,11 @@ gtk_label_recalculate (GtkLabel *label)
else
{
gtk_label_set_text_internal (label, g_strdup (label->label));
- gtk_label_set_attributes_internal (label, NULL);
+ if (label->attrs)
+ pango_attr_list_ref (label->attrs);
+ if (label->effective_attrs)
+ pango_attr_list_unref (label->effective_attrs);
+ label->effective_attrs = label->attrs;
}
}
@@ -685,7 +712,8 @@ gtk_label_set_text (GtkLabel *label,
* @attrs: a #PangoAttrList
*
* Sets a #PangoAttrList; the attributes in the list are applied to the
- * label text.
+ * label text. The attributes set with this function will be ignored
+ * if label->use_underline or label->use_markup is %TRUE.
**/
void
gtk_label_set_attributes (GtkLabel *label,
@@ -699,6 +727,72 @@ gtk_label_set_attributes (GtkLabel *label,
gtk_widget_queue_resize (GTK_WIDGET (label));
}
+/**
+ * gtk_label_get_attributes:
+ * @label: a #GtkLabel
+ *
+ * Gets the attribute list that was set on the label using
+ * gtk_label_set_attributes(), if any. This function does
+ * not reflect attributes that come from the labels markup
+ * (see gtk_label_set_markup()). If you want to get the
+ * effective attributes for the label, use
+ * pango_layout_get_attribute (gtk_label_get_layout (label)).
+ *
+ * Return value: the attribute list, or %NULL if none was set.
+ **/
+PangoAttrList *
+gtk_label_get_attributes (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), NULL);
+
+ return label->attrs;
+}
+
+/**
+ * gtk_label_set_label:
+ * @label: a #GtkLabel
+ * @str: the new text to set for the label
+ *
+ * Sets the text of the label. The label is interpreted as
+ * including embedded underlines and/or Pango markup depending
+ * on the values of label->use_underline and label->use_markup.
+ **/
+void
+gtk_label_set_label (GtkLabel *label,
+ const gchar *str)
+{
+ guint last_keyval;
+
+ g_return_if_fail (GTK_IS_LABEL (label));
+ g_return_if_fail (str != NULL);
+
+ last_keyval = label->mnemonic_keyval;
+
+ gtk_label_set_label_internal (label, g_strdup (str));
+ gtk_label_recalculate (label);
+ if (last_keyval != label->mnemonic_keyval)
+ gtk_label_setup_mnemonic (label, last_keyval);
+}
+
+/**
+ * gtk_label_get_label:
+ * @label: a #GtkLabel
+ *
+ * Fetches the text from a label widget including any embedded
+ * underlines indicating mnemonics and Pango markup. (See
+ * gtk_label_get_text ()).
+ *
+ * Return value: the text of the label widget. This string is
+ * owned by the widget and must not be modified or freed.
+ **/
+G_CONST_RETURN gchar *
+gtk_label_get_label (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), NULL);
+
+ return label->label;
+}
+
static void
set_markup (GtkLabel *label,
const gchar *str,
@@ -728,8 +822,9 @@ set_markup (GtkLabel *label,
if (attrs)
{
- gtk_label_set_attributes_internal (label, attrs);
- pango_attr_list_unref (attrs);
+ if (label->effective_attrs)
+ pango_attr_list_unref (label->effective_attrs);
+ label->effective_attrs = attrs;
}
if (accel_char != 0)
@@ -792,10 +887,12 @@ gtk_label_set_markup_with_mnemonic (GtkLabel *label,
* gtk_label_get_text:
* @label: a #GtkLabel
*
- * Fetches the text from a label widget
+ * Fetches the text from a label widget, as displayed on the
+ * screen. This does not include any embedded underlines
+ * indicating mnemonics or Pango markup. (See gtk_label_get_label())
*
* Return value: the text in the label widget. This is the internal
- * string used by the label, and must not be modified.
+ * string used by the label, and must not be modified.
**/
G_CONST_RETURN gchar *
gtk_label_get_text (GtkLabel *label)
@@ -854,7 +951,6 @@ gtk_label_set_pattern_internal (GtkLabel *label,
g_return_if_fail (GTK_IS_LABEL (label));
attrs = gtk_label_pattern_to_attrs (label, pattern);
-
gtk_label_set_attributes_internal (label, attrs);
}
@@ -871,6 +967,14 @@ gtk_label_set_pattern (GtkLabel *label,
}
+/**
+ * gtk_label_set_justify:
+ * @label: a #GtkLabel
+ * @jtype: a #GtkJustification
+ *
+ * Sets the alignment of the lines in the text of the label relative to
+ * each other.
+ **/
void
gtk_label_set_justify (GtkLabel *label,
GtkJustification jtype)
@@ -890,6 +994,29 @@ gtk_label_set_justify (GtkLabel *label,
}
}
+/**
+ * gtk_label_get_justify:
+ * @label: a #GtkLabel
+ *
+ * Returns the justification of the label. See gtk_label_set_justification ().
+ *
+ * Return value: GtkJustification
+ **/
+GtkJustification
+gtk_label_get_justify (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), 0);
+
+ return label->jtype;
+}
+
+/**
+ * gtk_label_set_line_wrap:
+ * @label: a #GtkLabel
+ * @wrap: the setting
+ *
+ * If true, the lines will be wrapped if the text becomes too wide.
+ */
void
gtk_label_set_line_wrap (GtkLabel *label,
gboolean wrap)
@@ -907,6 +1034,22 @@ gtk_label_set_line_wrap (GtkLabel *label,
}
}
+/**
+ * gtk_label_get_line_wrap:
+ * @label: a #GtkLabel
+ *
+ * Returns whether lines in the label are automatically wrapped. See gtk_label_set_line_wrap ().
+ *
+ * Return value: %TRUE if the lines of the label are automatically wrapped.
+ */
+gboolean
+gtk_label_get_line_wrap (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+
+ return label->wrap;
+}
+
void
gtk_label_get (GtkLabel *label,
gchar **str)
@@ -946,6 +1089,9 @@ gtk_label_finalize (GObject *object)
if (label->attrs)
pango_attr_list_unref (label->attrs);
+ if (label->effective_attrs)
+ pango_attr_list_unref (label->attrs);
+
g_free (label->select_info);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -1002,8 +1148,8 @@ gtk_label_ensure_layout (GtkLabel *label,
label->layout = gtk_widget_create_pango_layout (widget, label->text);
- if (label->attrs)
- pango_layout_set_attributes (label->layout, label->attrs);
+ if (label->effective_attrs)
+ pango_layout_set_attributes (label->layout, label->effective_attrs);
switch (label->jtype)
{
@@ -2102,3 +2248,75 @@ gtk_label_get_layout_offsets (GtkLabel *label,
get_layout_location (label, x, y);
}
+/**
+ * gtk_label_set_use_markup:
+ * @label: a #GtkLabel
+ * @setting: %TRUE if the label's text should be parsed for markup.
+ *
+ * Sets whether the text of the label contains markup in Pango's
+ * text markup lango. See gtk_label_set_markup().
+ **/
+void
+gtk_label_set_use_markup (GtkLabel *label,
+ gboolean setting)
+{
+ g_return_if_fail (GTK_IS_LABEL (label));
+
+ gtk_label_set_use_markup_internal (label, setting);
+ gtk_label_recalculate (label);
+}
+
+/**
+ * gtk_label_get_use_markup:
+ * @label: a #GtkLabel
+ *
+ * Returns whether the label's text is interpreted as marked up with the
+ * Pango text markup language. See gtk_label_set_use_markup ().
+ *
+ * Return value: %TRUE if the label's text will be parsed for markup.
+ **/
+gboolean
+gtk_label_get_use_markup (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+
+ return label->use_markup;
+}
+
+/**
+ * gtk_label_set_use_underline:
+ * @label: a #GtkLabel
+ * @setting: %TRUE if underlines in the text indicate mnemonics
+ *
+ * If true, an underline in the text indicates the next character should be
+ * used for the mnemonic accelerator key.
+ */
+void
+gtk_label_set_use_underline (GtkLabel *label,
+ gboolean setting)
+{
+ g_return_if_fail (GTK_IS_LABEL (label));
+
+ gtk_label_set_use_underline_internal (label, setting);
+ gtk_label_recalculate (label);
+ if (label->use_underline)
+ gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
+}
+
+/**
+ * gtk_label_get_use_underline:
+ * @label: a #GtkLabel
+ *
+ * Returns whether an embedded underline in thef label indicates a
+ * mnemonic. See gtk_label_set_use_underline ().
+ *
+ * Return value: %TRUE whether an embedded underline in the label indicates
+ * the mnemonic accelerator keys.
+ **/
+gboolean
+gtk_label_get_use_underline (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+
+ return label->use_underline;
+}