[gnumeric] Avoid crashing when printing sheet object widgets from ssconvert. [#705638]



commit 6c880d2699d19fe5adeaef4f032c71d96fb77e2a
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Wed Aug 7 19:53:18 2013 -0600

    Avoid crashing when printing sheet object widgets from ssconvert. [#705638]
    
    2013-08-07  Andreas J. Guelzow <aguelzow pyrshep ca>
    
        * src/sheet-object-widget.c (sheet_widget_draw_cairo): avoid using
        gtk_offscreen_window_new without a default screen (see bugs #705638
        and #705640)

 ChangeLog                 |    6 ++++++
 NEWS                      |    1 +
 src/sheet-object-widget.c |   20 ++++++++++++--------
 3 files changed, 19 insertions(+), 8 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 60cec0c..bfb4474 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-08-07  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+       * src/sheet-object-widget.c (sheet_widget_draw_cairo): avoid using
+       gtk_offscreen_window_new without a default screen (see bugs #705638
+       and #705640)
+
 2013-08-07  Morten Welinder  <terra gnome org>
 
        * src/ssconvert.c (main): Initialize gtk+ without opening any
diff --git a/NEWS b/NEWS
index 42bf9cc..e64dddb 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ Andreas:
        * Show input messages. [#705310]
        * Fix Excel XML import. [#705223]
        * Fix documentation. [#705541]
+       * Avoid crashing when printing sheet object widgets from ssconvert. [#705638]
 
 Jean:
        * Fix text wrap inside sheet objects. [#704417]
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index 5763909..164265f 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -225,14 +225,18 @@ static void
 sheet_widget_draw_cairo (SheetObject const *so, cairo_t *cr,
                         double width, double height)
 {
-       GtkWidget *win = gtk_offscreen_window_new ();
-       GtkWidget *w = SOW_CLASS(so)->create_widget (GNM_SOW (so));
-
-       gtk_container_add (GTK_CONTAINER (win), w);
-       gtk_widget_set_size_request (w, width, height);
-       gtk_widget_show_all (win);
-       gtk_container_propagate_draw (GTK_CONTAINER (win), w, cr);
-       gtk_widget_destroy (win);
+       /* See bugs #705638 and #705640 */
+       if (NULL != gdk_screen_get_default ()) {
+               GtkWidget *win = gtk_offscreen_window_new ();
+               GtkWidget *w = SOW_CLASS(so)->create_widget (GNM_SOW (so));
+               
+               gtk_container_add (GTK_CONTAINER (win), w);
+               gtk_widget_set_size_request (w, width, height);
+               gtk_widget_show_all (win);
+               gtk_container_propagate_draw (GTK_CONTAINER (win), w, cr);
+               gtk_widget_destroy (win);
+       } else
+               g_warning (_("Because of GTK bug #705640, a sheet object widget is not being printed."));
 }
 
 static void


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