Hello, the following patch must be applied against current CVS. The code is coming directly from gedit. Printer settings are stored into $HOME/.gnome2/planner-print-config , in libgnomeprint XML format. The "which views to print" settings are not stored. I think it's possible to use libgnomeprint to store them, but I didn't try. Regards, -- Cédric Delfosse, http://cedric.freezope.org Jabber ID: cedric jabber debian net
Index: src/planner-print-dialog.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-print-dialog.c,v
retrieving revision 1.2
diff -u -r1.2 planner-print-dialog.c
--- src/planner-print-dialog.c 11 Dec 2003 10:52:46 -0000 1.2
+++ src/planner-print-dialog.c 13 Dec 2003 23:35:00 -0000
@@ -20,8 +20,13 @@
* Boston, MA 02111-1307, USA.
*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
#include <config.h>
#include <string.h>
+#include <libgnome/libgnome.h>
#include <libgnome/gnome-i18n.h>
#include <gtk/gtk.h>
#include <libgnomeprint/gnome-print.h>
@@ -32,12 +37,72 @@
#include "planner-view.h"
#include "planner-print-dialog.h"
+#define PLANNER_PRINT_CONFIG_FILE "planner-print-config"
+
static GtkWidget * print_dialog_create_page (GtkWidget *dialog,
GList *views);
static GtkNotebook * print_dialog_get_notebook (GtkWidget *dialog);
+/*
+ * Load printer configuration from a file.
+ * Return a GnomePrintConfig object containing the configuration.
+ */
+GnomePrintConfig *
+load_planner_print_config_from_file ()
+{
+ gchar *filename;
+ gboolean res;
+ gchar *contents;
+ GnomePrintConfig *planner_print_config;
+
+ filename = gnome_util_home_file (PLANNER_PRINT_CONFIG_FILE);
+
+ res = g_file_get_contents (filename, &contents, NULL, NULL);
+ g_free (filename);
+
+ if (res) {
+ planner_print_config = gnome_print_config_from_string (contents, 0);
+ g_free (contents);
+ } else planner_print_config = gnome_print_config_default ();
+
+ return planner_print_config;
+}
+
+/*
+ * Save printer configuration into a file in the .gnome2 user directory
+ */
+void
+save_planner_print_config_to_file (GnomePrintConfig *planner_print_config)
+{
+ gint fd;
+ gchar *str;
+ gint bytes;
+ gchar *filename;
+ gchar save_error[] = "planner cannot save print config file: ";
+
+ g_return_if_fail (planner_print_config != NULL);
+
+ str = gnome_print_config_to_string (planner_print_config, 0);
+ g_return_if_fail (str != NULL);
+
+ filename = gnome_util_home_file (PLANNER_PRINT_CONFIG_FILE);
+
+ fd = open (filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+ g_free (filename);
+
+ if (fd < 0) g_message ("%s can't create file '%s'.", save_error, filename);
+ else {
+ bytes = strlen (str);
+
+ /* Save the file content */
+ if (write (fd, str, bytes) == bytes) close (fd);
+ else g_message ("%s can't save config into '%s'.", save_error, filename);
+ }
+ g_free (str);
+}
+
GtkWidget *
planner_print_dialog_new (PlannerWindow *window,
GnomePrintJob *job,
Index: src/planner-print-dialog.h
===================================================================
RCS file: /cvs/gnome/planner/src/planner-print-dialog.h,v
retrieving revision 1.2
diff -u -r1.2 planner-print-dialog.h
--- src/planner-print-dialog.h 11 Dec 2003 10:52:46 -0000 1.2
+++ src/planner-print-dialog.h 13 Dec 2003 23:35:00 -0000
@@ -29,6 +29,8 @@
GList *views);
GList * planner_print_dialog_get_print_selection (GtkDialog *dialog,
gboolean *summary);
+GnomePrintConfig * load_planner_print_config_from_file (void);
+void save_planner_print_config_to_file (GnomePrintConfig *planner_print_config);
#endif /* __PLANNER_PRINT_DIALOG_H__ */
Index: src/planner-window.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-window.c,v
retrieving revision 1.2
diff -u -r1.2 planner-window.c
--- src/planner-window.c 11 Dec 2003 21:53:03 -0000 1.2
+++ src/planner-window.c 13 Dec 2003 23:35:03 -0000
@@ -770,6 +770,7 @@
PlannerWindow *window;
PlannerWindowPriv *priv;
GnomePrintJob *gpj;
+ GnomePrintConfig *config;
GtkWidget *dialog;
gint response;
gboolean summary;
@@ -783,20 +784,28 @@
window = PLANNER_WINDOW (data);
priv = window->priv;
- gpj = gnome_print_job_new (NULL);
-
+ /* Load printer settings */
+ config = load_planner_print_config_from_file ();
+ gpj = gnome_print_job_new (config);
+ gnome_print_config_unref (config);
+
dialog = planner_print_dialog_new (data, gpj, priv->views);
response = gtk_dialog_run (GTK_DIALOG (dialog));
if (response == GTK_RESPONSE_CANCEL) {
gtk_widget_destroy (dialog);
+ g_object_unref (gpj);
return;
}
else if (response == GTK_RESPONSE_DELETE_EVENT) {
+ g_object_unref (gpj);
return;
}
+ /* Save printer settings */
+ save_planner_print_config_to_file (config);
+
views = planner_print_dialog_get_print_selection (GTK_DIALOG (dialog), &summary);
if (summary) {
Attachment:
signature.asc
Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e=2E?=