Statistics
| Revision:

root / src / prefs_folder_item.c @ 595

History | View | Annotate | Download (17.3 kB)

1
/*
2
 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3
 * Copyright (C) 1999-2003 Hiroyuki Yamamoto
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
 */
19
20
#ifdef HAVE_CONFIG_H
21
#  include "config.h"
22
#endif
23
24
#include "defs.h"
25
26
#include <glib.h>
27
#include <glib/gi18n.h>
28
#include <gtk/gtk.h>
29
#include <gdk/gdkkeysyms.h>
30
31
#include "folder.h"
32
#include "prefs.h"
33
#include "prefs_ui.h"
34
#include "prefs_folder_item.h"
35
#include "prefs_account.h"
36
#include "account.h"
37
#include "manage_window.h"
38
#include "folderview.h"
39
#include "inc.h"
40
#include "menu.h"
41
42
typedef struct _PrefsFolderItemDialog        PrefsFolderItemDialog;
43
44
struct _PrefsFolderItemDialog
45
{
46
        PrefsDialog *dialog;
47
        FolderItem *item;
48
49
        /* General */
50
        GtkWidget *name_entry;
51
        GtkWidget *path_label;
52
        GtkWidget *type_optmenu;
53
54
        GtkWidget *trim_summary_subj_chkbtn;
55
        GtkWidget *trim_compose_subj_chkbtn;
56
57
        /* Compose */
58
        GtkWidget *account_optmenu;
59
        GtkWidget *ac_apply_sub_chkbtn;
60
        GtkWidget *to_entry;
61
        GtkWidget *on_reply_chkbtn;
62
        GtkWidget *cc_entry;
63
        GtkWidget *bcc_entry;
64
        GtkWidget *replyto_entry;
65
};
66
67
static PrefsFolderItemDialog *prefs_folder_item_create
68
                                        (FolderItem                *item);
69
static void prefs_folder_item_general_create
70
                                        (PrefsFolderItemDialog        *dialog);
71
static void prefs_folder_item_compose_create
72
                                        (PrefsFolderItemDialog        *dialog);
73
static void prefs_folder_item_set_dialog(PrefsFolderItemDialog        *dialog);
74
75
static void prefs_folder_item_ok_cb        (GtkWidget                *widget, 
76
                                         PrefsFolderItemDialog        *dialog);
77
static void prefs_folder_item_apply_cb        (GtkWidget                *widget, 
78
                                         PrefsFolderItemDialog        *dialog);
79
static void prefs_folder_item_cancel_cb        (GtkWidget                *widget, 
80
                                         PrefsFolderItemDialog        *dialog);
81
static gint prefs_folder_item_delete_cb        (GtkWidget                *widget,
82
                                         GdkEventAny                *event, 
83
                                         PrefsFolderItemDialog        *dialog);
84
static gboolean prefs_folder_item_key_press_cb
85
                                        (GtkWidget                *widget,
86
                                         GdkEventKey                *event,
87
                                         PrefsFolderItemDialog        *dialog);
