diff options
Diffstat (limited to 'src/prefs_folder_item.c')
| -rw-r--r-- | src/prefs_folder_item.c | 639 |
1 files changed, 639 insertions, 0 deletions
diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c new file mode 100644 index 0000000..a3e725a --- /dev/null +++ b/src/prefs_folder_item.c | |||
| @@ -0,0 +1,639 @@ | |||
| 1 | /* | ||
| 2 | * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client | ||
| 3 | * Copyright (C) 1999-2006 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 "mainwindow.h" | ||
| 40 | #include "inc.h" | ||
| 41 | #include "menu.h" | ||
| 42 | |||
| 43 | typedef struct _PrefsFolderItemDialog PrefsFolderItemDialog; | ||
| 44 | |||
| 45 | struct _PrefsFolderItemDialog | ||
| 46 | { | ||
| 47 | PrefsDialog *dialog; | ||
| 48 | FolderItem *item; | ||
| 49 | |||
| 50 | /* General */ | ||
| 51 | GtkWidget *name_entry; | ||
| 52 | GtkWidget *id_label; | ||
| 53 | GtkWidget *path_label; | ||
| 54 | GtkWidget *type_optmenu; | ||
| 55 | |||
| 56 | GtkWidget *trim_summary_subj_chkbtn; | ||
| 57 | GtkWidget *trim_compose_subj_chkbtn; | ||
| 58 | |||
| 59 | /* Compose */ | ||
| 60 | GtkWidget *account_optmenu; | ||
| 61 | GtkWidget *ac_apply_sub_chkbtn; | ||
| 62 | GtkWidget *to_entry; | ||
| 63 | GtkWidget *on_reply_chkbtn; | ||
| 64 | GtkWidget *cc_entry; | ||
| 65 | GtkWidget *bcc_entry; | ||
| 66 | GtkWidget *replyto_entry; | ||
| 67 | }; | ||
| 68 | |||
| 69 | static PrefsFolderItemDialog *prefs_folder_item_create | ||
| 70 | (FolderItem *item); | ||
| 71 | static void prefs_folder_item_general_create | ||
| 72 | (PrefsFolderItemDialog *dialog); | ||
| 73 | static void prefs_folder_item_compose_create | ||
| 74 | (PrefsFolderItemDialog *dialog); | ||
| 75 | static void prefs_folder_item_set_dialog(PrefsFolderItemDialog *dialog); | ||
| 76 | |||
| 77 | static void prefs_folder_item_ok_cb (GtkWidget *widget, | ||
| 78 | PrefsFolderItemDialog *dialog); | ||
| 79 | static void prefs_folder_item_apply_cb (GtkWidget *widget, | ||
| 80 | PrefsFolderItemDialog *dialog); | ||
| 81 | static void prefs_folder_item_cancel_cb (GtkWidget *widget, | ||
| 82 | PrefsFolderItemDialog *dialog); | ||
| 83 | static gint prefs_folder_item_delete_cb (GtkWidget *widget, | ||
| 84 | GdkEventAny *event, | ||
| 85 | PrefsFolderItemDialog *dialog); | ||
| 86 | static gboolean prefs_folder_item_key_press_cb | ||
| 87 | (GtkWidget *widget, | ||
| 88 | GdkEventKey *event, | ||
| 89 | PrefsFolderItemDialog *dialog); | ||
| 90 | |||
| 91 | void prefs_folder_item_open(FolderItem *item) | ||
| 92 | { | ||
| 93 | PrefsFolderItemDialog *dialog; | ||
| 94 | |||
| 95 | g_return_if_fail(item != NULL); | ||
| 96 | |||
| 97 | inc_lock(); | ||
| 98 | |||
| 99 | dialog = prefs_folder_item_create(item); | ||
| 100 | |||
| 101 | manage_window_set_transient(GTK_WINDOW(dialog->dialog->window)); | ||
| 102 | |||
| 103 | prefs_folder_item_set_dialog(dialog); | ||
| 104 | |||
| 105 | gtk_widget_show_all(dialog->dialog->window); | ||
| 106 | } | ||
| 107 | |||
| 108 | PrefsFolderItemDialog *prefs_folder_item_create(FolderItem *item) | ||
| 109 | { | ||
| 110 | PrefsFolderItemDialog *new_dialog; | ||
| 111 | PrefsDialog *dialog; | ||
| 112 | |||
| 113 | new_dialog = g_new0(PrefsFolderItemDialog, 1); | ||
| 114 | |||
| 115 | dialog = g_new0(PrefsDialog, 1); | ||
| 116 | prefs_dialog_create(dialog); | ||
| 117 | |||
| 118 | gtk_window_set_title(GTK_WINDOW(dialog->window), _("Folder properties")); | ||
| 119 | gtk_widget_realize(dialog->window); | ||
| 120 | g_signal_connect(G_OBJECT(dialog->window), "delete_event", | ||
| 121 | G_CALLBACK(prefs_folder_item_delete_cb), new_dialog); | ||
| 122 | g_signal_connect(G_OBJECT(dialog->window), "key_press_event", | ||
| 123 | G_CALLBACK(prefs_folder_item_key_press_cb), new_dialog); | ||
| 124 | MANAGE_WINDOW_SIGNALS_CONNECT(dialog->window); | ||
| 125 | |||
| 126 | g_signal_connect(G_OBJECT(dialog->ok_btn), "clicked", | ||
| 127 | G_CALLBACK(prefs_folder_item_ok_cb), new_dialog); | ||
| 128 | g_signal_connect(G_OBJECT(dialog->apply_btn), "clicked", | ||
| 129 | G_CALLBACK(prefs_folder_item_apply_cb), new_dialog); | ||
| 130 | g_signal_connect(G_OBJECT(dialog->cancel_btn), "clicked", | ||
| 131 | G_CALLBACK(prefs_folder_item_cancel_cb), new_dialog); | ||
| 132 | |||
| 133 | new_dialog->dialog = dialog; | ||
| 134 | new_dialog->item = item; | ||
| 135 | |||
| 136 | prefs_folder_item_general_create(new_dialog); | ||
| 137 | prefs_folder_item_compose_create(new_dialog); | ||
| 138 | |||
| 139 | SET_NOTEBOOK_LABEL(dialog->notebook, _("General"), 0); | ||
| 140 | SET_NOTEBOOK_LABEL(dialog->notebook, _("Compose"), 1); | ||
| 141 | |||
| 142 | return new_dialog; | ||
| 143 | } | ||
| 144 | |||
| 145 | static void prefs_folder_item_general_create(PrefsFolderItemDialog *dialog) | ||
| 146 | { | ||
| 147 | GtkWidget *vbox; | ||
| 148 | GtkWidget *table; | ||
| 149 | GtkWidget *hbox; | ||
| 150 | GtkWidget *label; | ||
| 151 | GtkWidget *name_entry; | ||
| 152 | GtkWidget *id_label; | ||
| 153 | GtkWidget *path_label; | ||
| 154 | GtkWidget *optmenu; | ||
| 155 | GtkWidget *optmenu_menu; | ||
| 156 | GtkWidget *menuitem; | ||
| 157 | GtkWidget *vbox2; | ||
| 158 | GtkWidget *trim_summary_subj_chkbtn; | ||
| 159 | GtkWidget *trim_compose_subj_chkbtn; | ||
| 160 | GtkStyle *style; | ||
| 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(4, 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 | style = gtk_widget_get_style(dialog->dialog->window); | ||
| 180 | gtk_widget_modify_base(name_entry, GTK_STATE_NORMAL, | ||
| 181 | &style->bg[GTK_STATE_NORMAL]); | ||
| 182 | gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, 0, 1, | ||
| 183 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 184 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 185 | |||
| 186 | label = gtk_label_new(_("Identifier")); | ||
| 187 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, | ||
| 188 | GTK_FILL, 0, 0, 0); | ||
| 189 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 190 | |||
| 191 | id_label = gtk_label_new(""); | ||
| 192 | gtk_label_set_selectable(GTK_LABEL(id_label), TRUE); | ||
| 193 | gtk_misc_set_alignment(GTK_MISC(id_label), 0, 0.5); | ||
| 194 | gtk_label_set_justify(GTK_LABEL(id_label), GTK_JUSTIFY_LEFT); | ||
| 195 | #if GTK_CHECK_VERSION(2, 6, 0) | ||
| 196 | gtk_label_set_ellipsize(GTK_LABEL(id_label), PANGO_ELLIPSIZE_MIDDLE); | ||
| 197 | #endif | ||
| 198 | gtk_table_attach(GTK_TABLE(table), id_label, 1, 2, 1, 2, | ||
| 199 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 200 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 201 | |||
| 202 | label = gtk_label_new(_("Path")); | ||
| 203 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, | ||
| 204 | GTK_FILL, 0, 0, 0); | ||
| 205 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 206 | |||
| 207 | path_label = gtk_label_new(""); | ||
| 208 | gtk_label_set_selectable(GTK_LABEL(path_label), TRUE); | ||
| 209 | gtk_misc_set_alignment(GTK_MISC(path_label), 0, 0.5); | ||
| 210 | gtk_label_set_justify(GTK_LABEL(path_label), GTK_JUSTIFY_LEFT); | ||
| 211 | #if GTK_CHECK_VERSION(2, 6, 0) | ||
| 212 | gtk_label_set_ellipsize(GTK_LABEL(path_label), PANGO_ELLIPSIZE_MIDDLE); | ||
| 213 | #endif | ||
| 214 | gtk_table_attach(GTK_TABLE(table), path_label, 1, 2, 2, 3, | ||
| 215 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 216 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 217 | |||
| 218 | label = gtk_label_new(_("Type")); | ||
| 219 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, | ||
| 220 | GTK_FILL, 0, 0, 0); | ||
| 221 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 222 | |||
| 223 | hbox = gtk_hbox_new(FALSE, 8); | ||
| 224 | gtk_widget_show(hbox); | ||
| 225 | gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 3, 4, | ||
| 226 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 227 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 228 | |||
| 229 | optmenu = gtk_option_menu_new(); | ||
| 230 | gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); | ||
| 231 | |||
| 232 | optmenu_menu = gtk_menu_new(); | ||
| 233 | |||
| 234 | MENUITEM_ADD(optmenu_menu, menuitem, _("Normal"), F_NORMAL); | ||
| 235 | MENUITEM_ADD(optmenu_menu, menuitem, _("Inbox") , F_INBOX); | ||
| 236 | MENUITEM_ADD(optmenu_menu, menuitem, _("Sent") , F_OUTBOX); | ||
| 237 | MENUITEM_ADD(optmenu_menu, menuitem, _("Drafts"), F_DRAFT); | ||
| 238 | MENUITEM_ADD(optmenu_menu, menuitem, _("Queue") , F_QUEUE); | ||
| 239 | MENUITEM_ADD(optmenu_menu, menuitem, _("Trash") , F_TRASH); | ||
| 240 | MENUITEM_ADD(optmenu_menu, menuitem, _("Junk") , F_JUNK); | ||
| 241 | |||
| 242 | gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu); | ||
| 243 | |||
| 244 | vbox2 = gtk_vbox_new(FALSE, 0); | ||
| 245 | gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); | ||
| 246 | |||
| 247 | PACK_CHECK_BUTTON(vbox2, trim_summary_subj_chkbtn, | ||
| 248 | _("Don't display [...] or (...) at the beginning of subject in summary")); | ||
| 249 | PACK_CHECK_BUTTON(vbox2, trim_compose_subj_chkbtn, | ||
| 250 | _("Delete [...] or (...) at the beginning of subject on reply")); | ||
| 251 | |||
| 252 | if (!dialog->item->parent) { | ||
| 253 | gtk_widget_set_sensitive(optmenu, FALSE); | ||
| 254 | gtk_widget_set_sensitive(vbox2, FALSE); | ||
| 255 | } | ||
| 256 | if (dialog->item->stype == F_VIRTUAL) | ||
| 257 | gtk_widget_set_sensitive(optmenu, FALSE); | ||
| 258 | |||
| 259 | dialog->name_entry = name_entry; | ||
| 260 | dialog->id_label = id_label; | ||
| 261 | dialog->path_label = path_label; | ||
| 262 | dialog->type_optmenu = optmenu; | ||
| 263 | dialog->trim_summary_subj_chkbtn = trim_summary_subj_chkbtn; | ||
| 264 | dialog->trim_compose_subj_chkbtn = trim_compose_subj_chkbtn; | ||
| 265 | } | ||
| 266 | |||
| 267 | static void prefs_folder_item_compose_create(PrefsFolderItemDialog *dialog) | ||
| 268 | { | ||
| 269 | GtkWidget *vbox; | ||
| 270 | GtkWidget *frame; | ||
| 271 | GtkWidget *account_vbox; | ||
| 272 | GtkWidget *table; | ||
| 273 | GtkWidget *hbox; | ||
| 274 | GtkWidget *label; | ||
| 275 | GtkWidget *optmenu; | ||
| 276 | GtkWidget *optmenu_menu; | ||
| 277 | GtkWidget *menuitem; | ||
| 278 | GtkWidget *ac_apply_sub_chkbtn; | ||
| 279 | GtkWidget *to_entry; | ||
| 280 | GtkWidget *on_reply_chkbtn; | ||
| 281 | GtkWidget *cc_entry; | ||
| 282 | GtkWidget *bcc_entry; | ||
| 283 | GtkWidget *replyto_entry; | ||
| 284 | GList *list; | ||
| 285 | |||
| 286 | vbox = gtk_vbox_new(FALSE, VSPACING); | ||
| 287 | gtk_container_add(GTK_CONTAINER(dialog->dialog->notebook), vbox); | ||
| 288 | gtk_container_set_border_width(GTK_CONTAINER (vbox), VBOX_BORDER); | ||
| 289 | |||
| 290 | PACK_FRAME(vbox, frame, _("Account")); | ||
| 291 | |||
| 292 | account_vbox = gtk_vbox_new(FALSE, VSPACING_NARROW); | ||
| 293 | gtk_container_add(GTK_CONTAINER(frame), account_vbox); | ||
| 294 | gtk_container_set_border_width (GTK_CONTAINER (account_vbox), 8); | ||
| 295 | |||
| 296 | table = gtk_table_new(1, 2, FALSE); | ||
| 297 | gtk_box_pack_start(GTK_BOX(account_vbox), table, FALSE, FALSE, 0); | ||
| 298 | gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW); | ||
| 299 | gtk_table_set_col_spacings(GTK_TABLE(table), 8); | ||
| 300 | |||
| 301 | label = gtk_label_new(_("Account")); | ||
| 302 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, | ||
| 303 | GTK_FILL, 0, 0, 0); | ||
| 304 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 305 | |||
| 306 | hbox = gtk_hbox_new(FALSE, 8); | ||
| 307 | gtk_widget_show(hbox); | ||
| 308 | gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1, | ||
| 309 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 310 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 311 | |||
| 312 | optmenu = gtk_option_menu_new(); | ||
| 313 | gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); | ||
| 314 | |||
| 315 | optmenu_menu = gtk_menu_new(); | ||
| 316 | |||
| 317 | MENUITEM_ADD(optmenu_menu, menuitem, _("None"), -1); | ||
| 318 | |||
| 319 | for (list = account_get_list(); list != NULL; list = list->next) { | ||
| 320 | gchar *text; | ||
| 321 | PrefsAccount *ac = list->data; | ||
| 322 | |||
| 323 | text = g_strdup_printf("%s: %s", ac->account_name, ac->address); | ||
| 324 | MENUITEM_ADD(optmenu_menu, menuitem, text, ac->account_id); | ||
| 325 | } | ||
| 326 | |||
| 327 | gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu); | ||
| 328 | |||
| 329 | PACK_CHECK_BUTTON(account_vbox, ac_apply_sub_chkbtn, | ||
| 330 | _("Apply to subfolders")); | ||
| 331 | |||
| 332 | PACK_FRAME(vbox, frame, _("Automatically set the following addresses")); | ||
| 333 | |||
| 334 | table = gtk_table_new(4, 2, FALSE); | ||
| 335 | gtk_container_add(GTK_CONTAINER(frame), table); | ||
| 336 | gtk_container_set_border_width (GTK_CONTAINER (table), 8); | ||
| 337 | gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW); | ||
| 338 | gtk_table_set_col_spacings(GTK_TABLE(table), 8); | ||
| 339 | |||
| 340 | label = gtk_label_new(_("To:")); | ||
| 341 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, | ||
| 342 | GTK_FILL, 0, 0, 0); | ||
| 343 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 344 | |||
| 345 | hbox = gtk_hbox_new(FALSE, 8); | ||
| 346 | gtk_widget_show(hbox); | ||
| 347 | gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1, | ||
| 348 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 349 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 350 | |||
| 351 | to_entry = gtk_entry_new(); | ||
| 352 | gtk_widget_set_size_request(to_entry, 200, -1); | ||
| 353 | gtk_box_pack_start(GTK_BOX(hbox), to_entry, TRUE, TRUE, 0); | ||
| 354 | |||
| 355 | PACK_CHECK_BUTTON(hbox, on_reply_chkbtn, _("use also on reply")); | ||
| 356 | |||
| 357 | label = gtk_label_new(_("Cc:")); | ||
| 358 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, | ||
| 359 | GTK_FILL, 0, 0, 0); | ||
| 360 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 361 | |||
| 362 | cc_entry = gtk_entry_new(); | ||
| 363 | gtk_widget_set_size_request(cc_entry, 200, -1); | ||
| 364 | gtk_table_attach(GTK_TABLE(table), cc_entry, 1, 2, 1, 2, | ||
| 365 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 366 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 367 | |||
| 368 | label = gtk_label_new(_("Bcc:")); | ||
| 369 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, | ||
| 370 | GTK_FILL, 0, 0, 0); | ||
| 371 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 372 | |||
| 373 | bcc_entry = gtk_entry_new(); | ||
| 374 | gtk_widget_set_size_request(bcc_entry, 200, -1); | ||
| 375 | gtk_table_attach(GTK_TABLE(table), bcc_entry, 1, 2, 2, 3, | ||
| 376 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 377 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 378 | |||
| 379 | label = gtk_label_new(_("Reply-To:")); | ||
| 380 | gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, | ||
| 381 | GTK_FILL, 0, 0, 0); | ||
| 382 | gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); | ||
| 383 | |||
| 384 | replyto_entry = gtk_entry_new(); | ||
| 385 | gtk_widget_set_size_request(replyto_entry, 200, -1); | ||
| 386 | gtk_table_attach(GTK_TABLE(table), replyto_entry, 1, 2, 3, 4, | ||
| 387 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, | ||
| 388 | GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); | ||
| 389 | |||
| 390 | if (!dialog->item->parent) { | ||
| 391 | gtk_widget_set_sensitive(frame, FALSE); | ||
| 392 | gtk_widget_set_sensitive(ac_apply_sub_chkbtn, FALSE); | ||
| 393 | } | ||
| 394 | |||
| 395 | dialog->account_optmenu = optmenu; | ||
| 396 | dialog->ac_apply_sub_chkbtn = ac_apply_sub_chkbtn; | ||
| 397 | dialog->to_entry = to_entry; | ||
| 398 | dialog->on_reply_chkbtn = on_reply_chkbtn; | ||
| 399 | dialog->cc_entry = cc_entry; | ||
| 400 | dialog->bcc_entry = bcc_entry; | ||
| 401 | dialog->replyto_entry = replyto_entry; | ||
| 402 | } | ||
| 403 | |||
| 404 | #define SET_ENTRY(entry, str) \ | ||
| 405 | gtk_entry_set_text(GTK_ENTRY(dialog->entry), \ | ||
| 406 | dialog->item->str ? dialog->item->str : "") | ||
| 407 | |||
| 408 | static void prefs_folder_item_set_dialog(PrefsFolderItemDialog *dialog) | ||
| 409 | { | ||
| 410 | GtkWidget *menu; | ||
| 411 | GtkWidget *menuitem; | ||
| 412 | GtkOptionMenu *optmenu; | ||
| 413 | gchar *id; | ||
| 414 | gchar *path; | ||
| 415 | gchar *utf8_path; | ||
| 416 | GList *cur; | ||
| 417 | SpecialFolderItemType type; | ||
| 418 | gint n; | ||
| 419 | guint index = 0; | ||
| 420 | |||
| 421 | /* General */ | ||
| 422 | |||
| 423 | SET_ENTRY(name_entry, name); | ||
| 424 | |||
| 425 | id = folder_item_get_identifier(dialog->item); | ||
| 426 | gtk_label_set_text(GTK_LABEL(dialog->id_label), id); | ||
| 427 | g_free(id); | ||
| 428 | |||
| 429 | path = folder_item_get_path(dialog->item); | ||
| 430 | utf8_path = conv_filename_to_utf8(path); | ||
| 431 | gtk_label_set_text(GTK_LABEL(dialog->path_label), utf8_path); | ||
| 432 | g_free(utf8_path); | ||
| 433 | g_free(path); | ||
| 434 | |||
| 435 | optmenu = GTK_OPTION_MENU(dialog->type_optmenu); | ||
| 436 | menu = gtk_option_menu_get_menu(optmenu); | ||
| 437 | for (cur = GTK_MENU_SHELL(menu)->children, n = 0; | ||
| 438 | cur != NULL; cur = cur->next, n++) { | ||
| 439 | menuitem = GTK_WIDGET(cur->data); | ||
| 440 | type = (SpecialFolderItemType) | ||
| 441 | g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID); | ||
| 442 | if (type != F_NORMAL && | ||
| 443 | FOLDER_TYPE(dialog->item->folder) == F_NEWS) | ||
| 444 | gtk_widget_set_sensitive(menuitem, FALSE); | ||
| 445 | if (dialog->item->stype == type) | ||
| 446 | index = n; | ||
| 447 | } | ||
| 448 | |||
| 449 | gtk_option_menu_set_history(optmenu, index); | ||
| 450 | |||
| 451 | gtk_toggle_button_set_active | ||
| 452 | (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn), | ||
| 453 | dialog->item->trim_summary_subject); | ||
| 454 | gtk_toggle_button_set_active | ||
| 455 | (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn), | ||
| 456 | dialog->item->trim_compose_subject); | ||
| 457 | |||
| 458 | /* Compose */ | ||
| 459 | |||
| 460 | index = 0; | ||
| 461 | optmenu = GTK_OPTION_MENU(dialog->account_optmenu); | ||
| 462 | if (dialog->item->account) { | ||
| 463 | index = menu_find_option_menu_index | ||
| 464 | (optmenu, | ||
| 465 | GINT_TO_POINTER(dialog->item->account->account_id), | ||
| 466 | NULL); | ||
| 467 | if (index < 0) | ||
| 468 | index = 0; | ||
| 469 | } | ||
| 470 | |||
| 471 | gtk_option_menu_set_history(optmenu, index); | ||
| 472 | |||
| 473 | gtk_toggle_button_set_active | ||
| 474 | (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn), | ||
| 475 | dialog->item->ac_apply_sub); | ||
| 476 | |||
| 477 | SET_ENTRY(to_entry, auto_to); | ||
| 478 | gtk_toggle_button_set_active | ||
| 479 | (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn), | ||
| 480 | dialog->item->use_auto_to_on_reply); | ||
| 481 | |||
| 482 | SET_ENTRY(cc_entry, auto_cc); | ||
| 483 | SET_ENTRY(bcc_entry, auto_bcc); | ||
| 484 | SET_ENTRY(replyto_entry, auto_replyto); | ||
| 485 | } | ||
| 486 | |||
| 487 | #undef SET_ENTRY | ||
| 488 | |||
| 489 | void prefs_folder_item_destroy(PrefsFolderItemDialog *dialog) | ||
| 490 | { | ||
| 491 | prefs_dialog_destroy(dialog->dialog); | ||
| 492 | g_free(dialog->dialog); | ||
| 493 | g_free(dialog); | ||
| 494 | |||
| 495 | main_window_popup(main_window_get()); | ||
| 496 | inc_unlock(); | ||
| 497 | } | ||
| 498 | |||
| 499 | static void prefs_folder_item_ok_cb(GtkWidget *widget, | ||
| 500 | PrefsFolderItemDialog *dialog) | ||
| 501 | { | ||
| 502 | prefs_folder_item_apply_cb(widget, dialog); | ||
| 503 | prefs_folder_item_destroy(dialog); | ||
| 504 | } | ||
| 505 | |||
| 506 | #define SET_DATA_FROM_ENTRY(entry, str) \ | ||
| 507 | { \ | ||
| 508 | entry_str = gtk_entry_get_text(GTK_ENTRY(dialog->entry)); \ | ||
| 509 | g_free(item->str); \ | ||
| 510 | item->str = (entry_str && *entry_str) ? g_strdup(entry_str) : NULL; \ | ||
| 511 | } | ||
| 512 | |||
| 513 | static void prefs_folder_item_apply_cb(GtkWidget *widget, | ||
| 514 | PrefsFolderItemDialog *dialog) | ||
| 515 | { | ||
| 516 | GtkWidget *menu; | ||
| 517 | GtkWidget *menuitem; | ||
| 518 | GtkOptionMenu *optmenu; | ||
| 519 | SpecialFolderItemType type; | ||
| 520 | FolderItem *item = dialog->item; | ||
| 521 | Folder *folder = item->folder; | ||
| 522 | FolderItem *prev_item = NULL; | ||
| 523 | gint account_id; | ||
| 524 | const gchar *entry_str; | ||
| 525 | |||
| 526 | optmenu = GTK_OPTION_MENU(dialog->type_optmenu); | ||
| 527 | menu = gtk_option_menu_get_menu(optmenu); | ||
| 528 | menuitem = gtk_menu_get_active(GTK_MENU(menu)); | ||
| 529 | type = (SpecialFolderItemType) | ||
| 530 | g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID); | ||
| 531 | |||
| 532 | if (item->stype != type && item->stype != F_VIRTUAL) { | ||
| 533 | switch (type) { | ||
| 534 | case F_NORMAL: | ||
| 535 | break; | ||
| 536 | case F_INBOX: | ||
| 537 | if (folder->inbox) | ||
| 538 | folder->inbox->stype = F_NORMAL; | ||
| 539 | prev_item = folder->inbox; | ||
| 540 | folder->inbox = item; | ||
| 541 | break; | ||
| 542 | case F_OUTBOX: | ||
| 543 | if (folder->outbox) | ||
| 544 | folder->outbox->stype = F_NORMAL; | ||
| 545 | prev_item = folder->outbox; | ||
| 546 | folder->outbox = item; | ||
| 547 | break; | ||
| 548 | case F_DRAFT: | ||
| 549 | if (folder->draft) | ||
| 550 | folder->draft->stype = F_NORMAL; | ||
| 551 | prev_item = folder->draft; | ||
| 552 | folder->draft = item; | ||
| 553 | break; | ||
| 554 | case F_QUEUE: | ||
| 555 | if (folder->queue) | ||
| 556 | folder->queue->stype = F_NORMAL; | ||
| 557 | prev_item = folder->queue; | ||
| 558 | folder->queue = item; | ||
| 559 | break; | ||
| 560 | case F_TRASH: | ||
| 561 | if (folder->trash) | ||
| 562 | folder->trash->stype = F_NORMAL; | ||
| 563 | prev_item = folder->trash; | ||
| 564 | folder->trash = item; | ||
| 565 | break; | ||
| 566 | case F_JUNK: | ||
| 567 | prev_item = folder_get_junk(folder); | ||
| 568 | if (prev_item) | ||
| 569 | prev_item->stype = F_NORMAL; | ||
| 570 | folder_set_junk(folder, item); | ||
| 571 | break; | ||
| 572 | default: | ||
| 573 | type = item->stype; | ||
| 574 | break; | ||
| 575 | } | ||
| 576 | |||
| 577 | item->stype = type; | ||
| 578 | |||
| 579 | if (prev_item) | ||
| 580 | folderview_update_item(prev_item, FALSE); | ||
| 581 | folderview_update_item(item, FALSE); | ||
| 582 | } | ||
| 583 | |||
| 584 | item->trim_summary_subject = gtk_toggle_button_get_active | ||
| 585 | (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn)); | ||
| 586 | item->trim_compose_subject = gtk_toggle_button_get_active | ||
| 587 | (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn)); | ||
| 588 | |||
| 589 | /* account menu */ | ||
| 590 | optmenu = GTK_OPTION_MENU(dialog->account_optmenu); | ||
| 591 | menu = gtk_option_menu_get_menu(optmenu); | ||
| 592 | menuitem = gtk_menu_get_active(GTK_MENU(menu)); | ||
| 593 | account_id = GPOINTER_TO_INT | ||
| 594 | (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID)); | ||
| 595 | if (account_id >= 0) | ||
| 596 | item->account = account_find_from_id(account_id); | ||
| 597 | else | ||
| 598 | item->account = NULL; | ||
| 599 | |||
| 600 | if (!item->parent && item->account) | ||
| 601 | item->ac_apply_sub = TRUE; | ||
| 602 | else if (item->account) | ||
| 603 | item->ac_apply_sub = gtk_toggle_button_get_active | ||
| 604 | (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn)); | ||
| 605 | else | ||
| 606 | item->ac_apply_sub = FALSE; | ||
| 607 | |||
| 608 | SET_DATA_FROM_ENTRY(to_entry, auto_to); | ||
| 609 | item->use_auto_to_on_reply = gtk_toggle_button_get_active | ||
| 610 | (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn)); | ||
| 611 | |||
| 612 | SET_DATA_FROM_ENTRY(cc_entry, auto_cc); | ||
| 613 | SET_DATA_FROM_ENTRY(bcc_entry, auto_bcc); | ||
| 614 | SET_DATA_FROM_ENTRY(replyto_entry, auto_replyto); | ||
| 615 | } | ||
| 616 | |||
| 617 | #undef SET_DATA_FROM_ENTRY | ||
| 618 | |||
| 619 | static void prefs_folder_item_cancel_cb(GtkWidget *widget, | ||
| 620 | PrefsFolderItemDialog *dialog) | ||
| 621 | { | ||
| 622 | prefs_folder_item_destroy(dialog); | ||
| 623 | } | ||
| 624 | |||
| 625 | static gint prefs_folder_item_delete_cb(GtkWidget *widget, GdkEventAny *event, | ||
| 626 | PrefsFolderItemDialog *dialog) | ||
| 627 | { | ||
| 628 | prefs_folder_item_destroy(dialog); | ||
| 629 | return TRUE; | ||
| 630 | } | ||
| 631 | |||
| 632 | static gboolean prefs_folder_item_key_press_cb(GtkWidget *widget, | ||
| 633 | GdkEventKey *event, | ||
| 634 | PrefsFolderItemDialog *dialog) | ||
| 635 | { | ||
| 636 | if (event && event->keyval == GDK_Escape) | ||
| 637 | prefs_folder_item_cancel_cb(widget, dialog); | ||
| 638 | return FALSE; | ||
| 639 | } | ||
