2
* @file ui_prefs.c program preferences
4
* Copyright (C) 2004-2006 Nathan J. Conrad <t98502@users.sourceforge.net>
5
* Copyright (C) 2004-2009 Lars Lindner <lars.lindner@gmail.com>
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.
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 General Public License for more details.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
#include "ui/ui_prefs.h"
33
#include "enclosure.h"
38
#include "ui/enclosure_list_view.h"
39
#include "ui/liferea_dialog.h"
40
#include "ui/liferea_shell.h"
41
#include "ui/ui_common.h"
42
#include "ui/ui_itemlist.h"
43
#include "ui/ui_tray.h"
44
#include "notification/notification.h"
46
/* file type tree store column ids */
48
FTS_TYPE, /* file type name */
49
FTS_CMD, /* file cmd name */
50
FTS_PTR, /* pointer to config entry */
54
extern GSList *htmlviewPlugins;
55
extern GSList *bookmarkSites; /* from social.c */
56
extern GSList *linkSearchSites; /* from social.c */
58
static GtkWidget *prefdialog = NULL;
60
/** tool commands need to take an absolute file path as first %s and an URL as second %s */
61
static struct enclosureDownloadTool enclosure_download_commands[] = {
62
{ "wget -q -O %s %s", TRUE },
63
{ "curl -s -o %s %s", TRUE },
64
{ "dbus-send --session --print-reply --dest=org.gnome.gwget.ApplicationService /org/gnome/gwget/Gwget org.gnome.gwget.Application.OpenURI string:%s uint32:0", FALSE },
68
/** order must match enclosure_download_commands[] */
69
static gchar *enclosure_download_tool_options[] = { "wget", "curl", "gwget", "kget", NULL };
71
static struct browser browsers[] = {
73
"gnome", N_("GNOME Default Browser"), "gnome-open %s",
79
/* tested with SeaMonkey 1.0.6 */
80
"mozilla", "Mozilla", "mozilla %s",
81
NULL, "mozilla -remote openURL(%s)",
82
NULL, "mozilla -remote 'openURL(%s,new-window)'",
83
NULL, "mozilla -remote 'openURL(%s,new-tab)'"
86
/* tested with Firefox 1.5 and 2.0 */
87
"firefox", "Firefox","firefox \"%s\"",
88
NULL, "firefox -a firefox -remote \"openURL(%s)\"",
89
NULL, "firefox -a firefox -remote 'openURL(%s,new-window)'",
90
NULL, "firefox -a firefox -remote 'openURL(%s,new-tab)'"
93
"opera", "Opera","opera \"%s\"",
94
"opera \"%s\"", "opera -remote \"openURL(%s)\"",
95
"opera -newwindow \"%s\"", NULL,
96
"opera -newpage \"%s\"", NULL
99
"epiphany", "Epiphany","epiphany \"%s\"",
101
"epiphany \"%s\"", NULL,
102
"epiphany -n \"%s\"", NULL
105
"konqueror", "Konqueror", "kfmclient openURL \"%s\"",
110
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
113
/** GConf representation of toolbar styles */
114
static gchar * gui_toolbar_style_values[] = { "", "both", "both-horiz", "icons", "text", NULL };
116
static gchar * gui_toolbar_style_options[] = {
118
N_("Text below icons"),
119
N_("Text beside icons"),
125
static gchar * startup_update_options[] = {
126
N_("Update out-dated feeds"),
127
N_("Force update of all feeds"),
128
N_("No feed update at all"),
132
/* Note: these update interval literal should be kept in sync with the
133
ones in ui_subscription.c! */
135
static gchar * default_update_interval_unit_options[] = {
142
static gchar * browser_skim_key_options[] = {
150
prefs_get_browser_command (struct browser *browser, gboolean remote, gboolean fallback)
154
gint place = conf_get_int_value (BROWSER_PLACE);
156
/* check for manual browser command */
157
libname = conf_get_str_value (BROWSER_ID);
158
if (g_str_equal (libname, "manual")) {
159
/* retrieve user defined command... */
160
cmd = conf_get_str_value (BROWSER_COMMAND);
162
/* non manual browser definitions... */
167
cmd = browser->existingwinremote;
170
cmd = browser->newwinremote;
173
cmd = browser->newtabremote;
179
cmd = browser->existingwin;
182
cmd = browser->newwin;
185
cmd = browser->newtab;
190
if (fallback && !cmd) /* Default when no special mode defined */
191
cmd = browser->defaultplace;
194
if (fallback && !cmd) /* Last fallback: first browser default */
195
cmd = browsers[0].defaultplace;
199
return cmd?g_strdup (cmd):NULL;
203
prefs_get_browser (void)
206
struct browser *browser = NULL;
208
libname = conf_get_str_value (BROWSER_ID);
209
if (!g_str_equal (libname, "manual")) {
210
struct browser *iter;
211
for (iter = browsers; iter->id != NULL; iter++) {
212
if (g_str_equal (libname, iter->id))
221
enclosureDownloadToolPtr
222
prefs_get_download_tool (void)
224
/* FIXME: array boundary check */
225
return &(enclosure_download_commands[conf_get_int_value (ENCLOSURE_DOWNLOAD_TOOL)]);
228
/*------------------------------------------------------------------------------*/
229
/* preference callbacks */
230
/*------------------------------------------------------------------------------*/
233
on_folderdisplaybtn_toggled (GtkToggleButton *togglebutton, gpointer user_data)
235
gboolean enabled = gtk_toggle_button_get_active(togglebutton);
236
conf_set_int_value(FOLDER_DISPLAY_MODE, (TRUE == enabled)?1:0);
240
on_folderhidereadbtn_toggled (GtkToggleButton *togglebutton, gpointer user_data)
242
nodePtr displayedNode;
244
gboolean enabled = gtk_toggle_button_get_active (togglebutton);
245
conf_set_bool_value (FOLDER_DISPLAY_HIDE_READ, enabled);
246
displayedNode = itemlist_get_displayed_node ();
248
itemlist_unload (FALSE);
249
itemlist_load (displayedNode);
254
on_trayiconoptionbtn_clicked (GtkButton *button, gpointer user_data)
256
gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
257
conf_set_bool_value (SHOW_TRAY_ICON, enabled);
258
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "newcountintraybtn"), enabled);
259
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "minimizetotraybtn"), enabled);
260
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "startintraybtn"), enabled);
264
on_popupwindowsoptionbtn_clicked (GtkButton *button, gpointer user_data)
266
gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
267
conf_set_bool_value (SHOW_POPUP_WINDOWS, enabled);
268
notification_enable (conf_get_bool_value (SHOW_POPUP_WINDOWS));
272
on_feed_startup_update_changed (gpointer user_data)
274
conf_set_int_value (STARTUP_FEED_ACTION, gtk_combo_box_get_active (GTK_COMBO_BOX (liferea_dialog_lookup (prefdialog, "startupActionCombo"))));
278
on_browsercmd_changed (GtkEditable *editable, gpointer user_data)
280
conf_set_str_value (BROWSER_COMMAND, gtk_editable_get_chars (editable,0,-1));
284
on_browser_changed (GtkOptionMenu *optionmenu, gpointer user_data)
286
gint num = GPOINTER_TO_INT (user_data);
288
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "browsercmd"), browsers[num].id == NULL);
289
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "manuallabel"), browsers[num].id == NULL);
291
if (browsers[num].id == NULL)
292
conf_set_str_value (BROWSER_ID, "manual");
294
conf_set_str_value (BROWSER_ID, browsers[num].id);
298
on_browser_place_changed (GtkOptionMenu *optionmenu, gpointer user_data)
300
int num = GPOINTER_TO_INT (user_data);
302
conf_set_int_value (BROWSER_PLACE, num);
306
on_openlinksinsidebtn_clicked (GtkToggleButton *button, gpointer user_data)
308
conf_set_bool_value (BROWSE_INSIDE_APPLICATION, gtk_toggle_button_get_active (button));
312
on_disablejavascript_toggled (GtkToggleButton *togglebutton, gpointer user_data)
314
conf_set_bool_value (DISABLE_JAVASCRIPT, gtk_toggle_button_get_active (togglebutton));
318
on_enableplugins_toggled (GtkToggleButton *togglebutton, gpointer user_data)
320
conf_set_bool_value (ENABLE_PLUGINS, gtk_toggle_button_get_active (togglebutton));
324
on_socialsite_changed (GtkOptionMenu *optionmenu, gpointer user_data)
326
social_set_bookmark_site ((gchar *)user_data);
330
on_linksearchsite_changed (GtkOptionMenu *optionmenu, gpointer user_data)
332
social_set_link_search_site ((gchar *)user_data);
336
on_gui_toolbar_style_changed (gpointer user_data)
339
gint value = gtk_combo_box_get_active (GTK_COMBO_BOX (user_data));
340
conf_set_str_value (TOOLBAR_STYLE, gui_toolbar_style_values[value]);
342
style = conf_get_toolbar_style ();
343
liferea_shell_set_toolbar_style (style);
348
on_itemCountBtn_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
350
GtkAdjustment *itemCount;
352
itemCount = gtk_spin_button_get_adjustment (spinbutton);
353
conf_set_int_value (DEFAULT_MAX_ITEMS, gtk_adjustment_get_value (itemCount));
357
on_default_update_interval_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
359
gint updateInterval, intervalUnit;
360
GtkWidget *unitWidget, *valueWidget;
362
unitWidget = liferea_dialog_lookup (prefdialog, "globalRefreshIntervalUnitComboBox");
363
valueWidget = liferea_dialog_lookup (prefdialog, "globalRefreshIntervalSpinButton");
364
intervalUnit = gtk_combo_box_get_active (GTK_COMBO_BOX (unitWidget));
365
updateInterval = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (valueWidget));
367
if (intervalUnit == 1)
368
updateInterval *= 60; /* hours */
369
else if (intervalUnit == 2)
370
updateInterval *= 1440; /* days */
372
conf_set_int_value (DEFAULT_UPDATE_INTERVAL, updateInterval);
376
on_default_update_interval_unit_changed (gpointer user_data)
378
on_default_update_interval_value_changed (NULL, NULL);
383
on_menuselection_clicked (GtkButton *button, gpointer user_data)
387
active_button = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT(button), "option_number"));
388
switch (active_button) {
390
conf_set_bool_value (DISABLE_MENUBAR, FALSE);
391
conf_set_bool_value (DISABLE_TOOLBAR, FALSE);
394
conf_set_bool_value (DISABLE_MENUBAR, FALSE);
395
conf_set_bool_value (DISABLE_TOOLBAR, TRUE);
398
conf_set_bool_value (DISABLE_MENUBAR, TRUE);
399
conf_set_bool_value (DISABLE_TOOLBAR, FALSE);
405
liferea_shell_update_menubar ();
406
liferea_shell_update_toolbar ();
410
on_updateallfavicons_clicked (GtkButton *button, gpointer user_data)
412
feedlist_foreach (node_update_favicon);
416
on_proxyAutoDetect_clicked (GtkButton *button, gpointer user_data)
418
conf_set_int_value (PROXY_DETECT_MODE, 0);
419
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "proxybox")), FALSE);
423
on_noProxy_clicked (GtkButton *button, gpointer user_data)
425
conf_set_int_value (PROXY_DETECT_MODE, 1);
426
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "proxybox")), FALSE);
430
on_manualProxy_clicked (GtkButton *button, gpointer user_data)
432
conf_set_int_value (PROXY_DETECT_MODE, 2);
433
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "proxybox")), TRUE);
437
on_useProxyAuth_toggled (GtkToggleButton *button, gpointer user_data)
439
gboolean enabled = gtk_toggle_button_get_active (button);
440
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "proxyauthtable")), enabled);
441
conf_set_bool_value (PROXY_USEAUTH, enabled);
445
on_proxyhostentry_changed (GtkEditable *editable, gpointer user_data)
447
conf_set_str_value (PROXY_HOST, gtk_editable_get_chars (editable,0,-1));
451
on_proxyportentry_changed (GtkEditable *editable, gpointer user_data)
453
conf_set_int_value (PROXY_PORT, atoi (gtk_editable_get_chars (editable,0,-1)));
457
on_proxyusernameentry_changed (GtkEditable *editable, gpointer user_data)
459
conf_set_str_value (PROXY_USER, gtk_editable_get_chars (editable,0,-1));
463
on_proxypasswordentry_changed (GtkEditable *editable, gpointer user_data)
465
conf_set_str_value (PROXY_PASSWD, gtk_editable_get_chars (editable,0,-1));
469
on_skim_key_changed (gpointer user_data)
471
conf_set_int_value (BROWSE_KEY_SETTING, gtk_combo_box_get_active (GTK_COMBO_BOX (user_data)));
475
on_enclosure_download_tool_changed (gpointer user_data)
477
conf_set_int_value (ENCLOSURE_DOWNLOAD_TOOL, gtk_combo_box_get_active (GTK_COMBO_BOX (user_data)));
480
void on_enc_action_change_btn_clicked(GtkButton *button, gpointer user_data) {
482
GtkTreeSelection *selection;
486
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(liferea_dialog_lookup(prefdialog, "enc_action_view")));
487
if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
488
gtk_tree_model_get(model, &iter, FTS_PTR, &type, -1);
489
ui_enclosure_change_type(type);
490
gtk_tree_store_set(GTK_TREE_STORE(model), &iter,
491
FTS_CMD, ((encTypePtr)type)->cmd, -1);
496
on_enc_action_remove_btn_clicked (GtkButton *button, gpointer user_data)
499
GtkTreeSelection *selection;
503
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (liferea_dialog_lookup (prefdialog, "enc_action_view")));
504
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
505
gtk_tree_model_get (model, &iter, FTS_PTR, &type, -1);
506
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
507
enclosure_mime_type_remove (type);
511
void on_save_download_entry_changed(GtkEditable *editable, gpointer user_data) {
513
conf_set_str_value(ENCLOSURE_DOWNLOAD_PATH, gtk_editable_get_chars(editable , 0, -1));
516
static void on_save_download_finished(const gchar *filename, gpointer user_data) {
517
GtkWidget *dialog = (GtkWidget *)user_data;
523
utfname = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
525
if(utfname != NULL) {
526
gtk_entry_set_text(GTK_ENTRY(liferea_dialog_lookup(dialog, "save_download_entry")), utfname);
527
conf_set_str_value(ENCLOSURE_DOWNLOAD_PATH, utfname);
533
void on_save_download_select_btn_clicked(GtkButton *button, gpointer user_data) {
534
const gchar *path = gtk_editable_get_chars(GTK_EDITABLE(liferea_dialog_lookup(prefdialog, "save_download_entry")), 0, -1);
536
ui_choose_directory(_("Choose download directory"), GTK_STOCK_OPEN, on_save_download_finished, path, prefdialog);
539
void on_newcountintraybtn_clicked(GtkButton *button, gpointer user_data) {
541
conf_set_bool_value(SHOW_NEW_COUNT_IN_TRAY, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
544
void on_minimizetotraybtn_clicked(GtkButton *button, gpointer user_data) {
546
conf_set_bool_value(DONT_MINIMIZE_TO_TRAY, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
550
on_startintraybtn_clicked (GtkButton *button, gpointer user_data)
552
conf_set_bool_value (START_IN_TRAY, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
556
on_useAvahiSync_toggled (GtkToggleButton *button, gpointer user_data)
558
gboolean enabled = gtk_toggle_button_get_active (button);
559
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "avahiServiceNameEntry")), enabled);
560
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "avahiServicePasswordEntry")), enabled);
561
conf_set_bool_value (SYNC_AVAHI_ENABLED, enabled);
565
on_hidetoolbar_toggled (GtkToggleButton *button, gpointer user_data)
567
conf_set_bool_value (DISABLE_TOOLBAR, gtk_toggle_button_get_active (button));
568
liferea_shell_update_toolbar ();
571
/*------------------------------------------------------------------------------*/
572
/* preferences dialog callbacks */
573
/*------------------------------------------------------------------------------*/
575
static void ui_pref_destroyed_cb(GtkWidget *widget, void *data) {
580
void on_prefbtn_clicked(void) {
581
GtkWidget *widget, *entry, *menu;
582
GtkAdjustment *itemCount;
583
GtkTreeStore *treestore;
584
GtkTreeViewColumn *column;
587
gchar *configuredBrowser, *name;
591
struct browser *iter;
594
prefdialog = liferea_dialog_new (NULL, "prefdialog");
595
g_signal_connect (G_OBJECT (prefdialog), "destroy", G_CALLBACK (ui_pref_destroyed_cb), NULL);
597
/* Set up browser selection popup */
598
menu = gtk_menu_new();
599
for(i=0, iter = browsers; iter->id != NULL; iter++, i++) {
600
entry = gtk_menu_item_new_with_label(_(iter->display));
601
gtk_widget_show(entry);
602
gtk_container_add(GTK_CONTAINER(menu), entry);
603
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_changed), GINT_TO_POINTER(i));
606
/* This allows the user to choose their own browser by typing in the command. */
607
entry = gtk_menu_item_new_with_label(_("Manual"));
608
gtk_widget_show(entry);
609
gtk_container_add(GTK_CONTAINER(menu), entry);
610
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_changed), GINT_TO_POINTER(i));
612
gtk_option_menu_set_menu(GTK_OPTION_MENU(liferea_dialog_lookup(prefdialog, "browserpopup")), menu);
614
/* Create location menu */
615
menu = gtk_menu_new();
617
entry = gtk_menu_item_new_with_label(_("Browser default"));
618
gtk_widget_show(entry);
619
gtk_container_add(GTK_CONTAINER(menu), entry);
620
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_place_changed), GINT_TO_POINTER(0));
622
entry = gtk_menu_item_new_with_label(_("Existing window"));
623
gtk_widget_show(entry);
624
gtk_container_add(GTK_CONTAINER(menu), entry);
625
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_place_changed), GINT_TO_POINTER(1));
627
entry = gtk_menu_item_new_with_label(_("New window"));
628
gtk_widget_show(entry);
629
gtk_container_add(GTK_CONTAINER(menu), entry);
630
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_place_changed), GINT_TO_POINTER(2));
632
entry = gtk_menu_item_new_with_label(_("New tab"));
633
gtk_widget_show(entry);
634
gtk_container_add(GTK_CONTAINER(menu), entry);
635
g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(on_browser_place_changed), GINT_TO_POINTER(3));
637
gtk_option_menu_set_menu(GTK_OPTION_MENU(liferea_dialog_lookup(prefdialog, "browserlocpopup")), menu);
639
/* ================== panel 1 "feeds" ==================== */
641
/* menu for feed startup update action */
642
ui_common_setup_combo_menu (liferea_dialog_lookup (prefdialog, "startupActionCombo"),
643
startup_update_options,
644
G_CALLBACK (on_feed_startup_update_changed),
645
conf_get_int_value(STARTUP_FEED_ACTION));
647
/* cache size setting */
648
widget = liferea_dialog_lookup (prefdialog, "itemCountBtn");
649
itemCount = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
650
gtk_adjustment_set_value (itemCount, conf_get_int_value (DEFAULT_MAX_ITEMS));
652
/* set default update interval spin button and unit combo box */
653
ui_common_setup_combo_menu (liferea_dialog_lookup (prefdialog, "globalRefreshIntervalUnitComboBox"),
654
default_update_interval_unit_options,
655
G_CALLBACK (on_default_update_interval_unit_changed),
658
widget = liferea_dialog_lookup (prefdialog, "globalRefreshIntervalUnitComboBox");
659
tmp = conf_get_int_value (DEFAULT_UPDATE_INTERVAL);
660
if (tmp % 1440 == 0) { /* days */
661
gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 2);
663
} else if (tmp % 60 == 0) { /* hours */
664
gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 1);
666
} else { /* minutes */
667
gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
669
widget = liferea_dialog_lookup (prefdialog,"globalRefreshIntervalSpinButton");
670
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), tmp);
671
g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (on_default_update_interval_value_changed), NULL);
673
/* ================== panel 2 "folders" ==================== */
675
g_signal_connect(GTK_OBJECT(liferea_dialog_lookup(prefdialog, "updateAllFavicons")), "clicked", G_CALLBACK(on_updateallfavicons_clicked), NULL);
676
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(prefdialog, "folderdisplaybtn")), (0 == conf_get_int_value(FOLDER_DISPLAY_MODE)?FALSE:TRUE));
677
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(prefdialog, "hidereadbtn")), (0 == conf_get_bool_value(FOLDER_DISPLAY_HIDE_READ)?FALSE:TRUE));
679
/* ================== panel 3 "headlines" ==================== */
681
ui_common_setup_combo_menu (liferea_dialog_lookup (prefdialog, "skimKeyCombo"),
682
browser_skim_key_options,
683
G_CALLBACK (on_skim_key_changed),
684
conf_get_int_value (BROWSE_KEY_SETTING));
686
/* Setup social bookmarking list */
688
name = conf_get_str_value (SOCIAL_BM_SITE);
689
menu = gtk_menu_new ();
690
list = bookmarkSites;
692
socialSitePtr siter = list->data;
693
if (name && !strcmp (siter->name, name))
695
entry = gtk_menu_item_new_with_label (siter->name);
696
gtk_widget_show (entry);
697
gtk_container_add (GTK_CONTAINER (menu), entry);
698
g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (on_socialsite_changed), (gpointer)siter->name);
699
list = g_slist_next (list);
702
gtk_option_menu_set_menu (GTK_OPTION_MENU (liferea_dialog_lookup (prefdialog, "socialpopup")), menu);
703
gtk_option_menu_set_history (GTK_OPTION_MENU (liferea_dialog_lookup (prefdialog, "socialpopup")), tmp);
705
/* Setup link cosmos search engine list */
707
name = conf_get_str_value (SOCIAL_LINK_SEARCH_SITE);
708
menu = gtk_menu_new ();
709
list = linkSearchSites;
711
socialSitePtr siter = list->data;
712
if (name && !strcmp (siter->name, name))
714
entry = gtk_menu_item_new_with_label (siter->name);
715
gtk_widget_show (entry);
716
gtk_container_add (GTK_CONTAINER (menu), entry);
717
g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (on_linksearchsite_changed), (gpointer)siter->name);
718
list = g_slist_next (list);
721
gtk_option_menu_set_menu (GTK_OPTION_MENU (liferea_dialog_lookup (prefdialog, "searchpopup")), menu);
722
gtk_option_menu_set_history (GTK_OPTION_MENU (liferea_dialog_lookup (prefdialog, "searchpopup")), tmp);
725
/* ================== panel 4 "browser" ==================== */
727
/* set the inside browsing flag */
728
widget = liferea_dialog_lookup(prefdialog, "browseinwindow");
729
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), conf_get_bool_value(BROWSE_INSIDE_APPLICATION));
731
/* set the javascript-disabled flag */
732
widget = liferea_dialog_lookup(prefdialog, "disablejavascript");
733
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), conf_get_bool_value(DISABLE_JAVASCRIPT));
735
/* set the enable Plugins flag */
736
widget = liferea_dialog_lookup(prefdialog, "enableplugins");
737
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), conf_get_bool_value(ENABLE_PLUGINS));
740
configuredBrowser = conf_get_str_value(BROWSER_ID);
742
if(!strcmp(configuredBrowser, "manual"))
745
for(i=0, iter = browsers; iter->id != NULL; iter++, i++)
746
if(!strcmp(configuredBrowser, iter->id))
749
gtk_option_menu_set_history(GTK_OPTION_MENU(liferea_dialog_lookup(prefdialog, "browserpopup")), tmp);
750
g_free(configuredBrowser);
752
gtk_option_menu_set_history(GTK_OPTION_MENU(liferea_dialog_lookup(prefdialog, "browserlocpopup")), conf_get_int_value(BROWSER_PLACE));
754
entry = liferea_dialog_lookup(prefdialog, "browsercmd");
755
gtk_entry_set_text(GTK_ENTRY(entry), conf_get_str_value(BROWSER_COMMAND));
756
gtk_widget_set_sensitive(GTK_WIDGET(entry), tmp==manual);
757
gtk_widget_set_sensitive(liferea_dialog_lookup(prefdialog, "manuallabel"), tmp==manual);
759
/* ================== panel 4 "GUI" ================ */
761
widget = liferea_dialog_lookup (prefdialog, "popupwindowsoptionbtn");
762
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value (SHOW_POPUP_WINDOWS));
764
widget = liferea_dialog_lookup (prefdialog, "trayiconoptionbtn");
765
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value (SHOW_TRAY_ICON));
767
widget = liferea_dialog_lookup (prefdialog, "newcountintraybtn");
768
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value (SHOW_NEW_COUNT_IN_TRAY));
769
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "newcountintraybtn"), conf_get_bool_value (SHOW_TRAY_ICON));
771
widget = liferea_dialog_lookup (prefdialog, "minimizetotraybtn");
772
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value (DONT_MINIMIZE_TO_TRAY));
773
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "minimizetotraybtn"), conf_get_bool_value (SHOW_TRAY_ICON));
775
widget = liferea_dialog_lookup (prefdialog, "startintraybtn");
776
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value (START_IN_TRAY));
777
gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog, "startintraybtn"), conf_get_bool_value (SHOW_TRAY_ICON));
779
/* tool bar settings */
780
widget = liferea_dialog_lookup (prefdialog, "hidetoolbarbtn");
781
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), conf_get_bool_value(DISABLE_TOOLBAR));
783
/* select currently active toolbar style option */
784
name = conf_get_str_value (TOOLBAR_STYLE);
785
for (i = 0; gui_toolbar_style_values[i] != NULL; ++i) {
786
if (strcmp (name, gui_toolbar_style_values[i]) == 0)
791
/* On invalid key value: revert to default */
792
if (gui_toolbar_style_values[i] == NULL)
795
/* create toolbar style menu */
796
ui_common_setup_combo_menu (liferea_dialog_lookup (prefdialog, "toolbarCombo"),
797
gui_toolbar_style_options,
798
G_CALLBACK (on_gui_toolbar_style_changed),
801
/* ================= panel 5 "proxy" ======================== */
802
proxyport = g_strdup_printf ("%d", conf_get_int_value (PROXY_PORT));
803
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "proxyhostentry")), conf_get_str_value(PROXY_HOST));
804
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "proxyportentry")), proxyport);
807
enabled = conf_get_bool_value (PROXY_USEAUTH);
808
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (prefdialog, "useProxyAuth")), enabled);
809
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "proxyusernameentry")), conf_get_str_value (PROXY_USER));
810
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "proxypasswordentry")), conf_get_str_value (PROXY_PASSWD));
811
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup(prefdialog, "proxyauthtable")), enabled);
813
i = conf_get_int_value (PROXY_DETECT_MODE);
816
case 0: /* proxy auto detect */
817
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (prefdialog, "proxyAutoDetectRadio")), TRUE);
820
case 1: /* no proxy */
821
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (prefdialog, "noProxyRadio")), TRUE);
824
case 2: /* manual proxy */
825
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (prefdialog, "manualProxyRadio")), TRUE);
829
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "proxybox")), enabled);
830
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "proxyAutoDetectRadio")), "clicked", G_CALLBACK (on_proxyAutoDetect_clicked), NULL);
831
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "noProxyRadio")), "clicked", G_CALLBACK (on_noProxy_clicked), NULL);
832
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "manualProxyRadio")), "clicked", G_CALLBACK (on_manualProxy_clicked), NULL);
833
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "proxyhostentry")), "changed", G_CALLBACK (on_proxyhostentry_changed), NULL);
834
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "proxyportentry")), "changed", G_CALLBACK (on_proxyportentry_changed), NULL);
835
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "proxyusernameentry")), "changed", G_CALLBACK (on_proxyusernameentry_changed), NULL);
836
g_signal_connect (G_OBJECT (liferea_dialog_lookup (prefdialog, "proxypasswordentry")), "changed", G_CALLBACK (on_proxypasswordentry_changed), NULL);
838
/* ================= panel 6 "enclosures" ======================== */
840
/* menu for download tool */
841
ui_common_setup_combo_menu (liferea_dialog_lookup (prefdialog, "downloadToolCombo"),
842
enclosure_download_tool_options,
843
G_CALLBACK (on_enclosure_download_tool_changed),
844
conf_get_int_value (ENCLOSURE_DOWNLOAD_TOOL));
846
/* set enclosure download path entry */
847
gtk_entry_set_text(GTK_ENTRY(liferea_dialog_lookup(prefdialog, "save_download_entry")), conf_get_str_value(ENCLOSURE_DOWNLOAD_PATH));
849
/* set up list of configured enclosure types */
850
treestore = gtk_tree_store_new(FTS_LEN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
851
list = (GSList *)enclosure_mime_types_get ();
853
GtkTreeIter *newIter = g_new0(GtkTreeIter, 1);
854
gtk_tree_store_append(treestore, newIter, NULL);
855
gtk_tree_store_set(treestore, newIter,
856
FTS_TYPE, (NULL != ((encTypePtr)(list->data))->mime)?((encTypePtr)(list->data))->mime:((encTypePtr)(list->data))->extension,
857
FTS_CMD, ((encTypePtr)(list->data))->cmd,
860
list = g_slist_next(list);
863
widget = liferea_dialog_lookup(prefdialog, "enc_action_view");
864
gtk_tree_view_set_model(GTK_TREE_VIEW(widget), GTK_TREE_MODEL(treestore));
866
column = gtk_tree_view_column_new_with_attributes(_("Type"), gtk_cell_renderer_text_new(), "text", FTS_TYPE, NULL);
867
gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
868
gtk_tree_view_column_set_sort_column_id(column, FTS_TYPE);
869
column = gtk_tree_view_column_new_with_attributes(_("Program"), gtk_cell_renderer_text_new(), "text", FTS_CMD, NULL);
870
gtk_tree_view_column_set_sort_column_id(column, FTS_CMD);
871
gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
873
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)), GTK_SELECTION_SINGLE);
875
/* ================= panel 7 "sync" ======================== */
877
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (prefdialog, "useAvahiSync")), conf_get_bool_value (SYNC_AVAHI_ENABLED));
878
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "avahiServiceNameEntry")), conf_get_str_value (SYNC_AVAHI_SERVICE_NAME));
879
gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (prefdialog, "avahiServicePasswordEntry")), conf_get_str_value (SYNC_AVAHI_PASSWORD));
880
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "avahiServiceNameEntry")), conf_get_bool_value (SYNC_AVAHI_ENABLED));
881
gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog, "avahiServicePasswordEntry")), conf_get_bool_value (SYNC_AVAHI_ENABLED));
883
gtk_window_present(GTK_WINDOW(prefdialog));