~ubuntu-branches/ubuntu/oneiric/evolution/oneiric-proposed

« back to all changes in this revision

Viewing changes to .pc/evo_fbee43e_to_f4505a2.patch/modules/mail/em-composer-prefs.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Trudel-Lapierre
  • Date: 2011-08-18 11:10:01 UTC
  • mfrom: (1.1.83 upstream)
  • Revision ID: james.westby@ubuntu.com-20110818111001-559uzyuqsoyj7xjg
Tags: 3.1.5-0ubuntu1
* New upstream release.
* debian/control: bump e-d-s Build-Depends to 3.1.5.
* debian/patches/03_lpi.patch: refreshed.
* debian/patches/11_remove_upstream_submit_bugreport.patch: refreshed.
* debian/patches/bogofilter_init_903b8e6.patch,
  debian/patches/evo_fbee43e_to_f4505a2.patch,
  debian/patches/spamassassin_init_4fc04af.patch: dropped, included upstream.
* debian/patches/spamd_sbin_path.patch: correct the path to spamd as
  /usr/sbin/spamd, which is the correct path in Ubuntu. (LP: #828693)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * This program is free software; you can redistribute it and/or
3
 
 * modify it under the terms of the GNU Lesser General Public
4
 
 * License as published by the Free Software Foundation; either
5
 
 * version 2 of the License, or (at your option) version 3.
6
 
 *
7
 
 * This program is distributed in the hope that it will be useful,
8
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10
 
 * Lesser General Public License for more details.
11
 
 *
12
 
 * You should have received a copy of the GNU Lesser General Public
13
 
 * License along with the program; if not, see <http://www.gnu.org/licenses/>
14
 
 *
15
 
 *
16
 
 * Authors:
17
 
 *              Jeffrey Stedfast <fejj@ximian.com>
18
 
 *
19
 
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
20
 
 *
21
 
 */
22
 
 
23
 
#ifdef HAVE_CONFIG_H
24
 
#include <config.h>
25
 
#endif
26
 
 
27
 
#include <string.h>
28
 
#include <sys/types.h>
29
 
#include <sys/stat.h>
30
 
#include <unistd.h>
31
 
#include <fcntl.h>
32
 
 
33
 
#include "e-util/e-signature-utils.h"
34
 
#include "e-util/gconf-bridge.h"
35
 
 
36
 
#include "em-composer-prefs.h"
37
 
#include "composer/e-msg-composer.h"
38
 
#include "shell/e-shell-utils.h"
39
 
 
40
 
#include <glib/gi18n.h>
41
 
#include <glib/gstdio.h>
42
 
 
43
 
#include <gtkhtml/gtkhtml.h>
44
 
#include <editor/gtkhtml-spell-language.h>
45
 
 
46
 
#include "e-util/e-util.h"
47
 
#include "e-util/e-util-private.h"
48
 
#include "widgets/misc/e-charset-combo-box.h"
49
 
#include "widgets/misc/e-signature-editor.h"
50
 
#include "widgets/misc/e-signature-manager.h"
51
 
#include "widgets/misc/e-signature-preview.h"
52
 
 
53
 
#include "em-config.h"
54
 
#include "em-folder-selection-button.h"
55
 
 
56
 
G_DEFINE_TYPE (
57
 
        EMComposerPrefs,
58
 
        em_composer_prefs,
59
 
        GTK_TYPE_VBOX)
60
 
 
61
 
static gboolean
62
 
transform_old_to_new_reply_style (GBinding *binding,
63
 
                                  const GValue *source_value,
64
 
                                  GValue *target_value,
65
 
                                  gpointer user_data)
66
 
{
67
 
        gboolean success = TRUE;
68
 
 
69
 
        /* XXX This is the kind of legacy crap we wind up
70
 
         *     with when we don't migrate things properly. */
71
 
 
72
 
        switch (g_value_get_int (source_value)) {
73
 
                case 0:  /* Quoted: 0 -> 2 */
74
 
                        g_value_set_int (target_value, 2);
75
 
                        break;
76
 
 
77
 
                case 1:  /* Do Not Quote: 1 -> 3 */
78
 
                        g_value_set_int (target_value, 3);
79
 
                        break;
80
 
 
81
 
                case 2:  /* Attach: 2 -> 0 */
82
 
                        g_value_set_int (target_value, 0);
83
 
                        break;
84
 
 
85
 
                case 3:  /* Outlook: 3 -> 1 */
86
 
                        g_value_set_int (target_value, 1);
87
 
                        break;
88
 
 
89
 
                default:
90
 
                        success = FALSE;
91
 
                        break;
92
 
        }
93
 
 
94
 
        return success;
95
 
}
96
 
 
97
 
static gboolean
98
 
transform_new_to_old_reply_style (GBinding *binding,
99
 
                                  const GValue *source_value,
100
 
                                  GValue *target_value,
101
 
                                  gpointer user_data)
102
 
{
103
 
        gboolean success = TRUE;
104
 
 
105
 
        /* XXX This is the kind of legacy crap we wind up
106
 
         *     with when we don't migrate things properly. */
107
 
 
108
 
        switch (g_value_get_int (source_value)) {
109
 
                case 0:  /* Attach: 0 -> 2 */
110
 
                        g_value_set_int (target_value, 2);
111
 
                        break;
112
 
 
113
 
                case 1:  /* Outlook: 1 -> 3 */
114
 
                        g_value_set_int (target_value, 3);
115
 
                        break;
116
 
 
117
 
                case 2:  /* Quoted: 2 -> 0 */
118
 
                        g_value_set_int (target_value, 0);
119
 
                        break;
120
 
 
121
 
                case 3:  /* Do Not Quote: 3 -> 1 */
122
 
                        g_value_set_int (target_value, 1);
123
 
                        break;
124
 
 
125
 
                default:
126
 
                        success = FALSE;
127
 
                        break;
128
 
        }
129
 
 
130
 
        return success;
131
 
}
132
 
 
133
 
static void
134
 
composer_prefs_finalize (GObject *object)
135
 
{
136
 
        EMComposerPrefs *prefs = (EMComposerPrefs *) object;
137
 
 
138
 
        g_object_unref (prefs->builder);
139
 
 
140
 
        /* Chain up to parent's finalize() method. */
141
 
        G_OBJECT_CLASS (em_composer_prefs_parent_class)->finalize (object);
142
 
}
143
 
 
144
 
static void
145
 
em_composer_prefs_class_init (EMComposerPrefsClass *class)
146
 
{
147
 
        GObjectClass *object_class;
148
 
 
149
 
        object_class = G_OBJECT_CLASS (class);
150
 
        object_class->finalize = composer_prefs_finalize;
151
 
}
152
 
 
153
 
static void
154
 
em_composer_prefs_init (EMComposerPrefs *prefs)
155
 
{
156
 
}
157
 
 
158
 
static void
159
 
spell_language_toggled_cb (GtkCellRendererToggle *renderer,
160
 
                           const gchar *path_string,
161
 
                           EMComposerPrefs *prefs)
162
 
{
163
 
        GtkTreeModel *model;
164
 
        GtkTreePath *path;
165
 
        GtkTreeIter iter;
166
 
        gboolean active;
167
 
        gboolean valid;
168
 
 
169
 
        model = prefs->language_model;
170
 
 
171
 
        /* Convert the path string to a tree iterator. */
172
 
        path = gtk_tree_path_new_from_string (path_string);
173
 
        valid = gtk_tree_model_get_iter (model, &iter, path);
174
 
        gtk_tree_path_free (path);
175
 
        g_return_if_fail (valid);
176
 
 
177
 
        /* Toggle the active state. */
178
 
        gtk_tree_model_get (model, &iter, 0, &active, -1);
179
 
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, !active, -1);
180
 
}
181
 
 
182
 
