Compare commits

...

1 Commits

Author SHA1 Message Date
Christopher Davis
1c37c450b6 gtklabel: Add is-ellipsized properly
Prior to this commit it was impossible for developers to tell when
a label was ellipsized in order to react to it.

With `is-ellipsized`, a developer can know when a label is ellipized
in order to do things like adding a tooltip.
2022-12-20 13:07:02 -05:00
2 changed files with 48 additions and 1 deletions

View File

@@ -286,6 +286,8 @@ struct _GtkLabel
int width_chars;
int max_width_chars;
int lines;
gboolean is_ellipsized;
};
struct _GtkLabelClass
@@ -398,6 +400,7 @@ enum {
PROP_YALIGN,
PROP_EXTRA_MENU,
PROP_TABS,
PROP_IS_ELLIPSIZED,
NUM_PROPERTIES
};
@@ -603,6 +606,9 @@ gtk_label_get_property (GObject *object,
case PROP_TABS:
g_value_set_boxed (value, self->tabs);
break;
case PROP_IS_ELLIPSIZED:
g_value_set_boolean (value, self->is_ellipsized);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -638,6 +644,8 @@ gtk_label_init (GtkLabel *self)
self->mnemonic_widget = NULL;
self->mnemonics_visible = FALSE;
self->is_ellipsized = FALSE;
}
static const GtkBuildableParser pango_parser =
@@ -1357,6 +1365,7 @@ gtk_label_size_allocate (GtkWidget *widget,
int baseline)
{
GtkLabel *self = GTK_LABEL (widget);
gboolean layout_ellipsized;
if (self->layout)
{
@@ -1364,6 +1373,13 @@ gtk_label_size_allocate (GtkWidget *widget,
pango_layout_set_width (self->layout, width * PANGO_SCALE);
else
pango_layout_set_width (self->layout, -1);
layout_ellipsized = pango_layout_is_ellipsized (self->layout);
if (self->is_ellipsized != layout_ellipsized)
{
self->is_ellipsized = layout_ellipsized;
g_object_notify_by_pspec (G_OBJECT (self), label_props[PROP_IS_ELLIPSIZED]);
}
}
if (self->popup_menu)
@@ -2579,6 +2595,18 @@ gtk_label_class_init (GtkLabelClass *class)
PANGO_TYPE_TAB_ARRAY,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkLabel:is-ellipsized: (attributes org.gtk.Property.get=gtk_label_is_ellipsized)
*
* Whether the label is currently ellipsized
*
* Since: 4.10
*/
label_props[PROP_IS_ELLIPSIZED] =
g_param_spec_boolean ("is-ellipsized", NULL, NULL,
FALSE,
GTK_PARAM_READABLE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (gobject_class, NUM_PROPERTIES, label_props);
/**
@@ -6006,3 +6034,21 @@ gtk_label_get_tabs (GtkLabel *self)
return self->tabs ? pango_tab_array_copy (self->tabs) : NULL;
}
/**
* gtk_label_is_ellipsized: (attributes org.gtk.Method.get_property=is-ellipsized)
* @self: a `GtkLabel`
*
* Gets whether the label is currently ellipsized.
*
* Returns: whether the label is currently ellipsized
*
* Since: 4.10
*/
gboolean
gtk_label_is_ellipsized (GtkLabel *self)
{
g_return_val_if_fail (GTK_IS_LABEL (self), FALSE);
return self->is_ellipsized;
}

View File

@@ -184,7 +184,8 @@ void gtk_label_set_tabs (GtkLabel *self,
GDK_AVAILABLE_IN_4_8
PangoTabArray * gtk_label_get_tabs (GtkLabel *self);
GDK_AVAILABLE_IN_4_10
gboolean gtk_label_is_ellipsized (GtkLabel *self);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkLabel, g_object_unref)