*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
#ifdef HAVE_CONFIG_H
GtkWidget *vbox;
- GtkWidget *msgid_checkbtn;
GtkWidget *customhdr_checkbtn;
GtkWidget *smtp_auth_checkbtn;
GtkWidget *smtp_auth_type_optmenu;
static void prefs_account_protocol_changed (GtkComboBox *combobox,
gpointer data);
-static void prefs_account_set_string_from_optmenu (PrefParam *pparam);
-static void prefs_account_set_optmenu_from_string (PrefParam *pparam);
+static void prefs_account_set_string_from_combobox (PrefParam *pparam);
+static void prefs_account_set_privacy_combobox_from_string (PrefParam *pparam);
static void prefs_account_imap_auth_type_set_data_from_optmenu
(PrefParam *pparam);
};
static PrefParam send_param[] = {
- {"generate_msgid", "TRUE", &tmp_ac_prefs.gen_msgid, P_BOOL,
- &send_page.msgid_checkbtn,
- prefs_set_data_from_toggle, prefs_set_toggle},
-
{"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL,
&send_page.customhdr_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
static PrefParam privacy_param[] = {
{"default_privacy_system", "", &tmp_ac_prefs.default_privacy_system, P_STRING,
&privacy_page.default_privacy_system,
- prefs_account_set_string_from_optmenu, prefs_account_set_optmenu_from_string},
+ prefs_account_set_string_from_combobox,
+ prefs_account_set_privacy_combobox_from_string},
{"default_encrypt", "FALSE", &tmp_ac_prefs.default_encrypt, P_BOOL,
&privacy_page.default_encrypt_checkbtn,
static void prefs_account_edit_custom_header (void);
-static void privacy_system_activated(GtkMenuItem *menuitem)
+
+#define COMBOBOX_PRIVACY_PLUGIN_ID 3
+
+/* Enable/disable necessary preference widgets based on current privacy
+ * system choice. */
+static void privacy_system_activated(GtkWidget *combobox)
{
- const gchar* system_id;
+ const gchar *system_id;
gboolean privacy_enabled = FALSE;
-
- system_id = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+ gint privacy_enabled_int;
+ GtkTreeIter iter;
+ GtkListStore *menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+ GTK_COMBO_BOX(combobox)));
+
+ gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter);
+
+ gtk_tree_model_get(GTK_TREE_MODEL(menu), &iter,
+ COMBOBOX_PRIVACY_PLUGIN_ID, &system_id,
+ COMBOBOX_DATA, &privacy_enabled_int,
+ -1);
privacy_enabled = strcmp(system_id, "");
- if (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_DATA) == NULL ||
- GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), MENU_VAL_DATA)) == FALSE)
+ if( privacy_enabled_int == 0 )
privacy_enabled = FALSE;
- gtk_widget_set_sensitive (privacy_page.default_encrypt_checkbtn, privacy_enabled);
- gtk_widget_set_sensitive (privacy_page.default_encrypt_reply_checkbtn, privacy_enabled);
- gtk_widget_set_sensitive (privacy_page.default_sign_checkbtn, privacy_enabled);
- gtk_widget_set_sensitive (privacy_page.encrypt_to_self_checkbtn, privacy_enabled);
+ gtk_widget_set_sensitive (privacy_page.default_encrypt_checkbtn,
+ privacy_enabled);
+ gtk_widget_set_sensitive (privacy_page.default_encrypt_reply_checkbtn,
+ privacy_enabled);
+ gtk_widget_set_sensitive (privacy_page.default_sign_checkbtn,
+ privacy_enabled);
+ gtk_widget_set_sensitive (privacy_page.encrypt_to_self_checkbtn,
+ privacy_enabled);
gtk_widget_set_sensitive (privacy_page.save_clear_text_checkbtn,
privacy_enabled && !gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(privacy_page.encrypt_to_self_checkbtn)));
}
+/* Populate the privacy system choice combobox with valid choices */
static void update_privacy_system_menu() {
- GtkWidget *menu;
- GtkWidget *menuitem;
+ GtkListStore *menu;
+ GtkTreeIter iter;
GSList *system_ids, *cur;
- menu = gtk_menu_new();
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+ GTK_COMBO_BOX(privacy_page.default_privacy_system)));
- menuitem = gtk_menu_item_new_with_label(_("None"));
- gtk_widget_show(menuitem);
- g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID, "");
- g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(FALSE));
- gtk_menu_append(GTK_MENU(menu), menuitem);
-
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(privacy_system_activated),
- NULL);
+ /* First add "None", as that one is always available. :) */
+ gtk_list_store_append(menu, &iter);
+ gtk_list_store_set(menu, &iter,
+ COMBOBOX_TEXT, _("None"),
+ COMBOBOX_DATA, 0,
+ COMBOBOX_SENS, TRUE,
+ COMBOBOX_PRIVACY_PLUGIN_ID, "",
+ -1);
+ /* Now go through list of available privacy systems and add an entry
+ * for each. */
system_ids = privacy_get_system_ids();
for (cur = system_ids; cur != NULL; cur = g_slist_next(cur)) {
gchar *id = (gchar *) cur->data;
const gchar *name;
name = privacy_system_get_name(id);
- menuitem = gtk_menu_item_new_with_label(name);
- gtk_widget_show(menuitem);
- g_object_set_data_full(G_OBJECT(menuitem), MENU_VAL_ID, id, g_free);
- g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(TRUE));
-
- gtk_menu_append(GTK_MENU(menu), menuitem);
-
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(privacy_system_activated),
- NULL);
-
-
+ gtk_list_store_append(menu, &iter);
+ gtk_list_store_set(menu, &iter,
+ COMBOBOX_TEXT, name,
+ COMBOBOX_DATA, 1,
+ COMBOBOX_SENS, TRUE,
+ COMBOBOX_PRIVACY_PLUGIN_ID, id,
+ -1);
}
-
- gtk_option_menu_set_menu(GTK_OPTION_MENU(privacy_page.default_privacy_system), menu);
}
#define TABLE_YPAD 2
GtkWidget *local_inbox_btn;
GtkWidget *optmenu;
- GtkWidget *optmenu_menu;
- GtkWidget *menuitem;
+ GtkListStore *menu;
+ GtkTreeIter iter;
GtkWidget *recvatgetall_checkbtn;
GtkWidget *hbox2;
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
- optmenu = gtk_option_menu_new ();
+
+ optmenu = gtkut_sc_combobox_create(NULL, FALSE);
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)));
gtk_widget_show (optmenu);
gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
- optmenu_menu = gtk_menu_new ();
-
- MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
- MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", IMAP_AUTH_LOGIN);
- MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
- MENUITEM_ADD (optmenu_menu, menuitem, "ANONYMOUS", IMAP_AUTH_ANON);
- MENUITEM_ADD (optmenu_menu, menuitem, "GSSAPI", IMAP_AUTH_GSSAPI);
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+ COMBOBOX_ADD (menu, _("Automatic"), 0);
+ COMBOBOX_ADD (menu, "LOGIN", IMAP_AUTH_LOGIN);
+ COMBOBOX_ADD (menu, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
+ COMBOBOX_ADD (menu, "ANONYMOUS", IMAP_AUTH_ANON);
+ COMBOBOX_ADD (menu, "GSSAPI", IMAP_AUTH_GSSAPI);
hbox1 = gtk_hbox_new (FALSE, 8);
gtk_widget_show (hbox1);
NULL);
PACK_CHECK_BUTTON (vbox1, filterhook_on_recv_checkbtn,
- _("Allow filtering using plug-ins on receiving"));
+ _("Allow filtering using plugins on receiving"));
PACK_CHECK_BUTTON
(vbox1, recvatgetall_checkbtn,
GtkWidget *vbox1;
GtkWidget *vbox2;
GtkWidget *frame;
- GtkWidget *msgid_checkbtn;
GtkWidget *hbox;
GtkWidget *customhdr_checkbtn;
GtkWidget *customhdr_edit_btn;
GtkWidget *vbox3;
GtkWidget *smtp_auth_checkbtn;
GtkWidget *optmenu;
- GtkWidget *optmenu_menu;
- GtkWidget *menuitem;
+ GtkListStore *menu;
+ GtkTreeIter iter;
GtkWidget *vbox4;
GtkWidget *hbox_spc;
GtkWidget *label;
vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Header"));
- PACK_CHECK_BUTTON (vbox2, msgid_checkbtn, _("Generate Message-ID"));
-
hbox = gtk_hbox_new (FALSE, 12);
gtk_widget_show (hbox);
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- optmenu = gtk_option_menu_new ();
+ optmenu = gtkut_sc_combobox_create(NULL, FALSE);
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)));
gtk_widget_show (optmenu);
gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
- optmenu_menu = gtk_menu_new ();
-
- MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
- MENUITEM_ADD (optmenu_menu, menuitem, "PLAIN", SMTPAUTH_PLAIN);
- MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", SMTPAUTH_LOGIN);
- MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", SMTPAUTH_CRAM_MD5);
- MENUITEM_ADD (optmenu_menu, menuitem, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5);
- gtk_widget_set_sensitive (menuitem, FALSE);
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+ COMBOBOX_ADD (menu, _("Automatic"), 0);
+ COMBOBOX_ADD (menu, "PLAIN", SMTPAUTH_PLAIN);
+ COMBOBOX_ADD (menu, "LOGIN", SMTPAUTH_LOGIN);
+ COMBOBOX_ADD (menu, "CRAM-MD5", SMTPAUTH_CRAM_MD5);
+ COMBOBOX_ADD (menu, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5);
+ gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1);
PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
gtk_widget_show (pop_auth_minutes_lbl);
gtk_box_pack_start (GTK_BOX (hbox), pop_auth_minutes_lbl, FALSE, FALSE, 0);
- page->msgid_checkbtn = msgid_checkbtn;
page->customhdr_checkbtn = customhdr_checkbtn;
page->smtp_auth_checkbtn = smtp_auth_checkbtn;
TemplatesPage *page = (TemplatesPage *) _page;
PrefsAccount *ac_prefs = (PrefsAccount *) data;
GtkWidget *vbox;
+ GtkWidget *vbox2;
+ GtkWidget *notebook;
- vbox = gtk_vbox_new(FALSE, VSPACING);
+ vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_show(vbox);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), VBOX_BORDER);
+
+ notebook = gtk_notebook_new();
+ gtk_widget_show(notebook);
+ gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(notebook), TRUE);
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ /* compose format */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
- /* compose/reply/forward formats */
quotefmt_create_new_msg_fmt_widgets(
window,
- vbox,
+ vbox2,
&page->checkbtn_compose_with_format,
- _("Use a specific format for new messages"),
&page->compose_subject_format,
&page->compose_body_format,
FALSE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Compose")));
+
+ /* reply format */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+
quotefmt_create_reply_fmt_widgets(
window,
- vbox,
+ vbox2,
&page->checkbtn_reply_with_format,
- _("Use a specific reply quote format"),
&page->reply_quotemark,
&page->reply_body_format,
FALSE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Reply")));
+
+ /* forward format */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+
quotefmt_create_forward_fmt_widgets(
window,
- vbox,
+ vbox2,
&page->checkbtn_forward_with_format,
- _("Use a specific forward quote format"),
&page->forward_quotemark,
&page->forward_body_format,
FALSE);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Forward")));
+
quotefmt_add_info_button(window, vbox);
tmp_ac_prefs = *ac_prefs;
GtkWidget *hbox1;
GtkWidget *label;
GtkWidget *default_privacy_system;
+ GtkListStore *menu;
+ GtkCellRenderer *rend;
GtkWidget *default_encrypt_checkbtn;
GtkWidget *default_encrypt_reply_checkbtn;
GtkWidget *default_sign_checkbtn;
gtk_widget_show(label);
gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
- default_privacy_system = gtk_option_menu_new();
+ /* Can't use gtkut_sc_combobox_create() here, because model for this
+ * combobox needs an extra string column to store privacy plugin id. */
+ menu = gtk_list_store_new(4,
+ G_TYPE_STRING,
+ G_TYPE_INT,
+ G_TYPE_BOOLEAN,
+ G_TYPE_STRING); /* This is where we store the privacy plugin id. */
+ default_privacy_system = gtk_combo_box_new_with_model(GTK_TREE_MODEL(menu));
+
+ rend = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(default_privacy_system), rend, TRUE);
+ gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(default_privacy_system), rend,
+ "text", COMBOBOX_TEXT,
+ "sensitive", COMBOBOX_SENS,
+ NULL);
+ gtk_combo_box_set_focus_on_click(GTK_COMBO_BOX(default_privacy_system), FALSE);
+
gtk_widget_show (default_privacy_system);
gtk_box_pack_start (GTK_BOX(hbox1), default_privacy_system, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(default_privacy_system), "changed",
+ G_CALLBACK(privacy_system_activated),
+ NULL);
+
PACK_CHECK_BUTTON (vbox2, default_sign_checkbtn,
_("Always sign messages"));
PACK_CHECK_BUTTON (vbox2, default_encrypt_checkbtn,
static void prefs_account_imap_auth_type_set_data_from_optmenu(PrefParam *pparam)
{
- GtkWidget *menu;
- GtkWidget *menuitem;
-
- menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
- menuitem = gtk_menu_get_active(GTK_MENU(menu));
- *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
- (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+ *((RecvProtocol *)pparam->data) =
+ combobox_get_active_data(GTK_COMBO_BOX(*pparam->widget));
}
static void prefs_account_imap_auth_type_set_optmenu(PrefParam *pparam)
{
IMAPAuthType type = *((IMAPAuthType *)pparam->data);
- GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
- GtkWidget *menu;
- GtkWidget *menuitem;
+ GtkComboBox *optmenu = GTK_COMBO_BOX(*pparam->widget);
- switch (type) {
- case IMAP_AUTH_LOGIN:
- gtk_option_menu_set_history(optmenu, 1);
- break;
- case IMAP_AUTH_CRAM_MD5:
- gtk_option_menu_set_history(optmenu, 2);
- break;
- case IMAP_AUTH_ANON:
- gtk_option_menu_set_history(optmenu, 3);
- break;
- case IMAP_AUTH_GSSAPI:
- gtk_option_menu_set_history(optmenu, 4);
- break;
- case 0:
- default:
- gtk_option_menu_set_history(optmenu, 0);
- }
-
- menu = gtk_option_menu_get_menu(optmenu);
- menuitem = gtk_menu_get_active(GTK_MENU(menu));
- gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+ combobox_select_by_data(optmenu, type);
}
static void prefs_account_smtp_auth_type_set_data_from_optmenu(PrefParam *pparam)
{
- GtkWidget *menu;
- GtkWidget *menuitem;
-
- menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
- menuitem = gtk_menu_get_active(GTK_MENU(menu));
- *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
- (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+ *((RecvProtocol *)pparam->data) =
+ combobox_get_active_data(GTK_COMBO_BOX(*pparam->widget));
}
static void prefs_account_smtp_auth_type_set_optmenu(PrefParam *pparam)
{
SMTPAuthType type = *((SMTPAuthType *)pparam->data);
- GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
- GtkWidget *menu;
- GtkWidget *menuitem;
-
- switch (type) {
- case SMTPAUTH_PLAIN:
- gtk_option_menu_set_history(optmenu, 1);
- break;
- case SMTPAUTH_LOGIN:
- gtk_option_menu_set_history(optmenu, 2);
- break;
- case SMTPAUTH_CRAM_MD5:
- gtk_option_menu_set_history(optmenu, 3);
- break;
- case SMTPAUTH_DIGEST_MD5:
- gtk_option_menu_set_history(optmenu, 4);
- break;
- case 0:
- default:
- gtk_option_menu_set_history(optmenu, 0);
- }
+ GtkComboBox *optmenu = GTK_COMBO_BOX(*pparam->widget);
- menu = gtk_option_menu_get_menu(optmenu);
- menuitem = gtk_menu_get_active(GTK_MENU(menu));
- gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+ combobox_select_by_data(optmenu, type);
}
-static void prefs_account_set_string_from_optmenu(PrefParam *pparam)
+static void prefs_account_set_string_from_combobox(PrefParam *pparam)
{
- GtkWidget *menu;
- GtkWidget *menuitem;
+ GtkWidget *combobox;
+ GtkListStore *menu;
+ GtkTreeIter iter;
gchar **str;
g_return_if_fail(*pparam->widget != NULL);
- menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
- menuitem = gtk_menu_get_active(GTK_MENU(menu));
- if (menuitem == NULL)
- return;
+ combobox = *pparam->widget;
+ g_return_if_fail(gtk_combo_box_get_active_iter(
+ GTK_COMBO_BOX(combobox), &iter));
- str = (gchar **) pparam->data;
- g_free(*str);
- *str = g_strdup(g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+ str = (gchar **)pparam->data;
+ g_free(*str);
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combobox)));
+ gtk_tree_model_get(GTK_TREE_MODEL(menu), &iter,
+ COMBOBOX_PRIVACY_PLUGIN_ID, &(*str),
+ -1);
+}
+
+/* Context struct and internal function called by gtk_tree_model_foreach().
+ * This is used in prefs_account_set_privacy_combobox_from_string() to find
+ * correct combobox entry to activate when account preferences are displayed
+ * and their values are set according to preferences. */
+typedef struct _privacy_system_set_ctx {
+ GtkWidget *combobox;
+ gchar *prefsid;
+ gboolean found;
+} PrivacySystemSetCtx;
+
+static gboolean _privacy_system_set_func(GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, PrivacySystemSetCtx *ctx)
+{
+ GtkWidget *combobox = ctx->combobox;
+ gchar *prefsid = ctx->prefsid;
+ gchar *curid;
+
+ /* We're searching for correct privacy plugin ID. */
+ gtk_tree_model_get(model, iter, COMBOBOX_PRIVACY_PLUGIN_ID, &curid, -1);
+ if( strcmp(prefsid, curid) == 0 ) {
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combobox), iter);
+ g_free(curid);
+ ctx->found = TRUE;
+ return TRUE;
+ }
+
+ g_free(curid);
+ return FALSE;
}
-static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
+static void prefs_account_set_privacy_combobox_from_string(PrefParam *pparam)
{
GtkWidget *optionmenu;
- GtkWidget *menu;
+ GtkListStore *menu;
+ GtkTreeIter iter;
gboolean found = FALSE;
- GList *children, *cur;
gchar *prefsid;
- guint i = 0;
+ PrivacySystemSetCtx *ctx = NULL;
g_return_if_fail(*pparam->widget != NULL);
return;
optionmenu = *pparam->widget;
- menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optionmenu));
- children = gtk_container_children(GTK_CONTAINER(menu));
- for (cur = children; cur != NULL; cur = g_list_next(cur)) {
- GtkWidget *item = (GtkWidget *) cur->data;
- gchar *id;
-
- id = g_object_get_data(G_OBJECT(item), MENU_VAL_ID);
- if (id != NULL && strcmp(id, prefsid) == 0) {
- found = TRUE;
- gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
- privacy_system_activated(GTK_MENU_ITEM(item));
- }
- i++;
- }
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optionmenu)));
+ ctx = g_new(PrivacySystemSetCtx, sizeof(PrivacySystemSetCtx));
+ ctx->combobox = optionmenu;
+ ctx->prefsid = prefsid;
+ ctx->found = FALSE;
+
+ gtk_tree_model_foreach(GTK_TREE_MODEL(menu),
+ (GtkTreeModelForeachFunc)_privacy_system_set_func, ctx);
+ found = ctx->found;
+ g_free(ctx);
+
+ /* If chosen privacy system is not available, add a dummy entry with
+ * "not loaded" note and make it active. */
if (!found) {
gchar *name;
- GtkWidget *menuitem;
name = g_strdup_printf(_("%s (plugin not loaded)"), prefsid);
- menuitem = gtk_menu_item_new_with_label(name);
- gtk_widget_show(menuitem);
- g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID, prefsid);
- g_object_set_data(G_OBJECT(menuitem), MENU_VAL_DATA, GINT_TO_POINTER(FALSE));
- gtk_menu_append(GTK_MENU(menu), menuitem);
+ gtk_list_store_append(menu, &iter);
+ gtk_list_store_set(menu, &iter,
+ COMBOBOX_TEXT, name,
+ COMBOBOX_DATA, 0,
+ COMBOBOX_SENS, TRUE,
+ COMBOBOX_PRIVACY_PLUGIN_ID, prefsid,
+ -1);
g_free(name);
- gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
- privacy_system_activated(GTK_MENU_ITEM(menuitem));
- g_signal_connect(G_OBJECT(menuitem), "activate",
- G_CALLBACK(privacy_system_activated),
- NULL);
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(optionmenu), &iter);
}
-
- g_list_free(children);
}
static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)