prefs_summaries.c (35835B)
1 /* 2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client 3 * Copyright (C) 2005-2024 the Claws Mail Team and Colin Leroy 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 3 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, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #include "defs.h" 20 21 #include <stdio.h> 22 #include <stdlib.h> 23 24 #include <glib.h> 25 #include <glib/gi18n.h> 26 #include <gtk/gtk.h> 27 #include <gdk/gdkkeysyms.h> 28 29 #include "foldersel.h" 30 #include "prefs_common.h" 31 #include "prefs_gtk.h" 32 #include "prefs_summary_open.h" 33 #include "prefs_summary_column.h" 34 #include "prefs_folder_column.h" 35 36 #include "gtk/menu.h" 37 #include "gtk/gtkutils.h" 38 #include "gtk/prefswindow.h" 39 #include "gtk/combobox.h" 40 41 #include "manage_window.h" 42 43 typedef struct _SummariesPage 44 { 45 PrefsPage page; 46 47 GtkWidget *window; 48 49 GtkWidget *checkbtn_useaddrbook; 50 GtkWidget *checkbtn_show_tooltips; 51 GtkWidget *checkbtn_threadsubj; 52 GtkWidget *button_datefmt; 53 GtkWidget *entry_datefmt; 54 55 GtkWidget *checkbtn_startup_folder; 56 GtkWidget *startup_folder_entry; 57 GtkWidget *startup_folder_select; 58 GtkWidget *checkbtn_always_show_msg; 59 GtkWidget *checkbtn_show_on_folder_open; 60 GtkWidget *checkbtn_show_on_search_results; 61 GtkWidget *checkbtn_show_on_prevnext; 62 GtkWidget *checkbtn_show_on_deletemove; 63 GtkWidget *checkbtn_show_on_directional; 64 GtkWidget *checkbtn_mark_as_read_on_newwin; 65 GtkWidget *spinbtn_mark_as_read_delay; 66 GtkWidget *checkbtn_immedexec; 67 GtkWidget *checkbtn_ask_mark_all_read; 68 GtkWidget *optmenu_sort_key; 69 GtkWidget *optmenu_sort_type; 70 GtkWidget *optmenu_summaryfromshow; 71 GtkWidget *optmenu_nextunreadmsgdialog; 72 GtkWidget *checkbtn_folder_default_thread; 73 GtkWidget *checkbtn_folder_default_thread_collapsed; 74 GtkWidget *checkbtn_folder_default_hide_read_threads; 75 GtkWidget *checkbtn_folder_default_hide_read_msgs; 76 GtkWidget *checkbtn_folder_default_hide_del_msgs; 77 GtkWidget *checkbtn_summary_col_lock; 78 79 } SummariesPage; 80 81 enum { 82 DATEFMT_FMT, 83 DATEFMT_TXT, 84 N_DATEFMT_COLUMNS 85 }; 86 87 static void date_format_ok_btn_clicked (GtkButton *button, 88 GtkWidget **widget); 89 static void date_format_cancel_btn_clicked (GtkButton *button, 90 GtkWidget **widget); 91 static gboolean date_format_on_delete (GtkWidget *dialogwidget, 92 GdkEventAny *event, 93 GtkWidget **widget); 94 static void date_format_entry_on_change (GtkEditable *editable, 95 GtkLabel *example); 96 static void date_format_select_row (GtkTreeView *list_view, 97 GtkTreePath *path, 98 GtkTreeViewColumn *column, 99 GtkWidget *date_format); 100 static void mark_as_read_toggled (GtkToggleButton *button, 101 GtkWidget *spinbtn); 102 static void always_show_msg_toggled (GtkToggleButton *button, 103 gpointer user_data); 104 105 static void startup_folder_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget) 106 { 107 gboolean is_active; 108 109 is_active = gtk_toggle_button_get_active(toggle_btn); 110 gtk_widget_set_sensitive(widget, !is_active); 111 } 112 113 static void foldersel_cb(GtkWidget *widget, gpointer data) 114 { 115 GtkWidget *entry = (GtkWidget *) data; 116 FolderItem *item; 117 gchar *item_id; 118 gint newpos = 0; 119 120 item = foldersel_folder_sel(NULL, FOLDER_SEL_ALL, NULL, FALSE, NULL); 121 if (item && (item_id = folder_item_get_identifier(item)) != NULL) { 122 gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1); 123 gtk_editable_insert_text(GTK_EDITABLE(entry), item_id, strlen(item_id), &newpos); 124 g_free(item_id); 125 } 126 } 127 128 static GtkWidget *date_format_create(GtkButton *button, void *data) 129 { 130 static GtkWidget *datefmt_win = NULL; 131 132 GtkWidget *vbox1; 133 GtkWidget *scrolledwindow1; 134 GtkWidget *datefmt_list_view; 135 GtkWidget *table; 136 GtkWidget *label1; 137 GtkWidget *label2; 138 GtkWidget *label3; 139 GtkWidget *confirm_area; 140 GtkWidget *ok_btn; 141 GtkWidget *cancel_btn; 142 GtkWidget *datefmt_entry; 143 GtkListStore *store; 144 145 struct { 146 gchar *fmt; 147 gchar *txt; 148 } time_format[] = { 149 { "%a", NULL }, 150 { "%A", NULL }, 151 { "%b", NULL }, 152 { "%B", NULL }, 153 { "%c", NULL }, 154 { "%C", NULL }, 155 { "%d", NULL }, 156 { "%H", NULL }, 157 { "%I", NULL }, 158 { "%j", NULL }, 159 { "%m", NULL }, 160 { "%M", NULL }, 161 { "%p", NULL }, 162 { "%S", NULL }, 163 { "%w", NULL }, 164 { "%x", NULL }, 165 { "%y", NULL }, 166 { "%Y", NULL }, 167 { "%Z", NULL } 168 }; 169 170 gint i; 171 const gint TIME_FORMAT_ELEMS = 172 sizeof time_format / sizeof time_format[0]; 173 174 GtkCellRenderer *renderer; 175 GtkTreeViewColumn *column; 176 GtkTreeSelection *selection; 177 178 time_format[0].txt = _("the abbreviated weekday name"); 179 time_format[1].txt = _("the full weekday name"); 180 time_format[2].txt = _("the abbreviated month name"); 181 time_format[3].txt = _("the full month name"); 182 time_format[4].txt = _("the preferred date and time for the current locale"); 183 time_format[5].txt = _("the century number (year/100)"); 184 time_format[6].txt = _("the day of the month as a decimal number"); 185 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock"); 186 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock"); 187 time_format[9].txt = _("the day of the year as a decimal number"); 188 time_format[10].txt = _("the month as a decimal number"); 189 time_format[11].txt = _("the minute as a decimal number"); 190 time_format[12].txt = _("either AM or PM"); 191 time_format[13].txt = _("the second as a decimal number"); 192 time_format[14].txt = _("the day of the week as a decimal number"); 193 time_format[15].txt = _("the preferred date for the current locale"); 194 time_format[16].txt = _("the last two digits of a year"); 195 time_format[17].txt = _("the year as a decimal number"); 196 time_format[18].txt = _("the time zone or name or abbreviation"); 197 198 if (datefmt_win) return datefmt_win; 199 200 store = gtk_list_store_new(N_DATEFMT_COLUMNS, 201 G_TYPE_STRING, 202 G_TYPE_STRING, 203 -1); 204 205 for (i = 0; i < TIME_FORMAT_ELEMS; i++) { 206 GtkTreeIter iter; 207 208 gtk_list_store_append(store, &iter); 209 gtk_list_store_set(store, &iter, 210 DATEFMT_FMT, time_format[i].fmt, 211 DATEFMT_TXT, time_format[i].txt, 212 -1); 213 } 214 215 datefmt_win = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "prefs_summaries"); 216 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8); 217 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format")); 218 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER); 219 gtk_window_set_type_hint(GTK_WINDOW(datefmt_win), GDK_WINDOW_TYPE_HINT_DIALOG); 220 gtk_widget_set_size_request(datefmt_win, 440, 280); 221 222 vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); 223 gtk_widget_show(vbox1); 224 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1); 225 226 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL); 227 gtk_scrolled_window_set_policy 228 (GTK_SCROLLED_WINDOW(scrolledwindow1), 229 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 230 gtk_widget_show(scrolledwindow1); 231 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0); 232 233 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); 234 g_object_unref(G_OBJECT(store)); 235 gtk_widget_show(datefmt_list_view); 236 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view); 237 238 renderer = gtk_cell_renderer_text_new(); 239 column = gtk_tree_view_column_new_with_attributes 240 (_("Specifier"), renderer, "text", DATEFMT_FMT, 241 NULL); 242 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column); 243 244 renderer = gtk_cell_renderer_text_new(); 245 column = gtk_tree_view_column_new_with_attributes 246 (_("Description"), renderer, "text", DATEFMT_TXT, 247 NULL); 248 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column); 249 250 /* gtk_cmclist_set_column_width(GTK_CMCLIST(datefmt_clist), 0, 80); */ 251 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view)); 252 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); 253 254 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated", 255 G_CALLBACK(date_format_select_row), 256 datefmt_win); 257 258 table = gtk_grid_new(); 259 gtk_widget_show(table); 260 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0); 261 gtk_grid_set_row_spacing(GTK_GRID(table), 4); 262 gtk_grid_set_column_spacing(GTK_GRID(table), 8); 263 264 label1 = gtk_label_new(_("Date format")); 265 gtk_widget_show(label1); 266 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT); 267 gtk_label_set_xalign(GTK_LABEL(label1), 0.0); 268 gtk_grid_attach(GTK_GRID(table), label1, 0, 0, 1, 1); 269 270 datefmt_entry = gtk_entry_new(); 271 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256); 272 gtk_widget_show(datefmt_entry); 273 gtk_grid_attach(GTK_GRID(table), datefmt_entry, 1, 0, 1, 1); 274 gtk_widget_set_hexpand(datefmt_entry, TRUE); 275 gtk_widget_set_halign(datefmt_entry, GTK_ALIGN_FILL); 276 277 /* we need the "sample" entry box; add it as data so callbacks can 278 * get the entry box */ 279 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample", 280 datefmt_entry); 281 282 label2 = gtk_label_new(_("Example")); 283 gtk_widget_show(label2); 284 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT); 285 gtk_label_set_xalign(GTK_LABEL(label2), 0.0); 286 gtk_grid_attach(GTK_GRID(table), label2, 0, 1, 1, 1); 287 288 label3 = gtk_label_new(""); 289 gtk_widget_show(label3); 290 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT); 291 gtk_label_set_xalign(GTK_LABEL(label3), 0.0); 292 gtk_grid_attach(GTK_GRID(table), label3, 1, 1, 1, 1); 293 gtk_widget_set_hexpand(label3, TRUE); 294 gtk_widget_set_halign(label3, GTK_ALIGN_FILL); 295 296 gtkut_stock_button_set_create(&confirm_area, &cancel_btn, NULL, _("_Cancel"), 297 &ok_btn, NULL, _("_OK"), NULL, NULL, NULL); 298 299 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0); 300 gtk_widget_show(confirm_area); 301 gtk_widget_grab_default(ok_btn); 302 303 /* set the current format */ 304 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format); 305 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry), 306 GTK_LABEL(label3)); 307 308 g_signal_connect(G_OBJECT(ok_btn), "clicked", 309 G_CALLBACK(date_format_ok_btn_clicked), 310 &datefmt_win); 311 g_signal_connect(G_OBJECT(cancel_btn), "clicked", 312 G_CALLBACK(date_format_cancel_btn_clicked), 313 &datefmt_win); 314 g_signal_connect(G_OBJECT(datefmt_win), "delete_event", 315 G_CALLBACK(date_format_on_delete), 316 &datefmt_win); 317 g_signal_connect(G_OBJECT(datefmt_entry), "changed", 318 G_CALLBACK(date_format_entry_on_change), 319 label3); 320 321 gtk_widget_show(datefmt_win); 322 manage_window_set_transient(GTK_WINDOW(datefmt_win)); 323 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE); 324 325 gtk_widget_grab_focus(ok_btn); 326 327 return datefmt_win; 328 } 329 330 static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window, 331 gpointer data) 332 { 333 SummariesPage *prefs_summaries = (SummariesPage *) _page; 334 335 GtkWidget *notebook; 336 GtkWidget *hbox0, *hbox1, *hbox2; 337 GtkWidget *vbox1, *vbox2, *vbox3, *vbox4; 338 GtkWidget *frame_new_folders; 339 GtkWidget *checkbtn_useaddrbook; 340 GtkWidget *checkbtn_show_tooltips; 341 GtkWidget *checkbtn_threadsubj; 342 GtkWidget *label_datefmt; 343 GtkWidget *button_datefmt; 344 GtkWidget *entry_datefmt; 345 GtkWidget *button_dispitem; 346 GtkWidget *checkbtn_startup_folder; 347 GtkWidget *startup_folder_entry; 348 GtkWidget *startup_folder_select; 349 GtkWidget *checkbtn_always_show_msg; 350 GtkWidget *checkbtn_show_on_folder_open; 351 GtkWidget *checkbtn_show_on_search_results; 352 GtkWidget *checkbtn_show_on_prevnext; 353 GtkWidget *checkbtn_show_on_deletemove; 354 GtkWidget *checkbtn_show_on_directional; 355 GtkWidget *spinbtn_mark_as_read_delay; 356 GtkAdjustment *spinbtn_mark_as_read_delay_adj; 357 GtkWidget *checkbtn_immedexec; 358 GtkWidget *checkbtn_ask_mark_all_read; 359 GtkWidget *label, *label_fill; 360 GtkListStore *menu; 361 GtkTreeIter iter; 362 GtkWidget *optmenu_summaryfromshow; 363 GtkWidget *optmenu_nextunreadmsgdialog; 364 GtkWidget *button_edit_actions; 365 GtkWidget *radio_mark_as_read_on_select; 366 GtkWidget *radio_mark_as_read_on_new_win; 367 GtkWidget *optmenu_sort_key; 368 GtkWidget *optmenu_sort_type; 369 GtkWidget *checkbtn_folder_default_thread; 370 GtkWidget *checkbtn_folder_default_thread_collapsed; 371 GtkWidget *checkbtn_folder_default_hide_read_threads; 372 GtkWidget *checkbtn_folder_default_hide_read_msgs; 373 GtkWidget *checkbtn_folder_default_hide_del_msgs; 374 GtkWidget *checkbtn_summary_col_lock; 375 376 notebook = gtk_notebook_new(); 377 gtk_widget_show(notebook); 378 379 char path[PATH_MAX]; 380 strlcpy(path, getenv("HOME"), sizeof(path)); 381 strlcat(path, "/.local/share/talons/prefs_summaries.ui", sizeof(path)); 382 GtkBuilder *builder = gtk_builder_new_from_file(path); 383 384 button_dispitem = GTK_WIDGET(gtk_builder_get_object(builder, "dispitem")); 385 g_signal_connect(G_OBJECT (button_dispitem), "clicked", G_CALLBACK(prefs_folder_column_open), NULL); 386 387 startup_folder_entry = GTK_WIDGET(gtk_builder_get_object(builder, "startup-folder-entry")); 388 startup_folder_select = GTK_WIDGET(gtk_builder_get_object(builder, "startup-folder-button")); 389 checkbtn_startup_folder = GTK_WIDGET(gtk_builder_get_object(builder, "startup-folder-checkbutton")); 390 g_signal_connect(startup_folder_select, "clicked", G_CALLBACK(foldersel_cb), startup_folder_entry); 391 392 GtkWidget *folderlist = GTK_WIDGET(gtk_builder_get_object(builder, "folder-list")); 393 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), folderlist, gtk_label_new("Folder list")); 394 gtk_widget_show_all(folderlist); 395 396 vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING); 397 gtk_widget_show (vbox1); 398 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); 399 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox1, gtk_label_new("Message list")); 400 401 hbox0 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); 402 gtk_widget_show (hbox0); 403 gtk_box_pack_start(GTK_BOX(vbox1), hbox0, FALSE, TRUE, 0); 404 405 label = gtk_label_new("Displayed columns"); 406 gtk_widget_show(label); 407 gtk_box_pack_start(GTK_BOX(hbox0), label, FALSE, FALSE, 0); 408 button_dispitem = gtk_button_new_with_mnemonic("Edit"); 409 gtk_widget_show (button_dispitem); 410 gtk_box_pack_start (GTK_BOX (hbox0), button_dispitem, FALSE, FALSE, 0); 411 g_signal_connect (G_OBJECT (button_dispitem), "clicked", 412 G_CALLBACK (prefs_summary_column_open), 413 NULL); 414 415 PACK_SPACER(hbox0, hbox1, 4); 416 PACK_CHECK_BUTTON(hbox0, checkbtn_summary_col_lock, _("Lock column headers")); 417 418 hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); 419 gtk_widget_show (hbox1); 420 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); 421 422 label = gtk_label_new (_("Displayed in From column")); 423 gtk_widget_show (label); 424 gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); 425 426 optmenu_summaryfromshow = gtkut_sc_combobox_create(NULL, FALSE); 427 menu = GTK_LIST_STORE(gtk_combo_box_get_model( 428 GTK_COMBO_BOX(optmenu_summaryfromshow))); 429 gtk_widget_show (optmenu_summaryfromshow); 430 431 COMBOBOX_ADD (menu, _("Name"), SHOW_NAME); 432 COMBOBOX_ADD (menu, _("Address"), SHOW_ADDR); 433 COMBOBOX_ADD (menu, _("Name and Address"), SHOW_BOTH); 434 435 gtk_box_pack_start(GTK_BOX(hbox1), optmenu_summaryfromshow, FALSE, FALSE, 0); 436 hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); 437 gtk_widget_show (hbox2); 438 gtk_box_pack_start (GTK_BOX (vbox1), hbox2, FALSE, TRUE, 0); 439 440 label_datefmt = gtk_label_new (_("Date format")); 441 gtk_widget_show (label_datefmt); 442 gtk_box_pack_start (GTK_BOX (hbox2), label_datefmt, FALSE, FALSE, 0); 443 444 entry_datefmt = gtk_entry_new (); 445 gtk_widget_show (entry_datefmt); 446 gtk_box_pack_start (GTK_BOX (hbox2), entry_datefmt, FALSE, FALSE, 0); 447 448 button_datefmt = gtkut_stock_button("dialog-information", _("_Information")); 449 450 gtk_widget_show (button_datefmt); 451 gtk_box_pack_start (GTK_BOX (hbox2), button_datefmt, FALSE, FALSE, 0); 452 g_signal_connect (G_OBJECT (button_datefmt), "clicked", 453 G_CALLBACK (date_format_create), NULL); 454 455 label_fill = gtk_label_new(" "); 456 gtk_box_pack_start(GTK_BOX(hbox2), label_fill, TRUE, FALSE, 0); 457 458 CLAWS_SET_TIP(button_datefmt, 459 _("Date format help")); 460 461 hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); 462 gtk_widget_show (hbox1); 463 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); 464 465 button_edit_actions = gtk_button_new_with_label(_("Set message selection when entering a folder")); 466 gtk_widget_show (button_edit_actions); 467 gtk_box_pack_start (GTK_BOX (hbox1), button_edit_actions, 468 FALSE, TRUE, 0); 469 g_signal_connect (G_OBJECT (button_edit_actions), "clicked", 470 G_CALLBACK (prefs_summary_open_open), 471 NULL); 472 473 /* Open message on select policy */ 474 vbox4 = gtkut_get_options_frame(vbox1, NULL, _("Open message when selected")); 475 476 PACK_CHECK_BUTTON(vbox4, checkbtn_always_show_msg, 477 _("Always")); 478 PACK_CHECK_BUTTON(vbox4, checkbtn_show_on_folder_open, 479 _("When opening a folder")); 480 PACK_CHECK_BUTTON(vbox4, checkbtn_show_on_search_results, 481 _("When displaying search results")); 482 PACK_CHECK_BUTTON(vbox4, checkbtn_show_on_prevnext, 483 _("When selecting next or previous message using shortcuts")); 484 PACK_CHECK_BUTTON(vbox4, checkbtn_show_on_deletemove, 485 _("When deleting or moving messages")); 486 PACK_CHECK_BUTTON(vbox4, checkbtn_show_on_directional, 487 _("When using directional keys")); 488 489 vbox3 = gtkut_get_options_frame(vbox1, NULL, _("Mark message as read")); 490 491 radio_mark_as_read_on_select = gtk_radio_button_new_with_label(NULL, 492 _("when selected, after")); 493 494 hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); 495 gtk_box_pack_start (GTK_BOX (hbox1), radio_mark_as_read_on_select, FALSE, FALSE, 0); 496 497 spinbtn_mark_as_read_delay_adj = GTK_ADJUSTMENT(gtk_adjustment_new (0, 0, 60, 1, 10, 0)); 498 spinbtn_mark_as_read_delay = gtk_spin_button_new 499 (GTK_ADJUSTMENT (spinbtn_mark_as_read_delay_adj), 1, 0); 500 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_mark_as_read_delay, 501 FALSE, FALSE, 0); 502 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_mark_as_read_delay), 503 TRUE); 504 gtk_box_pack_start (GTK_BOX (hbox1), gtk_label_new 505 (_("seconds")), FALSE, FALSE, 0); 506 507 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0); 508 509 radio_mark_as_read_on_new_win = gtk_radio_button_new_with_label_from_widget( 510 GTK_RADIO_BUTTON(radio_mark_as_read_on_select), 511 _("only when opened in a new window, or replied to")); 512 gtk_box_pack_start (GTK_BOX (vbox3), radio_mark_as_read_on_new_win, 513 FALSE, FALSE, 0); 514 gtk_widget_show_all(vbox3); 515 516 /* Next Unread Message Dialog */ 517 hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); 518 gtk_widget_show (hbox1); 519 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); 520 521 label = gtk_label_new (_("Show \"no unread (or new) message\" dialog")); 522 gtk_widget_show (label); 523 gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); 524 525 optmenu_nextunreadmsgdialog = gtkut_sc_combobox_create(NULL, FALSE); 526 menu = GTK_LIST_STORE(gtk_combo_box_get_model( 527 GTK_COMBO_BOX(optmenu_nextunreadmsgdialog))); 528 gtk_widget_show (optmenu_nextunreadmsgdialog); 529 530 COMBOBOX_ADD (menu, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS); 531 COMBOBOX_ADD (menu, _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES); 532 COMBOBOX_ADD (menu, _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO); 533 534 gtk_box_pack_start(GTK_BOX(hbox1), optmenu_nextunreadmsgdialog, FALSE, FALSE, 0); 535 536 PACK_CHECK_BUTTON 537 (vbox1, checkbtn_useaddrbook, 538 _("Display sender using address book")); 539 540 PACK_CHECK_BUTTON 541 (vbox1, checkbtn_threadsubj, 542 _("Thread using subject in addition to standard headers")); 543 544 PACK_CHECK_BUTTON 545 (vbox1, checkbtn_immedexec, 546 _("Execute immediately when moving or deleting messages")); 547 CLAWS_SET_TIP(checkbtn_immedexec, 548 _("When unchecked moving, copying and deleting of messages" 549 " is deferred until you use '/Tools/Execute'")); 550 551 PACK_CHECK_BUTTON 552 (vbox1, checkbtn_ask_mark_all_read, 553 _("Confirm when marking all messages as read or unread")); 554 555 PACK_CHECK_BUTTON 556 (vbox1, checkbtn_show_tooltips, 557 _("Show tooltips")); 558 559 hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); 560 gtk_widget_show (hbox2); 561 gtk_box_pack_start (GTK_BOX (vbox1), hbox2, FALSE, FALSE, 0); 562 563 vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING); 564 gtk_widget_show (vbox1); 565 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); 566 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox1, 567 gtk_label_new(_("Defaults"))); 568 569 vbox2 = gtkut_get_options_frame(vbox1, &frame_new_folders, _("New folders")); 570 571 hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); 572 gtk_widget_show(hbox1); 573 gtk_box_pack_start(GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); 574 575 label = gtk_label_new(_("Sort by")); 576 gtk_widget_show(label); 577 gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); 578 579 optmenu_sort_key = gtkut_sc_combobox_create(NULL, FALSE); 580 menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu_sort_key))); 581 gtk_widget_show(optmenu_sort_key); 582 583 COMBOBOX_ADD(menu, _("Number"), SORT_BY_NUMBER); 584 COMBOBOX_ADD(menu, _("Size"), SORT_BY_SIZE); 585 COMBOBOX_ADD(menu, _("Date"), SORT_BY_DATE); 586 COMBOBOX_ADD(menu, _("Thread date"), SORT_BY_THREAD_DATE); 587 COMBOBOX_ADD(menu, _("From"), SORT_BY_FROM); 588 COMBOBOX_ADD(menu, _("To"), SORT_BY_TO); 589 COMBOBOX_ADD(menu, _("Subject"), SORT_BY_SUBJECT); 590 COMBOBOX_ADD(menu, _("Tag"), SORT_BY_TAGS); 591 COMBOBOX_ADD(menu, _("Mark"), SORT_BY_MARK); 592 COMBOBOX_ADD(menu, _("Status"), SORT_BY_STATUS); 593 COMBOBOX_ADD(menu, _("Attachment"), SORT_BY_MIME); 594 COMBOBOX_ADD(menu, _("Score"), SORT_BY_SCORE); 595 COMBOBOX_ADD(menu, _("Locked"), SORT_BY_LOCKED); 596 COMBOBOX_ADD(menu, _("Don't sort"), SORT_BY_NONE); 597 598 gtk_box_pack_start(GTK_BOX(hbox1), optmenu_sort_key, FALSE, FALSE, 0); 599 600 optmenu_sort_type = gtkut_sc_combobox_create(NULL, FALSE); 601 menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu_sort_type))); 602 gtk_widget_show(optmenu_sort_type); 603 604 COMBOBOX_ADD(menu, _("Ascending"), SORT_ASCENDING); 605 COMBOBOX_ADD(menu, _("Descending"), SORT_DESCENDING); 606 607 gtk_box_pack_start(GTK_BOX(hbox1), optmenu_sort_type, FALSE, FALSE, 0); 608 609 PACK_CHECK_BUTTON 610 (vbox2, checkbtn_folder_default_thread, 611 _("Thread view")); 612 PACK_CHECK_BUTTON 613 (vbox2, checkbtn_folder_default_thread_collapsed, 614 _("Collapse all threads")); 615 PACK_CHECK_BUTTON 616 (vbox2, checkbtn_folder_default_hide_read_threads, 617 _("Hide read threads")); 618 PACK_CHECK_BUTTON 619 (vbox2, checkbtn_folder_default_hide_read_msgs, 620 _("Hide read messages")); 621 PACK_CHECK_BUTTON 622 (vbox2, checkbtn_folder_default_hide_del_msgs, 623 _("Hide deleted messages")); 624 625 prefs_summaries->checkbtn_useaddrbook = checkbtn_useaddrbook; 626 prefs_summaries->checkbtn_show_tooltips = checkbtn_show_tooltips; 627 prefs_summaries->checkbtn_threadsubj = checkbtn_threadsubj; 628 prefs_summaries->entry_datefmt = entry_datefmt; 629 prefs_summaries->checkbtn_startup_folder = checkbtn_startup_folder; 630 prefs_summaries->startup_folder_entry = startup_folder_entry; 631 632 prefs_summaries->checkbtn_always_show_msg = checkbtn_always_show_msg; 633 prefs_summaries->checkbtn_show_on_folder_open = checkbtn_show_on_folder_open; 634 prefs_summaries->checkbtn_show_on_search_results = checkbtn_show_on_search_results; 635 prefs_summaries->checkbtn_show_on_prevnext = checkbtn_show_on_prevnext; 636 prefs_summaries->checkbtn_show_on_deletemove = checkbtn_show_on_deletemove; 637 prefs_summaries->checkbtn_show_on_directional = checkbtn_show_on_directional; 638 639 prefs_summaries->checkbtn_mark_as_read_on_newwin = radio_mark_as_read_on_new_win; 640 prefs_summaries->spinbtn_mark_as_read_delay = spinbtn_mark_as_read_delay; 641 prefs_summaries->checkbtn_immedexec = checkbtn_immedexec; 642 prefs_summaries->checkbtn_ask_mark_all_read = checkbtn_ask_mark_all_read; 643 prefs_summaries->optmenu_sort_key = optmenu_sort_key; 644 prefs_summaries->optmenu_sort_type = optmenu_sort_type; 645 prefs_summaries->optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog; 646 prefs_summaries->optmenu_summaryfromshow = optmenu_summaryfromshow; 647 648 prefs_summaries->checkbtn_folder_default_thread = checkbtn_folder_default_thread; 649 prefs_summaries->checkbtn_folder_default_thread_collapsed = checkbtn_folder_default_thread_collapsed; 650 prefs_summaries->checkbtn_folder_default_hide_read_threads = checkbtn_folder_default_hide_read_threads; 651 prefs_summaries->checkbtn_folder_default_hide_read_msgs = checkbtn_folder_default_hide_read_msgs; 652 prefs_summaries->checkbtn_folder_default_hide_del_msgs = checkbtn_folder_default_hide_del_msgs; 653 prefs_summaries->checkbtn_summary_col_lock = checkbtn_summary_col_lock; 654 655 prefs_summaries->page.widget = vbox1; 656 g_signal_connect(G_OBJECT(checkbtn_always_show_msg), "toggled", 657 G_CALLBACK(always_show_msg_toggled), prefs_summaries); 658 659 g_signal_connect(G_OBJECT(radio_mark_as_read_on_select), "toggled", 660 G_CALLBACK(mark_as_read_toggled), 661 spinbtn_mark_as_read_delay); 662 663 prefs_summaries->window = GTK_WIDGET(window); 664 665 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_useaddrbook), 666 prefs_common.use_addr_book); 667 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_tooltips), 668 prefs_common.show_tooltips); 669 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_threadsubj), 670 prefs_common.thread_by_subject); 671 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), 672 prefs_common.date_format?prefs_common.date_format:""); 673 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_startup_folder), 674 prefs_common.goto_folder_on_startup); 675 gtk_entry_set_text(GTK_ENTRY(startup_folder_entry), 676 prefs_common.startup_folder?prefs_common.startup_folder:""); 677 678 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_always_show_msg), 679 prefs_common.always_show_msg); 680 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_on_folder_open), 681 prefs_common.open_selected_on_folder_open); 682 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_on_search_results), 683 prefs_common.open_selected_on_search_results); 684 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_on_prevnext), 685 prefs_common.open_selected_on_prevnext); 686 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_on_deletemove), 687 prefs_common.open_selected_on_deletemove); 688 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_show_on_directional), 689 prefs_common.open_selected_on_directional); 690 691 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_mark_as_read_on_new_win), 692 prefs_common.mark_as_read_on_new_window); 693 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_mark_as_read_delay), 694 prefs_common.mark_as_read_delay); 695 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_immedexec), 696 prefs_common.immediate_exec); 697 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_ask_mark_all_read), 698 prefs_common.ask_mark_all_read); 699 700 combobox_select_by_data(GTK_COMBO_BOX(optmenu_sort_key), 701 prefs_common.default_sort_key); 702 combobox_select_by_data(GTK_COMBO_BOX(optmenu_sort_type), 703 prefs_common.default_sort_type); 704 705 combobox_select_by_data(GTK_COMBO_BOX(optmenu_nextunreadmsgdialog), 706 prefs_common.next_unread_msg_dialog); 707 708 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_default_thread), 709 prefs_common.folder_default_thread); 710 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_default_thread_collapsed), 711 prefs_common.folder_default_thread_collapsed); 712 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_default_hide_read_threads), 713 prefs_common.folder_default_hide_read_threads); 714 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_default_hide_read_msgs), 715 prefs_common.folder_default_hide_read_msgs); 716 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_default_hide_del_msgs), 717 prefs_common.folder_default_hide_del_msgs); 718 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_summary_col_lock), 719 prefs_common.summary_col_lock); 720 721 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); 722 723 prefs_summaries->page.widget = notebook; 724 } 725 726 #define MESSAGECOUNT_NONE 0 727 #define MESSAGECOUNT_UNREAD 1 728 #define MESSAGECOUNT_ALL 2 729 730 static void prefs_summaries_save(PrefsPage *_page) 731 { 732 SummariesPage *page = (SummariesPage *) _page; 733 734 prefs_common.display_folder_unread = MESSAGECOUNT_NONE; 735 736 prefs_common.use_addr_book = gtk_toggle_button_get_active( 737 GTK_TOGGLE_BUTTON(page->checkbtn_useaddrbook)); 738 prefs_common.show_tooltips = gtk_toggle_button_get_active( 739 GTK_TOGGLE_BUTTON(page->checkbtn_show_tooltips)); 740 prefs_common.thread_by_subject = gtk_toggle_button_get_active( 741 GTK_TOGGLE_BUTTON(page->checkbtn_threadsubj)); 742 743 free(prefs_common.date_format); 744 prefs_common.date_format = gtk_editable_get_chars( 745 GTK_EDITABLE(page->entry_datefmt), 0, -1); 746 747 prefs_common.goto_folder_on_startup = gtk_toggle_button_get_active( 748 GTK_TOGGLE_BUTTON(page->checkbtn_startup_folder)); 749 prefs_common.startup_folder = gtk_editable_get_chars( 750 GTK_EDITABLE(page->startup_folder_entry), 0, -1); 751 752 prefs_common.always_show_msg = gtk_toggle_button_get_active( 753 GTK_TOGGLE_BUTTON(page->checkbtn_always_show_msg)); 754 prefs_common.open_selected_on_folder_open = gtk_toggle_button_get_active( 755 GTK_TOGGLE_BUTTON(page->checkbtn_show_on_folder_open)); 756 prefs_common.open_selected_on_search_results = gtk_toggle_button_get_active( 757 GTK_TOGGLE_BUTTON(page->checkbtn_show_on_search_results)); 758 prefs_common.open_selected_on_prevnext = gtk_toggle_button_get_active( 759 GTK_TOGGLE_BUTTON(page->checkbtn_show_on_prevnext)); 760 prefs_common.open_selected_on_deletemove = gtk_toggle_button_get_active( 761 GTK_TOGGLE_BUTTON(page->checkbtn_show_on_deletemove)); 762 prefs_common.open_selected_on_directional = gtk_toggle_button_get_active( 763 GTK_TOGGLE_BUTTON(page->checkbtn_show_on_directional)); 764 765 prefs_common.mark_as_read_on_new_window = gtk_toggle_button_get_active( 766 GTK_TOGGLE_BUTTON(page->checkbtn_mark_as_read_on_newwin)); 767 prefs_common.immediate_exec = gtk_toggle_button_get_active( 768 GTK_TOGGLE_BUTTON(page->checkbtn_immedexec)); 769 prefs_common.ask_mark_all_read = gtk_toggle_button_get_active( 770 GTK_TOGGLE_BUTTON(page->checkbtn_ask_mark_all_read)); 771 prefs_common.mark_as_read_delay = gtk_spin_button_get_value_as_int( 772 GTK_SPIN_BUTTON(page->spinbtn_mark_as_read_delay)); 773 prefs_common.summary_col_lock = gtk_toggle_button_get_active( 774 GTK_TOGGLE_BUTTON(page->checkbtn_summary_col_lock)); 775 776 prefs_common.default_sort_key = combobox_get_active_data( 777 GTK_COMBO_BOX(page->optmenu_sort_key)); 778 prefs_common.default_sort_type = combobox_get_active_data( 779 GTK_COMBO_BOX(page->optmenu_sort_type)); 780 prefs_common.summary_from_show = combobox_get_active_data( 781 GTK_COMBO_BOX(page->optmenu_summaryfromshow)); 782 prefs_common.next_unread_msg_dialog = combobox_get_active_data( 783 GTK_COMBO_BOX(page->optmenu_nextunreadmsgdialog)); 784 prefs_common.folder_default_thread = gtk_toggle_button_get_active( 785 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_thread)); 786 prefs_common.folder_default_thread_collapsed = gtk_toggle_button_get_active( 787 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_thread_collapsed)); 788 prefs_common.folder_default_hide_read_threads = gtk_toggle_button_get_active( 789 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_hide_read_threads)); 790 prefs_common.folder_default_hide_read_msgs = gtk_toggle_button_get_active( 791 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_hide_read_msgs)); 792 prefs_common.folder_default_hide_del_msgs = gtk_toggle_button_get_active( 793 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_hide_del_msgs)); 794 prefs_common.folder_default_hide_del_msgs = gtk_toggle_button_get_active( 795 GTK_TOGGLE_BUTTON(page->checkbtn_folder_default_hide_del_msgs)); 796 797 main_window_reflect_prefs_all(); 798 } 799 800 static void prefs_summaries_destroy_widget(PrefsPage *_page) 801 { 802 } 803 804 SummariesPage *prefs_summaries; 805 806 void prefs_summaries_init(void) 807 { 808 SummariesPage *page; 809 static gchar *path[3]; 810 811 path[0] = _("Display"); 812 path[1] = _("Summaries"); 813 path[2] = NULL; 814 815 page = g_new0(SummariesPage, 1); 816 page->page.path = path; 817 page->page.create_widget = prefs_summaries_create_widget; 818 page->page.destroy_widget = prefs_summaries_destroy_widget; 819 page->page.save_page = prefs_summaries_save; 820 page->page.weight = 140.0; 821 prefs_gtk_register_page((PrefsPage *) page); 822 prefs_summaries = page; 823 } 824 825 void prefs_summaries_done(void) 826 { 827 prefs_gtk_unregister_page((PrefsPage *) prefs_summaries); 828 g_free(prefs_summaries); 829 } 830 831 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget) 832 { 833 GtkWidget *datefmt_sample = NULL; 834 gchar *text; 835 836 cm_return_if_fail(widget != NULL); 837 cm_return_if_fail(*widget != NULL); 838 cm_return_if_fail(prefs_summaries->entry_datefmt != NULL); 839 840 datefmt_sample = GTK_WIDGET(g_object_get_data 841 (G_OBJECT(*widget), "datefmt_sample")); 842 cm_return_if_fail(datefmt_sample != NULL); 843 844 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1); 845 g_free(prefs_common.date_format); 846 prefs_common.date_format = text; 847 gtk_entry_set_text(GTK_ENTRY(prefs_summaries->entry_datefmt), text); 848 849 gtk_widget_destroy(*widget); 850 *widget = NULL; 851 } 852 853 static void date_format_cancel_btn_clicked(GtkButton *button, 854 GtkWidget **widget) 855 { 856 cm_return_if_fail(widget != NULL); 857 cm_return_if_fail(*widget != NULL); 858 859 gtk_widget_destroy(*widget); 860 *widget = NULL; 861 } 862 863 static gboolean date_format_on_delete(GtkWidget *dialogwidget, 864 GdkEventAny *event, GtkWidget **widget) 865 { 866 cm_return_val_if_fail(widget != NULL, FALSE); 867 cm_return_val_if_fail(*widget != NULL, FALSE); 868 869 *widget = NULL; 870 return FALSE; 871 } 872 873 static void date_format_entry_on_change(GtkEditable *editable, 874 GtkLabel *example) 875 { 876 time_t cur_time; 877 struct tm *cal_time; 878 gchar buffer[100]; 879 gchar *text; 880 struct tm lt; 881 882 cur_time = time(NULL); 883 cal_time = localtime_r(&cur_time, <); 884 buffer[0] = 0; 885 text = gtk_editable_get_chars(editable, 0, -1); 886 if (text) 887 fast_strftime(buffer, sizeof buffer, text, cal_time); 888 889 gtk_label_set_text(example, buffer); 890 891 g_free(text); 892 } 893 894 static void date_format_select_row(GtkTreeView *list_view, 895 GtkTreePath *path, 896 GtkTreeViewColumn *column, 897 GtkWidget *date_format) 898 { 899 gint cur_pos; 900 gchar *format; 901 const gchar *old_format; 902 gchar *new_format; 903 GtkWidget *datefmt_sample; 904 GtkTreeIter iter; 905 GtkTreeModel *model; 906 907 cm_return_if_fail(date_format != NULL); 908 909 /* only on double click */ 910 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format), 911 "datefmt_sample")); 912 913 cm_return_if_fail(datefmt_sample != NULL); 914 915 model = gtk_tree_view_get_model(list_view); 916 917 /* get format from list */ 918 if (!gtk_tree_model_get_iter(model, &iter, path)) 919 return; 920 921 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1); 922 923 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample)); 924 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample)); 925 926 /* insert the format into the text entry */ 927 new_format = g_malloc(strlen(old_format) + 3); 928 929 strncpy(new_format, old_format, cur_pos); 930 new_format[cur_pos] = '\0'; 931 strcat(new_format, format); 932 g_free(format); 933 strcat(new_format, &old_format[cur_pos]); 934 935 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format); 936 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2); 937 938 g_free(new_format); 939 } 940 941 static void always_show_msg_toggled(GtkToggleButton *button, 942 gpointer user_data) 943 { 944 const SummariesPage *prefs_summaries = (SummariesPage *)user_data; 945 gboolean state; 946 947 cm_return_if_fail(prefs_summaries != NULL); 948 949 state = gtk_toggle_button_get_active(button); 950 951 gtk_widget_set_sensitive(prefs_summaries->checkbtn_show_on_folder_open, !state); 952 gtk_widget_set_sensitive(prefs_summaries->checkbtn_show_on_search_results, !state); 953 gtk_widget_set_sensitive(prefs_summaries->checkbtn_show_on_prevnext, !state); 954 gtk_widget_set_sensitive(prefs_summaries->checkbtn_show_on_deletemove, !state); 955 gtk_widget_set_sensitive(prefs_summaries->checkbtn_show_on_directional, !state); 956 } 957 958 static void mark_as_read_toggled(GtkToggleButton *button, GtkWidget *spinbtn) 959 { 960 gtk_widget_set_sensitive(spinbtn, 961 gtk_toggle_button_get_active(button)); 962 } 963