88
89
void prefs_folder_item_open(FolderItem *item)
90
{
91
        PrefsFolderItemDialog *dialog;
92
93
        g_return_if_fail(item != NULL);
94
95
        inc_lock();
96
97
        dialog = prefs_folder_item_create(item);
98
99
        manage_window_set_transient(GTK_WINDOW(dialog->dialog->window));
100
101
        prefs_folder_item_set_dialog(dialog);
102
103
        gtk_widget_show_all(dialog->dialog->window);
104
}
105
106
PrefsFolderItemDialog *prefs_folder_item_create(FolderItem *item)
107
{
108
        PrefsFolderItemDialog *new_dialog;
109
        PrefsDialog *dialog;
110
111
        new_dialog = g_new0(PrefsFolderItemDialog, 1);
112
113
        dialog = g_new0(PrefsDialog, 1);
114
        prefs_dialog_create(dialog);
115
116
        gtk_window_set_title(GTK_WINDOW(dialog->window), _("Folder properties"));
117
        gtk_widget_realize(dialog->window);
118
        g_signal_connect(G_OBJECT(dialog->window), "delete_event",
119
                         G_CALLBACK(prefs_folder_item_delete_cb), new_dialog);
120
        g_signal_connect(G_OBJECT(dialog->window), "key_press_event",
121
                         G_CALLBACK(prefs_folder_item_key_press_cb), new_dialog);
122
        MANAGE_WINDOW_SIGNALS_CONNECT(dialog->window);
123
124
        g_signal_connect(G_OBJECT(dialog->ok_btn), "clicked",
125
                         G_CALLBACK(prefs_folder_item_ok_cb), new_dialog);
126
        g_signal_connect(G_OBJECT(dialog->apply_btn), "clicked",
127
                         G_CALLBACK(prefs_folder_item_apply_cb), new_dialog);
128
        g_signal_connect(G_OBJECT(dialog->cancel_btn), "clicked",
129
                         G_CALLBACK(prefs_folder_item_cancel_cb), new_dialog);
130
131
        new_dialog->dialog = dialog;
132
        new_dialog->item = item;
133
134
        prefs_folder_item_general_create(new_dialog);
135
        prefs_folder_item_compose_create(new_dialog);
136
137
        SET_NOTEBOOK_LABEL(dialog->notebook, _("General"), 0);
138
        SET_NOTEBOOK_LABEL(dialog->notebook, _("Compose"), 1);
139
140
        return new_dialog;
141
}
142
143
static void prefs_folder_item_general_create(PrefsFolderItemDialog *dialog)
144
{
145
        GtkWidget *vbox;
146
        GtkWidget *table;
147
        GtkWidget *hbox;
148
        GtkWidget *label;
149
        GtkWidget *name_entry;
150
        GtkWidget *path_label;
151
        GtkWidget *optmenu;
152
        GtkWidget *optmenu_menu;
153
        GtkWidget *menuitem;
154
        GtkWidget *vbox2;
155
        GtkWidget *trim_summary_subj_chkbtn;
156
        GtkWidget *trim_compose_subj_chkbtn;
157
        GtkStyle *style;
158
159
        style = gtk_style_copy(gtk_widget_get_style(dialog->dialog->window));
160
        style->base[GTK_STATE_NORMAL] = style->bg[GTK_STATE_NORMAL];
161
162
        vbox = gtk_vbox_new(FALSE, VSPACING);
163
        gtk_container_add(GTK_CONTAINER(dialog->dialog->notebook), vbox);
164
        gtk_container_set_border_width(GTK_CONTAINER (vbox), VBOX_BORDER);
165
166
        table = gtk_table_new(3, 2, FALSE);
167
        gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
168
        gtk_table_set_row_spacings(GTK_TABLE(table), 8);
169
        gtk_table_set_col_spacings(GTK_TABLE(table), 8);
170
171
        label = gtk_label_new(_("Name"));
172
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
173
                         GTK_FILL, 0, 0, 0);
174
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
175
176
        name_entry = gtk_entry_new();
177
        gtk_editable_set_editable(GTK_EDITABLE(name_entry), FALSE);
178
        gtk_widget_set_size_request(name_entry, 200, -1);
179
        gtk_widget_set_style(name_entry, style);
180
        gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, 0, 1,
181
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
182
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
183
184
        label = gtk_label_new(_("Path"));
185
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
186
                         GTK_FILL, 0, 0, 0);
187
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
188
189
        path_label = gtk_label_new("");
190
        gtk_label_set_selectable(GTK_LABEL(path_label), TRUE);
191
        gtk_misc_set_alignment(GTK_MISC(path_label), 0, 0.5);
192
        gtk_label_set_justify(GTK_LABEL(path_label), GTK_JUSTIFY_LEFT);
193
#if GTK_CHECK_VERSION(2, 6, 0)
194
        gtk_label_set_ellipsize(GTK_LABEL(path_label), PANGO_ELLIPSIZE_MIDDLE);
195
#endif
196
        gtk_table_attach(GTK_TABLE(table), path_label, 1, 2, 1, 2,
197
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
198
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
199
200
        label = gtk_label_new(_("Type"));
201
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
202
                         GTK_FILL, 0, 0, 0);
203
204
        hbox = gtk_hbox_new(FALSE, 8);
205
        gtk_widget_show(hbox);
206
        gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 2, 3,
207
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
208
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
209
210
        optmenu = gtk_option_menu_new();
211
        gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
212
213
        optmenu_menu = gtk_menu_new();
214
215
        MENUITEM_ADD(optmenu_menu, menuitem, _("Normal"), F_NORMAL);
216
        MENUITEM_ADD(optmenu_menu, menuitem, _("Inbox") , F_INBOX);
217
        MENUITEM_ADD(optmenu_menu, menuitem, _("Sent")  , F_OUTBOX);
218
        MENUITEM_ADD(optmenu_menu, menuitem, _("Drafts"), F_DRAFT);
219
        MENUITEM_ADD(optmenu_menu, menuitem, _("Queue") , F_QUEUE);
220
        MENUITEM_ADD(optmenu_menu, menuitem, _("Trash") , F_TRASH);
221
222
        gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu);
223
224
        vbox2 = gtk_vbox_new(FALSE, 0);
