[gnumeric] Compilation: more dead kittens.



commit 6c724135b0b9e35490bfc66480943dc8d1f94d88
Author: Morten Welinder <terra gnome org>
Date:   Mon Nov 8 14:40:59 2010 -0500

    Compilation: more dead kittens.

 configure.in                                    |    4 ++-
 src/dead-kittens.h                              |   44 +++++++++++++++++++++++
 src/gui-util.c                                  |   12 ++++++
 src/gui-util.h                                  |    4 ++
 src/gutils.c                                    |    8 ++++
 src/gutils.h                                    |    2 +
 src/widgets/gnm-cell-combo-view.c               |   16 ++++++--
 src/widgets/gnumeric-cell-renderer-expr-entry.c |    9 ++++-
 src/widgets/gnumeric-cell-renderer-text.c       |   22 ++++++-----
 src/widgets/gnumeric-cell-renderer-toggle.c     |   32 ++++++++++-------
 src/widgets/gnumeric-expr-entry.c               |    2 +-
 src/widgets/widget-editable-label.c             |    2 +-
 12 files changed, 125 insertions(+), 32 deletions(-)
---
diff --git a/configure.in b/configure.in
index 70704ff..31f8a45 100644
--- a/configure.in
+++ b/configure.in
@@ -689,8 +689,10 @@ LIBS="$GNUMERIC_LIBS $LIBS"
 AC_CHECK_FUNCS(g_option_context_set_delocalize g_hash_table_get_keys)
 AC_CHECK_FUNCS(pango_font_map_create_context)
 AC_CHECK_FUNCS(gtk_adjustment_configure gtk_adjustment_set_lower gtk_adjustment_set_upper gtk_adjustment_get_page_size)
+AC_CHECK_FUNCS(gtk_cell_renderer_get_alignment gtk_cell_renderer_get_padding)
+AC_CHECK_FUNCS(gtk_cell_renderer_text_get_background_set gtk_cell_renderer_text_get_foreground_set gtk_cell_renderer_text_get_editable)
 AC_CHECK_FUNCS(gtk_dialog_get_content_area gtk_dialog_get_action_area)
-AC_CHECK_FUNCS(gtk_entry_get_text_length gtk_entry_set_icon_from_stock gtk_entry_get_buffer gtk_entry_get_text_area)
+AC_CHECK_FUNCS(gtk_entry_get_text_length gtk_entry_set_icon_from_stock gtk_entry_get_buffer gtk_entry_get_text_area gtk_entry_set_editing_cancelled)
 AC_CHECK_FUNCS(gtk_layout_get_bin_window)
 AC_CHECK_FUNCS(gtk_orientable_set_orientation)
 AC_CHECK_FUNCS(gtk_table_get_size)
diff --git a/src/dead-kittens.h b/src/dead-kittens.h
index a6c41b4..35b6ba2 100644
--- a/src/dead-kittens.h
+++ b/src/dead-kittens.h
@@ -1,8 +1,46 @@
 #ifndef GNUMERIC_GTK_DEAD_KITTENS_H
 #define GNUMERIC_GTK_DEAD_KITTENS_H
 
+#include <gutils.h>
+
 /* To be included only from C files, not headers.  */
 
