* src/etpan/imap-thread.c
Add casts to int to get certs. Fixes
bug 1064, 'crash @ etpan_certificate_check()
when opening an IMAP folder', with latest
libetpan CVS or >= 0.49
* src/mainwindow.c
* src/mainwindow.h
* src/imap_gtk.c
* src/news_gtk.c
* src/prefs_folder_item.c
Grey out the "synchronise" menu items if
there's nothing to synchronise.
* src/plugins/pgpcore/sgpgme.c
Make an error clearer than "Unknown error"
+2007-01-06 [colin] 2.6.1cvs113
+
+ * src/etpan/imap-thread.c
+ Add casts to int to get certs. Fixes
+ bug 1064, 'crash @ etpan_certificate_check()
+ when opening an IMAP folder', with latest
+ libetpan CVS or >= 0.49
+ * src/mainwindow.c
+ * src/mainwindow.h
+ * src/imap_gtk.c
+ * src/news_gtk.c
+ * src/prefs_folder_item.c
+ Grey out the "synchronise" menu items if
+ there's nothing to synchronise.
+ * src/plugins/pgpcore/sgpgme.c
+ Make an error clearer than "Unknown error"
+
2007-01-06 [colin] 2.6.1cvs112
* src/messageview.c
2007-01-06 [colin] 2.6.1cvs112
* src/messageview.c
( cvs diff -u -r 1.179.2.145 -r 1.179.2.146 src/imap.c; cvs diff -u -r 1.16.2.48 -r 1.16.2.49 src/msgcache.c; ) > 2.6.1cvs110.patchset
( cvs diff -u -r 1.395.2.273 -r 1.395.2.274 src/summaryview.c; ) > 2.6.1cvs111.patchset
( cvs diff -u -r 1.94.2.115 -r 1.94.2.116 src/messageview.c; ) > 2.6.1cvs112.patchset
( cvs diff -u -r 1.179.2.145 -r 1.179.2.146 src/imap.c; cvs diff -u -r 1.16.2.48 -r 1.16.2.49 src/msgcache.c; ) > 2.6.1cvs110.patchset
( cvs diff -u -r 1.395.2.273 -r 1.395.2.274 src/summaryview.c; ) > 2.6.1cvs111.patchset
( cvs diff -u -r 1.94.2.115 -r 1.94.2.116 src/messageview.c; ) > 2.6.1cvs112.patchset
+( cvs diff -u -r 1.1.2.37 -r 1.1.2.38 src/imap_gtk.c; cvs diff -u -r 1.274.2.160 -r 1.274.2.161 src/mainwindow.c; cvs diff -u -r 1.39.2.28 -r 1.39.2.29 src/mainwindow.h; cvs diff -u -r 1.2.2.20 -r 1.2.2.21 src/news_gtk.c; cvs diff -u -r 1.52.2.33 -r 1.52.2.34 src/prefs_folder_item.c; cvs diff -u -r 1.1.4.62 -r 1.1.4.63 src/etpan/imap-thread.c; cvs diff -u -r 1.1.2.38 -r 1.1.2.39 src/plugins/pgpcore/sgpgme.c; ) > 2.6.1cvs113.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
#ifdef USE_OPENSSL
struct connect_param *param = (struct connect_param *)data;
X509 *cert = NULL;
#ifdef USE_OPENSSL
struct connect_param *param = (struct connect_param *)data;
X509 *cert = NULL;
if (certificate == NULL || len < 0) {
g_warning("no cert presented.\n");
return 0;
if (certificate == NULL || len < 0) {
g_warning("no cert presented.\n");
return 0;
refresh_resolvers();
threaded_run(folder, ¶m, &result, connect_ssl_run);
refresh_resolvers();
threaded_run(folder, ¶m, &result, connect_ssl_run);
if ((result.error == MAILIMAP_NO_ERROR_AUTHENTICATED ||
result.error == MAILIMAP_NO_ERROR_NON_AUTHENTICATED) && !etpan_skip_ssl_cert_check) {
if ((result.error == MAILIMAP_NO_ERROR_AUTHENTICATED ||
result.error == MAILIMAP_NO_ERROR_NON_AUTHENTICATED) && !etpan_skip_ssl_cert_check) {
- cert_len = mailstream_ssl_get_certificate(imap->imap_stream, &certificate);
+ cert_len = (int)mailstream_ssl_get_certificate(imap->imap_stream, &certificate);
if (etpan_certificate_check(certificate, cert_len, ¶m) < 0)
return -1;
if (certificate)
if (etpan_certificate_check(certificate, cert_len, ¶m) < 0)
return -1;
if (certificate)
threaded_run(folder, ¶m, &result, starttls_run);
debug_print("imap starttls - end\n");
threaded_run(folder, ¶m, &result, starttls_run);
debug_print("imap starttls - end\n");
if (result.error == 0 && !etpan_skip_ssl_cert_check) {
if (result.error == 0 && !etpan_skip_ssl_cert_check) {
- cert_len = mailstream_ssl_get_certificate(param.imap->imap_stream, &certificate);
+ cert_len = (int)mailstream_ssl_get_certificate(param.imap->imap_stream, &certificate);
if (etpan_certificate_check(certificate, cert_len, ¶m) < 0)
result.error = MAILIMAP_ERROR_STREAM;
if (certificate)
if (etpan_certificate_check(certificate, cert_len, ¶m) < 0)
result.error = MAILIMAP_ERROR_STREAM;
if (certificate)
SET_SENS("/Move folder...", folder_is_normal && folder_item_parent(item) != NULL);
SET_SENS("/Delete folder...", item->stype == F_NORMAL && folder_item_parent(item) != NULL);
SET_SENS("/Move folder...", folder_is_normal && folder_item_parent(item) != NULL);
SET_SENS("/Delete folder...", item->stype == F_NORMAL && folder_item_parent(item) != NULL);
+ SET_SENS("/Synchronise", item ? (folder_item_parent(item) == NULL && folder_want_synchronise(item->folder))
+ : FALSE);
SET_SENS("/Check for new messages", folder_item_parent(item) == NULL);
SET_SENS("/Check for new folders", folder_item_parent(item) == NULL);
SET_SENS("/Rebuild folder tree", folder_item_parent(item) == NULL);
SET_SENS("/Check for new messages", folder_item_parent(item) == NULL);
SET_SENS("/Check for new folders", folder_item_parent(item) == NULL);
SET_SENS("/Rebuild folder tree", folder_item_parent(item) == NULL);
static void mainwindow_quicksearch (MainWindow *mainwin,
guint action,
GtkWidget *widget);
static void mainwindow_quicksearch (MainWindow *mainwin,
guint action,
GtkWidget *widget);
+static gboolean any_folder_want_synchronise(void);
static GtkItemFactoryEntry mainwin_entries[] =
{
static GtkItemFactoryEntry mainwin_entries[] =
{
if (cur_account)
state |= M_HAVE_ACCOUNT;
if (cur_account)
state |= M_HAVE_ACCOUNT;
+ if (any_folder_want_synchronise())
+ state |= M_WANT_SYNC;
+
for ( ; account_list != NULL; account_list = account_list->next) {
if (((PrefsAccount*)account_list->data)->protocol == A_NNTP) {
state |= M_HAVE_NEWS_ACCOUNT;
for ( ; account_list != NULL; account_list = account_list->next) {
if (((PrefsAccount*)account_list->data)->protocol == A_NNTP) {
state |= M_HAVE_NEWS_ACCOUNT;
} entry[] = {
{"/File/Save as...", M_TARGET_EXIST},
{"/File/Print..." , M_TARGET_EXIST},
} entry[] = {
{"/File/Save as...", M_TARGET_EXIST},
{"/File/Print..." , M_TARGET_EXIST},
+ {"/File/Synchronise folders", M_WANT_SYNC},
{"/File/Exit" , M_UNLOCKED},
{"/Edit/Select thread" , M_SINGLE_TARGET_EXIST},
{"/File/Exit" , M_UNLOCKED},
{"/Edit/Select thread" , M_SINGLE_TARGET_EXIST},
main_window_toggle_work_offline(mainwin, GTK_CHECK_MENU_ITEM(widget)->active, TRUE);
}
main_window_toggle_work_offline(mainwin, GTK_CHECK_MENU_ITEM(widget)->active, TRUE);
}
-static void mainwindow_check_synchronise(MainWindow *mainwin, gboolean ask)
+static gboolean any_folder_want_synchronise(void)
{
GList *folderlist = folder_get_list();
gboolean found = FALSE;
{
GList *folderlist = folder_get_list();
gboolean found = FALSE;
for (; folderlist; folderlist = folderlist->next) {
Folder *folder = (Folder *)folderlist->data;
if (folder_want_synchronise(folder)) {
for (; folderlist; folderlist = folderlist->next) {
Folder *folder = (Folder *)folderlist->data;
if (folder_want_synchronise(folder)) {
+ return FALSE;
+
+}
+
+static void mainwindow_check_synchronise(MainWindow *mainwin, gboolean ask)
+{
+
+ if (!any_folder_want_synchronise())
if (offline_ask_sync && ask && alertpanel(_("Folder synchronisation"),
_("Do you want to synchronise your folders now?"),
GTK_STOCK_CANCEL, _("+_Synchronise"), NULL) != G_ALERTALTERNATE)
if (offline_ask_sync && ask && alertpanel(_("Folder synchronisation"),
_("Do you want to synchronise your folders now?"),
GTK_STOCK_CANCEL, _("+_Synchronise"), NULL) != G_ALERTALTERNATE)
M_NOT_NEWS = 1 << 15,
M_CAN_LEARN_SPAM = 1 << 16,
M_ACTIONS_EXIST = 1 << 17,
M_NOT_NEWS = 1 << 15,
M_CAN_LEARN_SPAM = 1 << 16,
M_ACTIONS_EXIST = 1 << 17,
- M_HAVE_QUEUED_MAILS = 1 << 18
+ M_HAVE_QUEUED_MAILS = 1 << 18,
+ M_WANT_SYNC = 1 << 19
} SensitiveCond;
typedef enum
} SensitiveCond;
typedef enum
folder_item_parent(item) == NULL
&& mainwin->lock_count == 0
&& news_folder_locked(item->folder) == 0);
folder_item_parent(item) == NULL
&& mainwin->lock_count == 0
&& news_folder_locked(item->folder) == 0);
+ SET_SENS("/Synchronise",
+ item ? (folder_item_parent(item) != NULL && folder_want_synchronise(item->folder))
+ : FALSE);
err = gpgme_op_decrypt(ctx, cipher, plain);
if (err != GPG_ERR_NO_ERROR) {
debug_print("can't decrypt (%s)\n", gpgme_strerror(err));
err = gpgme_op_decrypt(ctx, cipher, plain);
if (err != GPG_ERR_NO_ERROR) {
debug_print("can't decrypt (%s)\n", gpgme_strerror(err));
+ privacy_set_error("%s", gpgme_strerror(err));
gpgmegtk_free_passphrase();
gpgme_data_release(plain);
return NULL;
gpgmegtk_free_passphrase();
gpgme_data_release(plain);
return NULL;
g_node_traverse(page->item->node, G_PRE_ORDER, G_TRAVERSE_ALL,
-1, general_save_recurse_func, page);
g_node_traverse(page->item->node, G_PRE_ORDER, G_TRAVERSE_ALL,
-1, general_save_recurse_func, page);
+
+ main_window_set_menu_sensitive(mainwindow_get_mainwindow());