static void
183
 
spell_language_save (EMComposerPrefs *prefs)
184
 
{
185
 
        GList *spell_languages = NULL;
186
 
        GtkTreeModel *model;
187
 
        GtkTreeIter iter;
188
 
        gboolean valid;
189
 
 
190
 
        model = prefs->language_model;
191
 
 
192
 
        /* Build a list of active spell languages. */
193
 
        valid = gtk_tree_model_get_iter_first (model, &iter);
194
 
        while (valid) {
195
 
                const GtkhtmlSpellLanguage *language;
196
 
                gboolean active;
197
 
 
198
 
                gtk_tree_model_get (
199
 
                        model, &iter, 0, &active, 2, &language, -1);
200
 
 
201
 
                if (active)
202
 
                        spell_languages = g_list_prepend (
203
 
                                spell_languages, (gpointer) language);
204
 
 
205
 
                valid = gtk_tree_model_iter_next (model, &iter);
206
 
        }
207
 
        spell_languages = g_list_reverse (spell_languages);
208
 
 
209
 
        /* Update the GConf value. */
210
 
        e_save_spell_languages (spell_languages);
211
 
 
212
 
        g_list_free (spell_languages);
213
 
}
214
 
 
215
 
static void
216
 
spell_setup (EMComposerPrefs *prefs)
217
 