+#ifndef HAVE_GTK_CELL_RENDERER_GET_ALIGNMENT
+#define gtk_cell_renderer_get_alignment(_cr_,_px_,_py_) do {	\
+  gfloat *px = (_px_);						\
+  gfloat *py = (_py_);						\
+  if (px) *px = (_cr_)->xalign;					\
+  if (py) *py = (_cr_)->yalign;					\
+} while (0)
+#endif
+
+#ifndef HAVE_GTK_CELL_RENDERER_GET_PADDING
+#define gtk_cell_renderer_get_padding(_cr_,_px_,_py_) do {	\
+  int *px = (_px_);						\
+  int *py = (_py_);						\
+  if (px) *px = (_cr_)->xpad;					\
+  if (py) *py = (_cr_)->ypad;					\
+} while (0)
+#endif
+
+/* This function does not exist in gtk+ yet.  634344.  */
+#ifndef HAVE_GTK_CELL_RENDERER_TEXT_GET_BACKGROUND_SET
+#define gtk_cell_renderer_text_get_background_set(_cr_) \
+  gnm_object_get_bool ((_cr_), "background-set")
+#endif
+
+/* This function does not exist in gtk+ yet.  634344.  */
+#ifndef HAVE_GTK_CELL_RENDERER_TEXT_GET_FOREGROUND_SET
+#define gtk_cell_renderer_text_get_foreground_set(_cr_) \
+  gnm_object_get_bool ((_cr_), "foreground-set")
+#endif
+
+/* This function does not exist in gtk+ yet.  634344.  */
+#ifndef HAVE_GTK_CELL_RENDERER_TEXT_GET_EDITABLE
+#define gtk_cell_renderer_text_get_editable(_cr_) \
+  gnm_object_get_bool ((_cr_), "editable")
+#endif
+
 #ifndef HAVE_GTK_DIALOG_GET_ACTION_AREA
 #define gtk_dialog_get_action_area(x) ((x)->action_area)
 #endif
@@ -23,6 +61,12 @@
 #  endif
 #endif
 
+/* This function does not exist in gtk+ yet.  634342.  */
+#ifndef HAVE_GTK_ENTRY_SET_EDITING_CANCELLED
+#define gtk_entry_set_editing_cancelled(_e_,_b_) \
+  g_object_set ((_e_), "editing-canceled", (gboolean)(_b_), NULL)
+#endif
+
 #ifndef HAVE_GTK_LAYOUT_GET_BIN_WINDOW
 #define gtk_layout_get_bin_window(x) ((x)->bin_window)
 #endif
diff --git a/src/gui-util.c b/src/gui-util.c
index 274d891..0e64385 100644
--- a/src/gui-util.c
+++ b/src/gui-util.c
@@ -1501,3 +1501,15 @@ gnm_check_for_plugins_missing (char const **ids, GtkWindow *parent)
 	}
 	return FALSE;
 }
+
+
+void
+gnm_cell_renderer_text_copy_background_to_cairo (GtkCellRendererText *crt,
+						 cairo_t *cr)
+{
+	GdkColor c;
+
+	/* FIXME: If we have GdkRGBA we can do better.  */
+	g_object_get (crt, "background-gdk", &c, NULL);
+	gdk_cairo_set_source_color (cr, &c);
+}
diff --git a/src/gui-util.h b/src/gui-util.h
index a7ef21c..9894757 100644
--- a/src/gui-util.h
+++ b/src/gui-util.h
@@ -138,6 +138,10 @@ void gnm_canvas_get_screen_position (GocCanvas *canvas,
 
 gboolean gnm_check_for_plugins_missing (char const **ids, GtkWindow *parent);
 
+void
+gnm_cell_renderer_text_copy_background_to_cairo (GtkCellRendererText *crt,
+						 cairo_t *cr);
+
 G_END_DECLS
 
 #endif /* _GNM_GUI_UTIL_H_ */
diff --git a/src/gutils.c b/src/gutils.c
index 3860dd7..03dd5f6 100644
--- a/src/gutils.c
+++ b/src/gutils.c
@@ -455,3 +455,11 @@ gnm_insert_meta_date (GODoc *doc, char const *name)
 }
 
 /* ------------------------------------------------------------------------- */
+
+gboolean
+gnm_object_get_bool (gpointer o, const char *name)
+{
+	gboolean b;
+	g_object_get (o, name, &b, NULL);
+	return b;
+}
diff --git a/src/gutils.h b/src/gutils.h
index baee340..1fe8e05 100644
--- a/src/gutils.h
+++ b/src/gutils.h
@@ -38,6 +38,8 @@ void       gnm_string_add_number (GString *buf, gnm_float d);
 
 void       gnm_insert_meta_date (GODoc *doc, char const *name);
 
