summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2006-01-08 07:54:43 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-01-08 07:54:43 +0000
commita7a85ac86778bf0adeb1b71c24dfb0398b23fd0d (patch)
treecf76dedbb978787f43e6c16454867323a6083535 /gtk
parent8f526a5dc9eb33e10c228551fccdc545d1948854 (diff)
downloadgtk+-a7a85ac86778bf0adeb1b71c24dfb0398b23fd0d.tar.gz
Shrink the private structs of these a bit.
2006-01-08 Matthias Clasen <mclasen@redhat.com> * gtk/gtkentry.[hc]: * gtk/gtklabel.[hc]: Shrink the private structs of these a bit.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkentry.c13
-rw-r--r--gtk/gtkentry.h31
-rw-r--r--gtk/gtklabel.c104
-rw-r--r--gtk/gtklabel.h13
4 files changed, 81 insertions, 80 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index b1e8e94d92..8e34eda421 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -78,7 +78,6 @@ struct _GtkEntryPrivate
{
gfloat xalign;
gint insert_pos;
- gboolean truncate_multiline; /* when pasting multiline text */
};
enum {
@@ -904,7 +903,6 @@ gtk_entry_set_property (GObject *object,
GParamSpec *pspec)
{
GtkEntry *entry = GTK_ENTRY (object);
- GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
switch (prop_id)
{
@@ -967,7 +965,7 @@ gtk_entry_set_property (GObject *object,
break;
case PROP_TRUNCATE_MULTILINE:
- priv->truncate_multiline = g_value_get_boolean (value);
+ entry->truncate_multiline = g_value_get_boolean (value);
break;
case PROP_SCROLL_OFFSET:
@@ -985,7 +983,6 @@ gtk_entry_get_property (GObject *object,
GParamSpec *pspec)
{
GtkEntry *entry = GTK_ENTRY (object);
- GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
switch (prop_id)
{
@@ -1026,7 +1023,7 @@ gtk_entry_get_property (GObject *object,
g_value_set_float (value, gtk_entry_get_alignment (entry));
break;
case PROP_TRUNCATE_MULTILINE:
- g_value_set_boolean (value, priv->truncate_multiline);
+ g_value_set_boolean (value, entry->truncate_multiline);
break;
default:
@@ -1054,8 +1051,8 @@ gtk_entry_init (GtkEntry *entry)
entry->is_cell_renderer = FALSE;
entry->editing_canceled = FALSE;
entry->has_frame = TRUE;
+ entry->truncate_multiline = FALSE;
priv->xalign = 0.0;
- priv->truncate_multiline = FALSE;
gtk_drag_dest_set (GTK_WIDGET (entry),
GTK_DEST_DEFAULT_HIGHLIGHT,
@@ -3803,7 +3800,7 @@ paste_received (GtkClipboard *clipboard,
gint length = -1;
GtkEntryCompletion *completion = gtk_entry_get_completion (entry);
- if (priv->truncate_multiline)
+ if (entry->truncate_multiline)
length = truncate_multiline (text);
if (completion)
@@ -4888,7 +4885,7 @@ gtk_entry_drag_data_received (GtkWidget *widget,
gint sel1, sel2;
gint length = -1;
- if (priv->truncate_multiline)
+ if (entry->truncate_multiline)
length = truncate_multiline (str);
new_position = gtk_entry_find_position (entry, x + entry->scroll_offset);
diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h
index 6ba485aa8b..cd9c6311a6 100644
--- a/gtk/gtkentry.h
+++ b/gtk/gtkentry.h
@@ -71,26 +71,21 @@ struct _GtkEntry
gint selection_bound;
PangoLayout *cached_layout;
- guint cache_includes_preedit : 1;
-
- guint need_im_reset : 1;
-
- guint has_frame : 1;
-
- guint activates_default : 1;
- guint cursor_visible : 1;
-
- guint in_click : 1; /* Flag so we don't select all when clicking in entry to focus in */
-
- guint is_cell_renderer : 1;
- guint editing_canceled : 1; /* Only used by GtkCellRendererText */
+ guint cache_includes_preedit : 1;
+ guint need_im_reset : 1;
+ guint has_frame : 1;
+ guint activates_default : 1;
+ guint cursor_visible : 1;
+ guint in_click : 1; /* Flag so we don't select all when clicking in entry to focus in */
+ guint is_cell_renderer : 1;
+ guint editing_canceled : 1; /* Only used by GtkCellRendererText */
+ guint mouse_cursor_obscured : 1;
+ guint select_words : 1;
+ guint select_lines : 1;
+ guint resolved_dir : 4; /* PangoDirection */
+ guint truncate_multiline : 1;
- guint mouse_cursor_obscured : 1;
-
- guint select_words : 1;
- guint select_lines : 1;
- guint resolved_dir : 4; /* PangoDirection */
guint button;
guint blink_timeout;
guint recompute_idle;
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 2c5509c311..4fdf956ffc 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -51,10 +51,6 @@ typedef struct
{
gint width_chars;
gint max_width_chars;
- guint single_line_mode : 1;
- guint have_transform : 1;
- guint in_click : 1;
- gdouble angle;
}
GtkLabelPrivate;
@@ -198,7 +194,7 @@ static gint gtk_label_move_backward_word (GtkLabel *label,
gint start);
static GtkMiscClass *parent_class = NULL;
-
+static GQuark quark_angle = 0;
GType
gtk_label_get_type (void)
@@ -259,7 +255,9 @@ gtk_label_class_init (GtkLabelClass *class)
GtkBindingSet *binding_set;
parent_class = g_type_class_peek_parent (class);
-
+
+ quark_angle = g_quark_from_static_string ("angle");
+
gobject_class->set_property = gtk_label_set_property;
gobject_class->get_property = gtk_label_get_property;
gobject_class->finalize = gtk_label_finalize;
@@ -790,7 +788,6 @@ gtk_label_init (GtkLabel *label)
priv = GTK_LABEL_GET_PRIVATE (label);
priv->width_chars = -1;
- priv->angle = 0.0;
priv->max_width_chars = -1;
label->label = NULL;
@@ -1778,7 +1775,7 @@ label_wrap_width_free (gpointer data)
{
LabelWrapWidth *wrap_width = data;
pango_font_description_free (wrap_width->font_desc);
- g_free (wrap_width);
+ g_slice_free (LabelWrapWidth, wrap_width);
}
static gint
@@ -1786,16 +1783,21 @@ get_label_wrap_width (GtkLabel *label)
{
PangoLayout *layout;
GtkStyle *style = GTK_WIDGET (label)->style;
+ static GQuark quark_label_wrap_width = 0;
- LabelWrapWidth *wrap_width = g_object_get_data (G_OBJECT (style), "gtk-label-wrap-width");
+ if (quark_label_wrap_width == 0)
+ quark_label_wrap_width = g_quark_from_static_string ("gtk-label-wrap-width");
+
+ LabelWrapWidth *wrap_width = g_object_get_qdata (G_OBJECT (style), quark_label_wrap_width);
if (!wrap_width)
{
- wrap_width = g_new0 (LabelWrapWidth, 1);
- g_object_set_data_full (G_OBJECT (style), I_("gtk-label-wrap-width"),
- wrap_width, label_wrap_width_free);
+ wrap_width = g_slice_new0 (LabelWrapWidth);
+ g_object_set_qdata_full (G_OBJECT (style), quark_label_wrap_width,
+ wrap_width, label_wrap_width_free);
}
- if (wrap_width->font_desc && pango_font_description_equal (wrap_width->font_desc, style->font_desc))
+ if (wrap_width->font_desc &&
+ pango_font_description_equal (wrap_width->font_desc, style->font_desc))
return wrap_width->width;
if (wrap_width->font_desc)
@@ -1825,9 +1827,9 @@ gtk_label_ensure_layout (GtkLabel *label)
if (!label->layout)
{
PangoAlignment align = PANGO_ALIGN_LEFT; /* Quiet gcc */
- GtkLabelPrivate *priv = GTK_LABEL_GET_PRIVATE (label);
+ gdouble angle = gtk_label_get_angle (label);
- if (priv->angle != 0.0 && !label->wrap && !label->ellipsize && !label->select_info)
+ if (angle != 0.0 && !label->wrap && !label->ellipsize && !label->select_info)
{
/* We rotate the standard singleton PangoContext for the widget,
* depending on the fact that it's meant pretty much exclusively
@@ -1835,18 +1837,18 @@ gtk_label_ensure_layout (GtkLabel *label)
*/
PangoMatrix matrix = PANGO_MATRIX_INIT;
- pango_matrix_rotate (&matrix, priv->angle);
+ pango_matrix_rotate (&matrix, angle);
pango_context_set_matrix (gtk_widget_get_pango_context (widget), &matrix);
- priv->have_transform = TRUE;
+ label->have_transform = TRUE;
}
else
{
- if (priv->have_transform)
+ if (label->have_transform)
pango_context_set_matrix (gtk_widget_get_pango_context (widget), NULL);
- priv->have_transform = FALSE;
+ label->have_transform = FALSE;
}
label->layout = gtk_widget_create_pango_layout (widget, label->text);
@@ -1876,7 +1878,7 @@ gtk_label_ensure_layout (GtkLabel *label)
pango_layout_set_alignment (label->layout, align);
pango_layout_set_ellipsize (label->layout, label->ellipsize);
- pango_layout_set_single_paragraph_mode (label->layout, priv->single_line_mode);
+ pango_layout_set_single_paragraph_mode (label->layout, label->single_line_mode);
if (label->ellipsize)
pango_layout_set_width (label->layout,
@@ -2041,7 +2043,7 @@ gtk_label_size_request (GtkWidget *widget,
aux_info = _gtk_widget_get_aux_info (widget, FALSE);
- if (priv->have_transform)
+ if (label->have_transform)
{
GdkRectangle rect;
@@ -2095,7 +2097,7 @@ gtk_label_size_request (GtkWidget *widget,
else
width += PANGO_PIXELS (logical_rect.width);
- if (priv->single_line_mode)
+ if (label->single_line_mode)
{
PangoContext *context;
PangoFontMetrics *metrics;
@@ -2760,7 +2762,6 @@ static void
gtk_label_grab_focus (GtkWidget *widget)
{
GtkLabel *label;
- GtkLabelPrivate *priv;
gboolean select_on_focus;
label = GTK_LABEL (widget);
@@ -2768,8 +2769,6 @@ gtk_label_grab_focus (GtkWidget *widget)
if (label->select_info == NULL)
return;
- priv = GTK_LABEL_GET_PRIVATE (label);
-
GTK_WIDGET_CLASS (parent_class)->grab_focus (widget);
g_object_get (gtk_widget_get_settings (widget),
@@ -2777,7 +2776,7 @@ gtk_label_grab_focus (GtkWidget *widget)
&select_on_focus,
NULL);
- if (select_on_focus && !priv->in_click)
+ if (select_on_focus && !label->in_click)
gtk_label_select_region (label, 0, -1);
}
@@ -2786,7 +2785,6 @@ gtk_label_button_press (GtkWidget *widget,
GdkEventButton *event)
{
GtkLabel *label;
- GtkLabelPrivate *priv;
gint index = 0;
gint min, max;
@@ -2800,11 +2798,9 @@ gtk_label_button_press (GtkWidget *widget,
{
if (!GTK_WIDGET_HAS_FOCUS (widget))
{
- priv = GTK_LABEL_GET_PRIVATE (label);
-
- priv->in_click = TRUE;
+ label->in_click = TRUE;
gtk_widget_grab_focus (widget);
- priv->in_click = FALSE;
+ label->in_click = FALSE;
}
if (event->type == GDK_3BUTTON_PRESS)
@@ -3140,6 +3136,12 @@ gtk_label_get_selectable (GtkLabel *label)
return label->select_info != NULL;
}
+static void
+free_angle (gpointer angle)
+{
+ g_slice_free (gdouble, angle);
+}
+
/**
* gtk_label_set_angle:
* @label: a #GtkLabel
@@ -3157,12 +3159,20 @@ void
gtk_label_set_angle (GtkLabel *label,
gdouble angle)
{
- GtkLabelPrivate *priv;
+ gdouble *label_angle;
g_return_if_fail (GTK_IS_LABEL (label));
- priv = GTK_LABEL_GET_PRIVATE (label);
+ label_angle = (gdouble *)g_object_get_qdata (G_OBJECT (label), quark_angle);
+ if (!label_angle)
+ {
+ label_angle = g_slice_new (gdouble);
+ *label_angle = 0.0;
+ g_object_set_qdata_full (G_OBJECT (label), quark_angle,
+ label_angle, free_angle);
+ }
+
/* Canonicalize to [0,360]. We don't canonicalize 360 to 0, because
* double property ranges are inclusive, and changing 360 to 0 would
* make a property editor behave strangely.
@@ -3170,9 +3180,9 @@ gtk_label_set_angle (GtkLabel *label,
if (angle < 0 || angle > 360.0)
angle = angle - 360. * floor (angle / 360.);
- if (angle != priv->angle)
+ if (*label_angle != angle)
{
- priv->angle = angle;
+ *label_angle = angle;
gtk_label_clear_layout (label);
gtk_widget_queue_resize (GTK_WIDGET (label));
@@ -3195,13 +3205,16 @@ gtk_label_set_angle (GtkLabel *label,
gdouble
gtk_label_get_angle (GtkLabel *label)
{
- GtkLabelPrivate *priv;
+ gdouble *angle;
g_return_val_if_fail (GTK_IS_LABEL (label), 0.0);
+
+ angle = (gdouble *)g_object_get_qdata (G_OBJECT (label), quark_angle);
- priv = GTK_LABEL_GET_PRIVATE (label);
-
- return priv->angle;
+ if (angle)
+ return *angle;
+ else
+ return 0.0;
}
static void
@@ -3558,16 +3571,13 @@ void
gtk_label_set_single_line_mode (GtkLabel *label,
gboolean single_line_mode)
{
- GtkLabelPrivate *priv;
-
g_return_if_fail (GTK_IS_LABEL (label));
single_line_mode = single_line_mode != FALSE;
- priv = GTK_LABEL_GET_PRIVATE (label);
- if (priv->single_line_mode != single_line_mode)
+ if (label->single_line_mode != single_line_mode)
{
- priv->single_line_mode = single_line_mode;
+ label->single_line_mode = single_line_mode;
gtk_label_clear_layout (label);
gtk_widget_queue_resize (GTK_WIDGET (label));
@@ -3589,13 +3599,9 @@ gtk_label_set_single_line_mode (GtkLabel *label,
gboolean
gtk_label_get_single_line_mode (GtkLabel *label)
{
- GtkLabelPrivate *priv;
-
g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
- priv = GTK_LABEL_GET_PRIVATE (label);
-
- return priv->single_line_mode;
+ return label->single_line_mode;
}
/* Compute the X position for an offset that corresponds to the "more important
diff --git a/gtk/gtklabel.h b/gtk/gtklabel.h
index 3bbaade26d..3e14e01b4a 100644
--- a/gtk/gtklabel.h
+++ b/gtk/gtklabel.h
@@ -53,11 +53,14 @@ struct _GtkLabel
/*< private >*/
gchar *label;
- guint jtype : 2;
- guint wrap : 1;
- guint use_underline : 1;
- guint use_markup : 1;
- guint ellipsize : 3;
+ guint jtype : 2;
+ guint wrap : 1;
+ guint use_underline : 1;
+ guint use_markup : 1;
+ guint ellipsize : 3;
+ guint single_line_mode : 1;
+ guint have_transform : 1;
+ guint in_click : 1;
guint mnemonic_keyval;