1 /*
2 * Xiphos Bible Study Tool
3 * preferences_dialog.c - get user preferences
4 *
5 * Copyright (C) 2000-2020 Xiphos Developer Team
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <sys/types.h>
27 #include <sys/stat.h>
28 #include <unistd.h>
29 #include <string.h>
30
31 #include <gtk/gtk.h>
32 #include <gtk/gtk.h>
33 #ifndef USE_GTKBUILDER
34 #include <glade/glade-xml.h>
35 #endif
36
37 #include "gui/bibletext.h"
38 #include "gui/dialog.h"
39 #include "gui/xiphos.h"
40 #include "gui/preferences_dialog.h"
41 #include "gui/utilities.h"
42 #include "gui/gbs.h"
43 #include "gui/commentary.h"
44 #include "gui/dictlex.h"
45 #include "gui/parallel_view.h"
46 #include "gui/main_menu.h"
47 #include "gui/main_window.h"
48 #include "gui/sidebar.h"
49 #include "gui/tabbed_browser.h"
50 #include "gui/widgets.h"
51 #include "gui/font_dialog.h"
52
53 #include "main/sword.h"
54 #include "main/lists.h"
55 #include "main/mod_mgr.h"
56 #include "main/previewer.h"
57 #include "main/parallel_view.h"
58 #include "main/settings.h"
59 #include "main/sidebar.h"
60 #include "main/xml.h"
61 #include "main/url.hh"
62 #include "main/biblesync_glue.h"
63
64 #include "gui/debug_glib_null.h"
65
66 typedef struct _preferences_combo COMBOBOXS;
67 struct _preferences_combo
68 {
69 GtkWidget *default_dictionary_module;
70 GtkWidget *percomm_module;
71 GtkWidget *devotion_module;
72 GtkWidget *greek_lex__module;
73 GtkWidget *hebrew_lex__module;
74 GtkWidget *combo_entry_sp_dir;
75 GtkWidget *base_font_size;
76 GtkWidget *verse_number_size;
77 GtkWidget *special_locale;
78 GtkWidget *font_prefs;
79 };
80
81 typedef struct _preferences_color_pickers COLOR_PICKERS;
82 struct _preferences_color_pickers
83 {
84 GtkWidget *text;
85 GtkWidget *text_background;
86 GtkWidget *text_current_verse;
87 GtkWidget *verse_numbers;
88 GtkWidget *href_links;
89 GtkWidget *highlight_fg;
90 GtkWidget *highlight_bg;
91 GtkWidget *invert_normal;
92 GtkWidget *invert_highlight;
93 };
94
95 typedef struct _preferences_check_buttons CHECK_BUTTONS;
96 struct _preferences_check_buttons
97 {
98 GtkWidget *use_defaults; /* radio button */
99
100 GtkWidget *use_default_dictionary;
101 GtkWidget *use_linked_tabs;
102 GtkWidget *use_chapter_scroll;
103 GtkWidget *use_imageresize;
104 GtkWidget *use_verse_num_bold;
105 GtkWidget *use_verse_num_bracket;
106 GtkWidget *use_verse_num_superscript;
107 GtkWidget *readaloud;
108 GtkWidget *show_verse_num;
109 GtkWidget *versehighlight;
110 GtkWidget *annotate_highlight;
111 GtkWidget *xrefs_in_verse_list;
112 GtkWidget *show_splash_screen;
113 GtkWidget *prayerlist;
114 GtkWidget *statusbar;
115 GtkWidget *alternation;
116
117 GtkWidget *show_in_viewer;
118 GtkWidget *show_in_dictionary;
119 GtkWidget *show_devotion;
120
121 GtkWidget *bs_debug;
122 GtkWidget *bs_presence;
123 GtkWidget *bs_mismatch;
124 GtkWidget *bs_group_tab;
125 GtkWidget *bs_keyboard;
126 GtkWidget *bs_privacy;
127 };
128
129 typedef struct _preferences_radio_buttons RADIO_BUTTONS;
130 struct _preferences_radio_buttons
131 {
132 /* BibleSync mode selection */
133 GtkWidget *bs_mode_off;
134 GtkWidget *bs_mode_personal;
135 GtkWidget *bs_mode_speaker;
136 GtkWidget *bs_mode_audience;
137
138 /* BibleSync navigation choice */
139 GtkWidget *bs_nav_direct;
140 GtkWidget *bs_nav_verselist;
141
142 /* BibleSync listener choice. */
143 GtkWidget *bs_listen_some;
144 GtkWidget *bs_listen_all;
145 GtkWidget *bs_listen_none;
146 };
147
148 /* fixed callback values, for radio button assignment. */
149 static int rb_cb[] = {0, 1, 2, 3}; // userdata callback values.
150
151 typedef struct _preferences_buttons BUTTONS;
152 struct _preferences_buttons
153 {
154 GtkWidget *xiphos_defaults;
155 };
156
157 typedef struct _parallel_select PARALLEL_SELECT;
158 struct _parallel_select
159 {
160 GtkWidget *button_clear;
161 GtkWidget *button_cut;
162 GtkWidget *button_add;
163 GtkWidget *listview;
164 GtkWidget *mod_sel_dialog;
165 GtkWidget *mod_sel_close;
166 GtkWidget *mod_sel_add;
167 GtkWidget *mod_sel_treeview;
168 };
169 static GtkWidget *dialog_prefs = NULL;
170
171 GtkWidget *speaker_window = NULL; // BibleSync
172 GtkWidget *speaker_list = NULL; // BibleSync
173
174 /*****************************************************************************
175 * externs
176 */
177 extern gchar *tmpcolor;
178
179 /******************************************************************************
180 * static - visible to this file only
181 */
182 static GtkWidget *notebook;
183 static COMBOBOXS combo;
184 static COLOR_PICKERS color_picker;
185 static CHECK_BUTTONS check_button;
186 static RADIO_BUTTONS radio_button;
187 static PARALLEL_SELECT parallel_select;
188
189 /******************************************************************************
190 * Name
191 * on_prefs_configure_event
192 *
193 * Synopsis
194 * #include "gui/main_window.h"
195 * gboolean on_prefs_configure_event(GtkWidget * widget,
196 * GdkEventConfigure * event,
197 * gpointer user_data)
198 *
199 * Description
200 * remember placement+size of prefs window.
201 * cloned from on_parallel_configure_event
202 *
203 * Return value
204 * gboolean
205 */
206
on_prefs_configure_event(GtkWidget * widget,GdkEventConfigure * event,gpointer user_data)207 static gboolean on_prefs_configure_event(GtkWidget *widget,
208 GdkEventConfigure *event,
209 gpointer user_data)
210 {
211 gchar layout[10];
212 gint x;
213 gint y;
214
215 gdk_window_get_root_origin(GDK_WINDOW(gtk_widget_get_window(dialog_prefs)),
216 &x, &y);
217
218 settings.prefs_width = event->width;
219 settings.prefs_height = event->height;
220 settings.prefs_x = x;
221 settings.prefs_y = y;
222
223 sprintf(layout, "%d", settings.prefs_width);
224 xml_set_value("Xiphos", "layout", "prefs_width", layout);
225
226 sprintf(layout, "%d", settings.prefs_height);
227 xml_set_value("Xiphos", "layout", "prefs_height", layout);
228
229 sprintf(layout, "%d", settings.prefs_x);
230 xml_set_value("Xiphos", "layout", "prefs_x", layout);
231
232 sprintf(layout, "%d", settings.prefs_y);
233 xml_set_value("Xiphos", "layout", "prefs_y", layout);
234 xml_save_settings_doc(settings.fnconfigure);
235
236 return FALSE;
237 }
238
239 /******************************************************************************
240 * Name
241 * string_is_color
242 *
243 * Synopsis
244 * #include "preferences_dialog.h"
245 * gint string_is_color(gchar * color)
246 *
247 * Description
248 * this code is from bluefish-0.6
249 *
250 * Return value
251 * gint
252 */
253 #if !GTK_CHECK_VERSION(3, 4, 0)
string_is_color(gchar * color)254 static gint string_is_color(gchar *color)
255 {
256 gint i;
257
258 if (!color) {
259 XI_warning(("string_is_color, pointer NULL\n"));
260 return 0;
261 }
262 if (strlen(color) != 7) {
263 XI_warning(("string_is_color, strlen(%s) != 7\n", color));
264 return 0;
265 }
266 if (color[0] != '#') {
267 XI_warning(("string_is_color, 0 in %s is not #\n", color));
268 return 0;
269 }
270 for (i = 1; i < 7; i++) {
271 if ((color[i] > 102) ||
272 (color[i] < 48) ||
273 ((color[i] > 57) && (color[i] < 65)) ||
274 ((color[i] > 70) && (color[i] < 97))) {
275 XI_warning(("string_is_color, %d in %s is not from a color, it is %d\n",
276 i, color, color[i]));
277 return 0;
278 }
279 }
280 XI_print(("string_is_color, %s is color\n", color));
281 return 1;
282 }
283 #endif
284
285 #if GTK_CHECK_VERSION(3, 4, 0)
gdkrgba_to_hex(GdkRGBA * color)286 static gchar *gdkrgba_to_hex(GdkRGBA *color)
287 {
288 gchar *tmpstr;
289
290 tmpstr = g_malloc(8 * sizeof(char));
291 g_snprintf(tmpstr, 8, "#%.2X%.2X%.2X",
292 (unsigned int)(color->red * 255),
293 (unsigned int)(color->green * 255),
294 (unsigned int)(color->blue * 255));
295 return tmpstr;
296 }
297
298 #else
299 /******************************************************************************
300 * Name
301 * gdkcolor_to_hex
302 *
303 * Synopsis
304 * #include "preferences_dialog.h"
305 * gchar *gdkcolor_to_hex(gdouble * color, gint websafe)
306 *
307 * Description
308 * this code is from bluefish-1.0.2
309 *
310 * Return value
311 * gchar *
312 */
313
gdkcolor_to_hex(GdkColor color,gint websafe)314 static gchar *gdkcolor_to_hex(GdkColor color, gint websafe)
315 {
316 gchar *tmpstr;
317
318 tmpstr = g_malloc(8 * sizeof(char));
319 if (websafe) {
320 g_snprintf(tmpstr, 8, "#%.2X%.2X%.2X",
321 (0x33 * color.red / (256 * 0x33)),
322 (0x33 * color.green / (256 * 0x33)),
323 (0x33 * color.blue / (256 * 0x33)));
324 } else {
325 g_snprintf(tmpstr, 8, "#%.2X%.2X%.2X",
326 color.red / 256,
327 color.green / 256, color.blue / 256);
328 }
329 return tmpstr;
330 }
331
332 #endif
333
apply_color_settings(void)334 void apply_color_settings(void)
335 {
336 if (settings.havebible) {
337 main_display_bible(settings.MainWindowModule,
338 settings.currentverse);
339 main_update_parallel_page();
340 }
341 if (settings.havecomm)
342 main_display_commentary(settings.CommWindowModule,
343 settings.currentverse);
344 if (settings.havebook)
345 main_display_book(settings.book_mod, settings.book_key);
346 if (settings.havedict)
347 main_display_dictionary(settings.DictWindowModule,
348 settings.dictkey);
349 main_init_previewer();
350 }
351
352 /******************************************************************************
353 * Name
354 * invert_colors
355 *
356 * Synopsis
357 * #include "preferences_dialog.h"
358 * void invert_colors(char **color1, char *label1,
359 char **color2, char *label2)
360 *
361 * Description
362 * parameterized color selector inversion. called from on_invert().
363 *
364 * Return value
365 * void
366 */
367
invert_colors(char ** color1,char * label1,char ** color2,char * label2)368 void invert_colors(char **color1, char *label1,
369 char **color2, char *label2)
370 {
371 char *hold = *color1;
372 *color1 = *color2;
373 *color2 = hold;
374
375 xml_set_value("Xiphos", "HTMLcolors", label1, *color1);
376 xml_set_value("Xiphos", "HTMLcolors", label2, *color2);
377
378 setup_color_pickers();
379 apply_color_settings();
380 }
381
382 /******************************************************************************
383 * Name
384 * on_invert
385 *
386 * Synopsis
387 * #include "preferences_dialog.h"
388 * void on_invert(GtkWidget *button, gchar *user_data)
389 *
390 * Description
391 * invokes swap of normal or highlight foreground/background
392 *
393 * Return value
394 * void
395 */
396
on_invert(GtkWidget * button,gchar * user_data)397 void on_invert(GtkWidget *button, gchar *user_data)
398 {
399 if (user_data)
400 invert_colors(&settings.bible_bg_color, "background",
401 &settings.bible_text_color, "text_fg");
402 else
403 invert_colors(&settings.highlight_fg, "highlight_fg",
404 &settings.highlight_bg, "highlight_bg");
405 }
406
407 /******************************************************************************
408 * Name
409 * on_colorbutton1_color_set
410 *
411 * Synopsis
412 * #include "preferences_dialog.h"
413 * void on_colorbutton1_color_set(GtkColorButton * colorbutton,
414 * gpointer user_data)
415 *
416 * Description
417 *
418 * Return value
419 * void
420 */
421
422 void
on_colorbutton1_color_set(GtkColorButton * colorbutton,gpointer user_data)423 on_colorbutton1_color_set(GtkColorButton *colorbutton, gpointer user_data)
424 {
425 gchar *buf = NULL;
426 #if GTK_CHECK_VERSION(3, 4, 0)
427 GdkRGBA color;
428 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
429 &color);
430 buf = gdkrgba_to_hex(&color); //gdk_rgba_to_string (&color);
431 #else
432 GdkColor color;
433 gtk_color_button_get_color(colorbutton, &color);
434 buf = gdkcolor_to_hex(color, 1);
435 #endif
436 xml_set_value("Xiphos", "HTMLcolors", "background", buf);
437 settings.bible_bg_color =
438 xml_get_value("HTMLcolors", "background");
439 if (buf)
440 g_free(buf);
441 apply_color_settings();
442 }
443
444 /******************************************************************************
445 * Name
446 * on_colorbutton2_color_set
447 *
448 * Synopsis
449 * #include "preferences_dialog.h"
450 * void on_colorbutton2_color_set(GtkColorButton * colorbutton,
451 * gpointer user_data)
452 *
453 * Description
454 *
455 * Return value
456 * void
457 */
458
459 void
on_colorbutton2_color_set(GtkColorButton * colorbutton,gpointer user_data)460 on_colorbutton2_color_set(GtkColorButton *colorbutton, gpointer user_data)
461 {
462 gchar *buf2 = NULL;
463 #if GTK_CHECK_VERSION(3, 4, 0)
464 GdkRGBA color;
465
466 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
467 &color);
468 buf2 = gdkrgba_to_hex(&color);
469 #else
470 GdkColor color;
471
472 gtk_color_button_get_color(colorbutton, &color);
473 buf2 = gdkcolor_to_hex(color, 1);
474 #endif
475 xml_set_value("Xiphos", "HTMLcolors", "text_fg", buf2);
476 settings.bible_text_color = xml_get_value("HTMLcolors", "text_fg");
477 if (buf2)
478 g_free(buf2);
479 apply_color_settings();
480 }
481
482 /******************************************************************************
483 * Name
484 * on_colorbutton3_color_set
485 *
486 * Synopsis
487 * #include "preferences_dialog.h"
488 * void on_colorbutton3_color_set(GtkColorButton * colorbutton,
489 * gpointer user_data)
490 *
491 * Description
492 *
493 * Return value
494 * void
495 */
496
497 void
on_colorbutton3_color_set(GtkColorButton * colorbutton,gpointer user_data)498 on_colorbutton3_color_set(GtkColorButton *colorbutton, gpointer user_data)
499 {
500 gchar *buf2 = NULL;
501 #if GTK_CHECK_VERSION(3, 4, 0)
502 GdkRGBA color;
503
504 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
505 &color);
506 buf2 = gdkrgba_to_hex(&color);
507 #else
508 GdkColor color;
509
510 gtk_color_button_get_color(colorbutton, &color);
511 buf2 = gdkcolor_to_hex(color, 1);
512 #endif
513 xml_set_value("Xiphos", "HTMLcolors", "currentverse", buf2);
514 settings.currentverse_color =
515 xml_get_value("HTMLcolors", "currentverse");
516 if (buf2)
517 g_free(buf2);
518 apply_color_settings();
519 }
520
521 /******************************************************************************
522 * Name
523 * on_colorbutton4_color_set
524 *
525 * Synopsis
526 * #include "preferences_dialog.h"
527 * void on_colorbutton4_color_set(GtkColorButton * colorbutton,
528 * gpointer user_data)
529 *
530 * Description
531 *
532 * Return value
533 * void
534 */
535
536 void
on_colorbutton4_color_set(GtkColorButton * colorbutton,gpointer user_data)537 on_colorbutton4_color_set(GtkColorButton *colorbutton, gpointer user_data)
538 {
539 gchar *buf2 = NULL;
540 #if GTK_CHECK_VERSION(3, 4, 0)
541 GdkRGBA color;
542
543 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
544 &color);
545 buf2 = gdkrgba_to_hex(&color);
546 #else
547 GdkColor color;
548
549 gtk_color_button_get_color(colorbutton, &color);
550 buf2 = gdkcolor_to_hex(color, 1);
551 #endif
552 xml_set_value("Xiphos", "HTMLcolors", "versenum", buf2);
553 settings.bible_verse_num_color =
554 xml_get_value("HTMLcolors", "versenum");
555 if (buf2)
556 g_free(buf2);
557 apply_color_settings();
558 }
559
560 /******************************************************************************
561 * Name
562 * on_colorbutton5_color_set
563 *
564 * Synopsis
565 * #include "preferences_dialog.h"
566 * void on_colorbutton5_color_set(GtkColorButton * colorbutton,
567 * gpointer user_data)
568 *
569 * Description
570 *
571 * Return value
572 * void
573 */
574
575 void
on_colorbutton5_color_set(GtkColorButton * colorbutton,gpointer user_data)576 on_colorbutton5_color_set(GtkColorButton *colorbutton, gpointer user_data)
577 {
578 gchar *buf2 = NULL;
579 #if GTK_CHECK_VERSION(3, 4, 0)
580 GdkRGBA color;
581
582 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
583 &color);
584 buf2 = gdkrgba_to_hex(&color);
585 #else
586 GdkColor color;
587
588 gtk_color_button_get_color(colorbutton, &color);
589 buf2 = gdkcolor_to_hex(color, 1);
590 #endif
591 xml_set_value("Xiphos", "HTMLcolors", "link", buf2);
592 settings.link_color = xml_get_value("HTMLcolors", "link");
593 if (buf2)
594 g_free(buf2);
595 apply_color_settings();
596 }
597
598 /******************************************************************************
599 * Name
600 * on_colorbutton6_color_set
601 *
602 * Synopsis
603 * #include "preferences_dialog.h"
604 * void on_colorbutton6_color_set(GtkColorButton * colorbutton,
605 * gpointer user_data)
606 *
607 * Description
608 *
609 * Return value
610 * void
611 */
612
613 void
on_colorbutton6_color_set(GtkColorButton * colorbutton,gpointer user_data)614 on_colorbutton6_color_set(GtkColorButton *colorbutton, gpointer user_data)
615 {
616 gchar *buf2 = NULL;
617 #if GTK_CHECK_VERSION(3, 4, 0)
618 GdkRGBA color;
619
620 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
621 &color);
622 buf2 = gdkrgba_to_hex(&color);
623 #else
624 GdkColor color;
625
626 gtk_color_button_get_color(colorbutton, &color);
627 buf2 = gdkcolor_to_hex(color, 1);
628 #endif
629 xml_set_value("Xiphos", "HTMLcolors", "highlight_fg", buf2);
630 settings.highlight_fg =
631 xml_get_value("HTMLcolors", "highlight_fg");
632 if (buf2)
633 g_free(buf2);
634 apply_color_settings();
635 }
636
637 /******************************************************************************
638 * Name
639 * on_colorbutton7_color_set
640 *
641 * Synopsis
642 * #include "preferences_dialog.h"
643 * void on_colorbutton7_color_set(GtkColorButton * colorbutton,
644 * gpointer user_data)
645 *
646 * Description
647 *
648 * Return value
649 * void
650 */
651
652 void
on_colorbutton7_color_set(GtkColorButton * colorbutton,gpointer user_data)653 on_colorbutton7_color_set(GtkColorButton *colorbutton, gpointer user_data)
654 {
655 gchar *buf2 = NULL;
656 #if GTK_CHECK_VERSION(3, 4, 0)
657 GdkRGBA color;
658
659 gtk_color_chooser_get_rgba((GtkColorChooser *)colorbutton,
660 &color);
661 buf2 = gdkrgba_to_hex(&color);
662 #else
663 GdkColor color;
664
665 gtk_color_button_get_color(colorbutton, &color);
666 buf2 = gdkcolor_to_hex(color, 1);
667 #endif
668 xml_set_value("Xiphos", "HTMLcolors", "highlight_bg", buf2);
669 settings.highlight_bg =
670 xml_get_value("HTMLcolors", "highlight_bg");
671 if (buf2)
672 g_free(buf2);
673 apply_color_settings();
674 }
675
676 /******************************************************************************
677 * Name
678 * on_checkbutton1_toggled
679 *
680 * Synopsis
681 * #include "preferences_dialog.h"
682 * void on_checkbutton1_toggled(GtkToggleButton * togglebutton, gpointer user_data)
683 *
684 * Description
685 *
686 * Return value
687 * void
688 */
689
690 void
on_checkbutton1_toggled(GtkToggleButton * togglebutton,gpointer user_data)691 on_checkbutton1_toggled(GtkToggleButton *togglebutton, gpointer user_data)
692 {
693 gui_tabs_on_off(gtk_toggle_button_get_active(togglebutton));
694 /* if (togglebutton->active) {
695 xml_set_value("Xiphos", "tabs", "browsing", "1");
696 settings.browsing = TRUE;
697 gui_open_tabs();
698 gtk_widget_show(widgets.hboxtb);
699 } else {
700 xml_set_value("Xiphos", "tabs", "browsing", "0");
701 gtk_widget_hide(widgets.hboxtb);
702 settings.browsing = FALSE;
703 gui_close_all_tabs();
704 }
705 settings.browsing = atoi(xml_get_value("tabs", "browsing"));
706 */
707 }
708
709 /******************************************************************************
710 * Name
711 * on_checkbutton2_toggled
712 *
713 * Synopsis
714 * #include "preferences_dialog.h"
715 * void on_checkbutton2_toggled(GtkToggleButton * togglebutton, gpointer user_data)
716 *
717 * Description
718 *
719 * Return value
720 * void
721 */
722
723 void
on_checkbutton2_toggled(GtkToggleButton * togglebutton,gpointer user_data)724 on_checkbutton2_toggled(GtkToggleButton *togglebutton, gpointer user_data)
725 {
726 if (gtk_toggle_button_get_active(togglebutton))
727 xml_set_value("Xiphos", "misc", "showtexts", "1");
728 else
729 xml_set_value("Xiphos", "misc", "showtexts", "0");
730 settings.showtexts = atoi(xml_get_value("misc", "showtexts"));
731 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewtexts_item),
732 settings.showtexts);
733 gui_show_hide_texts(gtk_toggle_button_get_active(togglebutton));
734 }
735
736 /******************************************************************************
737 * Name
738 * on_checkbutton3_toggled
739 *
740 * Synopsis
741 * #include "preferences_dialog.h"
742 * void on_checkbutton3_toggled(GtkToggleButton * togglebutton, gpointer user_data)
743 *
744 * Description
745 *
746 * Return value
747 * void
748 */
749
750 void
on_checkbutton3_toggled(GtkToggleButton * togglebutton,gpointer user_data)751 on_checkbutton3_toggled(GtkToggleButton *togglebutton, gpointer user_data)
752 {
753 if (gtk_toggle_button_get_active(togglebutton))
754 xml_set_value("Xiphos", "misc", "showcomms", "1");
755 else
756 xml_set_value("Xiphos", "misc", "showcomms", "0");
757 settings.showcomms = atoi(xml_get_value("misc", "showcomms"));
758 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewcomms_item),
759 settings.showcomms);
760 gui_show_hide_comms(gtk_toggle_button_get_active(togglebutton));
761 }
762
763 /******************************************************************************
764 * Name
765 * on_checkbutton9_toggled
766 *
767 * Synopsis
768 * #include "preferences_dialog.h"
769 * void on_checkbutton9_toggled(GtkToggleButton * togglebutton, gpointer user_data)
770 *
771 * Description
772 *
773 * Return value
774 * void
775 */
776
777 void
on_checkbutton9_toggled(GtkToggleButton * togglebutton,gpointer user_data)778 on_checkbutton9_toggled(GtkToggleButton *togglebutton, gpointer user_data)
779 {
780 if (gtk_toggle_button_get_active(togglebutton))
781 xml_set_value("Xiphos", "misc", "showpreview", "1");
782 else
783 xml_set_value("Xiphos", "misc", "showpreview", "0");
784 settings.showpreview = atoi(xml_get_value("misc", "showpreview"));
785 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewpreview_item),
786 settings.showpreview);
787 gui_show_hide_preview(gtk_toggle_button_get_active(togglebutton));
788 }
789
790 /******************************************************************************
791 * Name
792 * on_checkbutton4_toggled
793 *
794 * Synopsis
795 * #include "preferences_dialog.h"
796 * void on_checkbutton4_toggled(GtkToggleButton * togglebutton, gpointer user_data)
797 *
798 * Description
799 *
800 * Return value
801 * void
802 */
803
804 void
on_checkbutton4_toggled(GtkToggleButton * togglebutton,gpointer user_data)805 on_checkbutton4_toggled(GtkToggleButton *togglebutton, gpointer user_data)
806 {
807 if (gtk_toggle_button_get_active(togglebutton))
808 xml_set_value("Xiphos", "misc", "showdicts", "1");
809 else
810 xml_set_value("Xiphos", "misc", "showdicts", "0");
811 settings.showdicts = atoi(xml_get_value("misc", "showdicts"));
812 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewdicts_item),
813 settings.showdicts);
814 gui_show_hide_dicts(gtk_toggle_button_get_active(togglebutton));
815 }
816
817 /******************************************************************************
818 * Name
819 * on_checkbutton10_toggled
820 *
821 * Synopsis
822 * #include "preferences_dialog.h"
823 * void on_checkbutton10_toggled(GtkToggleButton * togglebutton, gpointer user_data)
824 *
825 * Description
826 *
827 * Return value
828 * void
829 */
830
831 void
on_checkbutton10_toggled(GtkToggleButton * togglebutton,gpointer user_data)832 on_checkbutton10_toggled(GtkToggleButton *togglebutton,
833 gpointer user_data)
834 {
835 xml_set_value("Xiphos", "misc", "pinnedtabs",
836 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
837 settings.linkedtabs = atoi(xml_get_value("misc", "pinnedtabs"));
838 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.linkedtabs_item),
839 settings.linkedtabs);
840 }
841
842 /******************************************************************************
843 * Name
844 * on_biblesync_obtain_passphrase
845 *
846 * Synopsis
847 * #include "unlock_key_dialog.h"
848 * gchar *on_biblesync_obtain_passphrase()
849 *
850 * Description
851 * create dialog to get session passphrase
852 *
853 * Return value
854 * void
855 */
856
on_biblesync_obtain_passphrase()857 gchar *on_biblesync_obtain_passphrase()
858 {
859 gchar *retval;
860 GS_DIALOG *info = gui_new_dialog();
861 #if GTK_CHECK_VERSION(3, 10, 0)
862 info->stock_icon = g_strdup("dialog-warning");
863 #else
864 info->stock_icon = g_strdup(GTK_STOCK_DIALOG_WARNING);
865 #endif
866 info->label_top = g_strdup(_("BibleSync session passphrase"));
867 info->text1 = g_strdup(biblesync_get_passphrase());
868 info->label1 = _("Phrase:");
869 info->ok = TRUE;
870
871 (void)gui_gs_dialog(info);
872
873 retval = g_strdup(info->text1);
874 g_free(info->label_top);
875 g_free(info->text1);
876 g_free(info);
877 return retval;
878 }
879
880 /******************************************************************************
881 * Name
882 * on_checkbutton_biblesync_toggled
883 *
884 * Synopsis
885 * #include "preferences_dialog.h"
886 * void on_checkbutton_biblesync_toggled(GtkToggleButton * togglebutton, gpointer user_data)
887 * *((int*)user_data) is settings' bs_* bitflag.
888 *
889 * Description
890 * handle toggle of these biblesync flags:
891 * keyboard, privacy, presence, mismatch, debug (packet dump), group/tab.
892 *
893 * Return value
894 * void
895 */
896
897 static void
on_checkbutton_biblesync_toggled(GtkToggleButton * togglebutton,gpointer user_data)898 on_checkbutton_biblesync_toggled(GtkToggleButton *togglebutton,
899 gpointer user_data)
900 {
901 *((int *)user_data) = gtk_toggle_button_get_active(togglebutton);
902 if (user_data == &settings.bs_privacy)
903 biblesync_privacy(settings.bs_privacy);
904 }
905
906 /******************************************************************************
907 * Name
908 * on_radiobutton_biblesync_mode
909 *
910 * Synopsis
911 * #include "preferences_dialog.h"
912 * void on_radiobutton_biblesync_mode(GtkToggleButton * togglebutton, gpointer user_data)
913 * *((int*)user_data) is settings.bs_mode's selection.
914 *
915 * Description
916 * BibleSync mode selection, 0-3.
917 *
918 * Return value
919 * void
920 */
921
922 static void
on_radiobutton_biblesync_mode(GtkToggleButton * togglebutton,gpointer user_data)923 on_radiobutton_biblesync_mode(GtkToggleButton *togglebutton,
924 gpointer user_data)
925 {
926 if (gtk_toggle_button_get_active(togglebutton)) {
927 settings.bs_mode = *((int *)user_data);
928
929 if (settings.bs_mode != 0) {
930 g_free(settings.bs_passphrase);
931 settings.bs_passphrase =
932 on_biblesync_obtain_passphrase();
933 }
934 int new_mode = biblesync_mode_select(settings.bs_mode,
935 settings.bs_passphrase);
936 /* selecting active mode enables polled receiver. */
937
938 if (new_mode != settings.bs_mode) {
939 /* mode selection failed? probably dead interface */
940 gui_generic_warning(_("Mode selection failed.\n"
941 "Set \"Debug\" and try "
942 "again to see why."));
943 settings.bs_mode = new_mode;
944 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_off),
945 (settings.bs_mode == 0));
946 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_personal),
947 (settings.bs_mode == 1));
948 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_speaker),
949 (settings.bs_mode == 2));
950 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_audience),
951 (settings.bs_mode == 3));
952 }
953
954 gtk_widget_set_sensitive(check_button.bs_keyboard,
955 ((settings.bs_mode == 1) || (settings.bs_mode == 2)));
956
957 if (biblesync_personal()) {
958 gtk_widget_set_sensitive(check_button.bs_privacy, TRUE);
959 on_checkbutton_biblesync_toggled(GTK_TOGGLE_BUTTON(check_button.bs_privacy),
960 &settings.bs_privacy);
961 } else {
962 gtk_widget_set_sensitive(check_button.bs_privacy, FALSE);
963 }
964 }
965 }
966
967 /******************************************************************************
968 * Name
969 * on_biblesync_kbd
970 *
971 * Synopsis
972 * #include "preferences_dialog.h"
973 * void on_biblesync_kbd(int mode)
974 *
975 * Description
976 * kbd-selected biblesync mode.
977 * as elsewhere: 0 = off; 1 = personal; 2 = speaker; 3 = audience.
978 *
979 * Return value
980 * void
981 */
982
on_biblesync_kbd(int mode)983 void on_biblesync_kbd(int mode)
984 {
985 int new_mode;
986
987 settings.bs_mode = mode;
988 new_mode = biblesync_mode_select(settings.bs_mode,
989 settings.bs_passphrase);
990
991 if (new_mode != settings.bs_mode) {
992 gui_generic_warning(_("Mode selection failed.\n"));
993 settings.bs_mode = new_mode;
994 } else {
995 gchar *msg = g_strdup_printf(_("BibleSync: %s (passphrase \"%s\")."),
996 ((mode == 0)
997 ? _("Disabled")
998 : ((mode == 1)
999 ? _("Personal")
1000 : ((mode == 2)
1001 ? _("Speaker")
1002 : _("Audience")))),
1003 settings.bs_passphrase);
1004 gui_set_statusbar(msg);
1005 g_free(msg);
1006 }
1007 }
1008
1009 /******************************************************************************
1010 * Name
1011 * on_radiobutton_biblesync_nav
1012 *
1013 * Synopsis
1014 * #include "preferences_dialog.h"
1015 * void on_radiobutton_biblesync_nav(GtkToggleButton * togglebutton,
1016 * gpointer user_data)
1017 * *((int*)user_data) is settings.bs_navdirect's T|F selection.
1018 *
1019 * Description
1020 * BibleSync nav selection, direct (1) or verse list (0).
1021 *
1022 * Return value
1023 * void
1024 */
1025
1026 static void
on_radiobutton_biblesync_nav(GtkToggleButton * togglebutton,gpointer user_data)1027 on_radiobutton_biblesync_nav(GtkToggleButton *togglebutton,
1028 gpointer user_data)
1029 {
1030 if (gtk_toggle_button_get_active(togglebutton))
1031 settings.bs_navdirect = *((int *)user_data);
1032 }
1033
1034 /******************************************************************************
1035 * Name
1036 * on_radiobutton_biblesync_listen
1037 *
1038 * Synopsis
1039 * #include "preferences_dialog.h"
1040 * void on_radiobutton_biblesync_listen(GtkToggleButton * togglebutton,
1041 * gpointer user_data)
1042 * *((int*)user_data) is settings.bs_listen_set's 0|1|2 selection.
1043 *
1044 * Description
1045 * BibleSync listen set choice. calls biblesync glue if necessary,
1046 * to set or clear all listen bits.
1047 *
1048 * Return value
1049 * void
1050 */
1051
1052 static void
on_radiobutton_biblesync_listen(GtkToggleButton * togglebutton,gpointer user_data)1053 on_radiobutton_biblesync_listen(GtkToggleButton *togglebutton,
1054 gpointer user_data)
1055 {
1056 if (gtk_toggle_button_get_active(togglebutton)) {
1057 settings.bs_listen_set = *((int *)user_data);
1058
1059 if (settings.bs_listen_set != 0) // not selective
1060 {
1061 biblesync_set_clear_all_listen((settings.bs_listen_set == 1)
1062 ? TRUE
1063 : FALSE);
1064 }
1065 }
1066 }
1067
1068 /******************************************************************************
1069 * Name
1070 * on_checkbutton11_toggled
1071 *
1072 * Synopsis
1073 * #include "preferences_dialog.h"
1074 * void on_checkbutton11_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1075 *
1076 * Description
1077 *
1078 * Return value
1079 * void
1080 */
1081
1082 void
on_checkbutton11_toggled(GtkToggleButton * togglebutton,gpointer user_data)1083 on_checkbutton11_toggled(GtkToggleButton *togglebutton,
1084 gpointer user_data)
1085 {
1086 xml_set_value("Xiphos", "misc", "readaloud",
1087 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1088 settings.readaloud = atoi(xml_get_value("misc", "readaloud"));
1089 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.readaloud_item),
1090 settings.readaloud);
1091 }
1092
1093 /******************************************************************************
1094 * Name
1095 * on_checkbutton12_toggled
1096 *
1097 * Synopsis
1098 * #include "preferences_dialog.h"
1099 * void on_checkbutton12_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1100 *
1101 * Description
1102 *
1103 * Return value
1104 * void
1105 */
1106
1107 void
on_checkbutton12_toggled(GtkToggleButton * togglebutton,gpointer user_data)1108 on_checkbutton12_toggled(GtkToggleButton *togglebutton,
1109 gpointer user_data)
1110 {
1111 xml_set_value("Xiphos", "misc", "showversenum",
1112 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1113 settings.showversenum =
1114 atoi(xml_get_value("misc", "showversenum"));
1115
1116 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.showversenum_item),
1117 settings.showversenum);
1118 }
1119
1120 /******************************************************************************
1121 * Name
1122 * on_checkbutton6_toggled
1123 *
1124 * Synopsis
1125 * #include "preferences_dialog.h"
1126 * void on_checkbutton6_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1127 *
1128 * Description
1129 *
1130 * Return value
1131 * void
1132 */
1133
1134 void
on_checkbutton6_toggled(GtkToggleButton * togglebutton,gpointer user_data)1135 on_checkbutton6_toggled(GtkToggleButton *togglebutton, gpointer user_data)
1136 {
1137 xml_set_value("Xiphos", "lexicons", "usedefaultdict",
1138 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1139 settings.useDefaultDict =
1140 gtk_toggle_button_get_active(togglebutton);
1141 }
1142
1143 /******************************************************************************
1144 * Name
1145 * on_checkbutton7_toggled
1146 *
1147 * Synopsis
1148 * #include "preferences_dialog.h"
1149 * void on_checkbutton7_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1150 *
1151 * Description
1152 *
1153 * Return value
1154 * void
1155 */
1156
1157 void
on_checkbutton7_toggled(GtkToggleButton * togglebutton,gpointer user_data)1158 on_checkbutton7_toggled(GtkToggleButton *togglebutton, gpointer user_data)
1159 {
1160 xml_set_value("Xiphos", "misc", "dailydevotional",
1161 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1162 settings.showdevotional =
1163 gtk_toggle_button_get_active(togglebutton);
1164 }
1165
1166 /******************************************************************************
1167 * Name
1168 * on_checkbutton8_toggled
1169 *
1170 * Synopsis
1171 * #include "preferences_dialog.h"
1172 * void on_checkbutton8_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1173 *
1174 * Description
1175 *
1176 * Return value
1177 * void
1178 */
1179
1180 void
on_checkbutton8_toggled(GtkToggleButton * togglebutton,gpointer user_data)1181 on_checkbutton8_toggled(GtkToggleButton *togglebutton, gpointer user_data)
1182 {
1183 xml_set_value("Xiphos", "misc", "splash",
1184 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1185 settings.showsplash = gtk_toggle_button_get_active(togglebutton);
1186 }
1187
1188 /******************************************************************************
1189 * Name
1190 * on_checkbutton_scroll_toggled
1191 *
1192 * Synopsis
1193 * #include "preferences_dialog.h"
1194 * void on_checkbutton_scroll_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1195 *
1196 * Description
1197 *
1198 * Return value
1199 * void
1200 */
1201
1202 void
on_checkbutton_scroll_toggled(GtkToggleButton * togglebutton,gpointer user_data)1203 on_checkbutton_scroll_toggled(GtkToggleButton *togglebutton,
1204 gpointer user_data)
1205 {
1206 xml_set_value("Xiphos", "misc", "chapter-scroll",
1207 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1208 settings.chapter_scroll =
1209 gtk_toggle_button_get_active(togglebutton);
1210 }
1211
1212 /******************************************************************************
1213 * Name
1214 * on_checkbutton_imageresize_toggled
1215 *
1216 * Synopsis
1217 * #include "preferences_dialog.h"
1218 * void on_checkbutton_imageresize_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1219 *
1220 * Description
1221 *
1222 * Return value
1223 * void
1224 */
1225
1226 void
on_checkbutton_imageresize_toggled(GtkToggleButton * togglebutton,gpointer user_data)1227 on_checkbutton_imageresize_toggled(GtkToggleButton *togglebutton,
1228 gpointer user_data)
1229 {
1230 xml_set_value("Xiphos", "misc", "imageresize",
1231 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1232 settings.imageresize = gtk_toggle_button_get_active(togglebutton);
1233 }
1234
1235 /******************************************************************************
1236 * Name
1237 * on_checkbutton_verse_num_bold_toggled
1238 *
1239 * Synopsis
1240 * #include "preferences_dialog.h"
1241 * void on_checkbutton_verse_num_bold_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1242 *
1243 * Description
1244 *
1245 * Return value
1246 * void
1247 */
1248
1249 void
on_checkbutton_verse_num_bold_toggled(GtkToggleButton * togglebutton,gpointer user_data)1250 on_checkbutton_verse_num_bold_toggled(GtkToggleButton *togglebutton,
1251 gpointer user_data)
1252 {
1253 xml_set_value("Xiphos", "misc", "verse_num_bold",
1254 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1255 settings.verse_num_bold =
1256 atoi(xml_get_value("misc", "verse_num_bold"));
1257 char *url = g_strdup_printf("sword:///%s", settings.currentverse);
1258 main_url_handler(url, TRUE);
1259 g_free(url);
1260 }
1261
1262 /******************************************************************************
1263 * Name
1264 * on_checkbutton_verse_num_bracket_toggled
1265 *
1266 * Synopsis
1267 * #include "preferences_dialog.h"
1268 * void on_checkbutton_verse_num_bracket_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1269 *
1270 * Description
1271 *
1272 * Return value
1273 * void
1274 */
1275
1276 void
on_checkbutton_verse_num_bracket_toggled(GtkToggleButton * togglebutton,gpointer user_data)1277 on_checkbutton_verse_num_bracket_toggled(GtkToggleButton *togglebutton,
1278 gpointer user_data)
1279 {
1280 xml_set_value("Xiphos", "misc", "verse_num_bracket",
1281 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1282 settings.verse_num_bracket =
1283 atoi(xml_get_value("misc", "verse_num_bracket"));
1284 char *url = g_strdup_printf("sword:///%s", settings.currentverse);
1285 main_url_handler(url, TRUE);
1286 g_free(url);
1287 }
1288
1289 /******************************************************************************
1290 * Name
1291 * on_checkbutton_verse_num_superscript_toggled
1292 *
1293 * Synopsis
1294 * #include "preferences_dialog.h"
1295 * void on_checkbutton_verse_num_superscript_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1296 *
1297 * Description
1298 *
1299 * Return value
1300 * void
1301 */
1302
1303 void
on_checkbutton_verse_num_superscript_toggled(GtkToggleButton * togglebutton,gpointer user_data)1304 on_checkbutton_verse_num_superscript_toggled(GtkToggleButton *
1305 togglebutton,
1306 gpointer user_data)
1307 {
1308 xml_set_value("Xiphos", "misc", "verse_num_superscript",
1309 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1310 settings.verse_num_superscript =
1311 atoi(xml_get_value("misc", "verse_num_superscript"));
1312 char *url = g_strdup_printf("sword:///%s", settings.currentverse);
1313 main_url_handler(url, TRUE);
1314 g_free(url);
1315 }
1316
1317 /******************************************************************************
1318 * Name
1319 * on_checkbutton_versehighlight_toggled
1320 *
1321 * Synopsis
1322 * #include "preferences_dialog.h"
1323 * void on_checkbutton_versehighlight_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1324 *
1325 * Description
1326 *
1327 * Return value
1328 * void
1329 */
1330
1331 void
on_checkbutton_versehighlight_toggled(GtkToggleButton * togglebutton,gpointer user_data)1332 on_checkbutton_versehighlight_toggled(GtkToggleButton *togglebutton,
1333 gpointer user_data)
1334 {
1335 xml_set_value("Xiphos", "misc", "versehighlight",
1336 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1337 settings.versehighlight =
1338 gtk_toggle_button_get_active(togglebutton);
1339 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.versehighlight_item),
1340 settings.versehighlight);
1341 main_display_bible(settings.MainWindowModule,
1342 settings.currentverse);
1343 }
1344
1345 /******************************************************************************
1346 * Name
1347 * on_checkbutton_annotate_highlight_toggled
1348 *
1349 * Synopsis
1350 * #include "preferences_dialog.h"
1351 * void on_checkbutton_annotate_highlight_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1352 *
1353 * Description
1354 * En/disable yellow highlight on user's verse annotations.
1355 *
1356 * Return value
1357 * void
1358 */
1359
1360 void
on_checkbutton_annotate_highlight_toggled(GtkToggleButton * togglebutton,gpointer user_data)1361 on_checkbutton_annotate_highlight_toggled(GtkToggleButton *togglebutton,
1362 gpointer user_data)
1363 {
1364 xml_set_value("Xiphos", "misc", "annotatehighlight",
1365 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1366 settings.annotate_highlight =
1367 gtk_toggle_button_get_active(togglebutton);
1368 main_display_bible(settings.MainWindowModule,
1369 settings.currentverse);
1370 }
1371
1372 /******************************************************************************
1373 * Name
1374 * on_checkbutton_xrefs_in_verse_list_toggled
1375 *
1376 * Synopsis
1377 * #include "preferences_dialog.h"
1378 * void on_checkbutton_xrefs_in_verse_list_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1379 *
1380 * Description
1381 * En/disable use of verse list for Bible cross-refs.
1382 *
1383 * Return value
1384 * void
1385 */
1386
1387 void
on_checkbutton_xrefs_in_verse_list_toggled(GtkToggleButton * togglebutton,gpointer user_data)1388 on_checkbutton_xrefs_in_verse_list_toggled(GtkToggleButton *togglebutton,
1389 gpointer user_data)
1390 {
1391 xml_set_value("Xiphos", "misc", "xrefsinverselist",
1392 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1393 settings.xrefs_in_verse_list =
1394 gtk_toggle_button_get_active(togglebutton);
1395 }
1396
1397 /******************************************************************************
1398 * Name
1399 * on_checkbutton_prayerlist_toggled
1400 *
1401 * Synopsis
1402 * #include "preferences_dialog.h"
1403 * void on_checkbutton_prayerlist_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1404 *
1405 * Description
1406 *
1407 * Return value
1408 * void
1409 */
1410
1411 void
on_checkbutton_prayerlist_toggled(GtkToggleButton * togglebutton,gpointer user_data)1412 on_checkbutton_prayerlist_toggled(GtkToggleButton *togglebutton,
1413 gpointer user_data)
1414 {
1415 xml_set_value("Xiphos", "misc", "prayerlist",
1416 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1417 settings.prayerlist = gtk_toggle_button_get_active(togglebutton);
1418
1419 /* update module list to show choice */
1420 if (settings.prayerlist)
1421 gtk_widget_show(widgets.new_journal_item);
1422 else
1423 gtk_widget_hide(widgets.new_journal_item);
1424 main_update_module_lists();
1425 main_load_module_tree(sidebar.module_list);
1426 }
1427
1428 /******************************************************************************
1429 * Name
1430 * on_checkbutton_statusbar_toggled
1431 *
1432 * Synopsis
1433 * #include "preferences_dialog.h"
1434 * void on_checkbutton_statusbar_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1435 *
1436 * Description
1437 *
1438 * Return value
1439 * void
1440 */
1441
1442 void
on_checkbutton_statusbar_toggled(GtkToggleButton * togglebutton,gpointer user_data)1443 on_checkbutton_statusbar_toggled(GtkToggleButton *togglebutton, gpointer user_data)
1444 {
1445 xml_set_value("Xiphos", "misc", "statusbar",
1446 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1447 settings.statusbar = gtk_toggle_button_get_active(togglebutton);
1448
1449 if (settings.statusbar)
1450 gtk_widget_show(widgets.appbar);
1451 else
1452 gtk_widget_hide(widgets.appbar);
1453 }
1454
1455 /******************************************************************************
1456 * Name
1457 * on_checkbutton_alternation_toggled
1458 *
1459 * Synopsis
1460 * #include "preferences_dialog.h"
1461 * void on_checkbutton_alternation_toggled(GtkToggleButton * togglebutton, gpointer user_data)
1462 *
1463 * Description
1464 *
1465 * Return value
1466 * void
1467 */
1468
1469 void
on_checkbutton_alternation_toggled(GtkToggleButton * togglebutton,gpointer user_data)1470 on_checkbutton_alternation_toggled(GtkToggleButton *togglebutton, gpointer user_data)
1471 {
1472 xml_set_value("Xiphos", "misc", "alternation",
1473 (gtk_toggle_button_get_active(togglebutton) ? "1" : "0"));
1474 settings.alternation = gtk_toggle_button_get_active(togglebutton);
1475
1476 main_update_parallel_page(); /* 1 verse */
1477 if (settings.dockedInt) { /* whole chapter */
1478 main_update_parallel_page();
1479 } else {
1480 main_update_parallel_page_detached();
1481 }
1482 }
1483
1484 /******************************************************************************
1485 * Name
1486 * on_folder_changed
1487 *
1488 * Synopsis
1489 * #include "preferences_dialog.h"
1490 * void on_folder_changed(GtkFileChooser * filechooser, gpointer user_data)
1491 *
1492 * Description
1493 *
1494 * Return value
1495 * void
1496 */
1497
on_folder_changed(GtkFileChooser * filechooser,gpointer user_data)1498 void on_folder_changed(GtkFileChooser *filechooser, gpointer user_data)
1499 {
1500 gchar *directory =
1501 gtk_file_chooser_get_current_folder(filechooser);
1502 xml_set_value("Xiphos", "studypad", "directory", directory);
1503 settings.studypaddir = xml_get_value("studypad", "directory");
1504 g_free(directory);
1505 }
1506
1507 /******************************************************************************
1508 * Name
1509 * on_combobox1_changed
1510 *
1511 * Synopsis
1512 * #include "preferences_dialog.h"
1513 * void on_combobox1_changed(GtkEditable * editable, gpointer user_data)
1514 *
1515 * Description
1516 * combobox1 (verse number size)
1517 * has changed - update Biblical text pane
1518 *
1519 * Return value
1520 * void
1521 */
1522
on_combobox1_changed(GtkComboBox * combobox,gpointer user_data)1523 void on_combobox1_changed(GtkComboBox *combobox, gpointer user_data)
1524 {
1525 gchar *buf = NULL;
1526 gchar *url = NULL;
1527 GtkTreeIter iter;
1528 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1529
1530 gtk_combo_box_get_active_iter(combobox, &iter);
1531 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1532 if (!buf)
1533 return;
1534 xml_set_value("Xiphos", "fontsize", "versenum", buf);
1535 settings.verse_num_font_size_str =
1536 xml_get_value("fontsize", "versenum");
1537 settings.verse_num_font_size =
1538 atoi(settings.verse_num_font_size_str);
1539 url =
1540 g_strdup_printf("sword://%s/%s", settings.MainWindowModule,
1541 settings.currentverse);
1542 main_url_handler(url, TRUE);
1543 g_free(url);
1544 g_free(buf);
1545 }
1546
1547 /******************************************************************************
1548 * Name
1549 * on_basecombobox1_changed
1550 *
1551 * Synopsis
1552 * #include "preferences_dialog.h"
1553 * void on_basecombobox1_changed(GtkEditable * editable, gpointer user_data)
1554 *
1555 * Description
1556 * combobox1 (base font size)
1557 * has changed - update Biblical text pane
1558 *
1559 * Return value
1560 * void
1561 */
1562
on_basecombobox1_changed(GtkComboBox * combobox,gpointer user_data)1563 void on_basecombobox1_changed(GtkComboBox *combobox, gpointer user_data)
1564 {
1565 gchar *buf = NULL;
1566 gchar *url = NULL;
1567 GtkTreeIter iter;
1568 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1569
1570 gtk_combo_box_get_active_iter(combobox, &iter);
1571 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1572 if (!buf)
1573 return;
1574 xml_set_value("Xiphos", "fontsize", "basefontsize", buf);
1575 g_free(buf);
1576
1577 if (settings.base_font_size_str)
1578 g_free(settings.base_font_size_str);
1579 settings.base_font_size_str =
1580 xml_get_value("fontsize", "basefontsize");
1581
1582 settings.base_font_size = atoi(settings.base_font_size_str);
1583 url = g_strdup_printf("sword://%s/%s",
1584 settings.MainWindowModule,
1585 settings.currentverse);
1586 main_url_handler(url, TRUE);
1587 g_free(url);
1588 main_display_dictionary(settings.DictWindowModule,
1589 settings.dictkey);
1590 }
1591
1592 /******************************************************************************
1593 * Name
1594 * on_combobox2_changed
1595 *
1596 * Synopsis
1597 * #include "preferences_dialog.h"
1598 * void on_combobox2_changed(GtkEditable * editable, gpointer user_data)
1599 *
1600 * Description
1601 * combobox2 (Biblical text module) or combobox3 (Commentary module),
1602 * has changed - update Biblical text and Commentary panes
1603 *
1604 * Return value
1605 * void
1606 */
1607
on_combobox2_changed(GtkComboBox * combobox,gpointer user_data)1608 void on_combobox2_changed(GtkComboBox *combobox, gpointer user_data)
1609 {
1610 gchar *buf = NULL;
1611 gchar *url = NULL;
1612 GtkTreeIter iter;
1613 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1614
1615 gtk_combo_box_get_active_iter(combobox, &iter);
1616 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1617 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1618 return;
1619
1620 url = g_strdup_printf("sword://%s/%s", buf, settings.currentverse);
1621 main_url_handler(url, TRUE);
1622 g_free(url);
1623 g_free(buf);
1624 }
1625
1626 /******************************************************************************
1627 * Name
1628 * on_combobox4_changed
1629 *
1630 * Synopsis
1631 * #include "preferences_dialog.h"
1632 * void on_combobox4_changed(GtkEditable * editable, gpointer user_data)
1633 *
1634 * Description
1635 * combobox4 (Dictionary module),
1636 * has changed - update dictionary pane
1637 *
1638 * Return value
1639 * void
1640 */
1641
on_combobox4_changed(GtkComboBox * combobox,gpointer user_data)1642 void on_combobox4_changed(GtkComboBox *combobox, gpointer user_data)
1643 {
1644 gchar *buf = NULL;
1645 gchar *url = NULL;
1646 GtkTreeIter iter;
1647 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1648
1649 gtk_combo_box_get_active_iter(combobox, &iter);
1650 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1651 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1652 return;
1653
1654 url = g_strdup_printf("sword://%s/%s", buf, settings.dictkey);
1655 main_url_handler(url, TRUE);
1656 g_free(url);
1657 g_free(buf);
1658 }
1659
1660 /******************************************************************************
1661 * Name
1662 * on_combobox5_changed
1663 *
1664 * Synopsis
1665 * #include "preferences_dialog.h"
1666 * void on_combobox5_changed(GtkEditable * editable, gpointer user_data)
1667 *
1668 * Description
1669 * combobox5 (default dictionary module),
1670 * has changed - update settings
1671 *
1672 * Return value
1673 * void
1674 */
1675
on_combobox5_changed(GtkComboBox * combobox,gpointer user_data)1676 void on_combobox5_changed(GtkComboBox *combobox, gpointer user_data)
1677 {
1678 gchar *buf = NULL;
1679 GtkTreeIter iter;
1680 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1681
1682 gtk_combo_box_get_active_iter(combobox, &iter);
1683 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1684 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1685 return;
1686 xml_set_value("Xiphos", "lexicons", "defaultdictionary", buf);
1687 settings.DefaultDict =
1688 xml_get_value("lexicons", "defaultdictionary");
1689 g_free(buf);
1690 }
1691
1692 /******************************************************************************
1693 * Name
1694 * on_combobox6_changed
1695 *
1696 * Synopsis
1697 * #include "preferences_dialog.h"
1698 * void on_combobox6_changed(GtkEditable * editable, gpointer user_data)
1699 *
1700 * Description
1701 * combobox6 (Personal comments module),
1702 * has changed - update settings
1703 *
1704 * Return value
1705 * void
1706 */
1707
on_combobox6_changed(GtkComboBox * combobox,gpointer user_data)1708 void on_combobox6_changed(GtkComboBox *combobox, gpointer user_data)
1709 {
1710 gchar *buf = NULL;
1711 GtkTreeIter iter;
1712 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1713
1714 gtk_combo_box_get_active_iter(combobox, &iter);
1715 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1716 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1717 return;
1718 xml_set_value("Xiphos", "modules", "percomm", buf);
1719 settings.personalcommentsmod = xml_get_value("modules", "percomm");
1720 g_free(buf);
1721 }
1722
1723 /******************************************************************************
1724 * Name
1725 * on_combobox12_changed
1726 *
1727 * Synopsis
1728 * #include "preferences_dialog.h"
1729 * void on_combobox12_changed(GtkEditable * editable, gpointer user_data)
1730 *
1731 * Description
1732 * combobox12 (Daily Devotional module),
1733 * has changed - update settings
1734 *
1735 * Return value
1736 * void
1737 */
1738
on_combobox12_changed(GtkComboBox * combobox,gpointer user_data)1739 void on_combobox12_changed(GtkComboBox *combobox, gpointer user_data)
1740 {
1741 gchar *buf = NULL;
1742 GtkTreeIter iter;
1743 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1744
1745 gtk_combo_box_get_active_iter(combobox, &iter);
1746 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1747 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1748 return;
1749 xml_set_value("Xiphos", "modules", "devotional", buf);
1750 settings.devotionalmod = xml_get_value("modules", "devotional");
1751 g_free(buf);
1752 }
1753
1754 /******************************************************************************
1755 * Name
1756 * on_combobox13_changed
1757 *
1758 * Synopsis
1759 * #include "preferences_dialog.h"
1760 * void on_combobox13_changed(GtkEditable * editable, gpointer user_data)
1761 *
1762 * Description
1763 * combobox13 (Hebrew lex module),
1764 * has changed - update settings
1765 *
1766 * Return value
1767 * void
1768 */
1769
on_combobox13_changed(GtkComboBox * combobox,gpointer user_data)1770 void on_combobox13_changed(GtkComboBox *combobox, gpointer user_data)
1771 {
1772 gchar *buf = NULL;
1773 GtkTreeIter iter;
1774 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1775
1776 gtk_combo_box_get_active_iter(combobox, &iter);
1777 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1778 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1779 return;
1780 xml_set_value("Xiphos", "lexicons", "hebrew", buf);
1781 settings.lex_hebrew = xml_get_value("lexicons", "hebrew");
1782 g_free(buf);
1783 }
1784
1785 /******************************************************************************
1786 * Name
1787 * on_combobox14_changed
1788 *
1789 * Synopsis
1790 * #include "preferences_dialog.h"
1791 * void on_combobox14_changed(GtkEditable * editable, gpointer user_data)
1792 *
1793 * Description
1794 * combobox14 (Greek lex module),
1795 * has changed - update settings
1796 *
1797 * Return value
1798 * void
1799 */
1800
on_combobox14_changed(GtkComboBox * combobox,gpointer user_data)1801 void on_combobox14_changed(GtkComboBox *combobox, gpointer user_data)
1802 {
1803 gchar *buf = NULL;
1804 GtkTreeIter iter;
1805 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1806
1807 gtk_combo_box_get_active_iter(combobox, &iter);
1808 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1809 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1810 return;
1811 xml_set_value("Xiphos", "lexicons", "greek", buf);
1812 settings.lex_greek = xml_get_value("lexicons", "greek");
1813 g_free(buf);
1814 }
1815
1816 /******************************************************************************
1817 * Name
1818 * on_combobox15_changed
1819 *
1820 * Synopsis
1821 * #include "preferences_dialog.h"
1822 * void on_combobox15_changed(GtkEditable * editable, gpointer user_data)
1823 *
1824 * Description
1825 * combobox4 (Book module),
1826 * has changed - update book pane
1827 *
1828 * Return value
1829 * void
1830 */
1831
on_combobox15_changed(GtkComboBox * combobox,gpointer user_data)1832 void on_combobox15_changed(GtkComboBox *combobox, gpointer user_data)
1833 {
1834 gchar *buf = NULL;
1835 gchar *url = NULL;
1836 GtkTreeIter iter;
1837 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1838
1839 gtk_combo_box_get_active_iter(combobox, &iter);
1840 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1841 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1842 return;
1843 url = g_strdup_printf("sword://%s/%s", buf, "1");
1844 main_url_handler(url, TRUE);
1845 g_free(url);
1846 g_free(buf);
1847 }
1848
1849 /******************************************************************************
1850 * Name
1851 * on_combobox16_changed
1852 *
1853 * Synopsis
1854 * #include "preferences_dialog.h"
1855 * void on_combobox16_changed(GtkEditable * editable, gpointer user_data)
1856 *
1857 * Description
1858 * combobox16 (special locale),
1859 * has changed - update settings
1860 *
1861 * Return value
1862 * void
1863 */
1864
on_combobox16_changed(GtkComboBox * combobox,gpointer user_data)1865 void on_combobox16_changed(GtkComboBox *combobox, gpointer user_data)
1866 {
1867 gchar *buf = NULL;
1868 GtkTreeIter iter;
1869 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1870 gboolean clear, set;
1871
1872 gtk_combo_box_get_active_iter(combobox, &iter);
1873 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1874 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1875 return;
1876
1877 clear = !strcmp(buf, NONE);
1878 if (!clear) {
1879 /* something new was chosen:
1880 move forward to and isolate "(xx_YY)" locale spec. */
1881 buf = strrchr(buf, '(') + 1;
1882 *strchr(buf, ')') = '\0';
1883 }
1884
1885 set = ((!settings.special_locale && strcmp(buf, NONE)) ||
1886 (settings.special_locale && (strcmp(settings.special_locale, buf))));
1887 if (clear || set)
1888 gui_generic_warning(_("Locale will take effect after restart."));
1889
1890 if (clear)
1891 *buf = '\0';
1892
1893 /* NOTE: These 2 uses of "None" are NOT TRANSLATABLE. */
1894 xml_set_value("Xiphos", "locale", "special",
1895 (clear ? "None" : buf));
1896 g_free(settings.special_locale); /* dispose of old content */
1897 settings.special_locale =
1898 (clear ? g_strdup("None") : g_strdup(buf));
1899 }
1900
1901 /******************************************************************************
1902 * Name
1903 * on_combobox17_changed
1904 *
1905 * Synopsis
1906 * #include "preferences_dialog.h"
1907 * void on_combobox17_changed(GtkEditable * editable, gpointer user_data)
1908 *
1909 * Description
1910 * combobox17 (language font preferences) => make a font selection.
1911 *
1912 * Return value
1913 * void
1914 */
1915
on_combobox17_changed(GtkComboBox * combobox,gpointer user_data)1916 void on_combobox17_changed(GtkComboBox *combobox, gpointer user_data)
1917 {
1918 gchar *buf = NULL;
1919 GtkTreeIter iter;
1920 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
1921 gchar *mod_name;
1922
1923 gtk_combo_box_get_active_iter(combobox, &iter);
1924 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &buf, -1);
1925 if (!buf || !strcmp(buf, _("-- Select --"))) /* see fill_combobox */
1926 return;
1927
1928 buf = strrchr(buf, '(') + 1;
1929 *strchr(buf, ')') = '\0';
1930
1931 mod_name = g_strdup_printf("Language:%s", buf);
1932 gui_set_module_font(mod_name);
1933 redisplay_to_realign();
1934 g_free(mod_name);
1935 }
1936
1937 /******************************************************************************
1938 * Name
1939 * add_columns
1940 *
1941 * Synopsis
1942 * #include "preferences_dialog.h"
1943 * void add_columns(GtkWidget * listview)
1944 *
1945 * Description
1946 *
1947 * Return value
1948 * void
1949 */
1950
add_columns(GtkWidget * treeview)1951 static void add_columns(GtkWidget *treeview)
1952 {
1953 GtkCellRenderer *renderer;
1954 GtkTreeViewColumn *column;
1955
1956 renderer = gtk_cell_renderer_text_new();
1957 column =
1958 gtk_tree_view_column_new_with_attributes(_("Preferences"),
1959 renderer,
1960 "text", 0, NULL);
1961
1962 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
1963 }
1964
1965 /******************************************************************************
1966 * Name
1967 * tree_selection_changed
1968 *
1969 * Synopsis
1970 * #include "gui/.h"
1971 * void tree_selection_changed(GtkTreeSelection * selection,
1972 * GtkWidget * tree_widget)
1973 *
1974 * Description
1975 *
1976 * Return value
1977 * void
1978 */
1979
1980 static void
tree_selection_changed(GtkTreeSelection * selection,gpointer data)1981 tree_selection_changed(GtkTreeSelection *selection, gpointer data)
1982 {
1983 GtkTreeIter selected;
1984 gint page;
1985 GtkTreeModel *model;
1986
1987 if (!gtk_tree_selection_get_selected(selection, &model, &selected))
1988 return;
1989
1990 gtk_tree_model_get(model, &selected, 1, &page, -1);
1991 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), page);
1992 }
1993
1994 /******************************************************************************
1995 * Name
1996 * on_dialog_prefs_response
1997 *
1998 * Synopsis
1999 * #include "gui/.h"
2000 * void on_dialog_prefs_response(GtkDialog * dialog, gint response_id,
2001 * gpointer user_data)
2002 *
2003 * Description
2004 *
2005 * Return value
2006 * void
2007 */
2008
2009 void
on_dialog_prefs_response(GtkDialog * dialog,gint response_id,gpointer user_data)2010 on_dialog_prefs_response(GtkDialog *dialog,
2011 gint response_id, gpointer user_data)
2012 {
2013 if (response_id == GTK_RESPONSE_CLOSE) {
2014 settings.display_prefs = 0;
2015 xml_set_value("Xiphos", "layout", "prefsopen", "0");
2016
2017 xml_save_settings_doc(settings.fnconfigure);
2018 gtk_widget_destroy(GTK_WIDGET(dialog));
2019
2020 dialog_prefs = NULL;
2021 speaker_window = NULL;
2022 speaker_list = NULL;
2023 }
2024 main_update_parallel_page();
2025 }
2026
create_model(void)2027 static GtkTreeModel *create_model(void)
2028 {
2029 GtkTreeStore *model;
2030 GtkTreeIter iter;
2031 GtkTreeIter child_iter;
2032
2033 model = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_INT);
2034
2035 gtk_tree_store_append(model, &iter, NULL);
2036 gtk_tree_store_set(model, &iter, 0, _("General"), -1);
2037
2038 gtk_tree_store_append(model, &child_iter, &iter);
2039 gtk_tree_store_set(model, &child_iter, 0, _("Options"), 1, 4, -1);
2040
2041 gtk_tree_store_append(model, &child_iter, &iter);
2042 gtk_tree_store_set(model, &child_iter, 0, _("BibleSync"), 1, 3,
2043 -1);
2044
2045 gtk_tree_store_append(model, &iter, NULL);
2046 gtk_tree_store_set(model, &iter, 0, _("Fonts"), -1);
2047
2048 gtk_tree_store_append(model, &child_iter, &iter);
2049 gtk_tree_store_set(model, &child_iter, 0, _("Color"), 1, 1, -1);
2050
2051 gtk_tree_store_append(model, &child_iter, &iter);
2052 gtk_tree_store_set(model, &child_iter, 0, _("Sizes and Faces"), 1,
2053 2, -1);
2054
2055 gtk_tree_store_append(model, &iter, NULL);
2056 gtk_tree_store_set(model, &iter, 0, _("Modules"), -1);
2057
2058 /* the former element "5" was previously here,
2059 which was for the "main modules," now defunct.
2060 we maintain the numbering because 6 & 7 are fixed refs. */
2061
2062 gtk_tree_store_append(model, &child_iter, &iter);
2063 gtk_tree_store_set(model, &child_iter, 0, _("Parallel"), 1, 6, -1);
2064
2065 gtk_tree_store_append(model, &child_iter, &iter);
2066 gtk_tree_store_set(model, &child_iter, 0, _("Special"), 1, 7, -1);
2067
2068 return GTK_TREE_MODEL(model);
2069 }
2070
2071 /******************************************************************************
2072 * Name
2073 * setup_color_pickers
2074 *
2075 * Synopsis
2076 * #include "preferences_dialog.h"
2077 * void setup_color_pickers(void)
2078 *
2079 * Description
2080 *
2081 * Return value
2082 * void
2083 */
2084
setup_color_pickers(void)2085 void setup_color_pickers(void)
2086 {
2087 #if GTK_CHECK_VERSION(3, 4, 0)
2088 GdkRGBA rgba;
2089 if (gdk_rgba_parse(&rgba, settings.bible_bg_color))
2090 gtk_color_chooser_set_rgba((GtkColorChooser *)
2091 color_picker.text_background,
2092 &rgba);
2093 if (gdk_rgba_parse(&rgba, settings.bible_text_color))
2094 gtk_color_chooser_set_rgba((GtkColorChooser *)
2095 color_picker.text,
2096 &rgba);
2097 if (gdk_rgba_parse(&rgba, settings.currentverse_color))
2098 gtk_color_chooser_set_rgba((GtkColorChooser *)
2099 color_picker.text_current_verse,
2100 &rgba);
2101 if (gdk_rgba_parse(&rgba, settings.bible_verse_num_color))
2102 gtk_color_chooser_set_rgba((GtkColorChooser *)
2103 color_picker.verse_numbers,
2104 &rgba);
2105 if (gdk_rgba_parse(&rgba, settings.link_color))
2106 gtk_color_chooser_set_rgba((GtkColorChooser *)
2107 color_picker.href_links,
2108 &rgba);
2109 if (gdk_rgba_parse(&rgba, settings.highlight_fg))
2110 gtk_color_chooser_set_rgba((GtkColorChooser *)
2111 color_picker.highlight_fg,
2112 &rgba);
2113 if (gdk_rgba_parse(&rgba, settings.highlight_bg))
2114 gtk_color_chooser_set_rgba((GtkColorChooser *)
2115 color_picker.highlight_bg,
2116 &rgba);
2117 #else
2118 GdkColor color;
2119 if (string_is_color(settings.bible_bg_color)) {
2120 gdk_color_parse(settings.bible_bg_color, &color);
2121 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text_background),
2122 &color);
2123 } else {
2124 gdk_color_parse("#FFFFFF", &color);
2125 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text_background),
2126 &color);
2127 }
2128 if (string_is_color(settings.bible_text_color)) {
2129 gdk_color_parse(settings.bible_text_color, &color);
2130 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text), &color);
2131 } else {
2132 gdk_color_parse("#000000", &color);
2133 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text), &color);
2134 }
2135
2136 if (string_is_color(settings.currentverse_color)) {
2137 gdk_color_parse(settings.currentverse_color, &color);
2138 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text_current_verse), &color);
2139 } else {
2140 gdk_color_parse("#339766", &color);
2141 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.text_current_verse), &color);
2142 }
2143
2144 if (string_is_color(settings.bible_verse_num_color)) {
2145 gdk_color_parse(settings.bible_verse_num_color, &color);
2146 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.verse_numbers),
2147 &color);
2148 } else {
2149 gdk_color_parse("#0000CF", &color);
2150 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.verse_numbers),
2151 &color);
2152 }
2153
2154 if (string_is_color(settings.link_color)) {
2155 gdk_color_parse(settings.link_color, &color);
2156 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.href_links),
2157 &color);
2158 } else {
2159 gdk_color_parse("#878787", &color);
2160 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.href_links),
2161 &color);
2162 }
2163
2164 // contrasty highlighting -- foreground.
2165 if (string_is_color(settings.highlight_fg))
2166 gdk_color_parse(settings.highlight_fg, &color);
2167 else
2168 gdk_color_parse("#FFFF00", &color);
2169 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.highlight_fg), &color);
2170
2171 // contrasty highlighting -- background.
2172 if (string_is_color(settings.highlight_bg))
2173 gdk_color_parse(settings.highlight_bg, &color);
2174 else
2175 gdk_color_parse("#060680", &color);
2176 gtk_color_button_set_color(GTK_COLOR_BUTTON(color_picker.highlight_bg), &color);
2177 #endif
2178 }
2179
setup_check_buttons(void)2180 static void setup_check_buttons(void)
2181 {
2182 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_default_dictionary),
2183 settings.useDefaultDict);
2184 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.show_devotion),
2185 settings.showdevotional);
2186 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.show_splash_screen),
2187 settings.showsplash);
2188 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_chapter_scroll),
2189 settings.chapter_scroll);
2190 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_imageresize),
2191 settings.imageresize);
2192 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_verse_num_bold),
2193 settings.verse_num_bold);
2194 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_verse_num_bracket),
2195 settings.verse_num_bracket);
2196 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.use_verse_num_superscript),
2197 settings.verse_num_superscript);
2198 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.versehighlight),
2199 settings.versehighlight);
2200 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.annotate_highlight),
2201 settings.annotate_highlight);
2202 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.xrefs_in_verse_list),
2203 settings.xrefs_in_verse_list);
2204 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.prayerlist),
2205 settings.prayerlist);
2206 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.statusbar),
2207 settings.statusbar);
2208 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.alternation),
2209 settings.alternation);
2210
2211 /* v-- BibleSync --v */
2212 /* toggles */
2213 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_debug),
2214 settings.bs_debug);
2215 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_presence),
2216 settings.bs_presence);
2217 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_mismatch),
2218 settings.bs_mismatch);
2219 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_group_tab),
2220 settings.bs_group_tab);
2221 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_keyboard),
2222 settings.bs_keyboard);
2223 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button.bs_privacy),
2224 settings.bs_privacy);
2225 gtk_widget_set_sensitive(check_button.bs_privacy,
2226 biblesync_personal());
2227 gtk_widget_set_sensitive(check_button.bs_keyboard,
2228 ((settings.bs_mode == 1) || (settings.bs_mode == 2)));
2229
2230 /* mode */
2231 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_off),
2232 (settings.bs_mode == 0));
2233 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_personal),
2234 (settings.bs_mode == 1));
2235 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_speaker),
2236 (settings.bs_mode == 2));
2237 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_mode_audience),
2238 (settings.bs_mode == 3));
2239
2240 /* navigation method */
2241 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_nav_direct),
2242 (settings.bs_navdirect == 1));
2243 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_nav_verselist),
2244 (settings.bs_navdirect == 0));
2245
2246 /* listening choice */
2247 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_listen_some),
2248 (settings.bs_listen_set == 0));
2249 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_listen_all),
2250 (settings.bs_listen_set == 1));
2251 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button.bs_listen_none),
2252 (settings.bs_listen_set == 2));
2253 /* ^-- BibleSync --^ */
2254
2255 g_signal_connect(check_button.use_default_dictionary, "toggled",
2256 G_CALLBACK(on_checkbutton6_toggled), NULL);
2257 g_signal_connect(check_button.show_devotion, "toggled",
2258 G_CALLBACK(on_checkbutton7_toggled), NULL);
2259 g_signal_connect(check_button.show_splash_screen, "toggled",
2260 G_CALLBACK(on_checkbutton8_toggled), NULL);
2261 g_signal_connect(check_button.use_chapter_scroll, "toggled",
2262 G_CALLBACK(on_checkbutton_scroll_toggled), NULL);
2263 g_signal_connect(check_button.use_imageresize, "toggled",
2264 G_CALLBACK(on_checkbutton_imageresize_toggled),
2265 NULL);
2266 g_signal_connect(check_button.use_verse_num_bold, "toggled",
2267 G_CALLBACK(on_checkbutton_verse_num_bold_toggled),
2268 NULL);
2269 g_signal_connect(check_button.use_verse_num_bracket, "toggled",
2270 G_CALLBACK(on_checkbutton_verse_num_bracket_toggled), NULL);
2271 g_signal_connect(check_button.use_verse_num_superscript, "toggled",
2272 G_CALLBACK(on_checkbutton_verse_num_superscript_toggled),
2273 NULL);
2274 g_signal_connect(check_button.versehighlight, "toggled",
2275 G_CALLBACK(on_checkbutton_versehighlight_toggled),
2276 NULL);
2277 g_signal_connect(check_button.annotate_highlight, "toggled",
2278 G_CALLBACK(on_checkbutton_annotate_highlight_toggled),
2279 NULL);
2280 g_signal_connect(check_button.xrefs_in_verse_list, "toggled",
2281 G_CALLBACK(on_checkbutton_xrefs_in_verse_list_toggled),
2282 NULL);
2283 g_signal_connect(check_button.prayerlist, "toggled",
2284 G_CALLBACK(on_checkbutton_prayerlist_toggled),
2285 NULL);
2286 g_signal_connect(check_button.statusbar, "toggled",
2287 G_CALLBACK(on_checkbutton_statusbar_toggled),
2288 NULL);
2289 g_signal_connect(check_button.alternation, "toggled",
2290 G_CALLBACK(on_checkbutton_alternation_toggled),
2291 NULL);
2292
2293 /* v-- BibleSync --v */
2294 g_signal_connect(check_button.bs_debug, "toggled",
2295 G_CALLBACK(on_checkbutton_biblesync_toggled),
2296 &settings.bs_debug);
2297 g_signal_connect(check_button.bs_presence, "toggled",
2298 G_CALLBACK(on_checkbutton_biblesync_toggled),
2299 &settings.bs_presence);
2300 g_signal_connect(check_button.bs_mismatch, "toggled",
2301 G_CALLBACK(on_checkbutton_biblesync_toggled),
2302 &settings.bs_mismatch);
2303 g_signal_connect(check_button.bs_group_tab, "toggled",
2304 G_CALLBACK(on_checkbutton_biblesync_toggled),
2305 &settings.bs_group_tab);
2306 g_signal_connect(check_button.bs_keyboard, "toggled",
2307 G_CALLBACK(on_checkbutton_biblesync_toggled),
2308 &settings.bs_keyboard);
2309 g_signal_connect(check_button.bs_privacy, "toggled",
2310 G_CALLBACK(on_checkbutton_biblesync_toggled),
2311 &settings.bs_privacy);
2312
2313 g_signal_connect(radio_button.bs_mode_off, "toggled",
2314 G_CALLBACK(on_radiobutton_biblesync_mode),
2315 &rb_cb[0]);
2316 g_signal_connect(radio_button.bs_mode_personal, "toggled",
2317 G_CALLBACK(on_radiobutton_biblesync_mode),
2318 &rb_cb[1]);
2319 g_signal_connect(radio_button.bs_mode_speaker, "toggled",
2320 G_CALLBACK(on_radiobutton_biblesync_mode),
2321 &rb_cb[2]);
2322 g_signal_connect(radio_button.bs_mode_audience, "toggled",
2323 G_CALLBACK(on_radiobutton_biblesync_mode),
2324 &rb_cb[3]);
2325
2326 g_signal_connect(radio_button.bs_nav_direct, "toggled",
2327 G_CALLBACK(on_radiobutton_biblesync_nav),
2328 &rb_cb[1]);
2329 g_signal_connect(radio_button.bs_nav_verselist, "toggled",
2330 G_CALLBACK(on_radiobutton_biblesync_nav),
2331 &rb_cb[0]);
2332
2333 g_signal_connect(radio_button.bs_listen_some, "toggled",
2334 G_CALLBACK(on_radiobutton_biblesync_listen),
2335 &rb_cb[0]);
2336 g_signal_connect(radio_button.bs_listen_all, "toggled",
2337 G_CALLBACK(on_radiobutton_biblesync_listen),
2338 &rb_cb[1]);
2339 g_signal_connect(radio_button.bs_listen_none, "toggled",
2340 G_CALLBACK(on_radiobutton_biblesync_listen),
2341 &rb_cb[2]);
2342 /* ^-- BibleSync --^ */
2343 }
2344
2345 /*
2346 * comparator function to determine filling of true general dict lists.
2347 */
dict_no_image_map_dd(char * modname,char * feature)2348 static gboolean dict_no_image_map_dd(char *modname, char *feature)
2349 {
2350 /* no features or categories */
2351 const char *f = main_get_mod_config_entry(modname, "Feature");
2352 const char *c = main_get_mod_config_entry(modname, "Category");
2353 return ((c == NULL) && (f == NULL));
2354 }
2355
2356 /*
2357 * comparator function to determine filling of heb/grk dict lists.
2358 */
dict_match_feature(char * modname,char * feature)2359 static gboolean dict_match_feature(char *modname, char *feature)
2360 {
2361 const char *f = main_get_mod_config_entry(modname, "Feature");
2362 return (f && (!strcmp(f, feature)));
2363 }
2364
fill_combobox(GList * glist,GtkComboBox * combo,gchar * current_item,gboolean (* eval)(char *,char *),char * feature)2365 static void fill_combobox(GList *glist, GtkComboBox *combo, gchar *current_item, gboolean (*eval)(char *, char *), /* evaluator of feature */
2366 char *feature)
2367 { /* feature sought or avoided */
2368 GtkTreeIter iter;
2369 GtkListStore *store;
2370 GtkCellRenderer *renderer;
2371 gint index = 0;
2372 gint i = 0;
2373
2374 store = gtk_list_store_new(1, G_TYPE_STRING);
2375 gtk_combo_box_set_model(combo, GTK_TREE_MODEL(store));
2376
2377 renderer = gtk_cell_renderer_text_new();
2378 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
2379 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", 0, NULL);
2380
2381 gtk_list_store_clear(GTK_LIST_STORE(store));
2382
2383 gtk_list_store_append(GTK_LIST_STORE(store), &iter);
2384 gtk_list_store_set(GTK_LIST_STORE(store),
2385 &iter, 0, _("-- Select --"), -1);
2386
2387 while (glist) {
2388 if ((eval == NULL) || (*eval)(glist->data, feature)) {
2389 /* "anything goes" or "acceptable match" */
2390 gtk_list_store_append(GTK_LIST_STORE(store),
2391 &iter);
2392 gtk_list_store_set(GTK_LIST_STORE(store), &iter, 0,
2393 (gchar *)glist->data, -1);
2394 if (current_item && !strcmp((gchar *)glist->data, current_item))
2395 index = i + 1;
2396 ++i;
2397 }
2398 glist = g_list_next(glist);
2399 }
2400 gtk_combo_box_set_active(combo, index);
2401 }
2402
get_font_size_index(const char * font)2403 static gint get_font_size_index(const char *font)
2404 {
2405 if (!strcmp(font, "-2"))
2406 return 0;
2407 if (!strcmp(font, "-1"))
2408 return 1;
2409 if (!strcmp(font, "+0"))
2410 return 2;
2411 if (!strcmp(font, "+1"))
2412 return 3;
2413 if (!strcmp(font, "+2"))
2414 return 4;
2415 if (!strcmp(font, "+3"))
2416 return 5;
2417 if (!strcmp(font, "+4"))
2418 return 6;
2419 if (!strcmp(font, "+5"))
2420 return 7;
2421 return 0;
2422 }
2423
setup_module_comboboxes(void)2424 static void setup_module_comboboxes(void)
2425 {
2426 /*
2427 * Miscellaneous Modules page
2428 */
2429 fill_combobox(get_list(DEVOTION_LIST),
2430 GTK_COMBO_BOX(combo.devotion_module),
2431 settings.devotionalmod, NULL, NULL);
2432 fill_combobox(get_list(DICT_LIST),
2433 GTK_COMBO_BOX(combo.hebrew_lex__module),
2434 settings.lex_hebrew, dict_match_feature,
2435 "HebrewDef");
2436 fill_combobox(get_list(DICT_LIST),
2437 GTK_COMBO_BOX(combo.greek_lex__module),
2438 settings.lex_greek, dict_match_feature, "GreekDef");
2439 fill_combobox(get_list(DICT_LIST),
2440 GTK_COMBO_BOX(combo.default_dictionary_module),
2441 settings.DefaultDict, dict_no_image_map_dd, NULL);
2442 fill_combobox(get_list(PERCOMM_LIST),
2443 GTK_COMBO_BOX(combo.percomm_module),
2444 settings.personalcommentsmod, NULL, NULL);
2445
2446 /*
2447 * signal connectivity
2448 */
2449 g_signal_connect(combo.devotion_module, "changed",
2450 G_CALLBACK(on_combobox12_changed), NULL);
2451 g_signal_connect(combo.hebrew_lex__module, "changed",
2452 G_CALLBACK(on_combobox13_changed), NULL);
2453 g_signal_connect(combo.greek_lex__module, "changed",
2454 G_CALLBACK(on_combobox14_changed), NULL);
2455 g_signal_connect(combo.default_dictionary_module, "changed",
2456 G_CALLBACK(on_combobox5_changed), NULL);
2457 g_signal_connect(combo.percomm_module, "changed",
2458 G_CALLBACK(on_combobox6_changed), NULL);
2459 }
2460
setup_locale_combobox(void)2461 void setup_locale_combobox(void)
2462 {
2463 char **locale, brief_locale[3], *real_locale, *current_locale =
2464 NULL;
2465 GList *chase, *list = g_list_append(NULL, g_strdup(NONE));
2466
2467 brief_locale[2] = '\0';
2468 for (locale = &locale_set[0]; *locale; ++locale) {
2469 brief_locale[0] = (*locale)[0];
2470 brief_locale[1] = (*locale)[1];
2471 real_locale = g_strdup_printf("%s (%s)",
2472 main_get_language_map(brief_locale), *locale);
2473 list = g_list_append(list, real_locale);
2474 if (settings.special_locale &&
2475 !strcmp(settings.special_locale, *locale))
2476 current_locale = real_locale;
2477 }
2478 fill_combobox(list, GTK_COMBO_BOX(combo.special_locale),
2479 (current_locale ? current_locale : NONE),
2480 NULL, NULL);
2481 for (chase = list; chase; chase = g_list_next(chase))
2482 g_free(chase->data);
2483 g_list_free(list);
2484
2485 g_signal_connect(combo.special_locale, "changed",
2486 G_CALLBACK(on_combobox16_changed), NULL);
2487 }
2488
setup_font_prefs_combobox(void)2489 void setup_font_prefs_combobox(void)
2490 {
2491 char **language_list = main_get_module_language_list();
2492 char **language;
2493 GList *chase, *list = NULL;
2494
2495 for (language = &language_list[0]; *language; ++language) {
2496 char *real_language =
2497 g_strdup_printf("%s (%s)",
2498 main_get_language_map(*language), *language);
2499 list = g_list_append(list, real_language);
2500 }
2501 fill_combobox(list, GTK_COMBO_BOX(combo.font_prefs),
2502 NULL, NULL, NULL);
2503 for (chase = list; chase; chase = g_list_next(chase))
2504 g_free(chase->data);
2505 g_list_free(list);
2506 g_strfreev(language_list);
2507
2508 g_signal_connect(combo.font_prefs, "changed",
2509 G_CALLBACK(on_combobox17_changed), NULL);
2510 }
2511
2512 /******************************************************************************
2513 * Name
2514 * button_release_event
2515 *
2516 * Synopsis
2517 * #include "gui/search_dialog.h"
2518 * static gboolean button_release_event(GtkWidget * widget,
2519 * GdkEventButton * event,
2520 * gpointer data)
2521 *
2522 * Description
2523 * click on treeview folder to expand or collapse it
2524 *
2525 * Return value
2526 * gboolean
2527 */
2528
button_release_event(GtkWidget * widget,GdkEventButton * event,gpointer data)2529 static gboolean button_release_event(GtkWidget *widget,
2530 GdkEventButton *event, gpointer data)
2531 {
2532 GtkTreeSelection *selection = NULL;
2533 GtkTreeIter selected;
2534 GtkTreeModel *model;
2535 GtkTreePath *path;
2536
2537 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
2538 if ((!gtk_tree_selection_get_selected(selection, &model, &selected)) || (!gtk_tree_model_iter_has_child(model, &selected)))
2539 return FALSE;
2540
2541 path = gtk_tree_model_get_path(model, &selected);
2542 if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(widget), path))
2543 gtk_tree_view_collapse_row(GTK_TREE_VIEW(widget), path);
2544 else
2545 gtk_tree_view_expand_row(GTK_TREE_VIEW(widget), path,
2546 FALSE);
2547 gtk_tree_path_free(path);
2548 return FALSE;
2549 }
2550
2551 /******************************************************************************
2552 * Name
2553 *
2554 *
2555 * Synopsis
2556 * #include "gui/search_dialog.h"
2557 * static void _setup_listview
2558 *
2559 * Description
2560 * init the listing of currently-set parallel modules.
2561 *
2562 * Return value
2563 *
2564 */
2565
ps_setup_listview()2566 static void ps_setup_listview()
2567 {
2568 GtkListStore *model;
2569 GtkTreeViewColumn *column;
2570 GtkTreeIter iter;
2571 GtkTreeModel *model_t;
2572 GtkListStore *list_store;
2573 int i;
2574
2575 model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
2576 gtk_tree_view_set_model(GTK_TREE_VIEW(parallel_select.listview),
2577 GTK_TREE_MODEL(model));
2578
2579 for (i = 0; i < 2; ++i) {
2580 GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
2581 column = gtk_tree_view_column_new_with_attributes("Module",
2582 renderer,
2583 "text",
2584 i, NULL);
2585 gtk_tree_view_append_column(GTK_TREE_VIEW(parallel_select.listview),
2586 column);
2587 }
2588 gtk_tree_view_column_set_sort_column_id(column, 0);
2589
2590 model_t =
2591 gtk_tree_view_get_model(GTK_TREE_VIEW(parallel_select.listview));
2592 list_store = GTK_LIST_STORE(model_t);
2593 gtk_list_store_clear(list_store);
2594
2595 if (settings.parallel_list) {
2596 for (i = 0; settings.parallel_list[i]; ++i) {
2597 const char *abbreviation =
2598 main_get_abbreviation(settings.parallel_list
2599 [i]);
2600 gtk_list_store_append(list_store, &iter);
2601 gtk_list_store_set(list_store, &iter,
2602 0, main_get_module_description(settings.parallel_list[i]),
2603 1,
2604 (abbreviation
2605 ? abbreviation
2606 : (gchar *)
2607 settings.parallel_list[i]),
2608 -1);
2609 }
2610 }
2611 }
2612
2613 /******************************************************************************
2614 * Name
2615 * modules_lists_changed
2616 *
2617 * Synopsis
2618 * #include "gui/search_dialog.h"
2619 * void modules_lists_changed(GtkTreeSelection * selection,
2620 * gpointer data)
2621 *
2622 * Description
2623 *
2624 * Return value
2625 * void
2626 */
2627
2628 static gchar *module_selected = NULL;
2629
modules_lists_changed(GtkTreeSelection * selection,GtkTreeView * tree_widget)2630 static void modules_lists_changed(GtkTreeSelection *selection,
2631 GtkTreeView *tree_widget)
2632 {
2633 gchar *mod = NULL;
2634 GtkTreeIter selected;
2635 GtkTreeModel *model =
2636 gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget));
2637
2638 if (!gtk_tree_selection_get_selected(selection, NULL, &selected))
2639 return;
2640 if (gtk_tree_model_iter_has_child(model, &selected)) {
2641 g_free(module_selected);
2642 module_selected = NULL;
2643 return;
2644 }
2645
2646 gtk_tree_model_get(model, &selected, UTIL_COL_MODULE, &mod, -1);
2647 if (mod) {
2648 g_free(module_selected);
2649 module_selected = mod;
2650 }
2651 }
2652
2653 /******************************************************************************
2654 * Name
2655 *
2656 *
2657 * Synopsis
2658 * #include "gui/search_dialog.h"
2659 * void ps_setup_treeview(GtkWidget * treeview)
2660 *
2661 * Description
2662 *
2663 *
2664 * Return value
2665 *
2666 */
2667
ps_setup_treeview(GtkWidget * treeview)2668 static void ps_setup_treeview(GtkWidget *treeview)
2669 {
2670 GtkCellRenderer *renderer;
2671 GtkTreeViewColumn *column;
2672 GObject *selection;
2673
2674 renderer = gtk_cell_renderer_text_new();
2675 column = gtk_tree_view_column_new_with_attributes("Found",
2676 renderer,
2677 "text", 0, NULL);
2678 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
2679 gtk_tree_view_column_set_sort_column_id(column, 0);
2680 gui_load_module_tree(treeview, TRUE);
2681
2682 selection =
2683 G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)));
2684 g_signal_connect_after(G_OBJECT(treeview), "button_release_event",
2685 G_CALLBACK(button_release_event),
2686 GINT_TO_POINTER(0));
2687 g_signal_connect(selection, "changed",
2688 G_CALLBACK(modules_lists_changed), treeview);
2689 }
2690
on_mod_sel_add_clicked(GtkWidget * button,gchar * user_data)2691 static void on_mod_sel_add_clicked(GtkWidget *button, gchar *user_data)
2692 {
2693 GtkTreeModel *model;
2694 GtkListStore *list_store;
2695 GtkTreeIter iter;
2696 char *parallels = g_strdup(""), *newhold;
2697 const char *abbreviation;
2698 int count;
2699
2700 if (!module_selected) {
2701 g_free(parallels);
2702 return;
2703 }
2704 abbreviation = main_get_abbreviation(module_selected);
2705
2706 model =
2707 gtk_tree_view_get_model(GTK_TREE_VIEW(parallel_select.listview));
2708 list_store = GTK_LIST_STORE(model);
2709
2710 gtk_list_store_append(list_store, &iter);
2711 gtk_list_store_set(list_store, &iter,
2712 0, main_get_module_description(module_selected),
2713 1,
2714 (abbreviation ? abbreviation : module_selected),
2715 -1);
2716
2717 if (settings.parallel_list == NULL) {
2718 settings.parallel_list =
2719 g_strsplit(module_selected, ",", -1);
2720 } else {
2721 for (count = 0; settings.parallel_list[count]; ++count)
2722 ; /* count up the set */
2723 settings.parallel_list =
2724 g_renew(gchar *, settings.parallel_list, count + 2);
2725 settings.parallel_list[count] = g_strdup(module_selected); /* new element */
2726 settings.parallel_list[count + 1] = NULL;
2727 }
2728
2729 for (count = 0; settings.parallel_list[count]; ++count) {
2730 newhold =
2731 g_strconcat(parallels, settings.parallel_list[count],
2732 ",", NULL);
2733 g_free(parallels);
2734 parallels = newhold;
2735 }
2736
2737 if (*parallels) {
2738 *(parallels + strlen(parallels) - 1) = '\0'; /* end comma */
2739 xml_set_value("Xiphos", "modules", "parallels", parallels);
2740 }
2741 g_free(parallels);
2742 }
2743
on_mod_sel_close_clicked(void)2744 static void on_mod_sel_close_clicked(void)
2745 {
2746 gtk_widget_destroy(GTK_WIDGET(parallel_select.mod_sel_dialog));
2747 }
2748
2749 /******************************************************************************
2750 * Name
2751 * ps_button_clear
2752 *
2753 * Synopsis
2754 * void ps_button_clear(GtkButton * button, gpointer user_data)
2755 *
2756 * Description
2757 * clear all modules from the list. (parallel select)
2758 *
2759 * Return value
2760 * void
2761 */
ps_button_clear(GtkButton * button,gpointer user_data)2762 void ps_button_clear(GtkButton *button, gpointer user_data)
2763 {
2764 gchar *str =
2765 g_strdup_printf("<span weight=\"bold\">%s</span>\n\n%s",
2766 _("Clear List?"),
2767 _("Are you sure you want to clear the module list?"));
2768
2769 #if GTK_CHECK_VERSION(3, 10, 0)
2770 if (gui_yes_no_dialog(str, "dialog-warning")) {
2771 #else
2772 if (gui_yes_no_dialog(str, GTK_STOCK_DIALOG_WARNING)) {
2773 #endif
2774
2775 GtkTreeModel *model =
2776 gtk_tree_view_get_model(GTK_TREE_VIEW(parallel_select.listview));
2777 GtkListStore *list_store = GTK_LIST_STORE(model);
2778 gtk_list_store_clear(list_store);
2779 if (settings.parallel_list)
2780 g_strfreev(settings.parallel_list);
2781 settings.parallel_list = NULL;
2782 xml_set_value("Xiphos", "modules", "parallels", "");
2783 }
2784 g_free(str);
2785 }
2786
2787 /******************************************************************************
2788 * Name
2789 * ps_button_cut
2790 *
2791 * Synopsis
2792 * void ps_button_cut(GtkButton * button, gpointer user_data)
2793 *
2794 * Description
2795 * cut one module from the list. (parallel select)
2796 *
2797 * Return value
2798 * void
2799 */
2800 void ps_button_cut(GtkButton *button, gpointer user_data)
2801 {
2802 GtkTreeModel *model;
2803 GtkListStore *list_store;
2804 GtkTreeSelection *selection;
2805 GtkTreeIter selected;
2806 gchar *str;
2807
2808 model =
2809 gtk_tree_view_get_model(GTK_TREE_VIEW(parallel_select.listview));
2810 list_store = GTK_LIST_STORE(model);
2811 selection =
2812 gtk_tree_view_get_selection(GTK_TREE_VIEW(parallel_select.listview));
2813
2814 if (!gtk_tree_selection_get_selected(selection, NULL, &selected))
2815 return;
2816
2817 str = g_strdup_printf("<span weight=\"bold\">%s</span>\n\n%s",
2818 _("Remove Module?"),
2819 _("Are you sure you want to remove the selected module?"));
2820
2821 #if GTK_CHECK_VERSION(3, 10, 0)
2822 if (gui_yes_no_dialog(str, "dialog-warning")) {
2823 #else
2824 if (gui_yes_no_dialog(str, GTK_STOCK_DIALOG_WARNING)) {
2825 #endif
2826 gtk_list_store_remove(list_store, &selected);
2827 GList *mods =
2828 get_current_list(GTK_TREE_VIEW(parallel_select.listview));
2829 gchar *mod_list = get_modlist_string(mods);
2830 if (settings.parallel_list)
2831 g_strfreev(settings.parallel_list);
2832 settings.parallel_list = g_strsplit(mod_list, ",", -1);
2833 xml_set_value("Xiphos", "modules", "parallels", mod_list);
2834 g_free(mod_list);
2835 }
2836 g_free(str);
2837 }
2838
2839 /******************************************************************************
2840 * Name
2841 * ps_button_add
2842 *
2843 * Synopsis
2844 * void ps_button_add(GtkButton * button, gpointer user_data)
2845 *
2846 * Description
2847 * add one module from the list. (parallel select)
2848 *
2849 * Return value
2850 * void
2851 */
2852 void ps_button_add(GtkButton *button, gpointer user_data)
2853 {
2854 #ifdef USE_GTKBUILDER
2855 GtkBuilder *gxml;
2856 #else
2857 GladeXML *gxml;
2858 #endif
2859 gchar *glade_file =
2860 gui_general_user_file("selector-prefs" UI_SUFFIX, FALSE);
2861 g_return_if_fail(glade_file != NULL);
2862
2863 #ifdef USE_GTKBUILDER
2864 gxml = gtk_builder_new();
2865 gtk_builder_add_from_file(gxml, glade_file, NULL);
2866 #else
2867 gxml = glade_xml_new(glade_file, "mod_sel_dialog", NULL);
2868 #endif
2869 parallel_select.mod_sel_dialog =
2870 UI_GET_ITEM(gxml, "mod_sel_dialog");
2871 parallel_select.mod_sel_close =
2872 UI_GET_ITEM(gxml, "mod_sel_button_close");
2873 parallel_select.mod_sel_add =
2874 UI_GET_ITEM(gxml, "mod_sel_button_add");
2875
2876 g_signal_connect((gpointer)parallel_select.mod_sel_close,
2877 "clicked", G_CALLBACK(on_mod_sel_close_clicked),
2878 NULL);
2879 g_signal_connect((gpointer)parallel_select.mod_sel_add, "clicked",
2880 G_CALLBACK(on_mod_sel_add_clicked), NULL);
2881
2882 parallel_select.mod_sel_treeview =
2883 UI_GET_ITEM(gxml, "mod_sel_treeview");
2884 ps_setup_treeview(parallel_select.mod_sel_treeview);
2885
2886 gtk_widget_show(parallel_select.mod_sel_dialog);
2887 g_free(glade_file);
2888 }
2889
2890 /******************************************************************************
2891 * Name
2892 * gui_create_preferences_dialog
2893 *
2894 * Synopsis
2895 * #include "preferences_dialog.h"
2896 * GtkWidget *gui_create_preferences_dialog(GList * biblelist,
2897 * GList * commlist,
2898 * GList * dictlist,
2899 * GList * percomlist,
2900 * GList * devotionlist)
2901 *
2902 * Description
2903 * create preferences dialog and set to current values
2904 *
2905 * Return value
2906 * GtkWidget *
2907 */
2908
2909 static void create_preferences_dialog(void)
2910 {
2911 #ifdef USE_GTKBUILDER
2912 GtkBuilder *gxml;
2913 #else
2914 GladeXML *gxml;
2915 #endif
2916 GtkWidget *treeview;
2917 GtkTreeModel *model;
2918 GObject *selection;
2919 GtkWidget *chooser;
2920 gint index = 0;
2921 gchar *glade_file = gui_general_user_file("prefs" UI_SUFFIX, TRUE);
2922
2923 g_return_if_fail(glade_file != NULL);
2924
2925 /* build the widget */
2926 #ifdef USE_GTKBUILDER
2927 gxml = gtk_builder_new();
2928 gtk_builder_add_from_file(gxml, glade_file, NULL);
2929 #else
2930 gxml = glade_xml_new(glade_file, NULL, NULL);
2931 #endif
2932 g_free(glade_file);
2933 g_return_if_fail(gxml != NULL);
2934
2935 /* lookup the root widget */
2936 dialog_prefs = UI_GET_ITEM(gxml, "dialog_prefs");
2937 gtk_window_resize(GTK_WINDOW(dialog_prefs),
2938 settings.prefs_width, settings.prefs_height);
2939 g_signal_connect(dialog_prefs, "response",
2940 G_CALLBACK(on_dialog_prefs_response), NULL);
2941
2942 /* color pickers */
2943 color_picker.text_background = UI_GET_ITEM(gxml, "colorbutton1");
2944 color_picker.text = UI_GET_ITEM(gxml, "colorbutton2");
2945 color_picker.text_current_verse = UI_GET_ITEM(gxml, "colorbutton3");
2946 color_picker.verse_numbers = UI_GET_ITEM(gxml, "colorbutton4");
2947 color_picker.href_links = UI_GET_ITEM(gxml, "colorbutton5");
2948 color_picker.highlight_fg = UI_GET_ITEM(gxml, "colorbutton6");
2949 color_picker.highlight_bg = UI_GET_ITEM(gxml, "colorbutton7");
2950
2951 color_picker.invert_normal = UI_GET_ITEM(gxml, "invert_normal");
2952 color_picker.invert_highlight =
2953 UI_GET_ITEM(gxml, "invert_highlight");
2954
2955 check_button.use_linked_tabs = UI_GET_ITEM(gxml, "checkbutton10");
2956 check_button.readaloud = UI_GET_ITEM(gxml, "checkbutton11");
2957 check_button.show_verse_num = UI_GET_ITEM(gxml, "checkbutton12");
2958 check_button.use_default_dictionary = UI_GET_ITEM(gxml, "checkbutton6");
2959 check_button.show_devotion = UI_GET_ITEM(gxml, "checkbutton7");
2960 check_button.show_splash_screen = UI_GET_ITEM(gxml, "checkbutton8");
2961 check_button.use_chapter_scroll = UI_GET_ITEM(gxml, "checkbutton_scroll");
2962
2963 check_button.use_imageresize = UI_GET_ITEM(gxml, "checkbutton_imageresize");
2964 #ifdef WIN32
2965 /* webkit image hackery requires resize always be enabled. */
2966 gtk_widget_hide(check_button.use_imageresize);
2967 #endif
2968 check_button.use_verse_num_bold = UI_GET_ITEM(gxml, "checkbutton_verse_num_bold");
2969 check_button.use_verse_num_bracket = UI_GET_ITEM(gxml, "checkbutton_verse_num_bracket");
2970 check_button.use_verse_num_superscript = UI_GET_ITEM(gxml, "checkbutton_verse_num_superscript");
2971 check_button.versehighlight = UI_GET_ITEM(gxml, "checkbutton_versehighlight");
2972 check_button.annotate_highlight = UI_GET_ITEM(gxml, "checkbutton_annotate_highlight");
2973 check_button.xrefs_in_verse_list = UI_GET_ITEM(gxml, "checkbutton_xrefs_in_verse_list");
2974 check_button.prayerlist = UI_GET_ITEM(gxml, "checkbutton_prayerlist");
2975 check_button.statusbar = UI_GET_ITEM(gxml, "checkbutton_statusbar");
2976 check_button.alternation = UI_GET_ITEM(gxml, "checkbutton_alternation");
2977
2978 /* v-- BibleSync --v */
2979 check_button.bs_debug = UI_GET_ITEM(gxml, "checkbutton_BSP_nav_debug");
2980 check_button.bs_presence = UI_GET_ITEM(gxml, "checkbutton_BSP_presence");
2981 check_button.bs_mismatch = UI_GET_ITEM(gxml, "checkbutton_BSP_mismatch");
2982 check_button.bs_group_tab = UI_GET_ITEM(gxml, "checkbutton_BSP_group_tab");
2983 check_button.bs_keyboard = UI_GET_ITEM(gxml, "checkbutton_BSP_keyboard");
2984 check_button.bs_privacy = UI_GET_ITEM(gxml, "checkbutton_BSP_privacy");
2985
2986 radio_button.bs_mode_off = UI_GET_ITEM(gxml, "radiobutton_BSP_off");
2987 radio_button.bs_mode_personal = UI_GET_ITEM(gxml, "radiobutton_BSP_personal");
2988 radio_button.bs_mode_speaker = UI_GET_ITEM(gxml, "radiobutton_BSP_speaker");
2989 radio_button.bs_mode_audience = UI_GET_ITEM(gxml, "radiobutton_BSP_audience");
2990
2991 radio_button.bs_nav_direct = UI_GET_ITEM(gxml, "radiobutton_BSP_nav_direct");
2992 radio_button.bs_nav_verselist = UI_GET_ITEM(gxml, "radiobutton_BSP_nav_verselist");
2993
2994 radio_button.bs_listen_some = UI_GET_ITEM(gxml, "radiobutton_BSP_listen_some");
2995 radio_button.bs_listen_all = UI_GET_ITEM(gxml, "radiobutton_BSP_listen_all");
2996 radio_button.bs_listen_none = UI_GET_ITEM(gxml, "radiobutton_BSP_listen_none");
2997
2998 speaker_window = UI_GET_ITEM(gxml, "speakerwindow");
2999 biblesync_update_speaker();
3000 /* ^-- BibleSync --^ */
3001
3002 g_signal_connect(color_picker.text_background, "color_set",
3003 G_CALLBACK(on_colorbutton1_color_set), NULL);
3004 g_signal_connect(color_picker.text, "color_set",
3005 G_CALLBACK(on_colorbutton2_color_set), NULL);
3006 g_signal_connect(color_picker.text_current_verse, "color_set",
3007 G_CALLBACK(on_colorbutton3_color_set), NULL);
3008 g_signal_connect(color_picker.verse_numbers, "color_set",
3009 G_CALLBACK(on_colorbutton4_color_set), NULL);
3010 g_signal_connect(color_picker.href_links, "color_set",
3011 G_CALLBACK(on_colorbutton5_color_set), NULL);
3012 g_signal_connect(color_picker.highlight_fg, "color_set",
3013 G_CALLBACK(on_colorbutton6_color_set), NULL);
3014 g_signal_connect(color_picker.highlight_bg, "color_set",
3015 G_CALLBACK(on_colorbutton7_color_set), NULL);
3016 setup_color_pickers();
3017
3018 /* color inverters */
3019 g_signal_connect((gpointer)color_picker.invert_normal, "clicked",
3020 G_CALLBACK(on_invert), (void *)1);
3021 g_signal_connect((gpointer)color_picker.invert_highlight,
3022 "clicked", G_CALLBACK(on_invert), (void *)0);
3023
3024 /* check buttons */
3025
3026 /* chapter scroll doesn't work in anything but gtkhtml3. */
3027 gtk_widget_hide(check_button.use_chapter_scroll);
3028
3029 setup_check_buttons();
3030
3031 /* verse number size */
3032 index = get_font_size_index(settings.verse_num_font_size_str);
3033 combo.verse_number_size = UI_GET_ITEM(gxml, "combobox1");
3034 gtk_combo_box_set_active(GTK_COMBO_BOX(combo.verse_number_size),
3035 index);
3036 g_signal_connect(combo.verse_number_size, "changed",
3037 G_CALLBACK(on_combobox1_changed), NULL);
3038
3039 /* base font size */
3040 index = get_font_size_index(settings.base_font_size_str);
3041 combo.base_font_size = UI_GET_ITEM(gxml, "basecombobox1");
3042 gtk_combo_box_set_active(GTK_COMBO_BOX(combo.base_font_size),
3043 index);
3044 g_signal_connect(combo.base_font_size, "changed",
3045 G_CALLBACK(on_basecombobox1_changed), NULL);
3046
3047 /* module combos */
3048 combo.default_dictionary_module = UI_GET_ITEM(gxml, "combobox5");
3049 combo.percomm_module = UI_GET_ITEM(gxml, "combobox6");
3050 combo.devotion_module = UI_GET_ITEM(gxml, "combobox12");
3051 combo.hebrew_lex__module = UI_GET_ITEM(gxml, "combobox13");
3052 combo.greek_lex__module = UI_GET_ITEM(gxml, "combobox14");
3053 setup_module_comboboxes();
3054
3055 combo.special_locale = UI_GET_ITEM(gxml, "combobox16");
3056 setup_locale_combobox();
3057
3058 combo.font_prefs = UI_GET_ITEM(gxml, "combobox17");
3059 setup_font_prefs_combobox();
3060
3061 /* studypad directory chooserbutton */
3062 chooser = UI_GET_ITEM(gxml, "filechooserbutton1");
3063 gtk_file_chooser_set_current_folder((GtkFileChooser *)chooser,
3064 settings.studypaddir);
3065 g_signal_connect(chooser, "current_folder_changed",
3066 G_CALLBACK(on_folder_changed), NULL);
3067
3068 /* prefs notebook */
3069 notebook = UI_GET_ITEM(gxml, "notebook");
3070 /* setup treeview */
3071 model = create_model();
3072 treeview = UI_GET_ITEM(gxml, "treeview");
3073 gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), model);
3074 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
3075 gtk_widget_set_size_request(treeview, 130, -1);
3076 add_columns(treeview);
3077 gtk_tree_view_expand_all(GTK_TREE_VIEW(treeview));
3078 selection =
3079 G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)));
3080 /* connect signals and data */
3081 #ifdef USE_GTKBUILDER
3082 gtk_builder_connect_signals_full(gxml, (GtkBuilderConnectFunc)gui_glade_signal_connect_func,
3083 NULL);
3084 #else
3085 glade_xml_signal_autoconnect_full(gxml, (GladeXMLConnectFunc)gui_glade_signal_connect_func,
3086 NULL);
3087 #endif
3088
3089 g_signal_connect(selection, "changed",
3090 G_CALLBACK(tree_selection_changed), model);
3091
3092 /*
3093 * parallel select dialog: chooser and button connectivity
3094 */
3095 parallel_select.button_clear =
3096 UI_GET_ITEM(gxml, "ps_toolbutton_clear");
3097 parallel_select.button_cut =
3098 UI_GET_ITEM(gxml, "ps_toolbutton_cut");
3099 parallel_select.button_add =
3100 UI_GET_ITEM(gxml, "ps_toolbutton_add");
3101 parallel_select.listview = UI_GET_ITEM(gxml, "ps_listview");
3102
3103 g_signal_connect(parallel_select.button_clear, "clicked",
3104 G_CALLBACK(ps_button_clear), NULL);
3105 g_signal_connect(parallel_select.button_cut, "clicked",
3106 G_CALLBACK(ps_button_cut), NULL);
3107 g_signal_connect(parallel_select.button_add, "clicked",
3108 G_CALLBACK(ps_button_add), NULL);
3109
3110 ps_setup_listview();
3111
3112 /* geometry notifications */
3113 g_signal_connect((gpointer)dialog_prefs,
3114 "configure_event",
3115 G_CALLBACK(on_prefs_configure_event), NULL);
3116
3117 settings.display_prefs = 1;
3118 xml_set_value("Xiphos", "layout", "prefsopen", "1");
3119
3120 /*
3121 * (from xiphos.c)
3122 * a little paranoia:
3123 * clamp geometry values to a reasonable bound.
3124 * sometimes xiphos gets insane reconfig events as it dies,
3125 * especially if it's due to just shutting linux down.
3126 */
3127 if ((settings.prefs_x < 0) || (settings.prefs_x > 2000))
3128 settings.prefs_x = 40;
3129 if ((settings.prefs_y < 0) || (settings.prefs_y > 2000))
3130 settings.prefs_y = 40;
3131
3132 gtk_window_move(GTK_WINDOW(dialog_prefs), settings.prefs_x,
3133 settings.prefs_y);
3134 }
3135
3136 /******************************************************************************
3137 * Name
3138 * gui_setup_preferences_dialog
3139 *
3140 * Synopsis
3141 * #include "preferences_dialog.h"
3142 *
3143 * void gui_setup_preferences_dialog(void)
3144 *
3145 * Description
3146 * get module list and setup preferences dialog call
3147 * gui_create_preferences_dialog() to create dialog
3148 *
3149 * Return value
3150 * void
3151 */
3152
3153 void gui_setup_preferences_dialog(void)
3154 {
3155 if (dialog_prefs == NULL) {
3156 create_preferences_dialog();
3157 } else
3158 gdk_window_raise(gtk_widget_get_window(GTK_WIDGET(dialog_prefs)));
3159 }
3160