+gboolean   gnm_object_get_bool (gpointer o, const char *name);
+
 G_END_DECLS
 
 #endif /* _GNM_GUTILS_H_ */
diff --git a/src/widgets/gnm-cell-combo-view.c b/src/widgets/gnm-cell-combo-view.c
index 1ceff6a..487bb2c 100644
--- a/src/widgets/gnm-cell-combo-view.c
+++ b/src/widgets/gnm-cell-combo-view.c
@@ -178,12 +178,15 @@ cb_ccombo_popup_motion (GtkWidget *widget, GdkEventMotion *event,
 			GtkTreeView *list)
 {
 	int base, dir = 0;
+	GtkAllocation la;
+
+	gtk_widget_get_allocation (GTK_WIDGET (list), &la);
 
 	gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (list)),
 			       NULL, &base);
 	if (event->y_root < base)
 		dir = -1;
-	else if (event->y_root >= (base + GTK_WIDGET(list)->allocation.height))
+	else if (event->y_root >= (base + la.height))
 		dir = 1;
 	else
 		dir = 0;
@@ -196,9 +199,12 @@ cb_ccombo_list_motion (GtkWidget *widget, GdkEventMotion *event,
 		       GtkTreeView *list)
 {
 	GtkTreePath *path;
+	GtkAllocation wa;
+
+	gtk_widget_get_allocation (widget, &wa);
+
 	if (event->x >= 0 && event->y >= 0 &&
-	    event->x < widget->allocation.width &&
-	    event->y < widget->allocation.height &&
+	    event->x < wa.width && event->y < wa.height &&
 	    gtk_tree_view_get_path_at_pos (list, event->x, event->y,
 					   &path, NULL, NULL, NULL)) {
 		gtk_tree_selection_select_path (gtk_tree_view_get_selection (list), path);
@@ -342,7 +348,9 @@ gnm_cell_combo_view_popdown (SheetObjectView *sov, guint32 activate_time)
 	gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (pane)),
 			       &root_x, &root_y);
 	if (sheet->text_is_rtl) {
-		root_x += GTK_WIDGET (pane)->allocation.width;
+		GtkAllocation pa;
+		gtk_widget_get_allocation (GTK_WIDGET (pane), &pa);
+		root_x += pa.width;
 		root_x -= scg_colrow_distance_get (scg, TRUE,
 			pane->first.col,
 			so->anchor.cell_bound.start.col + 1);
diff --git a/src/widgets/gnumeric-cell-renderer-expr-entry.c b/src/widgets/gnumeric-cell-renderer-expr-entry.c
index 5cc90d5..3390869 100644
--- a/src/widgets/gnumeric-cell-renderer-expr-entry.c
+++ b/src/widgets/gnumeric-cell-renderer-expr-entry.c
@@ -20,6 +20,7 @@
 #include "gnumeric-cell-renderer-expr-entry.h"
 #include "gnumeric-expr-entry.h"
 #include "wbc-gtk.h"
+#include <dead-kittens.h>
 
 #define GNUMERIC_CELL_RENDERER_EXPR_ENTRY_PATH "gnumeric-cell-renderer-expr-entry-path"
 
@@ -118,18 +119,22 @@ gnumeric_cell_renderer_expr_entry_start_editing (GtkCellRenderer      *cell,
   GnumericCellRendererExprEntry *celltext;
   GtkEntry *entry;
   GnmExprEntry *gentry;
+  char *text;
 
   celltext = GNUMERIC_CELL_RENDERER_EXPR_ENTRY (cell);
 
   /* If the cell isn't editable we return NULL. */
-  if (celltext->parent.parent.editable == FALSE)
+  if (gtk_cell_renderer_text_get_editable (celltext) == FALSE)
     return NULL;
 
   gentry = gnm_expr_entry_new (celltext->wbcg, FALSE);
   celltext->entry = gentry;
   entry  = gnm_expr_entry_get_entry (gentry);
 
-  gtk_entry_set_text (entry, celltext->parent.parent.text);
+  g_object_get (celltext, "text", &text, NULL);
+  gtk_entry_set_text (entry, text);
+  g_free (text);
+
   g_object_set_data_full (G_OBJECT (gentry), GNUMERIC_CELL_RENDERER_EXPR_ENTRY_PATH, g_strdup (path), g_free);
 
   gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
diff --git a/src/widgets/gnumeric-cell-renderer-text.c b/src/widgets/gnumeric-cell-renderer-text.c
index c799e6c..815387e 100644
--- a/src/widgets/gnumeric-cell-renderer-text.c
+++ b/src/widgets/gnumeric-cell-renderer-text.c
@@ -17,8 +17,9 @@
  */
 
 #include <gnumeric-config.h>
-#include <dead-kittens.h>
 #include "gnumeric-cell-renderer-text.h"
+#include <dead-kittens.h>
+#include <gui-util.h>
 
 static void gnumeric_cell_renderer_text_class_init
     (GnumericCellRendererTextClass *cell_text_class);
@@ -79,29 +80,30 @@ gnumeric_cell_renderer_text_render (GtkCellRenderer     *cell,
 			state = GTK_STATE_NORMAL;
 	}
 
-	if (celltext->background_set) {
-		cairo_set_source_rgb (cr,
-				      celltext->background.red / 65535.,
-				      celltext->background.green / 65535.,
-				      celltext->background.blue / 65535.);
+	if (gtk_cell_renderer_text_get_background_set (celltext)) {
+		int ypad;
+
+		gnm_cell_renderer_text_copy_background_to_cairo
+			(celltext, cr);
 
 		if (expose_area) {
 			gdk_cairo_rectangle (cr, background_area);
 			cairo_clip (cr);
 		}
 
+		gtk_cell_renderer_get_padding (cell, NULL, &ypad);
 		cairo_rectangle (cr,
 				 background_area->x,
-				 background_area->y + cell->ypad,
+				 background_area->y + ypad,
 				 background_area->width,
-				 background_area->height - 2 * cell->ypad);
+				 background_area->height - 2 * ypad);
 		cairo_fill (cr);
 
 		if (expose_area)
 			cairo_reset_clip (cr);
 	}
 
-	if (celltext->editable) {
+	if (gtk_cell_renderer_text_get_editable (celltext)) {
 		GtkStyle *style = gtk_widget_get_style (widget);
 		gdk_cairo_set_source_color (cr, &style->bg[frame_state]);
 		gdk_cairo_rectangle (cr, background_area);
@@ -112,7 +114,7 @@ gnumeric_cell_renderer_text_render (GtkCellRenderer     *cell,
 
 	cairo_destroy (cr);
 
-	if (celltext->foreground_set) {
+	if (gtk_cell_renderer_text_get_foreground_set (celltext)) {
 		GTK_CELL_RENDERER_CLASS (parent_class)->render
 			(cell, window, widget, background_area,
 			 cell_area, expose_area, 0);
diff --git a/src/widgets/gnumeric-cell-renderer-toggle.c b/src/widgets/gnumeric-cell-renderer-toggle.c
index f91fb11..9257ebc 100644
--- a/src/widgets/gnumeric-cell-renderer-toggle.c
+++ b/src/widgets/gnumeric-cell-renderer-toggle.c
@@ -175,6 +175,8 @@ gnumeric_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
 	gint pixbuf_height = 0;
 	gint calc_width;
 	gint calc_height;
+	int xpad, ypad;
+	gfloat xalign, yalign;
 
 	if (cellpixbuf->pixbuf)
 	{
@@ -182,8 +184,12 @@ gnumeric_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
 		pixbuf_height = gdk_pixbuf_get_height (cellpixbuf->pixbuf);
 	}
 
-	calc_width = (gint) GTK_CELL_RENDERER (cellpixbuf)->xpad * 2 + pixbuf_width;
-	calc_height = (gint) GTK_CELL_RENDERER (cellpixbuf)->ypad * 2 + pixbuf_height;
+	gtk_cell_renderer_get_padding (GTK_CELL_RENDERER (cellpixbuf),
+				       &xpad, &ypad);
+	gtk_cell_renderer_get_alignment (GTK_CELL_RENDERER (cellpixbuf),
+					 &xalign, &yalign);
+	calc_width = xpad * 2 + pixbuf_width;
+	calc_height = ypad * 2 + pixbuf_height;
 
 	if (x_offset) *x_offset = 0;
 	if (y_offset) *y_offset = 0;
@@ -192,18 +198,15 @@ gnumeric_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
 	{
 		if (x_offset)
 		{
-			*x_offset = GTK_CELL_RENDERER
-				(cellpixbuf)->xalign * (cell_area->width - calc_width -
-							(2 * GTK_CELL_RENDERER (cellpixbuf)->xpad));
-			*x_offset = MAX (*x_offset, 0) +
-				GTK_CELL_RENDERER (cellpixbuf)->xpad;
+			*x_offset = xalign * (cell_area->width - calc_width -
+					      (2 * xpad));
+			*x_offset = MAX (*x_offset, 0) + xpad;
 		}
 		if (y_offset)
 		{
-			*y_offset = GTK_CELL_RENDERER
-				(cellpixbuf)->yalign * (cell_area->height - calc_height -
-							(2 * GTK_CELL_RENDERER (cellpixbuf)->ypad));
-			*y_offset = MAX (*y_offset, 0) + GTK_CELL_RENDERER (cellpixbuf)->ypad;
+			*y_offset = yalign * (cell_area->height - calc_height -
+					      (2 * ypad));
+			*y_offset = MAX (*y_offset, 0) + ypad;
 		}
 	}
 
@@ -228,6 +231,7 @@ gnumeric_cell_renderer_toggle_render (GtkCellRenderer *cell,
 	GdkPixbuf *pixbuf;
 	GdkRectangle pix_rect;
 	GdkRectangle draw_rect;
+	int xpad, ypad;
 
 	pixbuf = cellpixbuf->pixbuf;
 
@@ -240,10 +244,12 @@ gnumeric_cell_renderer_toggle_render (GtkCellRenderer *cell,
 						&pix_rect.width,
 						&pix_rect.height);
 
+	gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
+
 	pix_rect.x += cell_area->x;
 	pix_rect.y += cell_area->y;
-	pix_rect.width -= cell->xpad * 2;
-	pix_rect.height -= cell->ypad * 2;
+	pix_rect.width -= xpad * 2;
+	pix_rect.height -= ypad * 2;
 
 	if (gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect))
 		gdk_draw_pixbuf (window, NULL, pixbuf,
diff --git a/src/widgets/gnumeric-expr-entry.c b/src/widgets/gnumeric-expr-entry.c
index 7e52ebc..88786ee 100644
--- a/src/widgets/gnumeric-expr-entry.c
+++ b/src/widgets/gnumeric-expr-entry.c
@@ -1196,7 +1196,7 @@ cb_gee_key_press_event (GtkEntry	*entry,
 
 	case GDK_Escape:
 		if (gee->is_cell_renderer) {
-			entry->editing_canceled = TRUE;
+			gtk_entry_set_editing_cancelled (entry, TRUE);
 			gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (gee));
 			gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (gee));
 			return TRUE;
diff --git a/src/widgets/widget-editable-label.c b/src/widgets/widget-editable-label.c
index 13e7189..d2c751c 100644
--- a/src/widgets/widget-editable-label.c
+++ b/src/widgets/widget-editable-label.c
@@ -168,7 +168,7 @@ el_button_press_event (GtkWidget *widget, GdkEventButton *button)
 	EditableLabel *el = EDITABLE_LABEL (widget);
 
 	if (button->window != gtk_widget_get_window (widget) &&
-	    button->window != el->entry.text_area) {
+	    button->window != gtk_entry_get_text_area (&el->entry)) {
 		/* Accept the name change */
 		el_entry_activate (GTK_ENTRY (el), NULL);
 		gdk_event_put ((GdkEvent *)button);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]