{
218
 
        const GList *available_languages;
219
 
        GList *active_languages;
220
 
        GtkListStore *store;
221
 
 
222
 
        store = GTK_LIST_STORE (prefs->language_model);
223
 
        available_languages = gtkhtml_spell_language_get_available ();
224
 
 
225
 
        active_languages = e_load_spell_languages ();
226
 
 
227
 
        /* Populate the GtkListStore. */
228
 
        while (available_languages != NULL) {
229
 
                const GtkhtmlSpellLanguage *language;
230
 
                GtkTreeIter tree_iter;
231
 
                const gchar *name;
232
 
                gboolean active;
233
 
 
234
 
                language = available_languages->data;
235
 
                name = gtkhtml_spell_language_get_name (language);
236
 
                active = (g_list_find (active_languages, language) != NULL);
237
 
 
238
 
                gtk_list_store_append (store, &tree_iter);
239
 
 
240
 
                gtk_list_store_set (
241
 
                        store, &tree_iter,
242
 
                        0, active, 1, name, 2, language, -1);
243
 
 
244
 
                available_languages = available_languages->next;
245
 
        }
246
 
 
247
 
        g_list_free (active_languages);
248
 
}
249
 
 
250
 
static GtkWidget *
251
 
emcp_widget_glade (EConfig *ec,
252
 
                   EConfigItem *item,
253
 
                   GtkWidget *parent,
254
 
                   GtkWidget *old,
255
 
                   gint position,
256
 
                   gpointer data)
257
 
{
258
 
        EMComposerPrefs *prefs = data;
259
 
 
260
 
        return e_builder_get_widget (prefs->builder, item->label);
261
 
}
262
 
 
263
 
/* plugin meta-data */
264
 
static EMConfigItem emcp_items[] = {
265
 
 
266
 
        { E_CONFIG_BOOK,
267
 
          (gchar *) "",
268
 
          (gchar *) "composer_toplevel",
269
 
          emcp_widget_glade },
270
 
 
271
 
        { E_CONFIG_PAGE,
272
 
          (gchar *) "00.general",
273
 
          (gchar *) "vboxComposerGeneral",
274
 
          emcp_widget_glade },
275
 
 
276
 
        { E_CONFIG_SECTION,
277
 
          (gchar *) "00.general/00.behavior",
278
 
          (gchar *) "default-behavior-vbox",
279
 
          emcp_widget_glade },
280
 
 
281
 
        { E_CONFIG_PAGE,
282
 
          (gchar *) "10.signatures",
283
 
          (gchar *) "vboxSignatures",
284
 
          emcp_widget_glade },
285
 
 
286
 
        /* signature/signatures and signature/preview parts not usable */
287
 
 
288
 
        { E_CONFIG_PAGE,
289
 
          (gchar *) "20.spellcheck",
290
 
          (gchar *) "vboxSpellChecking",
291
 
          emcp_widget_glade },
292
 
 
293
 
        { E_CONFIG_SECTION_TABLE,
294
 
          (gchar *) "20.spellcheck/00.languages",
295
 
          (gchar *) "languages-table",
296
 
          emcp_widget_glade },
297
 
 
298
 
        { E_CONFIG_SECTION,
299
 
          (gchar *) "20.spellcheck/00.options",
300
 
          (gchar *) "spell-options-vbox",
301
 
          emcp_widget_glade },
302
 
};
303
 
 
304
 
static void
305
 
emcp_free (EConfig *ec, GSList *items, gpointer data)
306
 
{
307
 
        /* the prefs data is freed automagically */
308
 
        g_slist_free (items);
309
 
}
310
 
 
311
 
static void
312
 
em_composer_prefs_construct (EMComposerPrefs *prefs,
313
 
                             EShell *shell)
314
 