225
        gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0);
226
227
        PACK_CHECK_BUTTON(vbox2, trim_summary_subj_chkbtn,
228
                          _("Don't display [...] or (...) at the beginning of subject in summary"));
229
        PACK_CHECK_BUTTON(vbox2, trim_compose_subj_chkbtn,
230
                          _("Delete [...] or (...) at the beginning of subject on reply"));
231
232
        dialog->name_entry = name_entry;
233
        dialog->path_label = path_label;
234
        dialog->type_optmenu = optmenu;
235
        dialog->trim_summary_subj_chkbtn = trim_summary_subj_chkbtn;
236
        dialog->trim_compose_subj_chkbtn = trim_compose_subj_chkbtn;
237
}
238
239
static void prefs_folder_item_compose_create(PrefsFolderItemDialog *dialog)
240
{
241
        GtkWidget *vbox;
242
        GtkWidget *frame;
243
        GtkWidget *account_vbox;
244
        GtkWidget *table;
245
        GtkWidget *hbox;
246
        GtkWidget *label;
247
        GtkWidget *optmenu;
248
        GtkWidget *optmenu_menu;
249
        GtkWidget *menuitem;
250
        GtkWidget *ac_apply_sub_chkbtn;
251
        GtkWidget *to_entry;
252
        GtkWidget *on_reply_chkbtn;
253
        GtkWidget *cc_entry;
254
        GtkWidget *bcc_entry;
255
        GtkWidget *replyto_entry;
256
        GList *list;
257
258
        vbox = gtk_vbox_new(FALSE, VSPACING);
259
        gtk_container_add(GTK_CONTAINER(dialog->dialog->notebook), vbox);
260
        gtk_container_set_border_width(GTK_CONTAINER (vbox), VBOX_BORDER);
261
262
        PACK_FRAME(vbox, frame, _("Account"));
263
264
        account_vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
265
        gtk_container_add(GTK_CONTAINER(frame), account_vbox);
266
        gtk_container_set_border_width (GTK_CONTAINER (account_vbox), 8);
267
268
        table = gtk_table_new(1, 2, FALSE);
269
        gtk_box_pack_start(GTK_BOX(account_vbox), table, FALSE, FALSE, 0);
270
        gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW);
271
        gtk_table_set_col_spacings(GTK_TABLE(table), 8);
272
273
        label = gtk_label_new(_("Account"));
274
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
275
                         GTK_FILL, 0, 0, 0);
276
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
277
278
        hbox = gtk_hbox_new(FALSE, 8);
279
        gtk_widget_show(hbox);
280
        gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1,
281
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
282
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
283
284
        optmenu = gtk_option_menu_new();
285
        gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
286
287
        optmenu_menu = gtk_menu_new();
288
289
        MENUITEM_ADD(optmenu_menu, menuitem, _("None"), -1);
290
291
        for (list = account_get_list(); list != NULL; list = list->next) {
292
                gchar *text;
293
                PrefsAccount *ac = list->data;
294
295
                text = g_strdup_printf("%s: %s", ac->account_name, ac->address);
296
                MENUITEM_ADD(optmenu_menu, menuitem, text, ac->account_id);
297
        }
298
299
        gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu);
300
301
        PACK_CHECK_BUTTON(account_vbox, ac_apply_sub_chkbtn,
302
                          _("Apply to subfolders"));
303
304
        PACK_FRAME(vbox, frame, _("Automatically set the following addresses"));
305
306
        table = gtk_table_new(4, 2, FALSE);
307
        gtk_container_add(GTK_CONTAINER(frame), table);
308
        gtk_container_set_border_width (GTK_CONTAINER (table), 8);
309
        gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW);
310
        gtk_table_set_col_spacings(GTK_TABLE(table), 8);
311
312
        label = gtk_label_new(_("To:"));
313
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
314
                         GTK_FILL, 0, 0, 0);
315
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
316
317
        hbox = gtk_hbox_new(FALSE, 8);
318
        gtk_widget_show(hbox);
319
        gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1,
320
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
321
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
322
323
        to_entry = gtk_entry_new();
324
        gtk_widget_set_size_request(to_entry, 200, -1);
325
        gtk_box_pack_start(GTK_BOX(hbox), to_entry, TRUE, TRUE, 0);
326
327
        PACK_CHECK_BUTTON(hbox, on_reply_chkbtn, _("use also on reply"));
328
329
        label = gtk_label_new(_("Cc:"));
330
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
331
                         GTK_FILL, 0, 0, 0);
332
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
333
334
        cc_entry = gtk_entry_new();
335
        gtk_widget_set_size_request(cc_entry, 200, -1);
