diff --git a/src/gnome-utils/gnc-html.c b/src/gnome-utils/gnc-html.c
index eccde30f06..ad7d7733f1 100644
--- a/src/gnome-utils/gnc-html.c
+++ b/src/gnome-utils/gnc-html.c
@@ -107,6 +107,12 @@ static char error_404_title[] = N_("Not found");
static char error_404_body[] =
N_("The specified URL could not be loaded.");
+#ifdef GTKHTML_USES_GTKPRINT
+static GtkPrintSettings *print_settings = NULL;
+G_LOCK_DEFINE_STATIC(print_settings);
+#endif
+
+
static char *
extract_machine_name(const gchar * path)
{
@@ -1210,8 +1216,7 @@ gnc_html_export(gnc_html * html, const char *filepath)
return TRUE;
}
-#if GTKHTML_USES_GTKPRINT
-
+#ifdef GTKHTML_USES_GTKPRINT
static void
draw_page_cb(GtkPrintOperation *operation, GtkPrintContext *context,
gint page_nr, gpointer user_data)
@@ -1228,15 +1233,25 @@ gnc_html_print(gnc_html *html)
GtkPrintOperationResult res;
print = gtk_print_operation_new();
- gnc_restore_print_settings(print);
+
+ G_LOCK(print_settings);
+ if (print_settings)
+ gtk_print_operation_set_print_settings(print, print_settings);
+ G_UNLOCK(print_settings);
+
gtk_print_operation_set_n_pages(print, 1);
g_signal_connect(print, "draw_page", G_CALLBACK(draw_page_cb), html);
res = gtk_print_operation_run(print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
GTK_WINDOW(html->window), NULL);
- if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
- gnc_save_print_settings(print);
+ if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
+ G_LOCK(print_settings);
+ if (print_settings)
+ g_object_unref(print_settings);
+ print_settings = g_object_ref(gtk_print_operation_get_print_settings(print));
+ G_UNLOCK(print_settings);
+ }
g_object_unref(print);
}
diff --git a/src/gnome-utils/print-session.c b/src/gnome-utils/print-session.c
index 4e9d513522..43b73a425f 100644
--- a/src/gnome-utils/print-session.c
+++ b/src/gnome-utils/print-session.c
@@ -105,35 +105,3 @@ gnc_print_session_done(PrintSession * ps)
break;
}
}
-
-#ifdef HAVE_GTK_2_10
-
-static GtkPrintSettings *print_settings = NULL;
-G_LOCK_DEFINE_STATIC(print_settings);
-
-void
-gnc_save_print_settings(GtkPrintOperation *print)
-{
- g_return_if_fail(print);
-
- G_LOCK(print_settings);
- if (print_settings)
- g_object_unref(print_settings);
-
- print_settings = g_object_ref(gtk_print_operation_get_print_settings(print));
- G_UNLOCK(print_settings);
-}
-
-void
-gnc_restore_print_settings(GtkPrintOperation *print)
-{
- g_return_if_fail(print);
-
- G_LOCK(print_settings);
- if (print_settings)
- gtk_print_operation_set_print_settings(print, print_settings);
-
- G_UNLOCK(print_settings);
-}
-
-#endif /* HAVE_GTK_2_10 */
diff --git a/src/gnome-utils/print-session.h b/src/gnome-utils/print-session.h
index 3d010ac42b..c3afd0da30 100644
--- a/src/gnome-utils/print-session.h
+++ b/src/gnome-utils/print-session.h
@@ -82,23 +82,6 @@ void gnc_print_session_destroy(PrintSession * ps);
*/
void gnc_print_session_done(PrintSession * ps);
-
-#if HAVE_GTK_2_10
-/** Get the print settings of a given GtkPrintOperation and store them in a
- * static variable. Previous values will be overwritten.
- *
- * @param print A pointer to a print operation.
- */
-void gnc_save_print_settings(GtkPrintOperation *print);
-
-/** After a previous call to gnc_save_print_settings, set the print settings of a
- * given GtkPrintOperation to the stored value. Otherwise, do nothing.
- *
- * @param print A pointer to a print operation.
- */
-void gnc_restore_print_settings(GtkPrintOperation *print);
-#endif
-
/** @} */
/** @} */
diff --git a/src/gnome/dialog-print-check.c b/src/gnome/dialog-print-check.c
index c666f31f25..bc2f072e9e 100644
--- a/src/gnome/dialog-print-check.c
+++ b/src/gnome/dialog-print-check.c
@@ -110,6 +110,8 @@ typedef enum format_combo_col_t {
#if USE_GTKPRINT
# define GncPrintContext GtkPrintContext
+static GtkPrintSettings *print_settings = NULL;
+G_LOCK_DEFINE_STATIC(print_settings);
#else
# define GncPrintContext GnomePrintContext
# define GNOMEPRINT_CLIP_EXTRA 2
@@ -1909,7 +1911,11 @@ gnc_ui_print_check_dialog_ok_cb(PrintCheckDialog * pcd)
print = gtk_print_operation_new();
- gnc_restore_print_settings(print);
+ G_LOCK(print_settings);
+ if (print_settings)
+ gtk_print_operation_set_print_settings(print, print_settings);
+ G_UNLOCK(print_settings);
+
gtk_print_operation_set_unit(print, GTK_UNIT_POINTS);
gtk_print_operation_set_use_full_page(print, TRUE);
g_signal_connect(print, "begin_print", G_CALLBACK(begin_print), NULL);
@@ -1919,8 +1925,13 @@ gnc_ui_print_check_dialog_ok_cb(PrintCheckDialog * pcd)
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
pcd->caller_window, NULL);
- if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
- gnc_save_print_settings(print);
+ if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
+ G_LOCK(print_settings);
+ if (print_settings)
+ g_object_unref(print_settings);
+ print_settings = g_object_ref(gtk_print_operation_get_print_settings(print));
+ G_UNLOCK(print_settings);
+ }
g_object_unref(print);
}