[gnumeric] stf: restore red ruler for fixed-width page.



commit 7f42b5c301fbc279c5d171bcd5be1508fa8796e4
Author: Morten Welinder <terra gnome org>
Date:   Wed Sep 14 10:44:45 2011 -0400

    stf: restore red ruler for fixed-width page.

 src/dialogs/ChangeLog               |    6 +++++
 src/dialogs/dialog-stf-fixed-page.c |   37 +++++++++++++++++++++++++++-------
 2 files changed, 35 insertions(+), 8 deletions(-)
---
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 18527bc..44418b2 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-14  Morten Welinder  <terra gnome org>
+
+	* dialog-stf-fixed-page.c (cb_treeview_draw): Renamed from
+	cb_treeview_expose.  Use supplied cairo_t.
+	(cb_treeview_draw_2): New function to work around a Gtk issue.
+
 2011-09-13  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* src/dialogs/dialog-stf-csv-page.c (csv_page_parseoptions_to_gui):
diff --git a/src/dialogs/dialog-stf-fixed-page.c b/src/dialogs/dialog-stf-fixed-page.c
index d70ff50..5864bd7 100644
--- a/src/dialogs/dialog-stf-fixed-page.c
+++ b/src/dialogs/dialog-stf-fixed-page.c
@@ -540,13 +540,12 @@ cb_treeview_motion (GtkWidget *widget,
 
 
 static gboolean
-cb_treeview_expose (GtkWidget *widget,
-		    GdkEventExpose *event,
-		    StfDialogData *pagedata)
+cb_treeview_draw (GtkWidget *widget,
+		  cairo_t *cr,
+		  StfDialogData *pagedata)
 {
 	int ruler_x = pagedata->fixed.ruler_x;
 	int height;
-	cairo_t *cr;
 	GtkAllocation a;
 
 	if (ruler_x < 0)
@@ -555,18 +554,33 @@ cb_treeview_expose (GtkWidget *widget,
 	gtk_widget_get_allocation (widget, &a);
 	height = a.height;
 
-	cr = gdk_cairo_create (event->window);
+	cairo_save (cr);
 	cairo_rectangle (cr, ruler_x, 0, ruler_x + 1, height);
 	cairo_clip (cr);
 	cairo_set_source_rgb (cr, 1.0, 0, 0);
 	cairo_move_to (cr, ruler_x, 0);
 	cairo_line_to (cr, ruler_x, height);
 	cairo_stroke (cr);
-	cairo_destroy (cr);
+	cairo_restore (cr);
 
 	return FALSE;
 }
 
+static gboolean
+cb_treeview_draw_2 (GtkWidget *widget,
+		    cairo_t *cr,
+		    StfDialogData *pagedata)
+{
+  /* Manually call default handler */
+  GTK_WIDGET_GET_CLASS (widget)->draw (widget, cr);
+
+  /* Call the would-be connect_after handler.  */
+  cb_treeview_draw (widget, cr, pagedata);
+
+  /* Abort emmission.  */
+  return TRUE;
+}
+
 /*************************************************************************************************
  * FIXED EXPORTED FUNCTIONS
  *************************************************************************************************/
@@ -617,7 +631,14 @@ stf_dialog_fixed_page_init (GtkBuilder *gui, StfDialogData *pagedata)
 	g_signal_connect (G_OBJECT (renderdata->tree_view),
 		"motion_notify_event",
 		 G_CALLBACK (cb_treeview_motion), pagedata);
+#if 0
+	/* Needs GtkTreeView bugfix in gtk+ of 20110914.  */
 	g_signal_connect_after (G_OBJECT (renderdata->tree_view),
-		"expose_event",
-		 G_CALLBACK (cb_treeview_expose), pagedata);
+		"draw",
+		 G_CALLBACK (cb_treeview_draw), pagedata);
+#else
+	g_signal_connect (G_OBJECT (renderdata->tree_view),
+		"draw",
+		 G_CALLBACK (cb_treeview_draw_2), pagedata);
+#endif
 }



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