336
        gtk_table_attach(GTK_TABLE(table), cc_entry, 1, 2, 1, 2,
337
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
338
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
339
340
        label = gtk_label_new(_("Bcc:"));
341
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
342
                         GTK_FILL, 0, 0, 0);
343
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
344
345
        bcc_entry = gtk_entry_new();
346
        gtk_widget_set_size_request(bcc_entry, 200, -1);
347
        gtk_table_attach(GTK_TABLE(table), bcc_entry, 1, 2, 2, 3,
348
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
349
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
350
351
        label = gtk_label_new(_("Reply-To:"));
352
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
353
                         GTK_FILL, 0, 0, 0);
354
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
355
356
        replyto_entry = gtk_entry_new();
357
        gtk_widget_set_size_request(replyto_entry, 200, -1);
358
        gtk_table_attach(GTK_TABLE(table), replyto_entry, 1, 2, 3, 4,
359
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL,
360
                         GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
361
362
        dialog->account_optmenu     = optmenu;
363
        dialog->ac_apply_sub_chkbtn = ac_apply_sub_chkbtn;
364
        dialog->to_entry            = to_entry;
365
        dialog->on_reply_chkbtn     = on_reply_chkbtn;
366
        dialog->cc_entry            = cc_entry;
367
        dialog->bcc_entry           = bcc_entry;
368
        dialog->replyto_entry       = replyto_entry;
369
}
370
371
#define SET_ENTRY(entry, str) \
372
        gtk_entry_set_text(GTK_ENTRY(dialog->entry), \
373
                           dialog->item->str ? dialog->item->str : "")
374
375
static void prefs_folder_item_set_dialog(PrefsFolderItemDialog *dialog)
376
{
377
        GtkWidget *menu;
378
        GtkWidget *menuitem;
379
        GtkOptionMenu *optmenu;
380
        gchar *id;
381
        GList *cur;
382
        SpecialFolderItemType type;
383
        gint n;
384
        guint index = 0;
385
386
        /* General */
387
388
        SET_ENTRY(name_entry, name);
389
390
        id = folder_item_get_identifier(dialog->item);
391
        gtk_label_set_text(GTK_LABEL(dialog->path_label), id);
392
        g_free(id);
393
394
        optmenu = GTK_OPTION_MENU(dialog->type_optmenu);
395
        menu = gtk_option_menu_get_menu(optmenu);
396
        for (cur = GTK_MENU_SHELL(menu)->children, n = 0;
397
             cur != NULL; cur = cur->next, n++) {
398
                menuitem = GTK_WIDGET(cur->data);
399
                type = (SpecialFolderItemType)
400
                        g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
401
                if (type != F_NORMAL &&
402
                    FOLDER_TYPE(dialog->item->folder) == F_NEWS)
403
                        gtk_widget_set_sensitive(menuitem, FALSE);
404
                if (dialog->item->stype == type)
405
                        index = n;
406
        }
407
408
        gtk_option_menu_set_history(optmenu, index);
409
410
        gtk_toggle_button_set_active
411
                (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn),
412
                 dialog->item->trim_summary_subject);
413
        gtk_toggle_button_set_active
414
                (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn),
415
                 dialog->item->trim_compose_subject);
416
417
        /* Compose */
418
419
        index = 0;
420
        optmenu = GTK_OPTION_MENU(dialog->account_optmenu);
421
        if (dialog->item->account) {
422
                index = menu_find_option_menu_index
423
                        (optmenu,
424
                         GINT_TO_POINTER(dialog->item->account->account_id),
425
                         NULL);
426
                if (index < 0)
427
                        index = 0;
428
        }
429
430
        gtk_option_menu_set_history(optmenu, index);
431
432
        gtk_toggle_button_set_active
433
                (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn),
434
                 dialog->item->ac_apply_sub);
435
436
        SET_ENTRY(to_entry, auto_to);
437
        gtk_toggle_button_set_active
438
                (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn),
439
                 dialog->item->use_auto_to_on_reply);
440
441
        SET_ENTRY(cc_entry, auto_cc);
442
        SET_ENTRY(bcc_entry, auto_bcc);
443
        SET_ENTRY(replyto_entry, auto_replyto);
444
}
445
446
#undef SET_ENTRY
447
448
void prefs_folder_item_destroy(PrefsFolderItemDialog *dialog) 
449
{
450
        prefs_dialog_destroy(dialog->dialog);
451
        g_free(dialog->dialog);
452
        g_free(dialog);
453
454
        inc_unlock();
455
}
456
457
static void prefs_folder_item_ok_cb(GtkWidget *widget,
458
                                    PrefsFolderItemDialog *dialog)
