]> git.sur5r.net Git - glabels/blob - src/prefs-dialog.c
Imported Upstream version 2.2.8
[glabels] / src / prefs-dialog.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2
3 /*
4  *  (GLABELS) Label and Business Card Creation program for GNOME
5  *
6  *  prefs-dialog.c:  Preferences dialog module
7  *
8  *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
23  */
24 #include <config.h>
25
26 #include "prefs-dialog.h"
27
28 #include <glib/gi18n.h>
29 #include <glade/glade-xml.h>
30 #include <gtk/gtktogglebutton.h>
31 #include <gtk/gtkstock.h>
32 #include <gtk/gtkcombobox.h>
33 #include <gtk/gtkspinbutton.h>
34
35 #include "prefs.h"
36 #include "hig.h"
37 #include "mygal/widget-color-combo.h"
38 #include "color.h"
39 #include "util.h"
40
41 #include "debug.h"
42
43 /*========================================================*/
44 /* Private macros and constants.                          */
45 /*========================================================*/
46
47 #define US_LETTER_ID "US-Letter"
48 #define A4_ID        "A4"
49
50 /*========================================================*/
51 /* Private types.                                         */
52 /*========================================================*/
53
54 struct _glPrefsDialogPrivate
55 {
56         GladeXML   *gui;
57
58         /* Units properties */
59         GtkWidget       *units_points_radio;
60         GtkWidget       *units_inches_radio;
61         GtkWidget       *units_mm_radio;
62
63         /* Page size properties */
64         GtkWidget       *page_size_us_letter_radio;
65         GtkWidget       *page_size_a4_radio;
66
67         /* Default text properties */
68         GtkWidget       *text_family_combo;
69         GtkWidget       *text_size_spin;
70         GtkWidget       *text_bold_toggle;
71         GtkWidget       *text_italic_toggle;
72         GtkWidget       *text_color_combo;
73         GtkWidget       *text_left_toggle;
74         GtkWidget       *text_center_toggle;
75         GtkWidget       *text_right_toggle;
76         GtkWidget       *text_line_spacing_spin;
77
78         /* Default line properties */
79         GtkWidget       *line_width_spin;
80         GtkWidget       *line_color_combo;
81
82         /* Default fill properties */
83         GtkWidget       *fill_color_combo;
84
85         /* Prevent recursion */
86         gboolean    stop_signals;
87 };
88
89 /*========================================================*/
90 /* Private globals.                                       */
91 /*========================================================*/
92
93
94 /*========================================================*/
95 /* Private function prototypes.                           */
96 /*========================================================*/
97
98 static void gl_prefs_dialog_finalize      (GObject            *object);
99 static void gl_prefs_dialog_construct     (glPrefsDialog      *dialog);
100
101 static void response_cb                   (glPrefsDialog      *dialog,
102                                            gint                response,
103                                            gpointer            user_data);
104
105 static void construct_locale_page         (glPrefsDialog      *dialog);
106 static void construct_object_page         (glPrefsDialog      *dialog);
107
108 static void align_toggle_cb               (GtkToggleButton    *toggle,
109                                            glPrefsDialog      *dialog);
110                                                                                 
111 static void update_locale_page_from_prefs (glPrefsDialog      *dialog);
112 static void update_object_page_from_prefs (glPrefsDialog      *dialog);
113
114 static void update_prefs_from_locale_page (glPrefsDialog      *dialog);
115 static void update_prefs_from_object_page (glPrefsDialog      *dialog);
116
117 \f
118 /*****************************************************************************/
119 /* Boilerplate object stuff.                                                 */
120 /*****************************************************************************/
121 G_DEFINE_TYPE (glPrefsDialog, gl_prefs_dialog, GTK_TYPE_DIALOG);
122
123 static void
124 gl_prefs_dialog_class_init (glPrefsDialogClass *class)
125 {
126         GObjectClass *object_class = G_OBJECT_CLASS (class);
127
128         gl_debug (DEBUG_PREFS, "");
129         
130         gl_prefs_dialog_parent_class = g_type_class_peek_parent (class);
131
132         object_class->finalize = gl_prefs_dialog_finalize;      
133 }
134
135 static void
136 gl_prefs_dialog_init (glPrefsDialog *dialog)
137 {
138         gl_debug (DEBUG_PREFS, "START");
139
140         dialog->priv = g_new0 (glPrefsDialogPrivate, 1);
141
142         dialog->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "prefs-dialog.glade",
143                                         "prefs_notebook",
144                                         NULL);
145
146         if (!dialog->priv->gui)
147         {
148                 g_critical ("Could not open prefs-dialog.glade. gLabels may not be installed correctly!");
149                 return;
150         }
151
152         gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD2);
153
154         gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
155         gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
156         gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
157
158         g_signal_connect(G_OBJECT (dialog), "response",
159                          G_CALLBACK (response_cb), NULL);
160
161         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
162         gtk_window_set_title (GTK_WINDOW (dialog), _("gLabels Preferences"));
163         gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
164
165         gl_debug (DEBUG_PREFS, "END");
166 }
167
168 static void 
169 gl_prefs_dialog_finalize (GObject *object)
170 {
171         glPrefsDialog* dialog = GL_PREFS_DIALOG (object);
172         
173         gl_debug (DEBUG_PREFS, "START");
174
175         g_return_if_fail (object != NULL);
176         g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
177         g_return_if_fail (dialog->priv != NULL);
178
179         if (dialog->priv->gui)
180         {
181                 g_object_unref (G_OBJECT (dialog->priv->gui));
182         }
183         g_free (dialog->priv);
184
185         G_OBJECT_CLASS (gl_prefs_dialog_parent_class)->finalize (object);
186
187         gl_debug (DEBUG_PREFS, "END");
188 }
189
190 /*****************************************************************************/
191 /* NEW preferences dialog.                                                   */
192 /*****************************************************************************/
193 GtkWidget*
194 gl_prefs_dialog_new (GtkWindow *parent)
195 {
196         GtkWidget *dialog;
197
198         gl_debug (DEBUG_PREFS, "START");
199         gl_debug (DEBUG_PREFS, "page size = \"%s\"", gl_prefs->default_page_size);
200
201         dialog = GTK_WIDGET (g_object_new (GL_TYPE_PREFS_DIALOG, NULL));
202
203         if (parent)
204                 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
205         
206         gl_prefs_dialog_construct (GL_PREFS_DIALOG(dialog));
207
208
209         gl_debug (DEBUG_PREFS, "END");
210
211         return dialog;
212 }
213
214 /*---------------------------------------------------------------------------*/
215 /* PRIVATE.  Construct composite widget.                                     */
216 /*---------------------------------------------------------------------------*/
217 static void
218 gl_prefs_dialog_construct (glPrefsDialog *dialog)
219 {
220         GtkWidget *notebook;
221
222         g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
223         g_return_if_fail (dialog->priv != NULL);
224
225         notebook = glade_xml_get_widget (dialog->priv->gui, "prefs_notebook");
226         gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook, FALSE, FALSE, 0);
227
228         construct_locale_page (dialog);
229         construct_object_page (dialog);
230
231         update_locale_page_from_prefs (dialog);
232         update_object_page_from_prefs (dialog);
233
234         gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);   
235 }
236
237 /*---------------------------------------------------------------------------*/
238 /* PRIVATE.  "Response" callback.                                            */
239 /*---------------------------------------------------------------------------*/
240 static void
241 response_cb (glPrefsDialog *dialog,
242              gint          response,
243              gpointer      user_data)
244 {
245         gl_debug (DEBUG_VIEW, "START");
246
247         g_return_if_fail(dialog != NULL);
248         g_return_if_fail(GTK_IS_DIALOG(dialog));
249
250         switch(response) {
251         case GTK_RESPONSE_CLOSE:
252                 gtk_widget_hide (GTK_WIDGET(dialog));
253                 break;
254         case GTK_RESPONSE_DELETE_EVENT:
255                 break;
256         default:
257                 g_print ("response = %d", response);
258                 g_assert_not_reached ();
259         }
260
261         gl_debug (DEBUG_VIEW, "END");
262 }
263
264 /*--------------------------------------------------------------------------*/
265 /* PRIVATE.  Build Locale Properties Notebook Tab                           */
266 /*--------------------------------------------------------------------------*/
267 static void
268 construct_locale_page (glPrefsDialog *dialog)
269 {
270
271         dialog->priv->units_points_radio =
272                 glade_xml_get_widget (dialog->priv->gui, "units_points_radio");
273
274         dialog->priv->units_inches_radio =
275                 glade_xml_get_widget (dialog->priv->gui, "units_inches_radio");
276
277         dialog->priv->units_mm_radio =
278                 glade_xml_get_widget (dialog->priv->gui, "units_mm_radio");
279
280         dialog->priv->page_size_us_letter_radio =
281                 glade_xml_get_widget (dialog->priv->gui, "page_size_us_letter_radio");
282
283         dialog->priv->page_size_a4_radio =
284                 glade_xml_get_widget (dialog->priv->gui, "page_size_a4_radio");
285
286         g_signal_connect_swapped (
287                 G_OBJECT(dialog->priv->units_points_radio),
288                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
289         g_signal_connect_swapped (
290                 G_OBJECT(dialog->priv->units_inches_radio),
291                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
292         g_signal_connect_swapped (
293                 G_OBJECT(dialog->priv->units_mm_radio),
294                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
295         g_signal_connect_swapped (
296                 G_OBJECT(dialog->priv->page_size_us_letter_radio),
297                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
298         g_signal_connect_swapped (
299                 G_OBJECT(dialog->priv->page_size_a4_radio),
300                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
301 }
302
303 /*--------------------------------------------------------------------------*/
304 /* PRIVATE.  Build Default Object Properties Notebook Tab                   */
305 /*--------------------------------------------------------------------------*/
306 static void
307 construct_object_page (glPrefsDialog *dialog)
308 {
309         GList    *family_names;
310
311         dialog->priv->text_family_combo =
312                 glade_xml_get_widget (dialog->priv->gui, "text_family_combo");
313         dialog->priv->text_size_spin =
314                 glade_xml_get_widget (dialog->priv->gui, "text_size_spin");
315         dialog->priv->text_bold_toggle =
316                 glade_xml_get_widget (dialog->priv->gui, "text_bold_toggle");
317         dialog->priv->text_italic_toggle =
318                 glade_xml_get_widget (dialog->priv->gui, "text_italic_toggle");
319         dialog->priv->text_color_combo =
320                 glade_xml_get_widget (dialog->priv->gui, "text_color_combo");
321         dialog->priv->text_left_toggle =
322                 glade_xml_get_widget (dialog->priv->gui, "text_left_toggle");
323         dialog->priv->text_center_toggle =
324                 glade_xml_get_widget (dialog->priv->gui, "text_center_toggle");
325         dialog->priv->text_right_toggle =
326                 glade_xml_get_widget (dialog->priv->gui, "text_right_toggle");
327         dialog->priv->text_line_spacing_spin =
328                 glade_xml_get_widget (dialog->priv->gui, "text_line_spacing_spin");
329
330         dialog->priv->line_width_spin =
331                 glade_xml_get_widget (dialog->priv->gui, "line_width_spin");
332         dialog->priv->line_color_combo =
333                 glade_xml_get_widget (dialog->priv->gui, "line_color_combo");
334
335         dialog->priv->fill_color_combo =
336                 glade_xml_get_widget (dialog->priv->gui, "fill_color_combo");
337
338         gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->text_family_combo));
339
340         /* Load family names */
341         family_names = gl_util_get_font_family_list ();
342         gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->text_family_combo),
343                                        family_names);
344                                                                                 
345
346         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_family_combo),
347                                   "changed",
348                                   G_CALLBACK(update_prefs_from_object_page),
349                                   G_OBJECT(dialog));
350         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_size_spin),
351                                   "changed",
352                                   G_CALLBACK(update_prefs_from_object_page),
353                                   G_OBJECT(dialog));
354         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_bold_toggle),
355                                   "toggled",
356                                   G_CALLBACK(update_prefs_from_object_page),
357                                   G_OBJECT(dialog));
358         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_italic_toggle),
359                                   "toggled",
360                                   G_CALLBACK(update_prefs_from_object_page),
361                                   G_OBJECT(dialog));
362         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_color_combo),
363                                   "color_changed",
364                                   G_CALLBACK(update_prefs_from_object_page),
365                                   G_OBJECT(dialog));
366
367         g_signal_connect (G_OBJECT(dialog->priv->text_left_toggle),
368                           "toggled",
369                           G_CALLBACK(align_toggle_cb),
370                           G_OBJECT(dialog));
371         g_signal_connect (G_OBJECT(dialog->priv->text_center_toggle),
372                           "toggled",
373                           G_CALLBACK(align_toggle_cb),
374                           G_OBJECT(dialog));
375         g_signal_connect (G_OBJECT(dialog->priv->text_right_toggle),
376                           "toggled",
377                           G_CALLBACK(align_toggle_cb),
378                           G_OBJECT(dialog));
379
380         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_line_spacing_spin),
381                                   "changed",
382                                   G_CALLBACK(update_prefs_from_object_page),
383                                   G_OBJECT(dialog));
384
385         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_width_spin),
386                                   "changed",
387                                   G_CALLBACK(update_prefs_from_object_page),
388                                   G_OBJECT(dialog));
389         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_color_combo),
390                                   "color_changed",
391                                   G_CALLBACK(update_prefs_from_object_page),
392                                   G_OBJECT(dialog));
393
394         g_signal_connect_swapped (G_OBJECT(dialog->priv->fill_color_combo),
395                                   "color_changed",
396                                   G_CALLBACK(update_prefs_from_object_page),
397                                   G_OBJECT(dialog));
398 }
399
400
401 /*--------------------------------------------------------------------------*/
402 /* PRIVATE.  Alignment togglebutton callback.                               */
403 /*--------------------------------------------------------------------------*/
404 static void
405 align_toggle_cb (GtkToggleButton *toggle,
406                  glPrefsDialog   *dialog)
407 {
408         if (gtk_toggle_button_get_active (toggle))
409         {
410   
411                 if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_left_toggle))
412                 {
413                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
414                                                       (dialog->priv->text_center_toggle),
415                                                       FALSE);
416                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
417                                                       (dialog->priv->text_right_toggle),
418                                                       FALSE);
419                 }
420                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_center_toggle))
421                 {
422                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
423                                                       (dialog->priv->text_left_toggle),
424                                                       FALSE);
425                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
426                                                       (dialog->priv->text_right_toggle),
427                                                       FALSE);
428                 }
429                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_right_toggle))
430                 {
431                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
432                                                       (dialog->priv->text_left_toggle),
433                                                       FALSE);
434                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
435                                                       (dialog->priv->text_center_toggle),
436                                                       FALSE);
437                 }
438                                                                                 
439                 update_prefs_from_object_page (dialog);
440         }
441                                                                                 
442 }
443                                                                                 
444
445 /*--------------------------------------------------------------------------*/
446 /* PRIVATE.  Update locale page widgets from current prefs.                 */
447 /*--------------------------------------------------------------------------*/
448 static void
449 update_locale_page_from_prefs (glPrefsDialog *dialog)
450 {
451         dialog->priv->stop_signals = TRUE;
452
453         switch (gl_prefs->units) {
454         case LGL_UNITS_POINT:
455                 gtk_toggle_button_set_active (
456                         GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio),
457                         TRUE);
458                 break;
459         case LGL_UNITS_INCH:
460                 gtk_toggle_button_set_active (
461                         GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio),
462                         TRUE);
463                 break;
464         case LGL_UNITS_MM:
465                 gtk_toggle_button_set_active (
466                         GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio),
467                         TRUE);
468                 break;
469         default:
470                 g_message ("Illegal units");    /* Should not happen */
471                 break;
472         }
473
474         if ( g_strcasecmp(gl_prefs->default_page_size, US_LETTER_ID) == 0)
475         {
476                 gtk_toggle_button_set_active (
477                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio), TRUE);
478         }
479         else if ( g_strcasecmp(gl_prefs->default_page_size, A4_ID) == 0)
480         {
481                 gtk_toggle_button_set_active (
482                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio), TRUE);
483         }
484         else
485         {
486                 g_message ("Unknown default page size"); /* Shouldn't happen */
487         }
488
489         dialog->priv->stop_signals = FALSE;
490 }
491
492 /*--------------------------------------------------------------------------*/
493 /* PRIVATE.  Update object page widgets from current prefs.                 */
494 /*--------------------------------------------------------------------------*/
495 static void
496 update_object_page_from_prefs (glPrefsDialog *dialog)
497 {
498         GList    *family_names;
499         gchar    *good_font_family;
500         GdkColor *gdk_color;
501  
502         dialog->priv->stop_signals = TRUE;
503
504
505         /* Make sure we have a valid font family.  if not provide a good default. */
506         family_names = gl_util_get_font_family_list ();
507         if (g_list_find_custom (family_names,
508                                 gl_prefs->default_font_family,
509                                 (GCompareFunc)g_utf8_collate))
510         {
511                 good_font_family = g_strdup (gl_prefs->default_font_family);
512         }
513         else
514         {
515                 if (family_names != NULL)
516                 {
517                         good_font_family = g_strdup (family_names->data); /* 1st entry */
518                 }
519                 else
520                 {
521                         good_font_family = NULL;
522                 }
523         }
524         gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo),
525                                            good_font_family);
526         g_free (good_font_family);
527
528         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_size_spin),
529                                    gl_prefs->default_font_size);
530  
531         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle),
532                                       (gl_prefs->default_font_weight == PANGO_WEIGHT_BOLD));
533  
534         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_italic_toggle),
535                                       gl_prefs->default_font_italic_flag);
536  
537         gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
538         color_combo_set_color (COLOR_COMBO(dialog->priv->text_color_combo), gdk_color);
539         g_free (gdk_color);
540
541         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle),
542                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_LEFT));
543         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle),
544                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_CENTER));
545         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle),
546                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_RIGHT));
547
548         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_line_spacing_spin),
549                                    gl_prefs->default_text_line_spacing);
550
551         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->line_width_spin),
552                                    gl_prefs->default_line_width);
553  
554         gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
555         color_combo_set_color (COLOR_COMBO(dialog->priv->line_color_combo), gdk_color);
556         g_free (gdk_color);
557
558
559         gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
560         color_combo_set_color (COLOR_COMBO(dialog->priv->fill_color_combo), gdk_color);
561         g_free (gdk_color);
562
563
564         dialog->priv->stop_signals = FALSE;
565 }
566
567 /*--------------------------------------------------------------------------*/
568 /* PRIVATE.  Update prefs from current state of locale page widgets.        */
569 /*--------------------------------------------------------------------------*/
570 static void
571 update_prefs_from_locale_page (glPrefsDialog *dialog)
572 {
573         if (dialog->priv->stop_signals) return;
574
575         if (gtk_toggle_button_get_active (
576                     GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio)))
577         {
578                 gl_prefs->units = LGL_UNITS_POINT;
579         }
580         if (gtk_toggle_button_get_active (
581                     GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio)))
582         {
583                 gl_prefs->units = LGL_UNITS_INCH;
584         }
585         if (gtk_toggle_button_get_active (
586                     GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio)))
587         {
588                 gl_prefs->units = LGL_UNITS_MM;
589         }
590
591         if (gtk_toggle_button_get_active (
592                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio)))
593         {
594                 g_free (gl_prefs->default_page_size);
595                 gl_prefs->default_page_size = g_strdup (US_LETTER_ID);
596         }
597         if (gtk_toggle_button_get_active (
598                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio)))
599         {
600                 g_free (gl_prefs->default_page_size);
601                 gl_prefs->default_page_size = g_strdup (A4_ID);
602         }
603
604         gl_prefs_model_save_settings (gl_prefs);
605 }
606
607 /*--------------------------------------------------------------------------*/
608 /* PRIVATE.  Update prefs from current state of object page widgets.        */
609 /*--------------------------------------------------------------------------*/
610 static void
611 update_prefs_from_object_page (glPrefsDialog *dialog)
612 {
613         GdkColor *gdk_color;
614         gboolean  is_default;
615
616         if (dialog->priv->stop_signals) return;
617
618         g_free (gl_prefs->default_font_family);
619         gl_prefs->default_font_family =
620                 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo));
621         gl_prefs->default_font_size =
622                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_size_spin));
623
624         if (gtk_toggle_button_get_active
625             (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle)))
626         {
627                 gl_prefs->default_font_weight = PANGO_WEIGHT_BOLD;
628         }
629         else
630         {
631                 gl_prefs->default_font_weight = PANGO_WEIGHT_NORMAL;
632         }
633
634         gl_prefs->default_font_italic_flag =
635                 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
636                                               (dialog->priv->text_italic_toggle));
637
638         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->text_color_combo),
639                                            &is_default);
640         if (!is_default)
641         {
642                 gl_prefs->default_text_color = gl_color_from_gdk_color (gdk_color);
643         }
644
645         if (gtk_toggle_button_get_active
646             (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle)))
647         {
648                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
649         }
650         else if (gtk_toggle_button_get_active
651                  (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle)))
652         {
653                 gl_prefs->default_text_alignment = GTK_JUSTIFY_RIGHT;
654         }
655         else if (gtk_toggle_button_get_active
656                  (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle)))
657         {
658                 gl_prefs->default_text_alignment = GTK_JUSTIFY_CENTER;
659         }
660         else
661         {
662                 /* Should not happen. */
663                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
664         }
665                                                                                 
666
667         gl_prefs->default_text_line_spacing =
668                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_line_spacing_spin));
669
670         gl_prefs->default_line_width =
671                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->line_width_spin));
672
673         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->line_color_combo),
674                                            &is_default);
675         if (!is_default)
676         {
677                 gl_prefs->default_line_color = gl_color_from_gdk_color (gdk_color);
678         }
679
680
681         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->fill_color_combo),
682                                            &is_default);
683         if (!is_default)
684         {
685                 gl_prefs->default_fill_color = gl_color_from_gdk_color (gdk_color);
686         }
687
688         gl_prefs_model_save_settings (gl_prefs);
689 }
690
691
692