{
315
 
        GtkWidget *toplevel, *widget, *info_pixmap;
316
 
        GtkWidget *container;
317
 
        EShellSettings *shell_settings;
318
 
        ESignatureList *signature_list;
319
 
        ESignatureTreeView *signature_tree_view;
320
 
        GtkTreeView *view;
321
 
        GtkListStore *store;
322
 
        GtkTreeSelection *selection;
323
 
        GtkCellRenderer *renderer;
324
 
        GConfClient *client;
325
 
        EMConfig *ec;
326
 
        EMConfigTargetPrefs *target;
327
 
        GSList *l;
328
 
        gint i;
329
 
 
330
 
        shell_settings = e_shell_get_shell_settings (shell);
331
 
 
332
 
        /* Make sure our custom widget classes are registered with
333
 
         * GType before we load the GtkBuilder definition file. */
334
 
        EM_TYPE_FOLDER_SELECTION_BUTTON;
335
 
 
336
 
        prefs->builder = gtk_builder_new ();
337
 
        e_load_ui_builder_definition (prefs->builder, "mail-config.ui");
338
 
 
339
 
        /** @HookPoint-EMConfig: Mail Composer Preferences
340
 
         * @Id: org.gnome.evolution.mail.composerPrefs
341
 
         * @Type: E_CONFIG_BOOK
342
 
         * @Class: org.gnome.evolution.mail.config:1.0
343
 
         * @Target: EMConfigTargetPrefs
344
 
         *
345
 
         * The mail composer preferences settings page.
346
 
         */
347
 
        ec = em_config_new(E_CONFIG_BOOK, "org.gnome.evolution.mail.composerPrefs");
348
 
        l = NULL;
349
 
        for (i = 0; i < G_N_ELEMENTS (emcp_items); i++)
350
 
                l = g_slist_prepend (l, &emcp_items[i]);
351
 
        e_config_add_items ((EConfig *) ec, l, NULL, NULL, emcp_free, prefs);
352
 
 
353
 
        /* General tab */
354
 
 
355
 
        /* Default Behavior */
356
 
 
357
 
        /* Express mode does not honor this setting. */
358
 
        widget = e_builder_get_widget (prefs->builder, "chkSendHTML");
359
 
        if (e_shell_get_express_mode (shell))
360
 
                gtk_widget_hide (widget);
361
 
        else
362
 
                g_object_bind_property (
363
 
                        shell_settings, "composer-format-html",
364
 
                        widget, "active",
365
 
                        G_BINDING_BIDIRECTIONAL |
366
 
                        G_BINDING_SYNC_CREATE);
367
 
 
368
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptEmptySubject");
369
 
        g_object_bind_property (
370
 
                shell_settings, "composer-prompt-empty-subject",
371
 
                widget, "active",
372
 
                G_BINDING_BIDIRECTIONAL |
373
 
                G_BINDING_SYNC_CREATE);
374
 
 
375
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptBccOnly");
376
 
        g_object_bind_property (
377
 
                shell_settings, "composer-prompt-only-bcc",
378
 
                widget, "active",
379
 
                G_BINDING_BIDIRECTIONAL |
380
 
                G_BINDING_SYNC_CREATE);
381
 
 
382
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptPrivateListReply");
383
 
        g_object_bind_property (
384
 
                shell_settings, "composer-prompt-private-list-reply",
385
 
                widget, "active",
386
 
                G_BINDING_BIDIRECTIONAL |
387
 
                G_BINDING_SYNC_CREATE);
388
 
 
389
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptReplyManyRecips");
390
 
        g_object_bind_property (
391
 
                shell_settings, "composer-prompt-reply-many-recips",
392
 
                widget, "active",
393
 
                G_BINDING_BIDIRECTIONAL |
394
 
                G_BINDING_SYNC_CREATE);
395
 
 
396
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptListReplyTo");
397
 
        g_object_bind_property (
398
 
                shell_settings, "composer-prompt-list-reply-to",
399
 
                widget, "active",
400
 
                G_BINDING_BIDIRECTIONAL |
401
 
                G_BINDING_SYNC_CREATE);
402
 
 
403
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptSendInvalidRecip");
404
 
        g_object_bind_property (
405
 
                shell_settings, "composer-prompt-send-invalid-recip",
406
 
                widget, "active",
407
 
                G_BINDING_BIDIRECTIONAL |
408
 
                G_BINDING_SYNC_CREATE);
409
 
 
410
 
        widget = e_builder_get_widget (prefs->builder, "chkAutoSmileys");
411
 
        g_object_bind_property (
412
 
                shell_settings, "composer-magic-smileys",
413
 
                widget, "active",
414
 
                G_BINDING_BIDIRECTIONAL |
415
 
                G_BINDING_SYNC_CREATE);
416
 
 
417
 
        widget = e_builder_get_widget (prefs->builder, "chkRequestReceipt");
418
 
        g_object_bind_property (
419
 
                shell_settings, "composer-request-receipt",
420
 
                widget, "active",
421
 
                G_BINDING_BIDIRECTIONAL |
422
 
                G_BINDING_SYNC_CREATE);
423
 
 
424
 
        widget = e_builder_get_widget (prefs->builder, "chkReplyStartBottom");
425
 
        g_object_bind_property (
426
 
                shell_settings, "composer-reply-start-bottom",
427
 
                widget, "active",
428
 
                G_BINDING_BIDIRECTIONAL |
429
 
                G_BINDING_SYNC_CREATE);
430
 
 
431
 
        widget = e_builder_get_widget (prefs->builder, "chkOutlookFilenames");
432
 
        g_object_bind_property (
433
 
                shell_settings, "composer-outlook-filenames",
434
 
                widget, "active",
435
 
                G_BINDING_BIDIRECTIONAL |
436
 
                G_BINDING_SYNC_CREATE);
437
 
 
438
 
        widget = e_builder_get_widget (prefs->builder, "chkIgnoreListReplyTo");
439
 
        g_object_bind_property (
440
 
                shell_settings, "composer-ignore-list-reply-to",
441
 
                widget, "active",
442
 
                G_BINDING_BIDIRECTIONAL |
443
 
                G_BINDING_SYNC_CREATE);
444
 
 
445
 
        widget = e_builder_get_widget (prefs->builder, "chkGroupReplyToList");
446
 
        g_object_bind_property (
447
 
                shell_settings, "composer-group-reply-to-list",
448
 
                widget, "active",
449
 
                G_BINDING_BIDIRECTIONAL |
450
 
                G_BINDING_SYNC_CREATE);
451
 
 
452
 
        widget = e_builder_get_widget (prefs->builder, "chkTopSignature");
453
 
        g_object_bind_property (
454
 
                shell_settings, "composer-top-signature",
455
 
                widget, "active",
456
 
                G_BINDING_BIDIRECTIONAL |
457
 
                G_BINDING_SYNC_CREATE);
458
 
 
459
 
        widget = e_builder_get_widget (prefs->builder, "chkEnableSpellChecking");
460
 
        g_object_bind_property (
461
 
                shell_settings, "composer-inline-spelling",
462
 
                widget, "active",
463
 
                G_BINDING_BIDIRECTIONAL |
464
 
                G_BINDING_SYNC_CREATE);
465
 
 
466
 
        widget = e_charset_combo_box_new ();
467
 
        container = e_builder_get_widget (prefs->builder, "hboxComposerCharset");
468
 
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
469
 
        gtk_widget_show (widget);
470
 
        g_object_bind_property (
471
 
                shell_settings, "composer-charset",
472
 
                widget, "charset",
473
 
                G_BINDING_BIDIRECTIONAL |
474
 
                G_BINDING_SYNC_CREATE);
475
 
 
476
 
        /* Spell Checking */
477
 
        widget = e_builder_get_widget (prefs->builder, "listSpellCheckLanguage");
478
 
        view = GTK_TREE_VIEW (widget);
479
 
        store = gtk_list_store_new (
480
 
                3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
481
 
        g_signal_connect_swapped (
482
 
                store, "row-changed",
483
 
                G_CALLBACK (spell_language_save), prefs);
484
 
        prefs->language_model = GTK_TREE_MODEL (store);
485
 
        gtk_tree_view_set_model (view, prefs->language_model);
486
 
        renderer = gtk_cell_renderer_toggle_new ();
487
 
        g_signal_connect (
488
 
                renderer, "toggled",
489
 
                G_CALLBACK (spell_language_toggled_cb), prefs);
490
 
        gtk_tree_view_insert_column_with_attributes (
491
 
                view, -1, _("Enabled"),
492
 
                renderer, "active", 0, NULL);
493
 
 
494
 
        gtk_tree_view_insert_column_with_attributes (
495
 
                view, -1, _("Language(s)"),
496
 
                gtk_cell_renderer_text_new (),
497
 
                "text", 1, NULL);
498
 
        selection = gtk_tree_view_get_selection (view);
499
 
        gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
500
 
        info_pixmap = e_builder_get_widget (prefs->builder, "pixmapSpellInfo");
501
 
        gtk_image_set_from_stock (
502
 
                GTK_IMAGE (info_pixmap),
503
 
                GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_BUTTON);
504
 
 
505
 
        widget = e_builder_get_widget (prefs->builder, "colorButtonSpellCheckColor");
506
 
        g_object_bind_property_full (
507
 
                shell_settings, "composer-spell-color",
508
 
                widget, "color",
509
 
                G_BINDING_BIDIRECTIONAL |
510
 
                G_BINDING_SYNC_CREATE,
511
 
                e_binding_transform_string_to_color,
512
 
                e_binding_transform_color_to_string,
513
 
                NULL, (GDestroyNotify) NULL);
514
 
 
515
 
        spell_setup (prefs);
516
 
 
517
 
        /* Forwards and Replies */
518
 
        widget = e_builder_get_widget (prefs->builder, "comboboxForwardStyle");
519
 
        g_object_bind_property (
520
 
                shell_settings, "mail-forward-style",
521
 
                widget, "active",
522
 
                G_BINDING_BIDIRECTIONAL |
523
 
                G_BINDING_SYNC_CREATE);
524
 
 
525
 
        widget = e_builder_get_widget (prefs->builder, "comboboxReplyStyle");
526
 
        g_object_bind_property_full (
527
 
                shell_settings, "mail-reply-style",
528
 
                widget, "active",
529
 
                G_BINDING_BIDIRECTIONAL |
530
 
                G_BINDING_SYNC_CREATE,
531
 
                transform_old_to_new_reply_style,
532
 
                transform_new_to_old_reply_style,
533
 
                NULL, (GDestroyNotify) NULL);
534
 
 
535
 
        /* Signatures */
536
 
        signature_list = e_get_signature_list ();
537
 
        container = e_builder_get_widget (prefs->builder, "signature-alignment");
538
 
        widget = e_signature_manager_new (signature_list);
539
 
        gtk_container_add (GTK_CONTAINER (container), widget);
540
 
        gtk_widget_show (widget);
541
 
 
542
 
        /* The mail shell backend responds to the "window-created" signal
543
 
         * that this triggers and configures it with composer preferences. */
544
 
        g_signal_connect_swapped (
545
 
                widget, "editor-created",
546
 
                G_CALLBACK (e_shell_watch_window), shell);
547
 
 
548
 
        /* Express mode does not honor this setting. */
549
 
        if (!e_shell_get_express_mode (shell))
550
 
                g_object_bind_property (
551
 
                        shell_settings, "composer-format-html",
552
 
                        widget, "prefer-html",
553
 
                        G_BINDING_SYNC_CREATE);
554
 
 
555
 
        signature_tree_view = e_signature_manager_get_tree_view (
556
 
                E_SIGNATURE_MANAGER (widget));
557
 
 
558
 
        container = e_builder_get_widget (
559
 
                prefs->builder, "signature-preview-scrolled-window");
560
 
        widget = e_signature_preview_new ();
561
 
        gtk_container_add (GTK_CONTAINER (container), widget);
562
 
        gtk_widget_show (widget);
563
 
 
564
 
        g_object_bind_property (
565
 
                signature_tree_view, "selected",
566
 
                widget, "signature",
567
 
                G_BINDING_SYNC_CREATE);
568
 
 
569
 
        /* Sanitize the dialog for Express mode */
570
 
        e_shell_hide_widgets_for_express_mode (shell, prefs->builder,
571
 
                                               "chkOutlookFilenames",
572
 
                                               "chkTopSignature",
573
 
                                               NULL);
574
 
 
575
 
        /* get our toplevel widget */
576
 
        client = gconf_client_get_default ();
577
 
        target = em_config_target_new_prefs (ec, client);
578
 
        e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
579
 
        toplevel = e_config_create_widget ((EConfig *) ec);
580
 
        gtk_container_add (GTK_CONTAINER (prefs), toplevel);
581
 
        g_object_unref (client);
582
 
}
583
 
 
584
 
GtkWidget *
585
 
em_composer_prefs_new (EPreferencesWindow *window)
586
 
{
587
 
        EMComposerPrefs *prefs;
588
 
        EShell *shell = e_preferences_window_get_shell (window);
589
 
 
590
 
        g_return_val_if_fail (E_IS_SHELL (shell), NULL);
591
 
 
592
 
        prefs = g_object_new (EM_TYPE_COMPOSER_PREFS, NULL);
593
 
        em_composer_prefs_construct (prefs, shell);
594
 
 
595
 
        return GTK_WIDGET (prefs);
596
 
}