459
{
460
        prefs_folder_item_apply_cb(widget, dialog);
461
        prefs_folder_item_destroy(dialog);
462
}
463
464
#define SET_DATA_FROM_ENTRY(entry, str) \
465
{ \
466
        entry_str = gtk_entry_get_text(GTK_ENTRY(dialog->entry)); \
467
        g_free(item->str); \
468
        item->str = (entry_str && *entry_str) ? g_strdup(entry_str) : NULL; \
469
}
470
471
static void prefs_folder_item_apply_cb(GtkWidget *widget,
472
                                       PrefsFolderItemDialog *dialog)
473
{
474
        GtkWidget *menu;
475
        GtkWidget *menuitem;
476
        GtkOptionMenu *optmenu;
477
        SpecialFolderItemType type;
478
        FolderItem *item = dialog->item;
479
        Folder *folder = item->folder;
480
        FolderItem *prev_item = NULL;
481
        gint account_id;
482
        const gchar *entry_str;
483
484
        optmenu = GTK_OPTION_MENU(dialog->type_optmenu);
485
        menu = gtk_option_menu_get_menu(optmenu);
486
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
487
        type = (SpecialFolderItemType)
488
                g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
489
490
        if (item->stype != type) {
491
                switch (type) {
492
                case F_NORMAL:
493
                        break;
494
                case F_INBOX:
495
                        if (folder->inbox)
496
                                folder->inbox->stype = F_NORMAL;
497
                        prev_item = folder->inbox;
498
                        folder->inbox = item;
499
                        break;
500
                case F_OUTBOX:
501
                        if (folder->outbox)
502
                                folder->outbox->stype = F_NORMAL;
503
                        prev_item = folder->outbox;
504
                        folder->outbox = item;
505
                        break;
506
                case F_DRAFT:
507
                        if (folder->draft)
508
                                folder->draft->stype = F_NORMAL;
509
                        prev_item = folder->draft;
510
                        folder->draft = item;
511
                        break;
512
                case F_QUEUE:
513
                        if (folder->queue)
514
                                folder->queue->stype = F_NORMAL;
515
                        prev_item = folder->queue;
516
                        folder->queue = item;
517
                        break;
518
                case F_TRASH:
519
                        if (folder->trash)
520
                                folder->trash->stype = F_NORMAL;
521
                        prev_item = folder->trash;
522
                        folder->trash = item;
523
                        break;
524
                }
525
526
                item->stype = type;
527
528
                if (prev_item)
529
                        folderview_update_item(prev_item, FALSE);
530
                folderview_update_item(item, FALSE);
531
        }
532
533
        item->trim_summary_subject = gtk_toggle_button_get_active
534
                (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn));
535
        item->trim_compose_subject = gtk_toggle_button_get_active
536
                (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn));
537
538
        /* account menu */
539
        optmenu = GTK_OPTION_MENU(dialog->account_optmenu);
540
        menu = gtk_option_menu_get_menu(optmenu);
541
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
542
        account_id = GPOINTER_TO_INT
543
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
544
        if (account_id >= 0)
545
                item->account = account_find_from_id(account_id);
546
        else
547
                item->account = NULL;
548
549
        item->ac_apply_sub = gtk_toggle_button_get_active
550
                (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn));
551
552
        SET_DATA_FROM_ENTRY(to_entry, auto_to);
553
        item->use_auto_to_on_reply = gtk_toggle_button_get_active
554
                (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn));
555
556
        SET_DATA_FROM_ENTRY(cc_entry, auto_cc);
557
        SET_DATA_FROM_ENTRY(bcc_entry, auto_bcc);
558
        SET_DATA_FROM_ENTRY(replyto_entry, auto_replyto);
559
}
560
561
#undef SET_DATA_FROM_ENTRY
562
563
static void prefs_folder_item_cancel_cb(GtkWidget *widget,
564
                                        PrefsFolderItemDialog *dialog)
565
{
566
        prefs_folder_item_destroy(dialog);
567
}
568
569
static gint prefs_folder_item_delete_cb(GtkWidget *widget, GdkEventAny *event,
570
                                        PrefsFolderItemDialog *dialog)
571
{
572
        prefs_folder_item_destroy(dialog);
573
        return TRUE;
574
}
575
576
static gboolean prefs_folder_item_key_press_cb(GtkWidget *widget,
577
                                           GdkEventKey *event,
578
                                           PrefsFolderItemDialog *dialog)
579
{
580
        if (event && event->keyval == GDK_Escape)
581
                prefs_folder_item_cancel_cb(widget, dialog);
582
        return FALSE;
583
}