From 6736c085b30faa63eb5ed129ec53fed9a56b7e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Tue, 1 Jun 2010 21:01:33 +0200 Subject: [PATCH] Use accessor functions to access GtkCellRendererText --- gtk/gtkcellrendereraccel.c | 4 +- gtk/gtkcellrenderercombo.c | 20 +++-- gtk/gtkcellrendererspin.c | 11 ++- modules/other/gail/gailtextcell.c | 132 ++++++++++++++++++++++-------- 4 files changed, 121 insertions(+), 46 deletions(-) diff --git a/gtk/gtkcellrendereraccel.c b/gtk/gtkcellrendereraccel.c index e66ab2bcf0..829c513b1f 100644 --- a/gtk/gtkcellrendereraccel.c +++ b/gtk/gtkcellrendereraccel.c @@ -585,6 +585,7 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, GtkWidget *label; GtkWidget *eventbox; GdkDevice *device, *keyb, *pointer; + gboolean editable; guint32 time; celltext = GTK_CELL_RENDERER_TEXT (cell); @@ -592,7 +593,8 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer *cell, priv = accel->priv; /* If the cell isn't editable we return NULL. */ - if (celltext->editable == FALSE) + g_object_get (celltext, "editable", &editable, NULL); + if (editable == FALSE) return NULL; g_return_val_if_fail (widget->window != NULL, NULL); diff --git a/gtk/gtkcellrenderercombo.c b/gtk/gtkcellrenderercombo.c index 2c7c29401c..82f41d12e6 100644 --- a/gtk/gtkcellrenderercombo.c +++ b/gtk/gtkcellrenderercombo.c @@ -399,18 +399,21 @@ find_text (GtkTreeModel *model, { GtkCellRendererComboPriv *priv; SearchData *search_data = (SearchData *)data; - gchar *text; + gchar *text, *cell_text; priv = search_data->cell->priv; gtk_tree_model_get (model, iter, priv->text_column, &text, -1); - if (text && GTK_CELL_RENDERER_TEXT (search_data->cell)->text && - strcmp (text, GTK_CELL_RENDERER_TEXT (search_data->cell)->text) == 0) + g_object_get (GTK_CELL_RENDERER_TEXT (search_data->cell), + "text", &cell_text, + NULL); + if (text && cell_text && g_strcmp0 (text, cell_text) == 0) { search_data->iter = *iter; search_data->found = TRUE; } + g_free (cell_text); g_free (text); return search_data->found; @@ -430,9 +433,12 @@ gtk_cell_renderer_combo_start_editing (GtkCellRenderer *cell, GtkWidget *combo; SearchData search_data; GtkCellRendererComboPriv *priv; + gboolean editable; + gchar *text; cell_text = GTK_CELL_RENDERER_TEXT (cell); - if (cell_text->editable == FALSE) + g_object_get (cell_text, "editable", &editable, NULL); + if (editable == FALSE) return NULL; cell_combo = GTK_CELL_RENDERER_COMBO (cell); @@ -450,9 +456,11 @@ gtk_cell_renderer_combo_start_editing (GtkCellRenderer *cell, gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (combo), priv->text_column); - if (cell_text->text) + g_object_get (cell_text, "text", &text, NULL); + if (text) gtk_entry_set_text (GTK_ENTRY (GTK_BIN (combo)->child), - cell_text->text); + text); + g_free (text); } else { diff --git a/gtk/gtkcellrendererspin.c b/gtk/gtkcellrendererspin.c index a514657e5d..536152d65c 100644 --- a/gtk/gtkcellrendererspin.c +++ b/gtk/gtkcellrendererspin.c @@ -301,11 +301,14 @@ gtk_cell_renderer_spin_start_editing (GtkCellRenderer *cell, GtkCellRendererSpinPrivate *priv; GtkCellRendererText *cell_text; GtkWidget *spin; + gboolean editable; + gchar *text; cell_text = GTK_CELL_RENDERER_TEXT (cell); priv = GTK_CELL_RENDERER_SPIN (cell)->priv; - if (!cell_text->editable) + g_object_get (cell_text, "editable", &editable, NULL); + if (!editable) return NULL; if (!priv->adjustment) @@ -318,9 +321,11 @@ gtk_cell_renderer_spin_start_editing (GtkCellRenderer *cell, G_CALLBACK (gtk_cell_renderer_spin_button_press_event), NULL); - if (cell_text->text) + g_object_get (cell_text, "text", &text, NULL); + if (text) gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), - g_ascii_strtod (cell_text->text, NULL)); + g_ascii_strtod (text, NULL)); + g_free (text); g_object_set_data_full (G_OBJECT (spin), GTK_CELL_RENDERER_SPIN_PATH, g_strdup (path), g_free); diff --git a/modules/other/gail/gailtextcell.c b/modules/other/gail/gailtextcell.c index 42feea6f4d..9573130515 100644 --- a/modules/other/gail/gailtextcell.c +++ b/modules/other/gail/gailtextcell.c @@ -390,6 +390,7 @@ gail_text_cell_get_run_attributes (AtkText *text, PangoLayout *layout; AtkObject *parent; GtkWidget *widget; + gchar *renderer_text; gail_renderer = GAIL_RENDERER_CELL (text); gtk_renderer = GTK_CELL_RENDERER_TEXT (gail_renderer->renderer); @@ -400,12 +401,14 @@ gail_text_cell_get_run_attributes (AtkText *text, g_return_val_if_fail (GAIL_IS_CELL_PARENT (parent), NULL); widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (parent)); layout = create_pango_layout (gtk_renderer, widget), + g_object_get (gtk_renderer, "text", &renderer_text, NULL); attrib_set = gail_misc_layout_get_run_attributes (attrib_set, layout, - gtk_renderer->text, + renderer_text, offset, start_offset, end_offset); + g_free (renderer_text); g_object_unref (G_OBJECT (layout)); return attrib_set; @@ -448,71 +451,97 @@ static PangoLayout* create_pango_layout(GtkCellRendererText *gtk_renderer, GtkWidget *widget) { - PangoAttrList *attr_list; + GdkColor *foreground_gdk; + PangoAttrList *attr_list, *attributes; PangoLayout *layout; - PangoUnderline uline; + PangoUnderline uline, underline; PangoFontMask mask; + PangoFontDescription *font_desc; + gboolean foreground_set, strikethrough_set, strikethrough; + gboolean scale_set, underline_set, rise_set; + gchar *renderer_text; + gdouble scale; + gint rise; - layout = gtk_widget_create_pango_layout (widget, gtk_renderer->text); + g_object_get (gtk_renderer, + "text", &renderer_text, + "attributes", &attributes, + "foreground-set", &foreground_set, + "foreground-gdk", &foreground_gdk, + "strikethrough-set", &strikethrough_set, + "strikethrough", &strikethrough, + "font-desc", &font_desc, + "scale-set", &scale_set, + "scale", &scale, + "underline-set", &underline_set, + "underline", &underline, + "rise-set", &rise_set, + "rise", &rise, + NULL); - if (gtk_renderer->extra_attrs) - attr_list = pango_attr_list_copy (gtk_renderer->extra_attrs); + layout = gtk_widget_create_pango_layout (widget, renderer_text); + + if (attributes) + attr_list = pango_attr_list_copy (attributes); else attr_list = pango_attr_list_new (); - if (gtk_renderer->foreground_set) + if (foreground_set) { - PangoColor color; - color = gtk_renderer->foreground; - add_attr (attr_list, pango_attr_foreground_new (color.red, - color.green, color.blue)); + add_attr (attr_list, pango_attr_foreground_new (foreground_gdk->red, + foreground_gdk->green, + foreground_gdk->blue)); } - if (gtk_renderer->strikethrough_set) + if (strikethrough_set) add_attr (attr_list, - pango_attr_strikethrough_new (gtk_renderer->strikethrough)); + pango_attr_strikethrough_new (strikethrough)); - mask = pango_font_description_get_set_fields (gtk_renderer->font); + mask = pango_font_description_get_set_fields (font_desc); if (mask & PANGO_FONT_MASK_FAMILY) add_attr (attr_list, - pango_attr_family_new (pango_font_description_get_family (gtk_renderer->font))); + pango_attr_family_new (pango_font_description_get_family (font_desc))); if (mask & PANGO_FONT_MASK_STYLE) - add_attr (attr_list, pango_attr_style_new (pango_font_description_get_style (gtk_renderer->font))); + add_attr (attr_list, pango_attr_style_new (pango_font_description_get_style (font_desc))); if (mask & PANGO_FONT_MASK_VARIANT) - add_attr (attr_list, pango_attr_variant_new (pango_font_description_get_variant (gtk_renderer->font))); + add_attr (attr_list, pango_attr_variant_new (pango_font_description_get_variant (font_desc))); if (mask & PANGO_FONT_MASK_WEIGHT) - add_attr (attr_list, pango_attr_weight_new (pango_font_description_get_weight (gtk_renderer->font))); + add_attr (attr_list, pango_attr_weight_new (pango_font_description_get_weight (font_desc))); if (mask & PANGO_FONT_MASK_STRETCH) - add_attr (attr_list, pango_attr_stretch_new (pango_font_description_get_stretch (gtk_renderer->font))); + add_attr (attr_list, pango_attr_stretch_new (pango_font_description_get_stretch (font_desc))); if (mask & PANGO_FONT_MASK_SIZE) - add_attr (attr_list, pango_attr_size_new (pango_font_description_get_size (gtk_renderer->font))); + add_attr (attr_list, pango_attr_size_new (pango_font_description_get_size (font_desc))); - if (gtk_renderer->scale_set && - gtk_renderer->font_scale != 1.0) - add_attr (attr_list, pango_attr_scale_new (gtk_renderer->font_scale)); + if (scale_set && scale != 1.0) + add_attr (attr_list, pango_attr_scale_new (scale)); - if (gtk_renderer->underline_set) - uline = gtk_renderer->underline_style; + if (underline_set) + uline = underline; else uline = PANGO_UNDERLINE_NONE; if (uline != PANGO_UNDERLINE_NONE) add_attr (attr_list, - pango_attr_underline_new (gtk_renderer->underline_style)); + pango_attr_underline_new (underline)); - if (gtk_renderer->rise_set) - add_attr (attr_list, pango_attr_rise_new (gtk_renderer->rise)); + if (rise_set) + add_attr (attr_list, pango_attr_rise_new (rise)); pango_layout_set_attributes (layout, attr_list); pango_layout_set_width (layout, -1); pango_attr_list_unref (attr_list); + pango_font_description_free (font_desc); + g_free (foreground_gdk); + pango_attr_list_unref (attributes); + g_free (renderer_text); + return layout; } @@ -541,6 +570,7 @@ gail_text_cell_get_character_extents (AtkText *text, AtkObject *parent; PangoRectangle char_rect; PangoLayout *layout; + gchar *renderer_text; gint x_offset, y_offset, index, cell_height, cell_width; gint xpad, ypad; @@ -559,7 +589,12 @@ gail_text_cell_get_character_extents (AtkText *text, /* * Thus would be inconsistent with the cache */ - gail_return_if_fail (gtk_renderer->text); + g_object_get (gtk_renderer, "text", &renderer_text, NULL); + if (text == NULL) + { + g_free (renderer_text); + return; + } parent = atk_object_get_parent (ATK_OBJECT (text)); if (GAIL_IS_CONTAINER_CELL (parent)) @@ -573,8 +608,7 @@ gail_text_cell_get_character_extents (AtkText *text, &rendered_rect, &x_offset, &y_offset, &cell_width, &cell_height); layout = create_pango_layout (gtk_renderer, widget); - index = g_utf8_offset_to_pointer (gtk_renderer->text, - offset) - gtk_renderer->text; + index = g_utf8_offset_to_pointer (renderer_text, offset) - renderer_text; pango_layout_index_to_pos (layout, index, &char_rect); gtk_cell_renderer_get_padding (gail_renderer->renderer, &xpad, &ypad); @@ -583,7 +617,10 @@ gail_text_cell_get_character_extents (AtkText *text, x_offset + rendered_rect.x + xpad, y_offset + rendered_rect.y + ypad, x, y, width, height, coords); + + g_free (renderer_text); g_object_unref (layout); + return; } @@ -599,6 +636,7 @@ gail_text_cell_get_offset_at_point (AtkText *text, GtkWidget *widget; GdkRectangle rendered_rect; PangoLayout *layout; + gchar *renderer_text; gint x_offset, y_offset, index; gint xpad, ypad; @@ -609,7 +647,13 @@ gail_text_cell_get_offset_at_point (AtkText *text, gtk_renderer = GTK_CELL_RENDERER_TEXT (gail_renderer->renderer); parent = atk_object_get_parent (ATK_OBJECT (text)); - g_return_val_if_fail (gtk_renderer->text, -1); + g_object_get (gtk_renderer, "text", &renderer_text, NULL); + if (text == NULL) + { + g_free (renderer_text); + return -1; + } + if (GAIL_IS_CONTAINER_CELL (parent)) parent = atk_object_get_parent (parent); @@ -632,13 +676,29 @@ gail_text_cell_get_offset_at_point (AtkText *text, if (index == -1) { if (coords == ATK_XY_WINDOW || coords == ATK_XY_SCREEN) - return g_utf8_strlen (gtk_renderer->text, -1); - + { + glong length; + + length = g_utf8_strlen (renderer_text, -1); + g_free (renderer_text); + + return length; + } + + g_free (renderer_text); + return index; } else - return g_utf8_pointer_to_offset (gtk_renderer->text, - gtk_renderer->text + index); + { + glong offset; + + offset = g_utf8_pointer_to_offset (renderer_text, + renderer_text + index); + g_free (renderer_text); + + return offset; + } } static gunichar