aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-11-05 07:55:58 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-11-05 07:55:58 +0000
commitc839eb55e48796e60bb075dbc6d8867c6af371bd (patch)
treec8020a0e1ac44fb76d752844789bc8afb53a1236
parent1f58874e6bfff7b6f9ac3c93b322dd77f1f1aea0 (diff)
added an option to specify startup online mode.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@3431 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog6
-rw-r--r--libsylph/prefs_common.c5
-rw-r--r--libsylph/prefs_common.h2
-rw-r--r--src/mainwindow.c4
-rw-r--r--src/prefs_common_dialog.c102
5 files changed, 118 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 030a7687..15a2e586 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2014-11-05
+ * libsylph/prefs_common.[ch]
+ src/prefs_common_dialog.c
+ src/mainwindow.c: added an option to specify startup online mode.
+
+2014-11-05
+
* src/mainwindow.c: only apply r3427 to win32 because it breaks
the function on some window managers.
diff --git a/libsylph/prefs_common.c b/libsylph/prefs_common.c
index 2d3184cc..2d8d2917 100644
--- a/libsylph/prefs_common.c
+++ b/libsylph/prefs_common.c
@@ -476,6 +476,9 @@ static PrefParam param[] = {
{"logwindow_line_limit", "1000", &prefs_common.logwin_line_limit,
P_INT},
+ {"online_mode", "TRUE", &prefs_common.online_mode, P_BOOL},
+ {"startup_online_mode", "1", &prefs_common.startup_online_mode, P_INT},
+
/* External commands */
#ifdef G_OS_WIN32
{"uri_open_command", NULL, &prefs_common.uri_cmd,
@@ -545,7 +548,7 @@ void prefs_common_read_config(void)
g_free(path);
- prefs_common.online_mode = TRUE;
+ //prefs_common.online_mode = TRUE;
path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
NULL);
diff --git a/libsylph/prefs_common.h b/libsylph/prefs_common.h
index e9062eda..95bb0047 100644
--- a/libsylph/prefs_common.h
+++ b/libsylph/prefs_common.h
@@ -351,6 +351,8 @@ struct _PrefsCommon
gint save_file_type;
gint notify_window_period; /* Receive */
+
+ gint startup_online_mode; /* Online */
};
extern PrefsCommon prefs_common;
diff --git a/src/mainwindow.c b/src/mainwindow.c
index e210b678..3f4a5e3a 100644
--- a/src/mainwindow.c
+++ b/src/mainwindow.c
@@ -1187,6 +1187,10 @@ MainWindow *main_window_create(SeparateType type)
#endif
/* initialize online switch */
+ if (prefs_common.startup_online_mode == 1)
+ prefs_common.online_mode = TRUE;
+ else if (prefs_common.startup_online_mode == 0)
+ prefs_common.online_mode = FALSE;
prefs_common.online_mode = !prefs_common.online_mode;
online_switch_clicked(online_switch, mainwin);
diff --git a/src/prefs_common_dialog.c b/src/prefs_common_dialog.c
index 4a7bdbe7..b46c9b7e 100644
--- a/src/prefs_common_dialog.c
+++ b/src/prefs_common_dialog.c
@@ -246,6 +246,8 @@ static struct Other {
GtkWidget *checkbtn_cleanonexit;
GtkWidget *checkbtn_askonclean;
GtkWidget *checkbtn_warnqueued;
+
+ GtkWidget *radiobtn_online_mode;
} other;
static struct Extcmd {
@@ -309,6 +311,9 @@ static void prefs_common_addr_compl_set_radiobtn (PrefParam *pparam);
static void prefs_common_attach_toolbtn_pos_set_data_from_radiobtn (PrefParam *pparam);
static void prefs_common_attach_toolbtn_pos_set_radiobtn (PrefParam *pparam);
+static void prefs_common_online_mode_set_data_from_radiobtn(PrefParam *pparam);
+static void prefs_common_online_mode_set_radiobtn (PrefParam *pparam);
+
static PrefsUIData ui_data[] = {
/* Receive */
{"autochk_newmail", &receive.checkbtn_autochk,
@@ -609,6 +614,10 @@ static PrefsUIData ui_data[] = {
{"warn_queued_on_exit", &other.checkbtn_warnqueued,
prefs_set_data_from_toggle, prefs_set_toggle},
+ {"startup_online_mode", &other.radiobtn_online_mode,
+ prefs_common_online_mode_set_data_from_radiobtn,
+ prefs_common_online_mode_set_radiobtn},
+
/* {"logwindow_line_limit", NULL, NULL, NULL}, */
/* External commands */
@@ -2784,6 +2793,12 @@ static GtkWidget *prefs_other_create(void)
GtkWidget *checkbtn_askonclean;
GtkWidget *checkbtn_warnqueued;
+ GtkWidget *frame_online;
+ GtkWidget *vbox_online;
+ GtkWidget *radiobtn_online_mode;
+ GtkWidget *radiobtn_start_offline;
+ GtkWidget *radiobtn_remember_prev_online;
+
vbox1 = gtk_vbox_new (FALSE, VSPACING);
gtk_widget_show (vbox1);
@@ -2892,6 +2907,41 @@ static GtkWidget *prefs_other_create(void)
PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
_("Warn if there are queued messages"));
+ PACK_FRAME (vbox1, frame_online, _("Online mode"));
+
+ vbox_online = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox_online);
+ gtk_container_add (GTK_CONTAINER (frame_online), vbox_online);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_online), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_online), hbox1, FALSE, FALSE, 0);
+
+ radiobtn_online_mode = gtk_radio_button_new_with_label
+ (NULL, _("Start as online"));
+ gtk_widget_show (radiobtn_online_mode);
+ gtk_box_pack_start (GTK_BOX (hbox1), radiobtn_online_mode,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (radiobtn_online_mode), MENU_VAL_ID,
+ GINT_TO_POINTER (1));
+
+ radiobtn_start_offline = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (radiobtn_online_mode), _("Start as offline"));
+ gtk_widget_show (radiobtn_start_offline);
+ gtk_box_pack_start (GTK_BOX (hbox1), radiobtn_start_offline,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (radiobtn_start_offline), MENU_VAL_ID,
+ GINT_TO_POINTER (0));
+
+ radiobtn_remember_prev_online = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (radiobtn_online_mode), _("Remember previous mode"));
+ gtk_widget_show (radiobtn_remember_prev_online);
+ gtk_box_pack_start (GTK_BOX (hbox1), radiobtn_remember_prev_online,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (radiobtn_remember_prev_online), MENU_VAL_ID,
+ GINT_TO_POINTER (2));
+
other.optmenu_recvdialog = optmenu_recvdialog;
other.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
other.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
@@ -2905,6 +2955,8 @@ static GtkWidget *prefs_other_create(void)
other.checkbtn_askonclean = checkbtn_askonclean;
other.checkbtn_warnqueued = checkbtn_warnqueued;
+ other.radiobtn_online_mode = radiobtn_online_mode;
+
return vbox1;
}
@@ -4617,6 +4669,56 @@ static void prefs_common_attach_toolbtn_pos_set_radiobtn(PrefParam *pparam)
}
}
+static void prefs_common_online_mode_set_data_from_radiobtn(PrefParam *pparam)
+{
+ PrefsUIData *ui_data;
+ GtkRadioButton *radiobtn;
+ GSList *group;
+
+ ui_data = (PrefsUIData *)pparam->ui_data;
+ g_return_if_fail(ui_data != NULL);
+ g_return_if_fail(*ui_data->widget != NULL);
+
+ radiobtn = GTK_RADIO_BUTTON(*ui_data->widget);
+ group = gtk_radio_button_get_group(radiobtn);
+ while (group != NULL) {
+ GtkToggleButton *btn = GTK_TOGGLE_BUTTON(group->data);
+
+ if (gtk_toggle_button_get_active(btn)) {
+ prefs_common.startup_online_mode =
+ GPOINTER_TO_INT(g_object_get_data(G_OBJECT(btn), MENU_VAL_ID));
+ break;
+ }
+ group = group->next;
+ }
+}
+
+static void prefs_common_online_mode_set_radiobtn(PrefParam *pparam)
+{
+ PrefsUIData *ui_data;
+ GtkRadioButton *radiobtn;
+ GSList *group;
+
+ ui_data = (PrefsUIData *)pparam->ui_data;
+ g_return_if_fail(ui_data != NULL);
+ g_return_if_fail(*ui_data->widget != NULL);
+
+ radiobtn = GTK_RADIO_BUTTON(*ui_data->widget);
+ group = gtk_radio_button_get_group(radiobtn);
+ while (group != NULL) {
+ GtkToggleButton *btn = GTK_TOGGLE_BUTTON(group->data);
+ gint data;
+
+ data = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(btn),
+ MENU_VAL_ID));
+ if (data == prefs_common.startup_online_mode) {
+ gtk_toggle_button_set_active(btn, TRUE);
+ break;
+ }
+ group = group->next;
+ }
+}
+
static void prefs_common_dispitem_clicked(void)
{
prefs_summary_column_open(FOLDER_ITEM_IS_SENT_FOLDER