talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit a3fe7b0f1041a3926447b9b0ad0f4c2a3636fb72
parent 85dffc71da035bac31af9fd3944906f7de8c89af
Author: Oliver Lowe <o@olowe.co>
Date:   Sun,  3 Aug 2025 21:51:10 +1000

Delete more leftover plugin functionality

Diffstat:
Mconfigure.ac | 71-----------------------------------------------------------------------
Msrc/common/Makefile.am | 2--
Msrc/common/defs.h | 3+--
Dsrc/common/plugin.c | 794-------------------------------------------------------------------------------
Dsrc/common/plugin.h | 73-------------------------------------------------------------------------
Msrc/common/tests/Makefile.am | 1-
Msrc/common/utils.c | 26--------------------------
Msrc/common/utils.h | 1-
Msrc/etpan/Makefile.am | 2--
Msrc/gtk/Makefile.am | 2--
Msrc/main.c | 96-------------------------------------------------------------------------------
Msrc/mainwindow.c | 1-
Msrc/password.c | 1-
Msrc/prefs_toolbar.c | 37++++---------------------------------
Msrc/prefs_toolbar.h | 5+----
Msrc/summaryview.c | 562+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/toolbar.c | 15+--------------
Msrc/toolbar.h | 34++++++++++++++++------------------
Msrc/wizard.c | 194+++++++++++++++++++++++++++++++++++++------------------------------------------
19 files changed, 395 insertions(+), 1525 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -324,10 +324,6 @@ AC_ARG_ENABLE(more-addressbook-debug, [ --enable-more-addressbook-debug Build with additional addressbook debug calls], [enable_more_addressbook_debug=$enableval], [enable_more_addressbook_debug=no]) -AC_ARG_ENABLE(more-archive-debug, - [ --enable-more-archive-debug Build with additional debug calls in archive plugin], - [enable_more_archive_debug=$enableval], [enable_more_archive_debug=no]) - AC_ARG_ENABLE(timing-debug, [ --enable-timing-debug Build with timing debug calls], [enable_timing_debug=$enableval], [enable_timing_debug=no]) @@ -1173,43 +1169,6 @@ fi AC_SUBST(YTNEF_CFLAGS) AC_SUBST(YTNEF_LIBS) -AM_CONDITIONAL(BUILD_ACPI_NOTIFIER_PLUGIN, test x"$enable_acpi_notifier_plugin" != xno) -AM_CONDITIONAL(BUILD_ADDRESS_KEEPER_PLUGIN, test x"$enable_address_keeper_plugin" != xno) -AM_CONDITIONAL(BUILD_ARCHIVE_PLUGIN, test x"$enable_archive_plugin" != xno) -AM_CONDITIONAL(BUILD_ATT_REMOVER_PLUGIN, test x"$enable_att_remover_plugin" != xno) -AM_CONDITIONAL(BUILD_ATTACHWARNER_PLUGIN, test x"$enable_attachwarner_plugin" != xno) -AM_CONDITIONAL(BUILD_BOGOFILTER_PLUGIN, test x"$enable_bogofilter_plugin" != xno) -AM_CONDITIONAL(BUILD_BSFILTER_PLUGIN, test x"$enable_bsfilter_plugin" != xno) -AM_CONDITIONAL(BUILD_CLAMD_PLUGIN, test x"$enable_clamd_plugin" != xno) -AM_CONDITIONAL(BUILD_DEMO_PLUGIN, test x"$enable_demo_plugin" != xno) -AM_CONDITIONAL(BUILD_DILLO_PLUGIN, test x"$enable_dillo_plugin" != xno) -AM_CONDITIONAL(BUILD_FANCY_PLUGIN, test x"$enable_fancy_plugin" != xno) -AM_CONDITIONAL(BUILD_FETCHINFO_PLUGIN, test x"$enable_fetchinfo_plugin" != xno) -AM_CONDITIONAL(BUILD_KEYWORD_WARNER_PLUGIN, test x"$enable_keyword_warner_plugin" != xno) -AM_CONDITIONAL(BUILD_LIBRAVATAR_PLUGIN, test x"$enable_libravatar_plugin" != xno) -AM_CONDITIONAL(BUILD_LITEHTML_VIEWER_PLUGIN, test x"$enable_litehtml_viewer_plugin" != xno) -AM_CONDITIONAL(BUILD_MAILMBOX_PLUGIN, test x"$enable_mailmbox_plugin" != xno) -AM_CONDITIONAL(BUILD_MANAGESIEVE_PLUGIN, test x"$enable_managesieve_plugin" != xno) -AM_CONDITIONAL(BUILD_NEWMAIL_PLUGIN, test x"$enable_newmail_plugin" != xno) -AM_CONDITIONAL(BUILD_NOTIFICATION_PLUGIN, test x"$enable_notification_plugin" != xno) -AM_CONDITIONAL(BUILD_HOTKEYS, test x"$enable_notification_plugin" != xno -a x"$HAVE_HOTKEYS" = xyes) -AM_CONDITIONAL(BUILD_PDF_VIEWER_PLUGIN, test x"$enable_pdf_viewer_plugin" != xno) -AM_CONDITIONAL(BUILD_PERL_PLUGIN, test x"$enable_perl_plugin" != xno) -AM_CONDITIONAL(BUILD_PYTHON_PLUGIN, test x"$enable_python_plugin" != xno) -AM_CONDITIONAL(BUILD_PGPCORE_PLUGIN, test x"$enable_pgpcore_plugin" != xno) -AM_CONDITIONAL(BUILD_PGPMIME_PLUGIN, test x"$enable_pgpmime_plugin" != xno) -AM_CONDITIONAL(BUILD_PGPINLINE_PLUGIN, test x"$enable_pgpinline_plugin" != xno) -AM_CONDITIONAL(BUILD_RSSYL_PLUGIN, test x"$enable_rssyl_plugin" != xno) -AM_CONDITIONAL(BUILD_SMIME_PLUGIN, test x"$enable_smime_plugin" != xno) -AM_CONDITIONAL(BUILD_SPAMASSASSIN_PLUGIN, test x"$enable_spamassassin_plugin" != xno) -AM_CONDITIONAL(BUILD_SPAM_REPORT_PLUGIN, test x"$enable_spam_report_plugin" != xno) -AM_CONDITIONAL(BUILD_TNEF_PARSE_PLUGIN, test x"$enable_tnef_parse_plugin" != xno) -AM_CONDITIONAL(BUILD_VCALENDAR_PLUGIN, test x"$enable_vcalendar_plugin" != xno) - - -dnl **************************** -dnl ** Final configure output ** -dnl **************************** AC_CONFIG_FILES([ Makefile @@ -1267,36 +1226,6 @@ if test -n "$more_debug_output_modules"; then done fi -echo "Plugins" -echo " Built:" -for plugin in $PLUGINS; do -echo " - $plugin" -if test x"$plugin" = xnotification; then - echo " Features:" - for notif_feature in $notification_features; do - echo " $notif_feature" - done; - if test "x$notification_missing_dependencies" != x; then - echo " Disabled due to missing dependencies:" - for notif_miss_dep in $notification_missing_dependencies; do - echo " $notif_miss_dep" - done; - fi -fi -done; -if test "x$DISABLED_PLUGINS" != x; then -echo " Disabled:" -for plugin in $DISABLED_PLUGINS; do -echo " - $plugin" -done; -fi - -if test "x$MISSING_DEPS_PLUGINS" != x; then -echo " Disabled due to missing dependencies:" -for plugin in $MISSING_DEPS_PLUGINS; do -echo " - $plugin" -done; -fi echo "" echo "The binary will be installed in $prefix/bin" echo "" diff --git a/src/common/Makefile.am b/src/common/Makefile.am @@ -28,7 +28,6 @@ libclawscommon_la_SOURCES = $(arch_sources) \ md5.c \ mgutils.c \ passcrypt.c \ - plugin.c \ prefs.c \ progressindicator.c \ proxy.c \ @@ -60,7 +59,6 @@ clawscommoninclude_HEADERS = $(arch_headers) \ md5.h \ mgutils.h \ passcrypt.h \ - plugin.h \ prefs.h \ progressindicator.h \ proxy.h \ diff --git a/src/common/defs.h b/src/common/defs.h @@ -46,7 +46,7 @@ #define SYLPHEED_RC_DIR ".sylpheed-2.0" #define NEWS_CACHE_DIR "newscache" #define IMAP_CACHE_DIR "imapcache" -#define HEADER_CACHE_DIR "headercache" +#define HEADER_CACHE_DIR "headercache" #define MIME_TMP_DIR "mimetmp" #define COMMON_RC "clawsrc" #define OLD_COMMON_RC "sylpheedrc" @@ -79,7 +79,6 @@ #define HOMEPAGE_URI "https://www.claws-mail.org/" #define MANUAL_URI "https://www.claws-mail.org/documentation.php" #define FAQ_URI "https://www.claws-mail.org/faq/index.php" -#define PLUGINS_URI "https://www.claws-mail.org/plugins.php" #define DICTS_URI "https://www.claws-mail.org/win32/dictionaries.php" #define BUGZILLA_URI "https://www.thewildbeast.co.uk/claws-mail/bugzilla/enter_bug.cgi" #define THEMES_URI "https://www.claws-mail.org/themes.php" diff --git a/src/common/plugin.c b/src/common/plugin.c @@ -1,794 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2002-2022 the Claws Mail Team - * - * 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 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, see <http://www.gnu.org/licenses/>. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#include "claws-features.h" -#endif - -#include <stdio.h> -#ifdef HAVE_VALGRIND -#include <valgrind.h> -#endif - -#include "defs.h" -#include <glib.h> -#ifdef ENABLE_NLS -#include <glib/gi18n.h> -#else -#define _(a) (a) -#define N_(a) (a) -#endif -#include <gmodule.h> - -#include "utils.h" -#include "plugin.h" -#include "prefs.h" -#include "claws.h" -#include "timing.h" -#include "file-utils.h" - -#ifdef G_OS_WIN32 -#define PLUGINS_BLOCK_PREFIX "PluginsWin32_" -#else -#define PLUGINS_BLOCK_PREFIX "Plugins_" -#endif - -struct _Plugin -{ - gchar *filename; - GModule *module; - const gchar *(*name) (void); - const gchar *(*desc) (void); - const gchar *(*version) (void); - const gchar *(*type) (void); - const gchar *(*licence) (void); - struct PluginFeature *(*provides) (void); - - GSList *rdeps; - gchar *error; - gboolean unloaded_hidden; - gboolean in_prefix_dir; -}; - -const gchar *plugin_feature_names[] = - { N_("Nothing"), - N_("a viewer"), - N_("a MIME parser"), - N_("folders"), - N_("filtering"), - N_("a privacy interface"), - N_("a notifier"), - N_("a utility"), - N_("things"), - NULL }; - -/* The plugin must be at least under one of these licences and have - the corresponding token returned by the plugin_licence function. - */ -const gchar *plugin_licence_tokens[] = { - "LGPL2.1+", "LGPLv2.1+", "LGPL2.1", "LGPLv2.1", - "LGPL3+", "LGPLv3+", "LGPL3", "LGPLv3", - "GPL3+", "GPLv3+", "GPL3", "GPLv3", - "GPL2+", "GPLv2+", - "Apache2.0", "Apache 2.0", "Apache v2.0", - "2-clause BSD", "Simplified BSD", "FreeBSD", - "3-clause BSD", "New BSD", "Modified BSD", - NULL -}; - -/* Dual (or more) licences are allowed, must be separated by one of these. - */ -#define IS_LICENCE_SEP(a) ((a) == ',' || (a) == ';' || (a) == '|' || (a) == '/' || (a) == '\0') - -/** - * List of all loaded plugins - */ -GSList *plugins = NULL; -GSList *plugin_types = NULL; - -/* - * List of plugins unloaded for some fixable reason - */ -static GSList *unloaded_plugins = NULL; - -static gint list_find_by_string(gconstpointer data, gconstpointer str) -{ - return strcmp((gchar *)data, (gchar *)str) ? TRUE : FALSE; -} - -static gint list_find_by_plugin_filename(const Plugin *plugin, const gchar *filename) -{ - /* FIXME: There is a problem in case of symlinks or when a - user tries to load a plugin with the same name from a - different directory. I think it would be better to compare - only the basename of the filename here (case-insensitive on - W32). */ - cm_return_val_if_fail(plugin, 1); - cm_return_val_if_fail(plugin->filename, 1); - cm_return_val_if_fail(filename, 1); - return strcmp(filename, plugin->filename); -} - -static gboolean plugin_filename_is_standard_dir(const gchar *filename) { - return strncmp(filename, get_plugin_dir(), strlen(get_plugin_dir())) == 0; -} - -static gchar * plugin_canonical_name(const Plugin *plugin) -{ - if (plugin->in_prefix_dir == TRUE) { - if (plugin_filename_is_standard_dir(plugin->filename) == TRUE) { - gchar *plugin_name = g_path_get_basename(plugin->filename); - return plugin_name; - } - } - return g_strdup(plugin->filename); -} - -void plugin_save_list(void) -{ - gchar *rcpath, *block; - PrefFile *pfile; - GSList *type_cur, *plugin_cur; - Plugin *plugin; - - for (type_cur = plugin_types; type_cur != NULL; type_cur = g_slist_next(type_cur)) { - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL); - block = g_strconcat(PLUGINS_BLOCK_PREFIX, type_cur->data, NULL); - if ((pfile = prefs_write_open(rcpath)) == NULL || - (prefs_set_block_label(pfile, block) < 0)) { - g_warning("failed to write plugin list"); - g_free(rcpath); - g_free(block); - return; - } - g_free(block); - - for (plugin_cur = plugins; plugin_cur != NULL; plugin_cur = g_slist_next(plugin_cur)) { - plugin = (Plugin *) plugin_cur->data; - - if (plugin->unloaded_hidden) - continue; - - if (!strcmp(plugin->type(), type_cur->data)) { - gchar * name = plugin_canonical_name(plugin); - int err = fprintf(pfile->fp, "%s\n", name); - g_free(name); - if (err < 0) - goto revert; - } - } - for (plugin_cur = unloaded_plugins; plugin_cur != NULL; plugin_cur = g_slist_next(plugin_cur)) { - plugin = (Plugin *) plugin_cur->data; - - if (plugin->unloaded_hidden) - continue; - - if (!strcmp(plugin->type(), type_cur->data)) { - gchar * name = plugin_canonical_name(plugin); - int err = fprintf(pfile->fp, "%s\n", name); - g_free(name); - if (err < 0) - goto revert; - } - } - if (fprintf(pfile->fp, "\n") < 0) - goto revert; - - if (prefs_file_close(pfile) < 0) - g_warning("failed to write plugin list"); - - g_free(rcpath); - - continue; - -revert: - g_warning("failed to write plugin list"); - if (prefs_file_close_revert(pfile) < 0) - g_warning("failed to revert plugin list"); - - g_free(rcpath); - } -} - -static gboolean plugin_is_loaded(const gchar *filename) -{ - return (g_slist_find_custom(plugins, filename, - (GCompareFunc)list_find_by_plugin_filename) != NULL); -} - -static Plugin *plugin_get_by_filename(const gchar *filename) -{ - GSList *cur = plugins; - for(; cur; cur = cur->next) { - Plugin *p = (Plugin *)cur->data; - if (!strcmp(p->filename, filename)) { - return p; - } - } - return NULL; -} - -/** - * Loads a plugin dependancies - * - * Plugin dependancies are, optionnaly, listed in a file in - * get_plugin_dir()/$pluginname.deps. - * \param filename The filename of the plugin for which we have to load deps - * \param error The location where an error string can be stored - * \return 0 on success, -1 otherwise - */ -static gint plugin_load_deps(const gchar *filename, gchar **error) -{ - gchar *tmp; - gchar *deps_file = NULL; - FILE *fp = NULL; - gchar buf[BUFFSIZE]; - gchar *p; - - tmp = g_strdup(filename); - if( (p = strrchr(tmp, '.')) ) - *p = '\0'; - deps_file = g_strconcat(tmp, ".deps", NULL); - g_free(tmp); - - fp = claws_fopen(deps_file, "rb"); - g_free(deps_file); - - if (!fp) - return 0; - - while (claws_fgets(buf, sizeof(buf), fp) != NULL) { - Plugin *dep_plugin = NULL; - gchar *path = NULL; - buf[strlen(buf)-1]='\0'; /* chop off \n */ - path = g_strconcat(get_plugin_dir(), buf, - ".", G_MODULE_SUFFIX, NULL); - if ((dep_plugin = plugin_get_by_filename(path)) == NULL) { - debug_print("trying to load %s\n", path); - dep_plugin = plugin_load(path, error); - if (dep_plugin == NULL) { - g_free(path); - claws_fclose(fp); - return -1; - } - dep_plugin->in_prefix_dir = TRUE; - } - g_free(path); - if (!g_slist_find_custom(dep_plugin->rdeps, - (gpointer) filename, list_find_by_string)) { - debug_print("adding %s to %s rdeps\n", - filename, - dep_plugin->filename); - dep_plugin->rdeps = - g_slist_append(dep_plugin->rdeps, - g_strdup(filename)); - } - } - claws_fclose(fp); - return 0; -} - -static void plugin_unload_rdeps(Plugin *plugin) -{ - GSList *cur = plugin->rdeps; - debug_print("removing %s rdeps\n", plugin->filename); - while (cur) { - gchar *file = (gchar *)cur->data; - Plugin *rdep_plugin = file?plugin_get_by_filename(file):NULL; - debug_print(" rdep %s: %p\n", file, rdep_plugin); - if (rdep_plugin) { - plugin_unload(rdep_plugin); - } - g_free(file); - cur = cur->next; - } - g_slist_free(plugin->rdeps); - plugin->rdeps = NULL; -} - -static void plugin_remove_from_unloaded_list (const gchar *filename) -{ - GSList *item = g_slist_find_custom(unloaded_plugins, - (gpointer) filename, (GCompareFunc)list_find_by_plugin_filename); - Plugin *unloaded_plugin = item ? ((Plugin *)item->data):NULL; - if (unloaded_plugin != NULL) { - debug_print("removing %s from unloaded list\n", unloaded_plugin->filename); - unloaded_plugins = g_slist_remove(unloaded_plugins, unloaded_plugin); - g_module_close(unloaded_plugin->module); - g_free(unloaded_plugin->filename); - g_free(unloaded_plugin->error); - g_free(unloaded_plugin); - } -} - -static gchar *plugin_check_features(struct PluginFeature *features) { - int i = 0, j = 0; - GSList *cur = plugins; - - if (features == NULL) - return NULL; - for(; cur; cur = cur->next) { - Plugin *p = (Plugin *)cur->data; - struct PluginFeature *cur_features = p->provides(); - if (p->unloaded_hidden) - continue; - for (j = 0; cur_features[j].type != PLUGIN_NOTHING; j++) { - for (i = 0; features[i].type != PLUGIN_NOTHING; i++) { - if (cur_features[j].type == features[i].type && - !strcmp(cur_features[j].subtype, features[i].subtype)) { - return g_strdup_printf(_( - "This plugin provides %s (%s), which is " - "already provided by the %s plugin."), - _(plugin_feature_names[features[i].type]), - _(features[i].subtype), - p->name()); - } - } - } - } - - return NULL; -} - -static gboolean plugin_licence_check(const gchar *licence) { - gint i = 0; - gint len = 0; - - if (licence != NULL) { - len = strlen(licence); - } - if (len == 0) { - g_warning("plugin licence check failed: empty licence"); - return FALSE; - } - while (plugin_licence_tokens[i] != NULL) { - gchar *found = g_strstr_len(licence, len, plugin_licence_tokens[i]); - if (found != NULL) { - gint tlen = strlen(plugin_licence_tokens[i]); - if (len != tlen) { /* not a single license */ - if (((found == licence) && (!IS_LICENCE_SEP(licence[tlen]))) - || (!IS_LICENCE_SEP(*(found - 1))) - || (!IS_LICENCE_SEP(*(found + tlen)))) { - debug_print("plugin licence check failed: invalid separator\n"); - return FALSE; - } - } - debug_print("plugin licence check passed: %s found\n", plugin_licence_tokens[i]); - return TRUE; - } - ++i; - } - debug_print("plugin licence check failed: %s is not a valid licence\n", licence); - return FALSE; -} - -static Plugin *plugin_load_in_default_dir(const gchar *filename, gchar **error) -{ - Plugin *plugin = NULL; - gchar *filename_default_dir = NULL; - gchar *default_error = NULL; - gchar *plugin_name = g_path_get_basename(filename); - - filename_default_dir = g_strconcat(get_plugin_dir(), plugin_name, NULL); - - debug_print("trying to load %s in default plugin directory %s\n", - plugin_name, get_plugin_dir()); - - g_free(plugin_name); - - plugin = plugin_load(filename_default_dir, &default_error); - - g_free(filename_default_dir); - - if (plugin) { - g_free(*error); - *error = NULL; - plugin->in_prefix_dir = TRUE; - - } else { - g_free(default_error); - } - - return plugin; -} - -/** - * Loads a plugin - * - * \param filename The filename of the plugin to load - * \param error The location where an error string can be stored - * \return the plugin on success, NULL otherwise - */ -Plugin *plugin_load(const gchar *filename, gchar **error) -{ - Plugin *plugin; - gint (*plugin_init) (gchar **error); - gpointer plugin_name, plugin_desc, plugin_version; - const gchar *(*plugin_type)(void); - const gchar *(*plugin_licence)(void); - struct PluginFeature *(*plugin_provides)(void); - - gint ok; - START_TIMING((filename?filename:"NULL plugin")); - cm_return_val_if_fail(filename != NULL, NULL); - cm_return_val_if_fail(error != NULL, NULL); - - /* check duplicate plugin path name */ - if (plugin_is_loaded(filename)) { - plugin = plugin_get_by_filename(filename); - if (plugin->unloaded_hidden) { - /* reshow it */ - goto init_plugin; - } else { - *error = g_strdup(_("Plugin already loaded")); - return NULL; - } - } - - plugin_remove_from_unloaded_list(filename); - - if (plugin_load_deps(filename, error) < 0) - return NULL; - plugin = g_new0(Plugin, 1); - if (plugin == NULL) { - *error = g_strdup(_("Failed to allocate memory for Plugin")); - return NULL; - } - - debug_print("trying to load `%s'\n", filename); - plugin->module = g_module_open(filename, 0); - if (plugin->module == NULL) { - *error = g_strdup(g_module_error()); - g_free(plugin); - if (!plugin_filename_is_standard_dir(filename)) - return plugin_load_in_default_dir(filename, error); - else - return NULL; - } else { - plugin->in_prefix_dir = FALSE; - } - -init_plugin: - if (!g_module_symbol(plugin->module, "plugin_name", &plugin_name) || - !g_module_symbol(plugin->module, "plugin_desc", &plugin_desc) || - !g_module_symbol(plugin->module, "plugin_version", &plugin_version) || - !g_module_symbol(plugin->module, "plugin_type", (gpointer)&plugin_type) || - !g_module_symbol(plugin->module, "plugin_licence", (gpointer)&plugin_licence) || - !g_module_symbol(plugin->module, "plugin_provides", (gpointer)&plugin_provides) || - !g_module_symbol(plugin->module, "plugin_init", (gpointer)&plugin_init)) { - *error = g_strdup(g_module_error()); - if (plugin->unloaded_hidden) - return NULL; - g_module_close(plugin->module); - g_free(plugin); - return NULL; - } - - if (plugin_licence_check(plugin_licence()) != TRUE) { - *error = g_strdup(_("This module is not licensed under a GPL v3 or later compatible license.")); - if (plugin->unloaded_hidden) - return NULL; - g_module_close(plugin->module); - g_free(plugin); - return NULL; - } - - if (!strcmp(plugin_type(), "GTK")) { - *error = g_strdup(_("This module is for Claws Mail GTK1.")); - if (plugin->unloaded_hidden) - return NULL; - g_module_close(plugin->module); - g_free(plugin); - return NULL; - } - - if ((*error = plugin_check_features(plugin_provides())) != NULL) { - if (plugin->unloaded_hidden) - return NULL; - g_module_close(plugin->module); - g_free(plugin); - return NULL; - } - plugin->name = plugin_name; - plugin->desc = plugin_desc; - plugin->version = plugin_version; - plugin->type = plugin_type; - plugin->licence = plugin_licence; - plugin->provides = plugin_provides; - plugin->filename = g_strdup(filename); - plugin->error = NULL; - - if ((ok = plugin_init(error)) < 0) { - if (*error) - plugin->error = g_strdup(*error); - unloaded_plugins = g_slist_append(unloaded_plugins, plugin); - return NULL; - } - - if (!plugin->unloaded_hidden) - plugins = g_slist_append(plugins, plugin); - plugin->unloaded_hidden = FALSE; - - debug_print("Plugin %s (from file %s) loaded\n", plugin->name(), filename); - END_TIMING(); - return plugin; -} - -void plugin_unload(Plugin *plugin) -{ - gboolean (*plugin_done) (void); - gboolean can_unload = TRUE; - - plugin_unload_rdeps(plugin); - - if (plugin->unloaded_hidden) - return; - - if (plugin->error) { - plugin_remove_from_unloaded_list(plugin->filename); - return; - } - if (g_module_symbol(plugin->module, "plugin_done", (gpointer) &plugin_done)) { - can_unload = plugin_done(); - } - - if (can_unload) { -#ifdef HAVE_VALGRIND - if (!RUNNING_ON_VALGRIND) { - g_module_close(plugin->module); - } -#else - g_module_close(plugin->module); -#endif - plugins = g_slist_remove(plugins, plugin); - g_free(plugin->filename); - g_free(plugin); - } else { - plugin->unloaded_hidden = TRUE; - } - -} - -static void replace_old_plugin_name(gchar *plugin_name) -{ - gchar *old_name_end = g_strconcat("_plugin.", G_MODULE_SUFFIX, NULL); - gchar *matches = strstr(plugin_name, old_name_end); - - if (!matches) { - g_free(old_name_end); - return; - } else if (plugin_name + strlen(plugin_name) != matches + strlen(matches)) { - g_free(old_name_end); - return; - } else { - gchar *new_name_end = g_strconcat(".", G_MODULE_SUFFIX, NULL); - int offset = strlen(plugin_name) - strlen(old_name_end); - - debug_print("Replacing old plugin name %s\n", plugin_name); - - strncpy(plugin_name + offset, new_name_end, strlen(old_name_end) - 1); - debug_print(" to %s\n", plugin_name); - g_free(new_name_end); - } - g_free(old_name_end); -} - -void plugin_load_all(const gchar *type) -{ - gchar *rcpath; - gchar buf[BUFFSIZE]; - PrefFile *pfile; - gchar *error = NULL, *block; - gint failed = 0; - - plugin_types = g_slist_append(plugin_types, g_strdup(type)); - - rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL); - block = g_strconcat(PLUGINS_BLOCK_PREFIX, type, NULL); - if ((pfile = prefs_read_open(rcpath)) == NULL || - ((failed = prefs_set_block_label(pfile, block)) < 0)) { - g_free(rcpath); - g_free(block); - if (!failed) - prefs_file_close(pfile); - return; - } - g_free(block); - - while (claws_fgets(buf, sizeof(buf), pfile->fp) != NULL) { - if (buf[0] == '[') - break; - - g_strstrip(buf); - replace_old_plugin_name(buf); - - if ((buf[0] != '\0') && (plugin_load(buf, &error) == NULL)) { - g_warning("plugin loading error: %s", error); - g_free(error); - } - } - prefs_file_close(pfile); - - g_free(rcpath); -} - -void plugin_unload_all(const gchar *type) -{ - GSList *list, *cur; - - list = g_slist_copy(plugins); - list = g_slist_reverse(list); - - for(cur = list; cur != NULL; cur = g_slist_next(cur)) { - Plugin *plugin = (Plugin *) cur->data; - - if (!strcmp(type, plugin->type())) - plugin_unload(plugin); - } - g_slist_free(list); - - cur = g_slist_find_custom(plugin_types, (gpointer) type, list_find_by_string); - if (cur) { - g_free(cur->data); - plugin_types = g_slist_remove(plugin_types, cur); - } -} - - -/* Load those plugins we always want to use. No error output; just - * try. */ -void plugin_load_standard_plugins (void) -{ - static const char *names[] = { -#ifdef G_OS_WIN32 - "pgpmime", - "pgpinline", -#else - /* post-2.5 maybe - "bogofilter", */ -#endif - NULL - }; - int i; - gchar *error, *filename; - - for (i=0; names[i]; i++) { - /* Simple hack to check whether the plugin has already - * been loaded but checking only for the basename. */ - GSList *cur = plugins; - for(; cur; cur = cur->next) { - Plugin *p = (Plugin *)cur->data; - if (strstr(p->filename, names[i])) - break; - } - if (!cur) { /* Not yet loaded. */ - /* FIXME: get_plugin_dir () returns with a trailing - * (back)slash; this should be fixed so that we can use - * g_module_build_path here. */ -#ifdef G_OS_WIN32 - filename = g_strconcat (get_plugin_dir(), - names[i], NULL); -#else - filename = g_strconcat (get_plugin_dir(), - names[i], ".", G_MODULE_SUFFIX, NULL); -#endif - error = NULL; - plugin_load(filename, &error); - g_free (error); - g_free(filename); - } - } -} - -GSList *plugin_get_list(void) -{ - GSList *new = NULL; - GSList *cur = plugins; - for (; cur; cur = cur->next) { - Plugin *p = (Plugin *)cur->data; - if (!p->unloaded_hidden) - new = g_slist_prepend(new, p); - } - new = g_slist_reverse(new); - return new; -} - -Plugin *plugin_get_loaded_by_name(const gchar *name) -{ - Plugin *plugin = NULL; - GSList *new, *cur; - new = plugin_get_list(); - for (cur = new; cur; cur = g_slist_next(cur)) { - plugin = (Plugin *)cur->data; - if (!g_ascii_strcasecmp(plugin->name(), name)) - break; - else - plugin = NULL; - } - g_slist_free(new); - return plugin; -} - -GSList *plugin_get_unloaded_list(void) -{ - return g_slist_copy(unloaded_plugins); -} - -const gchar *plugin_get_name(Plugin *plugin) -{ - return plugin->name(); -} - -const gchar *plugin_get_desc(Plugin *plugin) -{ - return plugin->desc(); -} - -const gchar *plugin_get_version(Plugin *plugin) -{ - return plugin->version(); -} - -const gchar *plugin_get_error(Plugin *plugin) -{ - return plugin->error; -} - -/* Generally called in plugin_init() function of each plugin. It check the - * minimal and compiled version of claws binary required by the plugin. - * If (@minimum_claws_version == 0 || @compiled_claws_version == 0), don't - * check the corresponding version. - * - * If an error occurs { - * If @error == NULL { don't allocate error string. } - * If @error != NULL { error string is allocated and must be freed after - * call function. } - * } - * Returns: FALSE if an error occurs, TRUE if all is OK. - */ -gint check_plugin_version(guint32 minimum_claws_version, - guint32 compiled_claws_version, - const gchar *plugin_name, - gchar **error) -{ - guint32 claws_version = claws_get_version(); - - if (compiled_claws_version != 0 && claws_version > compiled_claws_version) { - if (error != NULL) { - *error = (plugin_name && *plugin_name) - ? g_strdup_printf(_("Your version of Claws Mail is newer than the " - "version the '%s' plugin was built with."), - plugin_name) - : g_strdup(_("Your version of Claws Mail is newer than the " - "version the plugin was built with.")); - } - return FALSE; - } - - if (minimum_claws_version != 0 && claws_version < minimum_claws_version) { - if (error != NULL) { - *error = (plugin_name && *plugin_name) - ? g_strdup_printf(_("Your version of Claws Mail is too old for " - "the '%s' plugin."), plugin_name) - : g_strdup(_("Your version of Claws Mail is too old for the plugin.")); - } - return FALSE; - } - return TRUE; -} diff --git a/src/common/plugin.h b/src/common/plugin.h @@ -1,73 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2002-2015 the Claws Mail Team - * - * 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 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef PLUGIN_H -#define PLUGIN_H 1 - -#include <glib.h> - -typedef struct _Plugin Plugin; - -typedef enum { - PLUGIN_NOTHING, - PLUGIN_MIMEVIEWER, - PLUGIN_MIMEPARSER, - PLUGIN_FOLDERCLASS, - PLUGIN_FILTERING, - PLUGIN_PRIVACY, - PLUGIN_NOTIFIER, - PLUGIN_UTILITY, - PLUGIN_OTHER -} PluginFeatureType; - -struct PluginFeature { - PluginFeatureType type; - const gchar *subtype; -}; - -/* Functions to implement by the plugin */ -gint plugin_init (gchar **error); -gboolean plugin_done (void); -const gchar *plugin_name (void); -const gchar *plugin_desc (void); -const gchar *plugin_version (void); -struct PluginFeature *plugin_provides (void); -const gchar *plugin_type (void); -const gchar *plugin_licence (void); - -/* Functions by the Claws Mail plugin system */ -Plugin *plugin_load (const gchar *filename, - gchar **error); -void plugin_unload (Plugin *plugin); -void plugin_load_all (const gchar *type); -void plugin_unload_all (const gchar *type); -void plugin_save_list (void); -void plugin_load_standard_plugins (void); - -GSList *plugin_get_list (void); -GSList *plugin_get_unloaded_list(void); -const gchar *plugin_get_name (Plugin *plugin); -const gchar *plugin_get_desc (Plugin *plugin); -const gchar *plugin_get_version (Plugin *plugin); -const gchar *plugin_get_error (Plugin *plugin); -Plugin *plugin_get_loaded_by_name(const gchar *name); -gint check_plugin_version (guint32 minimum_claws_version, - guint32 compiled_claws_version, - const gchar *plugin_name, - gchar **error); -#endif diff --git a/src/common/tests/Makefile.am b/src/common/tests/Makefile.am @@ -6,7 +6,6 @@ common_ldadd = \ AM_CPPFLAGS = \ $(GLIB_CFLAGS) \ -DLOCALEDIR=\""$(localedir)"\" \ - -DPLUGINDIR=\"$(PLUGINDIR)\" \ -I$(top_srcdir)/src \ -I.. diff --git a/src/common/utils.c b/src/common/utils.c @@ -1859,32 +1859,6 @@ const gchar *get_desktop_file(void) #endif } -/* Return the default directory for Plugins. */ -const gchar *get_plugin_dir(void) -{ -#ifdef G_OS_WIN32 - static gchar *plugin_dir = NULL; - - if (!plugin_dir) - plugin_dir = g_strconcat(w32_get_module_dir(), - "\\lib\\claws-mail\\plugins\\", - NULL); - return plugin_dir; -#else - if (is_dir_exist(PLUGINDIR)) - return PLUGINDIR; - else { - static gchar *plugin_dir = NULL; - if (!plugin_dir) - plugin_dir = g_strconcat(get_rc_dir(), - G_DIR_SEPARATOR_S, "plugins", - G_DIR_SEPARATOR_S, NULL); - return plugin_dir; - } -#endif -} - - #ifdef G_OS_WIN32 /* Return the default directory for Themes. */ const gchar *w32_get_themes_dir(void) diff --git a/src/common/utils.h b/src/common/utils.h @@ -409,7 +409,6 @@ const gchar *get_news_cache_dir (void); const gchar *get_imap_cache_dir (void); const gchar *get_mime_tmp_dir (void); const gchar *get_template_dir (void); -const gchar *get_plugin_dir (void); const gchar *get_tmp_dir (void); const gchar *get_locale_dir (void); gchar *get_tmp_file (void); diff --git a/src/etpan/Makefile.am b/src/etpan/Makefile.am @@ -3,8 +3,6 @@ # terms of the General Public License version 3 (or later). # See COPYING file for license details. -PLUGINDIR = $(pkglibdir)/plugins/ - noinst_LTLIBRARIES = libclawsetpan.la libclawsetpan_la_SOURCES = \ diff --git a/src/gtk/Makefile.am b/src/gtk/Makefile.am @@ -3,7 +3,6 @@ # terms of the General Public License version 3 (or later). # See COPYING file for license details. -PLUGINDIR = $(pkglibdir)/plugins/ DOCDIR = $(docdir) noinst_LTLIBRARIES = libclawsgtk.la @@ -81,7 +80,6 @@ AM_CPPFLAGS = \ -I$(builddir)/.. \ $(GTK_CFLAGS) \ $(ENCHANT_CFLAGS) \ - -DPLUGINDIR=\"$(PLUGINDIR)\" \ -DDOCDIR=\"$(DOCDIR)\" libclawsgtk_la_LIBADD = \ diff --git a/src/main.c b/src/main.c @@ -122,7 +122,6 @@ #include "socket.h" #include "log.h" #include "prefs_toolbar.h" -#include "plugin.h" #include "mh_gtk.h" #include "imap_gtk.h" #include "news_gtk.h" @@ -453,54 +452,6 @@ backup_mode: return (r == 0); } -static int migrate_common_rc(const gchar *old_rc, const gchar *new_rc) -{ - FILE *oldfp, *newfp; - gchar *plugin_path, *old_plugin_path, *new_plugin_path; - gchar buf[BUFFSIZE]; - gboolean err = FALSE; - - oldfp = claws_fopen(old_rc, "r"); - if (!oldfp) - return -1; - newfp = claws_fopen(new_rc, "w"); - if (!newfp) { - claws_fclose(oldfp); - return -1; - } - - plugin_path = g_strdup(get_plugin_dir()); - new_plugin_path = g_strdup(plugin_path); - - if (strstr(plugin_path, "/claws-mail/")) { - gchar *end = g_strdup(strstr(plugin_path, "/claws-mail/")+strlen("/claws-mail/")); - *(strstr(plugin_path, "/claws-mail/")) = '\0'; - old_plugin_path = g_strconcat(plugin_path, "/sylpheed-claws/", end, NULL); - g_free(end); - } else { - old_plugin_path = g_strdup(new_plugin_path); - } - debug_print("replacing %s with %s\n", old_plugin_path, new_plugin_path); - while (claws_fgets(buf, sizeof(buf), oldfp)) { - if (STRNCMP(buf, old_plugin_path)) { - err |= (claws_fputs(buf, newfp) == EOF); - } else { - debug_print("->replacing %s\n", buf); - debug_print(" with %s%s\n", new_plugin_path, buf+strlen(old_plugin_path)); - err |= (claws_fputs(new_plugin_path, newfp) == EOF); - err |= (claws_fputs(buf+strlen(old_plugin_path), newfp) == EOF); - } - } - g_free(plugin_path); - g_free(new_plugin_path); - g_free(old_plugin_path); - claws_fclose(oldfp); - if (claws_safe_fclose(newfp) == EOF) - err = TRUE; - - return (err ? -1:0); -} - #ifdef HAVE_LIBSM static void sc_client_set_value (MainWindow *mainwin, @@ -1110,17 +1061,6 @@ int main(int argc, char *argv[]) } } - - if (!is_file_exist(RC_DIR G_DIR_SEPARATOR_S COMMON_RC) && - is_file_exist(RC_DIR G_DIR_SEPARATOR_S OLD_COMMON_RC)) { - /* post 2.6 name change */ - migrate_common_rc(RC_DIR G_DIR_SEPARATOR_S OLD_COMMON_RC, - RC_DIR G_DIR_SEPARATOR_S COMMON_RC); - } - - if (!cmd.exit) - plugin_load_all("Common"); - userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "gtkrc-2.0", NULL); gtk_rc_parse(userrc); g_free(userrc); @@ -1407,46 +1347,13 @@ int main(int argc, char *argv[]) num_folder_class = g_list_length(folder_get_list()); - plugin_load_all("GTK3"); - if (g_list_length(folder_get_list()) != num_folder_class) { debug_print("new folders loaded, reloading processing rules\n"); prefs_matcher_read_config(); } - if ((plug_list = plugin_get_unloaded_list()) != NULL) { - GSList *cur; - gchar *list = NULL; - gint num_plugins = 0; - for (cur = plug_list; cur; cur = cur->next) { - Plugin *plugin = (Plugin *)cur->data; - gchar *tmp = g_strdup_printf("%s\n%s", - list? list:"", - plugin_get_name(plugin)); - g_free(list); - list = tmp; - num_plugins++; - } - main_window_cursor_normal(mainwin); - main_window_popup(mainwin); - mainwin_shown = TRUE; - alertpanel_warning(ngettext( - "The following plugin failed to load. " - "Check the Plugins configuration " - "for more information:\n%s", - "The following plugins failed to load. " - "Check the Plugins configuration " - "for more information:\n%s", - num_plugins), - list); - main_window_cursor_wait(mainwin); - g_free(list); - g_slist_free(plug_list); - } - if (never_ran) { prefs_common_write_config(); - plugin_load_standard_plugins (); } /* if not crashed, show window now */ @@ -1672,8 +1579,6 @@ static void exit_claws(MainWindow *mainwin) main_window_destroy_all(); - plugin_unload_all("GTK3"); - matcher_done(); prefs_toolbar_done(); avatars_done(); @@ -1702,7 +1607,6 @@ static void exit_claws(MainWindow *mainwin) prefs_spelling_done(); gtkaspell_checkers_quit(); #endif - plugin_unload_all("Common"); #ifdef G_OS_WIN32 win32_close_log(); #endif diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -1865,7 +1865,6 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Tags", "Configuration/Tags", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Separator2", "Configuration/---", GTK_UI_MANAGER_SEPARATOR) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Configuration", "Plugins", "Configuration/Plugins", GTK_UI_MANAGER_MENUITEM) /* Help menu */ MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Help", "Manual", "Help/Manual", GTK_UI_MANAGER_MENUITEM) diff --git a/src/password.c b/src/password.c @@ -38,7 +38,6 @@ #endif #include "common/passcrypt.h" -#include "common/plugin.h" #include "common/pkcs5_pbkdf2.h" #include "common/timing.h" #include "common/utils.h" diff --git a/src/prefs_toolbar.c b/src/prefs_toolbar.c @@ -49,7 +49,6 @@ #include "prefs_toolbar.h" #include "prefswindow.h" #include "prefs_gtk.h" -#include "plugin.h" #include "messageview.h" enum @@ -67,7 +66,6 @@ enum { ITEM_FUNCTION = 0, ITEM_USER_ACTION = 1, - ITEM_PLUGIN = 2, ITEM_SEPARATOR = 3, }; @@ -185,14 +183,6 @@ typedef struct _ToolbarPage #define ERROR_MSG_NO_ICON _("Item has no icon defined.") #define ERROR_MSG_NO_TEXT _("Item has no text defined.") -typedef struct _ToolbarPluginItem ToolbarPluginItem; -struct _ToolbarPluginItem { - gchar *plugin; - gchar *item_name; - ToolbarPluginCallback cb; - gpointer cb_data; -}; - static void prefs_toolbar_populate (ToolbarPage *prefs_toolbar); static void get_action_name (const gchar *entry, @@ -359,7 +349,6 @@ static void prefs_toolbar_populate(ToolbarPage *prefs_toolbar) { GSList *cur; gchar *act, *act_name; - GHashTable **hash; prefs_toolbar->combo_action_list = toolbar_get_action_items(prefs_toolbar->source); combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(prefs_toolbar->item_func_combo), @@ -382,8 +371,6 @@ static void prefs_toolbar_populate(ToolbarPage *prefs_toolbar) combobox_set_sensitive(GTK_COMBO_BOX(prefs_toolbar->item_type_combo), ITEM_USER_ACTION, FALSE); - combobox_set_sensitive(GTK_COMBO_BOX(prefs_toolbar->item_type_combo), ITEM_PLUGIN, FALSE); - gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_toolbar->item_func_combo), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_toolbar->item_action_combo), 0); @@ -494,8 +481,7 @@ static void prefs_toolbar_register(GtkButton *button, ToolbarPage *prefs_toolbar g_free(event); return; } - } else if(item_type == ITEM_PLUGIN) - event = toolbar_ret_descr_from_val(A_CLAWS_PLUGINS); + } else event = toolbar_ret_descr_from_val(A_CLAWS_ACTIONS); @@ -518,7 +504,7 @@ static void prefs_toolbar_register(GtkButton *button, ToolbarPage *prefs_toolbar } g_free(text); - if((item_type != ITEM_USER_ACTION) && (item_type != ITEM_PLUGIN)) + if(item_type != ITEM_USER_ACTION) g_free(event); } @@ -582,8 +568,7 @@ static void prefs_toolbar_substitute(GtkButton *button, ToolbarPage *prefs_toolb g_free(set_event); return; } - } else if(item_type == ITEM_PLUGIN) - icon_event = toolbar_ret_descr_from_val(A_CLAWS_PLUGINS); + } else icon_event = toolbar_ret_descr_from_val(A_CLAWS_ACTIONS); @@ -605,7 +590,7 @@ static void prefs_toolbar_substitute(GtkButton *button, ToolbarPage *prefs_toolb g_free(text); g_free(set_event); - if((item_type != ITEM_USER_ACTION) && (item_type != ITEM_PLUGIN)) + if(item_type != ITEM_USER_ACTION) g_free(icon_event); } } @@ -857,7 +842,6 @@ static void prefs_toolbar_create(ToolbarPage *prefs_toolbar) GTK_COMBO_BOX(item_type_combo))); COMBOBOX_ADD(item_type_model, _("Internal Function"), ITEM_FUNCTION); COMBOBOX_ADD(item_type_model, _("User Action"), ITEM_USER_ACTION); - COMBOBOX_ADD(item_type_model, _("Plugins"), ITEM_PLUGIN); COMBOBOX_ADD(item_type_model, _("Separator"), ITEM_SEPARATOR); gtk_widget_set_size_request(item_type_combo, 200, -1); gtk_grid_attach(GTK_GRID(table), item_type_combo, 1, 0, 1, 1); @@ -1279,19 +1263,6 @@ static gboolean set_list_selected(GtkTreeSelection *selector, return TRUE; } - if (g_utf8_collate(toolbar_ret_descr_from_val(A_CLAWS_PLUGINS), descr) == 0) { - gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_toolbar->item_type_combo), ITEM_PLUGIN); - - gtk_widget_hide(prefs_toolbar->item_func_combo); - gtk_widget_hide(prefs_toolbar->item_action_combo); - - g_free(descr); - g_free(icon_text); - if (pix != NULL) - g_object_unref(pix); - return TRUE; - } - /* scan combo list for selected description an set combo item accordingly */ for (cur = prefs_toolbar->combo_action_list, item_num = 0; cur != NULL; cur = cur->next) { diff --git a/src/prefs_toolbar.h b/src/prefs_toolbar.h @@ -27,9 +27,6 @@ void prefs_toolbar_done (void); /* parent is a MainWindow, Compose, or MessageView, depending on the ToolbarType during registration */ typedef void (*ToolbarPluginCallback)(gpointer parent, const gchar *item_name, gpointer data); -void prefs_toolbar_register_plugin_item(ToolbarType toolbar_type, const gchar *plugin_name, const gchar *item_name, ToolbarPluginCallback cb, gpointer cb_data); -void prefs_toolbar_unregister_plugin_item(ToolbarType toolbar_type, const gchar *plugin_name, const gchar *item_name); -void prefs_toolbar_execute_plugin_item(gpointer parent, ToolbarType toolbar_type, const gchar *id); void prefs_toolbar_update_action_btns(void); -#endif /* __PREFS_CUSTOM_TOOLBAR_H__ */ +#endif /* __PREFS_CUSTOM_TOOLBAR_H__ */ diff --git a/src/summaryview.c b/src/summaryview.c @@ -175,10 +175,10 @@ static void summary_display_msg_full (SummaryView *summaryview, static void summary_set_row_marks (SummaryView *summaryview, GtkCMCTreeNode *row); -static gboolean summary_set_row_tag (SummaryView *summaryview, - GtkCMCTreeNode *row, +static gboolean summary_set_row_tag (SummaryView *summaryview, + GtkCMCTreeNode *row, gboolean refresh, - gboolean set, + gboolean set, gint id); /* message handling */ static void summary_mark_row (SummaryView *summaryview, @@ -259,7 +259,7 @@ static void summary_toggle_multiple_pressed (GtkWidget *widget, SummaryView *summaryview); #endif -static gint summary_folder_eventbox_pressed +static gint summary_folder_eventbox_pressed (GtkWidget *eventbox, GdkEventButton *event, SummaryView *summaryview); @@ -317,7 +317,7 @@ static void summary_locked_clicked (GtkWidget *button, static void summary_tags_clicked (GtkWidget *button, SummaryView *summaryview); -static void summary_start_drag (GtkWidget *widget, +static void summary_start_drag (GtkWidget *widget, int button, GdkEvent *event, SummaryView *summaryview); @@ -371,8 +371,8 @@ static gint summary_cmp_by_from (GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2); static gint summary_cmp_by_simplified_subject - (GtkCMCList *clist, - gconstpointer ptr1, + (GtkCMCList *clist, + gconstpointer ptr1, gconstpointer ptr2); static gint summary_cmp_by_score (GtkCMCList *clist, gconstpointer ptr1, @@ -387,10 +387,10 @@ static gint summary_cmp_by_subject (GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2); static gint summary_cmp_by_locked (GtkCMCList *clist, - gconstpointer ptr1, + gconstpointer ptr1, gconstpointer ptr2); static gint summary_cmp_by_tags (GtkCMCList *clist, - gconstpointer ptr1, + gconstpointer ptr1, gconstpointer ptr2); static void quicksearch_execute_cb (QuickSearch *quicksearch, @@ -399,7 +399,7 @@ static void quicksearch_execute_cb (QuickSearch *quicksearch, static void tog_searchbar_cb (GtkWidget *w, gpointer data); -static void summary_find_answers (SummaryView *summaryview, +static void summary_find_answers (SummaryView *summaryview, MsgInfo *msg); static gboolean summary_update_msg (gpointer source, gpointer data); @@ -573,7 +573,7 @@ SummaryView *summary_create(MainWindow *mainwin) #define SUMMARY_VBOX_SPACING 3 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SUMMARY_VBOX_SPACING); gtk_widget_set_name(GTK_WIDGET(vbox), "summaryview"); - + /* create status label */ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(hbox); @@ -583,10 +583,10 @@ SummaryView *summary_create(MainWindow *mainwin) stat_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(stat_box); - + stat_box2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(stat_box2); - + toggle_search = gtk_toggle_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_search), prefs_common.show_searchbar); @@ -594,28 +594,28 @@ SummaryView *summary_create(MainWindow *mainwin) gtk_widget_show(toggle_search); CLAWS_SET_TIP(toggle_search, _("Toggle quick search bar")); - - gtk_box_pack_start(GTK_BOX(hbox), toggle_search, FALSE, FALSE, HSPACING_NARROW_2); - gtk_box_pack_start(GTK_BOX(hbox), stat_vbox, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box2, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_search, FALSE, FALSE, HSPACING_NARROW_2); + + gtk_box_pack_start(GTK_BOX(hbox), stat_vbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box2, TRUE, TRUE, 0); hbox_l = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(hbox_l); gtk_box_pack_start(GTK_BOX(stat_box), hbox_l, TRUE, TRUE, 0); - + statlabel_folder = gtk_label_new(""); gtk_widget_show(statlabel_folder); gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_folder, FALSE, FALSE, HSPACING_NARROW_2); statlabel_select = gtk_label_new(""); gtk_widget_show(statlabel_select); gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_select, FALSE, FALSE, 12); - + /* toggle view button */ toggle_eventbox = gtk_event_box_new(); gtk_widget_show(toggle_eventbox); - + gtk_box_pack_end(GTK_BOX(hbox), toggle_eventbox, FALSE, FALSE, HSPACING_NARROW); toggle_arrow = gtk_image_new_from_icon_name("pan-down-symbolic", GTK_ICON_SIZE_MENU); @@ -635,7 +635,7 @@ SummaryView *summary_create(MainWindow *mainwin) G_CALLBACK(summary_toggle_multiple_pressed), summaryview); #endif - + statlabel_msgs = gtk_label_new(""); gtk_widget_show(statlabel_msgs); gtk_box_pack_end(GTK_BOX(stat_box), statlabel_msgs, FALSE, FALSE, HSPACING_NARROW); @@ -686,7 +686,7 @@ SummaryView *summary_create(MainWindow *mainwin) G_CALLBACK(tog_searchbar_cb), summaryview); /* create popup menu */ - + gtk_action_group_add_actions(mainwin->action_group, summary_popup_entries, G_N_ELEMENTS(summary_popup_entries), @@ -744,8 +744,6 @@ SummaryView *summary_create(MainWindow *mainwin) #ifndef GENERIC_UMPC MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup", "Print", "File/Print", GTK_UI_MANAGER_MENUITEM) #endif - /* last separator, for plugins */ - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup", "Separator6", "File/---", GTK_UI_MANAGER_SEPARATOR) /* submenus - replyto */ MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/ReplyTo", "All", "SummaryViewPopup/ReplyTo/All", GTK_UI_MANAGER_MENUITEM) @@ -789,13 +787,13 @@ SummaryView *summary_create(MainWindow *mainwin) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/CreateProcessingRule", "BySubject", "Tools/CreateProcessingRule/BySubject", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/CreateProcessingRule", "BySender", "Tools/CreateProcessingRule/BySender", GTK_UI_MANAGER_MENUITEM) #endif - + /* submenus - view */ MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/View", "OpenNewWindow", "View/OpenNewWindow", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/View", "MessageSource", "View/MessageSource", GTK_UI_MANAGER_MENUITEM) #ifndef GENERIC_UMPC MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/View", "AllHeaders", "View/AllHeaders", GTK_UI_MANAGER_MENUITEM) -#endif +#endif MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus", "SummaryViewHeaderPopup", "SummaryViewHeaderPopup", GTK_UI_MANAGER_MENU) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewHeaderPopup", "LockColumnHeaders", "SummaryViewHeaderPopup/LockColumnHeaders", GTK_UI_MANAGER_MENUITEM) @@ -841,7 +839,7 @@ SummaryView *summary_create(MainWindow *mainwin) /* CLAWS: need this to get the SummaryView * from * the CList */ - g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview); + g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview); gtk_widget_show_all(vbox); @@ -851,7 +849,7 @@ SummaryView *summary_create(MainWindow *mainwin) quicksearch_show(quicksearch); else quicksearch_hide(quicksearch); - + if (prefs_common.layout_mode == WIDE_MSGLIST_LAYOUT || prefs_common.layout_mode == SMALL_LAYOUT) gtk_widget_hide(summaryview->toggle_eventbox); @@ -865,7 +863,7 @@ void summary_relayout(SummaryView *summaryview) g_object_ref(summaryview->hbox_l); g_object_ref(summaryview->statlabel_msgs); - + gtk_container_remove(GTK_CONTAINER( gtk_widget_get_parent(summaryview->hbox_l)), summaryview->hbox_l); gtk_container_remove(GTK_CONTAINER( @@ -902,7 +900,7 @@ void summary_relayout(SummaryView *summaryview) gtk_widget_show(summaryview->toggle_eventbox); gtk_widget_show(summaryview->statlabel_msgs); } - + break; } summary_set_column_order(summaryview); @@ -967,7 +965,7 @@ static void summary_set_fonts(SummaryView *summaryview) static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon) { - GtkWidget *pixmap; + GtkWidget *pixmap; if (!summaryview->folder_pixmap_eventbox) { summaryview->folder_pixmap_eventbox = gtk_event_box_new(); gtk_widget_show(summaryview->folder_pixmap_eventbox); @@ -983,7 +981,7 @@ static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon pixmap = stock_pixmap_widget(icon); gtk_container_add(GTK_CONTAINER(summaryview->folder_pixmap_eventbox), pixmap); gtk_widget_show(pixmap); - summaryview->folder_pixmap = pixmap; + summaryview->folder_pixmap = pixmap; } void summary_init(SummaryView *summaryview) @@ -1019,7 +1017,7 @@ void summary_init(SummaryView *summaryview) gtk_container_add (GTK_CONTAINER(summaryview->toggle_search), pixmap); gtk_widget_show(pixmap); summaryview->quick_search_pixmap = pixmap; - + #ifdef GENERIC_UMPC pixmap = stock_pixmap_widget(STOCK_PIXMAP_SELECTION); gtk_container_add(GTK_CONTAINER(summaryview->multiple_sel_togbtn), pixmap); @@ -1037,7 +1035,7 @@ void summary_init(SummaryView *summaryview) summary_set_column_titles(summaryview); summary_colorlabel_menu_create(summaryview, FALSE); summary_tags_menu_create(summaryview, FALSE); - main_create_mailing_list_menu (summaryview->mainwin, NULL); + main_create_mailing_list_menu (summaryview->mainwin, NULL); summary_set_menu_sensitive(summaryview); summaryview->header_menu_lock = FALSE; @@ -1051,7 +1049,7 @@ void summary_init(SummaryView *summaryview) ( i && (folder_has_parent_of_type(i, F_OUTBOX) \ || folder_has_parent_of_type(i, F_DRAFT) \ || folder_has_parent_of_type(i, F_QUEUE)) ) - + static void summary_switch_from_to(SummaryView *summaryview, FolderItem *item) { gboolean show_from = FALSE, show_to = FALSE; @@ -1059,19 +1057,19 @@ static void summary_switch_from_to(SummaryView *summaryview, FolderItem *item) gint from_pos = 0, to_pos = 0; SummaryColumnState *col_state = summaryview->col_state; GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree); - + if (!item || ((prefs_common.layout_mode == VERTICAL_LAYOUT || prefs_common.layout_mode == SMALL_LAYOUT) && prefs_common.two_line_vert) ) return; if (FOLDER_SHOWS_TO_HDR(item)) show_to = TRUE; else show_from = TRUE; - + from_pos = summaryview->col_pos[S_COL_FROM]; to_pos = summaryview->col_pos[S_COL_TO]; showing_from = col_state[from_pos].visible; showing_to = col_state[to_pos].visible; - + if (showing_from && showing_to) { debug_print("showing both\n"); return; @@ -1082,7 +1080,7 @@ static void summary_switch_from_to(SummaryView *summaryview, FolderItem *item) return; } - debug_print("showing %s %s, must show %s %s\n", + debug_print("showing %s %s, must show %s %s\n", showing_from?"From":"", showing_to?"To":"", show_from?"From":"", @@ -1163,7 +1161,7 @@ static void summaryview_quicksearch_recurse_step(SummaryView *summaryview, Folde if (result) { summaryview->recursive_matched_folders = g_slist_prepend( summaryview->recursive_matched_folders, item); - + folderview_update_search_icon(item, TRUE); } } @@ -1203,7 +1201,7 @@ static void summaryview_quicksearch_recurse(SummaryView *summaryview) summaryview->search_root_folder = summaryview->folder_item; summaryview_quicksearch_search_subfolders(summaryview, summaryview->folder_item); - + main_window_cursor_normal(summaryview->mainwin); END_TIMING(); } @@ -1221,7 +1219,7 @@ static gboolean summary_check_consistency(FolderItem *item, GSList *mlist) if (MSG_IS_UNREAD(msginfo->flags)) u++; if (MSG_IS_MARKED(msginfo->flags)) - m++; + m++; if (MSG_IS_REPLIED(msginfo->flags)) r++; if (MSG_IS_FORWARDED(msginfo->flags)) @@ -1248,7 +1246,7 @@ static gboolean summary_check_consistency(FolderItem *item, GSList *mlist) folder_item_scan_full(item, FALSE); END_TIMING(); return FALSE; - } + } END_TIMING(); return TRUE; } @@ -1258,7 +1256,7 @@ gboolean summaryview_search_root_progress(gpointer data, guint at, guint matched SummaryView *summaryview = (SummaryView*) data; gint interval = quicksearch_is_fast(summaryview->quicksearch) ? 5000 : 100; - + statusbar_progress_all(at, total, interval); if (at % interval == 0) @@ -1289,9 +1287,9 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid inc_lock(); summary_lock(summaryview); - + menu_set_sensitive_all(GTK_MENU_SHELL(summaryview->popupmenu), TRUE); - + utils_free_regex(); is_refresh = (item == summaryview->folder_item && !avoid_refresh) ? TRUE : FALSE; @@ -1354,7 +1352,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid if (changed || !quicksearch_has_sat_predicate(summaryview->quicksearch)) folder_update_op_count(); } - + summary_freeze(summaryview); summary_clear_list(summaryview); @@ -1363,7 +1361,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid if (!item || !item->path || !folder_item_parent(item) || item->no_select) { g_free(buf); debug_print("empty folder (%p %s %p %d)\n", - item, + item, (item && item->path)?item->path:"(null)", item?folder_item_parent(item):0x0, item?item->no_select:FALSE); @@ -1407,8 +1405,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid START_TIMING("quicksearch"); - statusbar_print_all(_("Searching in %s... \n"), - summaryview->folder_item->path ? + statusbar_print_all(_("Searching in %s... \n"), + summaryview->folder_item->path ? summaryview->folder_item->path : "(null)"); folder_item_update_freeze(); @@ -1439,7 +1437,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid || summaryview->folder_item->hide_read_threads) && quicksearch_has_sat_predicate(summaryview->quicksearch) == FALSE) { GSList *not_killed; - + summary_set_hide_menu(summaryview, "/Menu/View/HideReadMessages", summaryview->folder_item->hide_read_msgs); summary_set_hide_menu(summaryview, "/Menu/View/HideDelMessages", @@ -1449,7 +1447,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid not_killed = NULL; for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) { MsgInfo * msginfo = (MsgInfo *) cur->data; - + if (!msginfo->hidden) { if (MSG_IS_DELETED(msginfo->flags) && summaryview->folder_item->hide_del_msgs) { procmsg_msginfo_free(&msginfo); @@ -1574,7 +1572,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid for (i = 0; i < 6 && node == NULL; i++) { EntryAction act = prefs_common.summary_select_prio[i]; - + switch(act) { case ACTION_OLDEST_MARKED: if (summaryview->sort_type == SORT_ASCENDING) @@ -1626,7 +1624,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid break; case ACTION_LAST_OPENED: if (summaryview->folder_item) { - node = summary_find_msg_by_msgnum(summaryview, + node = summary_find_msg_by_msgnum(summaryview, summaryview->folder_item->last_seen); } break; @@ -1652,7 +1650,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid stop = TRUE; break; } - + if (stop || node) break; } @@ -1669,7 +1667,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, gboolean avoid summary_status_show(summaryview); summary_set_menu_sensitive(summaryview); toolbar_main_set_sensitive(summaryview->mainwin); - + summary_thaw(summaryview); STATUSBAR_PUSH(summaryview->mainwin, _("Done.")); STATUSBAR_POP(summaryview->mainwin); @@ -1781,16 +1779,16 @@ SummarySelection summary_get_selection_type(SummaryView *summaryview) /*! *\return MsgInfo * Selected message if there's one selected; * if multiple selected, or none, return NULL. - */ + */ MsgInfo *summary_get_selected_msg(SummaryView *summaryview) { - /* summaryview->selected may be valid when multiple + /* summaryview->selected may be valid when multiple * messages were selected */ GList *sellist = GTK_CMCLIST(summaryview->ctree)->selection; - if (sellist == NULL || sellist->next) + if (sellist == NULL || sellist->next) return NULL; - + return GTKUT_CTREE_NODE_GET_ROW_DATA(sellist->data); } @@ -1889,7 +1887,7 @@ void summary_set_menu_sensitive(SummaryView *summaryview) summary_lock(summaryview); #ifndef GENERIC_UMPC - if (summaryview->messageview + if (summaryview->messageview && summaryview->messageview->mimeview && summaryview->messageview->mimeview->textview) cm_toggle_menu_set_active_full(summaryview->mainwin->ui_manager, "Menus/SummaryViewPopup/View/AllHeaders", @@ -1981,7 +1979,7 @@ void summary_select_next_unread(SummaryView *summaryview) else node = summary_find_prev_flagged_msg (summaryview, node, MSG_UNREAD, TRUE); - + if (node) summary_select_node(summaryview, node, OPEN_SELECTED_ON_PREVNEXT); else { @@ -2066,7 +2064,7 @@ void summary_select_next_new(SummaryView *summaryview) else node = summary_find_prev_flagged_msg (summaryview, node, MSG_NEW, TRUE); - + if (node) summary_select_node(summaryview, node, OPEN_SELECTED_ON_PREVNEXT); else { @@ -2134,7 +2132,7 @@ void summary_select_next_marked(SummaryView *summaryview) else node = summary_find_prev_flagged_msg (summaryview, node, MSG_MARKED, TRUE); - + if (node) summary_select_node(summaryview, node, OPEN_SELECTED_ON_PREVNEXT); else { @@ -2318,7 +2316,7 @@ void summary_select_node(SummaryView *summaryview, GtkCMCTreeNode *node, && summaryview->messageview->mimeview->textview->loading) { PostponedSelectData *data = g_new0(PostponedSelectData, 1); summaryview->messageview->mimeview->textview->stop_loading = TRUE; - + data->ctree = ctree; data->row = NULL; data->node = node; @@ -2369,7 +2367,7 @@ guint summary_get_msgnum(SummaryView *summaryview, GtkCMCTreeNode *node) msginfo = gtk_cmctree_node_get_row_data(ctree, node); if (msginfo) return msginfo->msgnum; - else + else return -1; } @@ -2415,7 +2413,7 @@ static GtkCMCTreeNode *summary_find_next_msg(SummaryView *summaryview, for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) { msginfo = gtk_cmctree_node_get_row_data(ctree, node); - if (msginfo && !MSG_IS_DELETED(msginfo->flags) + if (msginfo && !MSG_IS_DELETED(msginfo->flags) && !MSG_IS_MOVE(msginfo->flags)) break; } @@ -2469,7 +2467,7 @@ static GtkCMCTreeNode *summary_find_next_flagged_msg(SummaryView *summaryview, /* Find msg with matching flags but ignore messages with ignore flags, if searching for new or unread messages */ if ((msginfo && (msginfo->flags.perm_flags & flags) != 0) && - !(((flags & (MSG_NEW | MSG_UNREAD)) != 0) && MSG_IS_IGNORE_THREAD(msginfo->flags)) + !(((flags & (MSG_NEW | MSG_UNREAD)) != 0) && MSG_IS_IGNORE_THREAD(msginfo->flags)) ) break; } @@ -2620,7 +2618,7 @@ static void summary_update_status(SummaryView *summaryview) for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL; node = gtkut_ctree_node_next(ctree, node)) { msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); - + if (!msginfo) continue; @@ -2648,7 +2646,7 @@ static void summary_status_show(SummaryView *summaryview) MsgInfo *msginfo; gchar *name; gchar *tooltip; - + if (!summaryview->folder_item) { gtk_label_set_text(GTK_LABEL(summaryview->statlabel_folder), ""); gtk_label_set_text(GTK_LABEL(summaryview->statlabel_select), ""); @@ -2670,8 +2668,8 @@ static void summary_status_show(SummaryView *summaryview) n_selected++; } } - - if (summaryview->folder_item->hide_read_msgs + + if (summaryview->folder_item->hide_read_msgs || summaryview->folder_item->hide_del_msgs || summaryview->folder_item->hide_read_threads || quicksearch_has_sat_predicate(summaryview->quicksearch)) { @@ -2748,7 +2746,7 @@ static void summary_status_show(SummaryView *summaryview) sel = g_strdup(""); itstr = g_strdup(""); } - + if (prefs_common.layout_mode != SMALL_LAYOUT) { str = g_strconcat(n_selected ? itos(n_selected) : "", itstr, sel, spc, del, mv, cp, NULL); @@ -2757,7 +2755,7 @@ static void summary_status_show(SummaryView *summaryview) g_free(mv); g_free(cp); g_free(itstr); - + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_select), str); g_free(str); @@ -2794,7 +2792,7 @@ static void summary_status_show(SummaryView *summaryview) _("Watched:"), n_watched); gtk_widget_set_tooltip_markup(GTK_WIDGET(summaryview->statlabel_msgs), - tooltip); + tooltip); g_free(tooltip); } else { gchar *ssize, *tsize; @@ -2813,7 +2811,7 @@ static void summary_status_show(SummaryView *summaryview) g_free(mv); g_free(cp); g_free(itstr); - + gtk_label_set_text(GTK_LABEL(summaryview->statlabel_select), str); g_free(str); } @@ -3009,7 +3007,7 @@ void summary_reflect_prefs(void) summary_set_column_titles(summaryview); summary_relayout(summaryview); - + if (summaryview->folder_item) summary_show(summaryview, summaryview->folder_item, FALSE); } @@ -3121,7 +3119,7 @@ static gboolean summary_update_thread_age(GNode *node, gpointer data) *most_recent = msginfo->date_t; } return FALSE; -} +} static void summary_find_thread_age(GNode *gnode) { @@ -3147,7 +3145,7 @@ static gboolean summary_update_is_read(GNode *node, gpointer data) return TRUE; } return FALSE; -} +} static gboolean summary_thread_is_read(GNode *gnode) { @@ -3254,7 +3252,7 @@ static void summary_set_ctree_from_list(SummaryView *summaryview, gboolean vert_layout = (prefs_common.layout_mode == VERTICAL_LAYOUT); gboolean small_layout = (prefs_common.layout_mode == SMALL_LAYOUT); START_TIMING(""); - + if (!mlist) return; display = gdk_display_get_default(); @@ -3279,13 +3277,13 @@ static void summary_set_ctree_from_list(SummaryView *summaryview, if (prefs_common.use_addr_book) start_address_completion(NULL); - + if (summaryview->threaded) { GNode *root, *gnode; START_TIMING("threaded"); root = procmsg_get_thread_tree(mlist); - + for (gnode = root->children; gnode != NULL; gnode = gnode->next) { if (!summaryview->folder_item->hide_read_threads || @@ -3299,7 +3297,7 @@ static void summary_set_ctree_from_list(SummaryView *summaryview, } g_node_destroy(root); - + END_TIMING(); } else { gchar *text[N_SUMMARY_COLS]; @@ -3381,7 +3379,7 @@ static gchar *summary_complete_address(const gchar *addr) { gint count; gchar *res, *tmp, *email_addr; - + if (addr == NULL || !strchr(addr, '@')) return NULL; @@ -3457,7 +3455,7 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], text[col_pos[S_COL_TAGS]] = ""; /* slow! */ - if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible || + if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible || ((vert_layout || small_layout) && prefs_common.two_line_vert)) { if (msginfo->date_t && msginfo->date_t > 0) { procheader_date_get_localtime(date_modified, @@ -3469,11 +3467,11 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], else text[col_pos[S_COL_DATE]] = _("(No Date)"); } - + if (prefs_common.swap_from && msginfo->from && msginfo->to && !summaryview->col_state[summaryview->col_pos[S_COL_TO]].visible) { gchar *addr = NULL; - + addr = g_strdup(msginfo->from); if (addr) { @@ -3516,8 +3514,8 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], from_text = _("(No From)"); } } - - to_text = msginfo->to ? msginfo->to : + + to_text = msginfo->to ? msginfo->to : (msginfo->cc ? msginfo->cc : (msginfo->newsgroups ? msginfo->newsgroups : NULL ) @@ -3559,13 +3557,13 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], tmp2[BUFFSIZE-1]='\0'; text[col_pos[S_COL_FROM]] = tmp2; } - + if (summaryview->simplify_subject_preg != NULL) - text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? - string_remove_match(tmp3, BUFFSIZE, msginfo->subject, - summaryview->simplify_subject_preg) : + text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? + string_remove_match(tmp3, BUFFSIZE, msginfo->subject, + summaryview->simplify_subject_preg) : _("(No Subject)"); - else + else text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? msginfo->subject : _("(No Subject)"); if ((vert_layout || small_layout) && prefs_common.two_line_vert) { @@ -3643,7 +3641,7 @@ static void summary_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags flags, MsgT } } -static void summary_msginfo_change_flags(MsgInfo *msginfo, +static void summary_msginfo_change_flags(MsgInfo *msginfo, MsgPermFlags add_flags, MsgTmpFlags add_tmp_flags, MsgPermFlags rem_flags, MsgTmpFlags rem_tmp_flags) { @@ -3745,7 +3743,7 @@ static void summary_display_msg_full(SummaryView *summaryview, return; else if (summaryview->messageview) summaryview->messageview->filtered = FALSE; - } + } cm_return_if_fail(row != NULL); if (summary_is_locked(summaryview)) return; @@ -3761,7 +3759,7 @@ static void summary_display_msg_full(SummaryView *summaryview, summary_unlock(summaryview); END_TIMING(); return; - } + } if (new_window && prefs_common.layout_mode != SMALL_LAYOUT) { MessageView *msgview; @@ -3807,7 +3805,7 @@ static void summary_display_msg_full(SummaryView *summaryview, data->msginfo = procmsg_msginfo_new_ref(msginfo); if (summaryview->mark_as_read_timeout_tag != 0) g_source_remove(summaryview->mark_as_read_timeout_tag); - summaryview->mark_as_read_timeout_tag = + summaryview->mark_as_read_timeout_tag = g_timeout_add_seconds(prefs_common.mark_as_read_delay, msginfo_mark_as_read_timeout, data); } else if (new_window || !prefs_common.mark_as_read_on_new_window) { @@ -3850,10 +3848,10 @@ void summary_open_msg(SummaryView *summaryview, gboolean new_window, gboolean from_sep_msgview) { if (!summaryview->selected) return; - + /* CLAWS: if separate message view, don't open a new window * but rather use the current separated message view */ - summary_display_msg_full(summaryview, summaryview->selected, + summary_display_msg_full(summaryview, summaryview->selected, new_window, FALSE, from_sep_msgview); } @@ -4089,7 +4087,7 @@ static void summary_mark_row(SummaryView *summaryview, GtkCMCTreeNode *row) summaryview->copied--; procmsg_msginfo_set_to_folder(msginfo, NULL); - summary_msginfo_change_flags(msginfo, MSG_MARKED, 0, MSG_DELETED, + summary_msginfo_change_flags(msginfo, MSG_MARKED, 0, MSG_DELETED, MSG_MOVE | MSG_COPY | MSG_MOVE_DONE); summary_set_row_marks(summaryview, row); debug_print("Message %s/%d is marked\n", msginfo->folder->path, msginfo->msgnum); @@ -4111,9 +4109,9 @@ static void summary_lock_row(SummaryView *summaryview, GtkCMCTreeNode *row) summaryview->copied--; } procmsg_msginfo_set_to_folder(msginfo, NULL); - summary_msginfo_change_flags(msginfo, MSG_LOCKED, 0, MSG_DELETED, + summary_msginfo_change_flags(msginfo, MSG_LOCKED, 0, MSG_DELETED, MSG_MOVE | MSG_COPY | MSG_MOVE_DONE); - + summary_set_row_marks(summaryview, row); debug_print("Message %d is locked\n", msginfo->msgnum); } @@ -4211,7 +4209,7 @@ void summary_mark_as_read(SummaryView *summaryview) GTK_CMCTREE_NODE(cur->data)); folder_item_set_batch(summaryview->folder_item, FALSE); END_LONG_OPERATION(summaryview); - + summary_status_show(summaryview); } @@ -4236,7 +4234,7 @@ void summary_mark_as_unread(SummaryView *summaryview) GTK_CMCTREE_NODE(cur->data)); folder_item_set_batch(summaryview->folder_item, FALSE); END_LONG_OPERATION(summaryview); - + summary_status_show(summaryview); } @@ -4253,7 +4251,7 @@ void summary_msgs_lock(SummaryView *summaryview) summary_lock_row(summaryview, GTK_CMCTREE_NODE(cur->data)); END_LONG_OPERATION(summaryview); - + summary_status_show(summaryview); } @@ -4270,7 +4268,7 @@ void summary_msgs_unlock(SummaryView *summaryview) summary_unlock_row(summaryview, GTK_CMCTREE_NODE(cur->data)); END_LONG_OPERATION(summaryview); - + summary_status_show(summaryview); } @@ -4389,7 +4387,7 @@ void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *wid if (msginfo) msgs = g_slist_prepend(msgs, msginfo); } - + if (procmsg_spam_learner_learn(NULL, msgs, is_spam) == 0) { for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { GtkCMCTreeNode *row = GTK_CMCTREE_NODE(cur->data); @@ -4407,7 +4405,7 @@ void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *wid summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0); } summaryview->display_msg = prefs_common.always_show_msg; - + summary_set_row_marks(summaryview, row); } } else { @@ -4429,8 +4427,8 @@ void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *wid MSG_IS_SPAM(msginfo->flags)?LEARN_HAM:LEARN_SPAM); } g_slist_free(msgs); - - summary_status_show(summaryview); + + summary_status_show(summaryview); } static gboolean check_permission(SummaryView *summaryview, MsgInfo * msginfo) @@ -4451,7 +4449,7 @@ static gboolean check_permission(SummaryView *summaryview, MsgInfo * msginfo) for(cur = account_get_list() ; cur != NULL ; cur = cur->next) { PrefsAccount * account; gchar * from_name; - + account = cur->data; if (account->name && *account->name) from_name = @@ -4462,7 +4460,7 @@ static gboolean check_permission(SummaryView *summaryview, MsgInfo * msginfo) from_name = g_strdup_printf("%s", account->address); - + if (g_utf8_collate(from_name, msginfo->from) == 0) { g_free(from_name); found = TRUE; @@ -4474,7 +4472,7 @@ static gboolean check_permission(SummaryView *summaryview, MsgInfo * msginfo) if (!found) { alertpanel_error(_("You're not the author of the article.")); } - + return found; default: @@ -4500,11 +4498,11 @@ static void summary_delete_row(SummaryView *summaryview, GtkCMCTreeNode *row) summaryview->copied--; procmsg_msginfo_set_to_folder(msginfo, NULL); - summary_msginfo_change_flags(msginfo, MSG_DELETED, 0, MSG_MARKED, + summary_msginfo_change_flags(msginfo, MSG_DELETED, 0, MSG_MARKED, MSG_MOVE | MSG_COPY | MSG_MOVE_DONE); summaryview->deleted++; - if (!prefs_common.immediate_exec && + if (!prefs_common.immediate_exec && !folder_has_parent_of_type(summaryview->folder_item, F_TRASH)) { summary_set_row_marks(summaryview, row); } @@ -4524,7 +4522,7 @@ void summary_cancel(SummaryView *summaryview) return; news_cancel_article(summaryview->folder_item->folder, msginfo); - + if (summary_is_locked(summaryview)) return; summary_lock(summaryview); @@ -4555,7 +4553,7 @@ void summary_delete(SummaryView *summaryview) if (summary_is_locked(summaryview)) return; if (!summaryview->folder_item) return; - + START_LONG_OPERATION(summaryview, FALSE); if (!prefs_common.live_dangerously) { @@ -4575,11 +4573,11 @@ void summary_delete(SummaryView *summaryview) } } - for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; + for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { GtkCMCTreeNode *row = GTK_CMCTREE_NODE(cur->data); msginfo = gtk_cmctree_node_get_row_data(ctree, row); - if (msginfo && msginfo->total_size != 0 && + if (msginfo && msginfo->total_size != 0 && msginfo->size != (goffset)msginfo->total_size) partial_mark_for_delete(msginfo); } @@ -4606,7 +4604,7 @@ void summary_delete(SummaryView *summaryview) node = summary_find_next_msg(summaryview, sel_last,TRUE); } summary_select_node(summaryview, node, OPEN_SELECTED_ON_DELETEMOVE); - + if (prefs_common.immediate_exec || folder_has_parent_of_type(item, F_TRASH)) { summary_execute(summaryview); /* after deleting, the anchor may be at an invalid row @@ -4615,7 +4613,7 @@ void summary_delete(SummaryView *summaryview) } else summary_status_show(summaryview); - + main_window_cursor_normal(summaryview->mainwin); } @@ -4625,13 +4623,13 @@ void summary_delete_trash(SummaryView *summaryview) PrefsAccount *ac; if (!summaryview->folder_item || FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return; - + if (NULL != (ac = account_find_from_item(summaryview->folder_item))) to_folder = account_get_special_folder(ac, F_TRASH); if (to_folder == NULL) to_folder = summaryview->folder_item->folder->trash; - + if (to_folder == NULL || to_folder == summaryview->folder_item || folder_has_parent_of_type(summaryview->folder_item, F_TRASH)) summary_delete(summaryview); @@ -4655,7 +4653,7 @@ static void summary_unmark_row(SummaryView *summaryview, GtkCMCTreeNode *row) summaryview->copied--; procmsg_msginfo_set_to_folder(msginfo, NULL); - summary_msginfo_unset_flags(msginfo, MSG_MARKED | MSG_DELETED, + summary_msginfo_unset_flags(msginfo, MSG_MARKED | MSG_DELETED, MSG_MOVE | MSG_COPY | MSG_MOVE_DONE); summary_set_row_marks(summaryview, row); @@ -4677,7 +4675,7 @@ void summary_unmark(SummaryView *summaryview) summary_unmark_row(summaryview, GTK_CMCTREE_NODE(cur->data)); folder_item_set_batch(summaryview->folder_item, FALSE); END_LONG_OPERATION(summaryview); - + summary_status_show(summaryview); } @@ -4701,13 +4699,13 @@ static void summary_move_row_to(SummaryView *summaryview, GtkCMCTreeNode *row, summaryview->copied--; } if (!MSG_IS_MOVE(msginfo->flags)) { - summary_msginfo_change_flags(msginfo, 0, MSG_MOVE, MSG_DELETED, + summary_msginfo_change_flags(msginfo, 0, MSG_MOVE, MSG_DELETED, MSG_COPY | MSG_MOVE_DONE); summaryview->moved++; } else { summary_msginfo_unset_flags(msginfo, MSG_DELETED, MSG_COPY); } - + if (!prefs_common.immediate_exec) { summary_set_row_marks(summaryview, row); } @@ -4739,7 +4737,7 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder) return; } - START_LONG_OPERATION(summaryview, FALSE); + START_LONG_OPERATION(summaryview, FALSE); for (cur = GTK_CMCLIST(summaryview->ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { @@ -4765,9 +4763,9 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder) summary_select_node(summaryview, node, OPEN_SELECTED_ON_DELETEMOVE); summary_status_show(summaryview); } - + if (!summaryview->selected) { /* this was the last message */ - GtkCMCTreeNode *node = gtk_cmctree_node_nth (GTK_CMCTREE(summaryview->ctree), + GtkCMCTreeNode *node = gtk_cmctree_node_nth (GTK_CMCTREE(summaryview->ctree), GTK_CMCLIST(summaryview->ctree)->rows - 1); if (node) summary_select_node(summaryview, node, OPEN_SELECTED_ON_DELETEMOVE); @@ -4807,9 +4805,9 @@ static void summary_copy_row_to(SummaryView *summaryview, GtkCMCTreeNode *row, if (MSG_IS_MOVE(msginfo->flags)) { summaryview->moved--; } - + if (!MSG_IS_COPY(msginfo->flags)) { - summary_msginfo_change_flags(msginfo, 0, MSG_COPY, MSG_DELETED, + summary_msginfo_change_flags(msginfo, 0, MSG_COPY, MSG_DELETED, MSG_MOVE | MSG_MOVE_DONE); summaryview->copied++; } else { @@ -4885,13 +4883,13 @@ void summary_add_address(SummaryView *summaryview) msginfo = gtk_cmctree_node_get_row_data(GTK_CMCTREE(summaryview->ctree), summaryview->selected); - if (!msginfo || !msginfo->from) + if (!msginfo || !msginfo->from) return; Xstrdup_a(from, msginfo->from, return); eliminate_address_comment(from); extract_address(from); - + full_msginfo = procmsg_msginfo_get_full_info(msginfo); avatarr = avatars_avatarrender_new(full_msginfo); @@ -4953,7 +4951,7 @@ void summary_select_thread(SummaryView *summaryview, gboolean delete_thread, gboolean froze = FALSE; GList *cur = NULL; GList *copy = NULL; - if (!GTK_CMCLIST(summaryview->ctree)->selection) + if (!GTK_CMCLIST(summaryview->ctree)->selection) return; @@ -5045,14 +5043,14 @@ void summary_save_as(SummaryView *summaryview) tmp = g_path_get_basename(dest); if ( aval==0 ) { /* append */ - if (append_file(src, dest, TRUE) < 0) + if (append_file(src, dest, TRUE) < 0) alertpanel_error(_("Couldn't save the file '%s'."), tmp); } else { /* overwrite */ if (copy_file(src, dest, TRUE) < 0) alertpanel_error(_("Couldn't save the file '%s'."), tmp); } g_free(src); - + /* * If two or more msgs are selected, * append them to the output file. @@ -5089,7 +5087,7 @@ void summary_print(SummaryView *summaryview) GList *cur; gchar *msg = g_strdup_printf(_("You are about to print %d " "messages, one by one. Do you " - "want to continue?"), + "want to continue?"), g_list_length(clist->selection)); if (g_list_length(clist->selection) > 9 && alertpanel(_("Warning"), msg, NULL, _("_Cancel"), NULL, _("_Yes"), @@ -5100,20 +5098,20 @@ void summary_print(SummaryView *summaryview) g_free(msg); if (clist->selection == NULL) return; - for (cur = clist->selection; - cur != NULL && cur->data != NULL; + for (cur = clist->selection; + cur != NULL && cur->data != NULL; cur = cur->next) { GtkCMCTreeNode *node = GTK_CMCTREE_NODE(cur->data); MsgInfo *msginfo = gtk_cmctree_node_get_row_data( GTK_CMCTREE(summaryview->ctree), node); gint sel_start = -1, sel_end = -1, partnum = 0; - + if (node == summaryview->displayed) { partnum = mimeview_get_selected_part_num(summaryview->messageview->mimeview); textview_get_selection_offsets(summaryview->messageview->mimeview->textview, &sel_start, &sel_end); - } + } messageview_print(msginfo, summaryview->messageview->all_headers, sel_start, sel_end, partnum); } @@ -5143,7 +5141,7 @@ gboolean summary_execute(SummaryView *summaryview) move_val = summary_execute_move(summaryview); summary_execute_copy(summaryview); summary_execute_delete(summaryview); - + node = GTK_CMCTREE_NODE(clist->row_list); for (; node != NULL; node = next) { next = gtkut_ctree_node_next(ctree, node); @@ -5221,7 +5219,7 @@ gboolean summary_execute(SummaryView *summaryview) main_window_cursor_normal(summaryview->mainwin); - if (move_val < 0) + if (move_val < 0) summary_show(summaryview, summaryview->folder_item, FALSE); return TRUE; } @@ -5248,7 +5246,7 @@ gboolean summary_expunge(SummaryView *summaryview) folder_item_update_freeze(); summary_execute_expunge(summaryview); - + node = GTK_CMCTREE_NODE(clist->row_list); for (; node != NULL; node = next) { next = gtkut_ctree_node_next(ctree, node); @@ -5331,7 +5329,7 @@ static gint summary_execute_move(SummaryView *summaryview) GSList *cur; gint val = -1; /* search moving messages and execute */ - + gtk_cmctree_pre_recursive(ctree, NULL, summary_execute_move_func, summaryview); @@ -5340,7 +5338,7 @@ static gint summary_execute_move(SummaryView *summaryview) summaryview->msginfo_update_callback_id); val = procmsg_move_messages(summaryview->mlist); summaryview->msginfo_update_callback_id = - hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, + hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview); for (cur = summaryview->mlist; cur != NULL && cur->data != NULL; cur = cur->next) { @@ -5439,7 +5437,7 @@ static void summary_execute_delete(SummaryView *summaryview) summaryview->mlist); summaryview->msginfo_update_callback_id = - hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, + hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview); for (cur = summaryview->mlist; cur != NULL && cur->data != NULL; cur = cur->next) { @@ -5468,14 +5466,14 @@ static void summary_execute_delete_func(GtkCMCTree *ctree, GtkCMCTreeNode *node, msginfo->msgid)) { g_hash_table_remove(summaryview->msgid_table, msginfo->msgid); - } + } if (prefs_common.thread_by_subject && - msginfo->subject && *msginfo->subject && + msginfo->subject && *msginfo->subject && node == subject_table_lookup(summaryview->subject_table, msginfo->subject)) { subject_table_remove(summaryview->subject_table, msginfo->subject); - } + } } } @@ -5497,14 +5495,14 @@ static void summary_execute_expunge_func(GtkCMCTree *ctree, GtkCMCTreeNode *node msginfo->msgid)) { g_hash_table_remove(summaryview->msgid_table, msginfo->msgid); - } + } if (prefs_common.thread_by_subject && - msginfo->subject && *msginfo->subject && + msginfo->subject && *msginfo->subject && node == subject_table_lookup(summaryview->subject_table, msginfo->subject)) { subject_table_remove(summaryview->subject_table, msginfo->subject); - } + } } } @@ -5522,7 +5520,7 @@ static void summary_execute_expunge(SummaryView *summaryview) folder_item_expunge(summaryview->folder_item); summaryview->msginfo_update_callback_id = - hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, + hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview); for (cur = summaryview->mlist; cur != NULL && cur->data != NULL; cur = cur->next) procmsg_msginfo_free((MsgInfo **)&(cur->data)); @@ -5563,7 +5561,7 @@ static void summary_thread_build(SummaryView *summaryview) if (msginfo && msginfo->inreplyto) { parent = g_hash_table_lookup(summaryview->msgid_table, msginfo->inreplyto); - + if (!parent && msginfo->references) { for (reflist = msginfo->references; reflist != NULL; reflist = reflist->next) @@ -5619,7 +5617,7 @@ static void summary_thread_init(SummaryView *summaryview) } g_signal_handlers_unblock_by_func(G_OBJECT(ctree), G_CALLBACK(summary_tree_expanded), summaryview); - } + } END_TIMING(); } @@ -5665,7 +5663,7 @@ static void summary_unthread_for_exec_func(GtkCMCTree *ctree, GtkCMCTreeNode *no summaryview->displayed = NULL; summary_cancel_mark_read_timeout(summaryview); - + for (top_parent = node; GTK_CMCTREE_ROW(top_parent)->parent != NULL; top_parent = GTK_CMCTREE_ROW(top_parent)->parent) @@ -5676,13 +5674,13 @@ static void summary_unthread_for_exec_func(GtkCMCTree *ctree, GtkCMCTreeNode *no while (child != NULL) { GtkCMCTreeNode *next_child; MsgInfo *cinfo = GTKUT_CTREE_NODE_GET_ROW_DATA(child); - + next_child = GTK_CMCTREE_ROW(child)->sibling; - + if (!MSG_IS_MOVE(cinfo->flags) && !MSG_IS_DELETED(cinfo->flags)) { - gtk_cmctree_move(ctree, child, - NULL, - sibling); + gtk_cmctree_move(ctree, child, + NULL, + sibling); } else { if (child == summaryview->displayed) { messageview_clear(summaryview->messageview); @@ -5765,7 +5763,7 @@ void summary_collapse_threads(SummaryView *summaryview) summary_thaw(summaryview); g_signal_handlers_unblock_by_func(G_OBJECT(ctree), G_CALLBACK(summary_tree_collapsed), summaryview); - + summaryview->thread_collapsed = TRUE; gtk_cmctree_node_moveto(ctree, summaryview->selected, 0, 0.5, 0); @@ -5859,7 +5857,7 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) } folder_item_update_freeze(); - + debug_print("filtering...\n"); STATUSBAR_PUSH(summaryview->mainwin, _("Filtering...")); main_window_cursor_wait(summaryview->mainwin); @@ -5871,7 +5869,7 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) for (cur = GTK_CMCLIST(summaryview->ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) { - mlist = g_slist_prepend(mlist, + mlist = g_slist_prepend(mlist, procmsg_msginfo_new_ref( GTKUT_CTREE_NODE_GET_ROW_DATA(cur->data))); } @@ -5879,7 +5877,7 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) } else { mlist = folder_item_get_msg_list(summaryview->folder_item); } - + ac_prefs = ((summaryview->folder_item->folder != NULL) && (summaryview->folder_item->folder->account != NULL)) ? summaryview->folder_item->folder->account : NULL; @@ -5889,9 +5887,9 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) summary_filter_func((MsgInfo *)cur_list->data, ac_prefs); } folder_item_set_batch(summaryview->folder_item, FALSE); - + filtering_move_and_copy_msgs(mlist); - + for (cur_list = mlist; cur_list; cur_list = cur_list->next) { procmsg_msginfo_free((MsgInfo **)&(cur_list->data)); } @@ -5906,9 +5904,9 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) summary_unlock(summaryview); - /* + /* * CLAWS: summary_show() only valid after having a lock. ideally - * we want the lock to be context aware... + * we want the lock to be context aware... */ summary_show(summaryview, summaryview->folder_item, TRUE); } @@ -5918,9 +5916,9 @@ static void summary_filter_func(MsgInfo *msginfo, PrefsAccount *ac_prefs) MailFilteringData mail_filtering_data; mail_filtering_data.msginfo = msginfo; - mail_filtering_data.msglist = NULL; - mail_filtering_data.filtered = NULL; - mail_filtering_data.unfiltered = NULL; + mail_filtering_data.msglist = NULL; + mail_filtering_data.filtered = NULL; + mail_filtering_data.unfiltered = NULL; if (hooks_invoke(MAIL_MANUAL_FILTERING_HOOKLIST, &mail_filtering_data)) return; @@ -5935,7 +5933,7 @@ void summary_msginfo_filter_open(FolderItem * item, MsgInfo *msginfo, gchar *key = NULL; procmsg_get_filter_keyword(msginfo, &header, &key, type); - + if (processing_rule) { if (item == NULL) prefs_filtering_open(&pre_global_processing, @@ -5954,7 +5952,7 @@ void summary_msginfo_filter_open(FolderItem * item, MsgInfo *msginfo, MANUAL_ANCHOR_FILTERING, header, key, TRUE); } - + g_free(header); g_free(key); } @@ -5964,13 +5962,13 @@ void summary_filter_open(SummaryView *summaryview, PrefsFilterType type, { MsgInfo *msginfo; FolderItem * item; - + if (!summaryview->selected) return; msginfo = gtk_cmctree_node_get_row_data(GTK_CMCTREE(summaryview->ctree), summaryview->selected); if (!msginfo) return; - + item = summaryview->folder_item; summary_msginfo_filter_open(item, msginfo, type, processing_rule); } @@ -6048,7 +6046,7 @@ static void summary_set_row_colorlabel(SummaryView *summaryview, GtkCMCTreeNode msginfo = gtk_cmctree_node_get_row_data(ctree, row); cm_return_if_fail(msginfo); - summary_msginfo_change_flags(msginfo, MSG_COLORLABEL_TO_FLAGS(labelcolor), 0, + summary_msginfo_change_flags(msginfo, MSG_COLORLABEL_TO_FLAGS(labelcolor), 0, MSG_CLABEL_FLAG_MASK, 0); summary_set_row_marks(summaryview, row); } @@ -6124,10 +6122,10 @@ static gboolean summary_set_row_tag(SummaryView *summaryview, GtkCMCTreeNode *ro cm_return_val_if_fail(msginfo, FALSE); procmsg_msginfo_update_tags(msginfo, set, id); - + if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible) { tags_str = procmsg_msginfo_get_tags_str(msginfo); - gtk_cmctree_node_set_text(ctree, row, + gtk_cmctree_node_set_text(ctree, row, summaryview->col_pos[S_COL_TAGS], tags_str?tags_str:"-"); g_free(tags_str); @@ -6200,7 +6198,7 @@ static void summary_colorlabel_menu_item_activate_item_cb(GtkMenuItem *menu_item if (!sel) return; menu = GTK_MENU_SHELL(summaryview->colorlabel_menu); - + cm_return_if_fail(menu != NULL); Xalloca(items, (N_COLOR_LABELS + 1) * sizeof(GtkWidget *), return); @@ -6266,7 +6264,7 @@ static void summary_colorlabel_menu_create(SummaryView *summaryview, gboolean re menu = gtk_menu_new(); - gtk_menu_set_accel_group (GTK_MENU (menu), + gtk_menu_set_accel_group (GTK_MENU (menu), gtk_ui_manager_get_accel_group(mainwindow_get_mainwindow()->ui_manager)); /* create sub items. for the menu item activation callback we pass the @@ -6303,7 +6301,7 @@ static void summary_colorlabel_menu_create(SummaryView *summaryview, gboolean re if (i < 9) gtk_accel_map_add_entry(accel_path, GDK_KEY_1+i, GDK_CONTROL_MASK); g_free(accel_path); - g_signal_connect (gtk_ui_manager_get_accel_group(mainwindow_get_mainwindow()->ui_manager), + g_signal_connect (gtk_ui_manager_get_accel_group(mainwindow_get_mainwindow()->ui_manager), "accel-changed", G_CALLBACK (mainwin_accel_changed_cb), item); } @@ -6349,7 +6347,7 @@ static void summary_tags_menu_item_activate_item_cb(GtkMenuItem *menu_item, "tag_id")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(cur->data), FALSE); - + g_hash_table_insert(menu_table, GINT_TO_POINTER(id), GTK_CHECK_MENU_ITEM(cur->data)); g_hash_table_insert(menu_allsel_table, GINT_TO_POINTER(id), GINT_TO_POINTER(0)); } @@ -6426,7 +6424,7 @@ static void summary_tags_menu_item_apply_tags_activate_cb(GtkWidget *widget, if (g_object_get_data(G_OBJECT(summaryview->tags_menu), "dont_toggle")) return; - + tags_window_open(summary_get_selection(summaryview)); } @@ -6436,10 +6434,10 @@ static gint summary_tag_cmp_list(gconstpointer a, gconstpointer b) gint id_b = GPOINTER_TO_INT(b); const gchar *tag_a = tags_get_tag(id_a); const gchar *tag_b = tags_get_tag(id_b); - + if (tag_a == NULL) return tag_b == NULL ? 0:1; - + if (tag_b == NULL) return 1; @@ -6467,7 +6465,7 @@ static void summary_tags_menu_create(SummaryView *summaryview, gboolean refresh) menu = gtk_menu_new(); - gtk_menu_set_accel_group (GTK_MENU (menu), + gtk_menu_set_accel_group (GTK_MENU (menu), gtk_ui_manager_get_accel_group(summaryview->mainwin->ui_manager)); /* create tags menu items */ @@ -6595,7 +6593,7 @@ static gboolean tooltip_cb (GtkWidget *widget, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, - gpointer user_data) + gpointer user_data) { GtkCMCTree *ctree = GTK_CMCTREE(widget); SummaryView *summaryview = (SummaryView *)user_data; @@ -6634,15 +6632,15 @@ static gboolean tooltip_cb (GtkWidget *widget, text = info->to; break; case GTK_CMCELL_PIXTEXT: - if (gtk_cmctree_node_get_pixtext(ctree, node, column, &text, + if (gtk_cmctree_node_get_pixtext(ctree, node, column, &text, NULL, NULL) != TRUE) return FALSE; break; - default: + default: if ((text = summaryview_get_tooltip_text(summaryview, info, column)) == NULL) return FALSE; } - + if (!text || !*text) return FALSE; @@ -6651,16 +6649,16 @@ static gboolean tooltip_cb (GtkWidget *widget, if ((vert_layout || small_layout) && prefs_common.two_line_vert) gtk_tooltip_set_markup (tooltip, formatted); - else + else gtk_tooltip_set_text (tooltip, formatted); g_free(formatted); - + rect.x = x - 2; rect.y = y - 2; rect.width = 12; - rect.height= 12; + rect.height= 12; gtk_tooltip_set_tip_area(tooltip, &rect); - + return TRUE; } #endif @@ -6770,7 +6768,7 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) gtk_sctree_set_stripes(GTK_SCTREE(ctree), prefs_common.use_stripes_in_summaries); gtk_cmctree_set_indent(GTK_CMCTREE(ctree), 12); - g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview); + g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview); for (pos = 0; pos < N_SUMMARY_COLS; pos++) { gtk_widget_set_can_focus(GTK_CMCLIST(ctree)->column[pos].button, @@ -6813,7 +6811,7 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SCORE , summary_score_clicked) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_LOCKED , summary_locked_clicked) CLIST_BUTTON_SIGNAL_CONNECT(S_COL_TAGS , summary_tags_clicked) - + #undef CLIST_BUTTON_SIGNAL_CONNECT g_signal_connect(G_OBJECT(ctree), "tree_select_row", @@ -6866,7 +6864,7 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview) #if !GENERIC_UMPC g_object_set (G_OBJECT(ctree), "has-tooltip", TRUE, NULL); - g_signal_connect(G_OBJECT(ctree), "query-tooltip", + g_signal_connect(G_OBJECT(ctree), "query-tooltip", G_CALLBACK(tooltip_cb), summaryview); #endif @@ -6909,11 +6907,11 @@ void summary_set_column_order(SummaryView *summaryview) /* get normal row height */ gtk_cmclist_set_row_height(GTK_CMCLIST(ctree), 0); - normal_row_height = GTK_CMCLIST(ctree)->row_height; - + normal_row_height = GTK_CMCLIST(ctree)->row_height; + if ((prefs_common.layout_mode == SMALL_LAYOUT || prefs_common.layout_mode == VERTICAL_LAYOUT) && prefs_common.two_line_vert) { - gtk_cmclist_set_row_height(GTK_CMCLIST(summaryview->ctree), 2*normal_row_height + 2); + gtk_cmclist_set_row_height(GTK_CMCLIST(summaryview->ctree), 2*normal_row_height + 2); } } @@ -6933,7 +6931,7 @@ static gint summary_folder_eventbox_pressed(GtkWidget *eventbox, GdkEventButton static gint summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event, SummaryView *summaryview) { - if (event) + if (event) summary_toggle_view(summaryview); return TRUE; } @@ -6941,7 +6939,7 @@ static gint summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event, static void summary_toggle_multiple_pressed(GtkWidget *widget, SummaryView *summaryview) { - GTK_SCTREE(summaryview->ctree)->force_additive_sel = + GTK_SCTREE(summaryview->ctree)->force_additive_sel = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } #endif @@ -6998,7 +6996,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, GtkAdjustment *adj; gboolean mod_pressed; - if (!event) + if (!event) return TRUE; if (quicksearch_has_focus(summaryview->quicksearch)) @@ -7018,7 +7016,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, handled = FALSE; break; } - if (event->state & GDK_SHIFT_MASK) + if (event->state & GDK_SHIFT_MASK) mimeview_scroll_page(messageview->mimeview, TRUE); if (summaryview->displayed != summaryview->selected) { summary_display_msg(summaryview, @@ -7030,7 +7028,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, } else { if (!mimeview_scroll_page(messageview->mimeview, FALSE)) summary_select_next_unread(summaryview); - } + } } break; case GDK_KEY_BackSpace: /* Page up */ @@ -7052,11 +7050,11 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, mimeview_scroll_one_line(messageview->mimeview, mod_pressed); break; } - + if (handled) return FALSE; } - if (summary_is_locked(summaryview)) + if (summary_is_locked(summaryview)) return TRUE; switch (event->keyval) { @@ -7065,7 +7063,7 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event, (GTK_SCROLLED_WINDOW(summaryview->scrolledwin)); if (gtk_adjustment_get_lower(adj) != gtk_adjustment_get_value(adj)) break; - /* FALLTHROUGH */ + /* FALLTHROUGH */ case GDK_KEY_Escape: folderview_grab_focus(summaryview->folderview); mainwindow_exit_folder(summaryview->mainwin); @@ -7172,11 +7170,11 @@ static void tog_searchbar_cb(GtkWidget *w, gpointer data) } } -void summaryview_activate_quicksearch(SummaryView *summaryview, gboolean show) +void summaryview_activate_quicksearch(SummaryView *summaryview, gboolean show) { prefs_common.show_searchbar = show; gtk_toggle_button_set_active( - GTK_TOGGLE_BUTTON(summaryview->toggle_search), + GTK_TOGGLE_BUTTON(summaryview->toggle_search), show); if (show) { quicksearch_show(summaryview->quicksearch); @@ -7244,7 +7242,7 @@ static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row, && summaryview->messageview->mimeview->textview->loading) { PostponedSelectData *data = g_new0(PostponedSelectData, 1); summaryview->messageview->mimeview->textview->stop_loading = TRUE; - + data->ctree = ctree; data->row = row; data->node = NULL; @@ -7308,7 +7306,7 @@ static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row, } else if (MSG_IS_REPLIED(msginfo->flags)) { summary_find_answers(summaryview, msginfo); return; - } + } break; case S_COL_LOCKED: if (MSG_IS_LOCKED(msginfo->flags)) { @@ -7327,11 +7325,11 @@ static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row, list = messageview_get_msgview_list(); for (cur = list; cur != NULL; cur = cur->next) { msgview = (MessageView *) cur->data; - + if (msgview->new_window && msgview->update_needed) { MsgInfo *new_msginfo = summary_get_selected_msg(summaryview); messageview_show(msgview, new_msginfo, msgview->all_headers); - msgview->update_needed = FALSE; + msgview->update_needed = FALSE; } } @@ -7342,15 +7340,15 @@ static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row, if (marked_unread) { summary_mark_row_as_unread(summaryview, row); summary_status_show(summaryview); - } + } return; } } - + if (marked_unread) { summary_mark_row_as_unread(summaryview, row); summary_status_show(summaryview); - } + } summary_set_menu_sensitive(summaryview); toolbar_main_set_sensitive(summaryview->mainwin); @@ -7376,7 +7374,7 @@ GSList *summary_get_selection(SummaryView *summaryview) { GList *sel = NULL; GSList *msginfo_list = NULL; - + cm_return_val_if_fail(summaryview != NULL, NULL); sel = GTK_CMCLIST(summaryview->ctree)->selection; @@ -7384,8 +7382,8 @@ GSList *summary_get_selection(SummaryView *summaryview) cm_return_val_if_fail(sel != NULL, NULL); for ( ; sel != NULL; sel = sel->next) - msginfo_list = - g_slist_prepend(msginfo_list, + msginfo_list = + g_slist_prepend(msginfo_list, gtk_cmctree_node_get_row_data(GTK_CMCTREE(summaryview->ctree), GTK_CMCTREE_NODE(sel->data))); return g_slist_reverse(msginfo_list); @@ -7539,7 +7537,7 @@ static gboolean summary_return_to_list(void *data) return FALSE; } -static void summary_drag_end (GtkWidget *widget, +static void summary_drag_end (GtkWidget *widget, GdkDragContext *drag_context, SummaryView *summaryview) { @@ -7586,10 +7584,10 @@ static void summary_drag_data_get(GtkWidget *widget, if (copy_file(tmp2, dest, TRUE) < 0) { g_warning("summary_drag_data_get: can't copy %s to %s", tmp2, dest); - } + } g_free(tmp2); tmp2 = dest; - } + } tmp1 = g_filename_to_uri(tmp2, NULL, NULL); g_free(tmp2); tmp2 = g_strconcat(tmp1, "\r\n", NULL); @@ -7611,12 +7609,12 @@ static void summary_drag_data_get(GtkWidget *widget, gtk_selection_data_get_target(selection_data), 8, mail_list, strlen(mail_list)); g_free(mail_list); - } + } } else if (info == TARGET_DUMMY) { if (GTK_CMCLIST(summaryview->ctree)->selection) gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data), 8, - "Dummy-Summaryview", + "Dummy-Summaryview", strlen("Dummy-Summaryview")+1); } else if (info == TARGET_MAIL_CM_PATH_LIST) { /* content: folder_item_identifier\nmsgid1\nmsgid2\nmsgid3 */ @@ -7654,7 +7652,7 @@ static void summary_drag_data_get(GtkWidget *widget, } } else { g_warning("summary_drag_data_get: no folder item identifier"); - } + } } } @@ -7698,7 +7696,7 @@ static void summary_drag_data_received(GtkWidget *widget, if (info == TARGET_MAIL_URI_LIST) { FolderItem *item = summaryview->folder_item; if (!item) { - gtk_drag_finish(drag_context, FALSE, FALSE, time); + gtk_drag_finish(drag_context, FALSE, FALSE, time); return; } else { folderview_finish_dnd(gtk_selection_data_get_data(data), @@ -7742,7 +7740,7 @@ static gint func_name(GtkCMCList *clist, \ CMP_FUNC_DEF(summary_cmp_by_mark, MSG_IS_MARKED(msginfo1->flags) - MSG_IS_MARKED(msginfo2->flags)) CMP_FUNC_DEF(summary_cmp_by_status, - (-(MSG_IS_SPAM(msginfo1->flags))+(MSG_IS_UNREAD(msginfo1->flags)<<1)+(MSG_IS_NEW(msginfo1->flags)<<2)) + (-(MSG_IS_SPAM(msginfo1->flags))+(MSG_IS_UNREAD(msginfo1->flags)<<1)+(MSG_IS_NEW(msginfo1->flags)<<2)) - (-(MSG_IS_SPAM(msginfo2->flags))+(MSG_IS_UNREAD(msginfo2->flags)<<1)+(MSG_IS_NEW(msginfo2->flags)<<2)) ) CMP_FUNC_DEF(summary_cmp_by_mime, MSG_IS_WITH_ATTACHMENT(msginfo1->flags) - MSG_IS_WITH_ATTACHMENT(msginfo2->flags)) @@ -7782,10 +7780,10 @@ static gint summary_cmp_by_thread_date(GtkCMCList *clist, MsgInfo *msginfo1 = ((GtkCMCListRow *)ptr1)->data; MsgInfo *msginfo2 = ((GtkCMCListRow *)ptr2)->data; gint thread_diff = msginfo1->thread_date - msginfo2->thread_date; - + if (msginfo1->thread_date > 0 && msginfo2->thread_date > 0) return thread_diff; - else + else return msginfo1->date_t - msginfo2->date_t; } @@ -7811,14 +7809,14 @@ static gint summary_cmp_by_from(GtkCMCList *clist, gconstpointer ptr1, if (!str1) return str2 != NULL; - + if (!str2) return -1; - + res = g_utf8_collate(str1, str2); return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); } - + static gint summary_cmp_by_to(GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2) { @@ -7830,7 +7828,7 @@ static gint summary_cmp_by_to(GtkCMCList *clist, gconstpointer ptr1, const SummaryView *sv = g_object_get_data(G_OBJECT(clist), "summaryview"); gint res; cm_return_val_if_fail(sv, -1); - + if (sv->col_state[sv->col_pos[S_COL_TO]].visible) { str1 = GTK_CMCELL_TEXT(r1->cell[sv->col_pos[S_COL_TO]])->text; str2 = GTK_CMCELL_TEXT(r2->cell[sv->col_pos[S_COL_TO]])->text; @@ -7841,14 +7839,14 @@ static gint summary_cmp_by_to(GtkCMCList *clist, gconstpointer ptr1, if (!str1) return str2 != NULL; - + if (!str2) return -1; - + res = g_utf8_collate(str1, str2); return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); } - + static gint summary_cmp_by_tags(GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2) { @@ -7860,7 +7858,7 @@ static gint summary_cmp_by_tags(GtkCMCList *clist, gconstpointer ptr1, MsgInfo *msginfo2 = ((GtkCMCListRow *)ptr2)->data; gint res; cm_return_val_if_fail(sv, -1); - + if (sv->col_state[sv->col_pos[S_COL_TAGS]].visible) { str1 = g_strdup(GTK_CMCELL_TEXT(r1->cell[sv->col_pos[S_COL_TAGS]])->text); str2 = g_strdup(GTK_CMCELL_TEXT(r2->cell[sv->col_pos[S_COL_TAGS]])->text); @@ -7878,13 +7876,13 @@ static gint summary_cmp_by_tags(GtkCMCList *clist, gconstpointer ptr1, g_free(str1); return -1; } - + res = g_utf8_collate(str1, str2); g_free(str1); g_free(str2); return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); } - + static gint summary_cmp_by_simplified_subject (GtkCMCList *clist, gconstpointer ptr1, gconstpointer ptr2) { @@ -7899,7 +7897,7 @@ static gint summary_cmp_by_simplified_subject cm_return_val_if_fail(sv, -1); cm_return_val_if_fail(msginfo1 != NULL && msginfo2 != NULL, -1); - + if (sv->col_state[sv->col_pos[S_COL_SUBJECT]].visible) { str1 = GTK_CMCELL_TEXT(r1->cell[sv->col_pos[S_COL_SUBJECT]])->text; str2 = GTK_CMCELL_TEXT(r2->cell[sv->col_pos[S_COL_SUBJECT]])->text; @@ -7919,7 +7917,7 @@ static gint summary_cmp_by_simplified_subject prefs = msginfo2->folder->prefs; if (!prefs) return -1; - + res = subject_compare_for_sort(str1, str2); return (res != 0)? res: summary_cmp_by_date(clist, ptr1, ptr2); } @@ -8010,8 +8008,8 @@ void summary_unignore_thread(SummaryView *summaryview) START_LONG_OPERATION(summaryview, FALSE); for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) - gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), - GTK_CMCTREE_FUNC(summary_unignore_thread_func), + gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), + GTK_CMCTREE_FUNC(summary_unignore_thread_func), summaryview); END_LONG_OPERATION(summaryview); @@ -8029,7 +8027,7 @@ static void summary_check_ignore_thread_func else { msginfo = gtk_cmctree_node_get_row_data(ctree, row); *found_ignore = msginfo && MSG_IS_IGNORE_THREAD(msginfo->flags); - } + } } void summary_toggle_ignore_thread(SummaryView *summaryview) @@ -8043,9 +8041,9 @@ void summary_toggle_ignore_thread(SummaryView *summaryview) GTK_CMCTREE_FUNC(summary_check_ignore_thread_func), &found_ignore); - if (found_ignore) + if (found_ignore) summary_unignore_thread(summaryview); - else + else summary_ignore_thread(summaryview); } @@ -8072,8 +8070,8 @@ void summary_watch_thread(SummaryView *summaryview) START_LONG_OPERATION(summaryview, FALSE); for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) - gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), - GTK_CMCTREE_FUNC(summary_watch_thread_func), + gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), + GTK_CMCTREE_FUNC(summary_watch_thread_func), summaryview); END_LONG_OPERATION(summaryview); @@ -8104,8 +8102,8 @@ void summary_unwatch_thread(SummaryView *summaryview) START_LONG_OPERATION(summaryview, FALSE); for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) - gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), - GTK_CMCTREE_FUNC(summary_unwatch_thread_func), + gtk_cmctree_pre_recursive(ctree, GTK_CMCTREE_NODE(cur->data), + GTK_CMCTREE_FUNC(summary_unwatch_thread_func), summaryview); END_LONG_OPERATION(summaryview); @@ -8123,7 +8121,7 @@ static void summary_check_watch_thread_func else { msginfo = gtk_cmctree_node_get_row_data(ctree, row); *found_watch = msginfo && MSG_IS_WATCH_THREAD(msginfo->flags); - } + } } void summary_toggle_watch_thread(SummaryView *summaryview) @@ -8137,9 +8135,9 @@ void summary_toggle_watch_thread(SummaryView *summaryview) GTK_CMCTREE_FUNC(summary_check_watch_thread_func), &found_watch); - if (found_watch) + if (found_watch) summary_unwatch_thread(summaryview); - else + else summary_watch_thread(summaryview); } @@ -8158,7 +8156,7 @@ void summary_toggle_show_read_messages(SummaryView *summaryview) hooks_invoke(FOLDER_ITEM_UPDATE_HOOKLIST, &source); summary_show(summaryview, summaryview->folder_item, FALSE); } - + void summary_toggle_show_del_messages(SummaryView *summaryview) { FolderItemUpdateData source; @@ -8173,7 +8171,7 @@ void summary_toggle_show_del_messages(SummaryView *summaryview) hooks_invoke(FOLDER_ITEM_UPDATE_HOOKLIST, &source); summary_show(summaryview, summaryview->folder_item, FALSE); } - + void summary_toggle_show_read_threads(SummaryView *summaryview) { FolderItemUpdateData source; @@ -8188,7 +8186,7 @@ void summary_toggle_show_read_threads(SummaryView *summaryview) hooks_invoke(FOLDER_ITEM_UPDATE_HOOKLIST, &source); summary_show(summaryview, summaryview->folder_item, FALSE); } - + static void summary_set_hide_menu (SummaryView *summaryview, const gchar *menu_item, guint action) @@ -8207,7 +8205,7 @@ static void summary_set_hide_menu (SummaryView *summaryview, void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview) { - GtkWidget *pixmap; + GtkWidget *pixmap; stock_pixbuf_gdk(STOCK_PIXMAP_MARK, &markxpm); stock_pixbuf_gdk(STOCK_PIXMAP_DELETED, &deletedxpm); @@ -8232,7 +8230,7 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview) summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN); pixmap = stock_pixmap_widget(STOCK_PIXMAP_QUICKSEARCH); - gtk_container_remove (GTK_CONTAINER(summaryview->toggle_search), + gtk_container_remove (GTK_CONTAINER(summaryview->toggle_search), summaryview->quick_search_pixmap); gtk_container_add(GTK_CONTAINER(summaryview->toggle_search), pixmap); gtk_widget_show(pixmap); @@ -8240,7 +8238,7 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview) #ifdef GENERIC_UMPC pixmap = stock_pixmap_widget(STOCK_PIXMAP_SELECTION); - gtk_container_remove (GTK_CONTAINER(summaryview->multiple_sel_togbtn), + gtk_container_remove (GTK_CONTAINER(summaryview->multiple_sel_togbtn), summaryview->multiple_sel_image); gtk_container_add(GTK_CONTAINER(summaryview->multiple_sel_togbtn), pixmap); gtk_widget_show(pixmap); @@ -8265,7 +8263,7 @@ void summary_reflect_prefs_custom_colors(SummaryView *summaryview) children = gtk_container_get_children(GTK_CONTAINER(menu)); for (cur = children; cur != NULL && cur->data != NULL; cur = cur->next) { g_signal_handlers_disconnect_matched - (gtk_ui_manager_get_accel_group(summaryview->mainwin->ui_manager), + (gtk_ui_manager_get_accel_group(summaryview->mainwin->ui_manager), G_SIGNAL_MATCH_DATA|G_SIGNAL_MATCH_FUNC, 0, 0, NULL, mainwin_accel_changed_cb, cur->data); gtk_menu_item_set_submenu(GTK_MENU_ITEM(cur->data), NULL); @@ -8302,7 +8300,7 @@ static regex_t *summary_compile_simplify_regexp(gchar *simplify_subject_regexp) int err; gchar buf[BUFFSIZE]; regex_t *preg = NULL; - + preg = g_new0(regex_t, 1); err = regcomp(preg, simplify_subject_regexp, REG_EXTENDED); @@ -8313,7 +8311,7 @@ static regex_t *summary_compile_simplify_regexp(gchar *simplify_subject_regexp) g_free(preg); preg = NULL; } - + return preg; } void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *item) @@ -8329,7 +8327,7 @@ void summary_set_prefs_from_folderitem(SummaryView *summaryview, FolderItem *ite g_free(summaryview->simplify_subject_preg); summaryview->simplify_subject_preg = NULL; } - if(item->prefs && item->prefs->simplify_subject_regexp && + if(item->prefs && item->prefs->simplify_subject_regexp && item->prefs->simplify_subject_regexp[0] && item->prefs->enable_simplify_subject) summaryview->simplify_subject_preg = summary_compile_simplify_regexp(item->prefs->simplify_subject_regexp); @@ -8360,7 +8358,7 @@ void summary_save_prefs_to_folderitem(SummaryView *summaryview, FolderItem *item item->thread_collapsed = summaryview->thread_collapsed; } -static gboolean summary_update_msg(gpointer source, gpointer data) +static gboolean summary_update_msg(gpointer source, gpointer data) { MsgInfoUpdate *msginfo_update = (MsgInfoUpdate *) source; SummaryView *summaryview = (SummaryView *)data; @@ -8374,10 +8372,10 @@ static gboolean summary_update_msg(gpointer source, gpointer data) if (msginfo_update->flags & MSGINFO_UPDATE_FLAGS) { node = gtk_cmctree_find_by_row_data( - GTK_CMCTREE(summaryview->ctree), NULL, + GTK_CMCTREE(summaryview->ctree), NULL, msginfo_update->msginfo); - if (node) + if (node) summary_set_row_marks(summaryview, node); } @@ -8396,7 +8394,7 @@ void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item) CLAWS_SET_TIP(summaryview->folder_pixmap_eventbox, NULL); tips_initialized = FALSE; - } + } return; } folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total, @@ -8407,7 +8405,7 @@ void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item) new -= removed_item->new_msgs; unread -= removed_item->unread_msgs; } - + if (new > 0 || unread > 0) { tips_initialized = TRUE; summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN_HRM); @@ -8469,19 +8467,19 @@ static void summary_find_answers (SummaryView *summaryview, MsgInfo *msg) char *buf = NULL; if (msg == NULL || msg->msgid == NULL) return; - + account = account_get_reply_account(msg, prefs_common.reply_account_autosel); - if (account == NULL) + if (account == NULL) return; sent_folder = account_get_special_folder (account, F_OUTBOX); - + buf = g_strdup_printf("inreplyto matchcase \"%s\"", msg->msgid); if (sent_folder != summaryview->folder_item) { folderview_select(summaryview->mainwin->folderview, sent_folder); } - + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(summaryview->toggle_search), TRUE); quicksearch_set(summaryview->quicksearch, ADVANCED_SEARCH_EXTENDED, buf); @@ -8498,17 +8496,17 @@ gint summaryview_export_mbox_list(SummaryView *summaryview) GSList *list = summary_get_selected_msg_list(summaryview); gchar *mbox = filesel_select_file_save(_("Export to mbox file"), NULL); gint ret; - + if (mbox == NULL) return -2; if (list == NULL) return -1; - + ret = export_list_to_mbox(list, mbox); - + g_slist_free(list); g_free(mbox); - + return ret; } diff --git a/src/toolbar.c b/src/toolbar.c @@ -178,9 +178,6 @@ static void toolbar_print_cb (GtkWidget *widget, static void toolbar_actions_execute_cb (GtkWidget *widget, gpointer data); -static void toolbar_plugins_execute_cb (GtkWidget *widget, - gpointer data); - static void toolbar_send_cb (GtkWidget *widget, gpointer data); @@ -280,7 +277,6 @@ struct { { "A_CANCEL_ALL", N_("Cancel receiving/sending") }, { "A_CLOSE", N_("Close window") }, { "A_SEPARATOR", N_("Separator") }, - { "A_CLAWS_PLUGINS", N_("Claws Mail Plugins") } }; /* migration table: support reading toolbar configuration files with @@ -352,7 +348,7 @@ static gboolean toolbar_is_duplicate(gint action, ToolbarType source) { GSList *cur; - if ((action == A_SEPARATOR) || (action == A_CLAWS_ACTIONS) || (action == A_CLAWS_PLUGINS)) + if ((action == A_SEPARATOR) || (action == A_CLAWS_ACTIONS)) return FALSE; for (cur = toolbar_config[source].item_list; cur != NULL; cur = cur->next) { @@ -2012,11 +2008,6 @@ static void toolbar_actions_execute_cb(GtkWidget *widget, gpointer data) toolbar_action_execute(widget, action_list, parent, toolbar_item->type); } -static void toolbar_plugins_execute_cb(GtkWidget *widget, gpointer data) -{ - ToolbarItem *toolbar_item = data; -} - static MainWindow *get_mainwin(gpointer data) { ToolbarItem *toolbar_item = (ToolbarItem*)data; @@ -2127,7 +2118,6 @@ static void toolbar_buttons_cb(GtkWidget *widget, { A_CANCEL_INC, toolbar_cancel_inc_cb }, { A_CANCEL_SEND, toolbar_cancel_send_cb }, { A_CANCEL_ALL, toolbar_cancel_all_cb }, - { A_CLAWS_PLUGINS, toolbar_plugins_execute_cb }, }; num_items = sizeof(callbacks)/sizeof(callbacks[0]); @@ -2607,9 +2597,6 @@ Toolbar *toolbar_create(ToolbarType type, TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,_("Cancel receiving/sending")); toolbar_data->cancel_all_btn = item; break; - case A_CLAWS_PLUGINS: - TOOLBAR_ITEM(item,icon_wid,toolbar_item->text, toolbar_item->text); - break; default: TOOLBAR_ITEM(item,icon_wid,toolbar_item->text, toolbar_ret_descr_from_val(toolbar_item->index)); diff --git a/src/toolbar.h b/src/toolbar.h @@ -28,20 +28,20 @@ typedef struct _ToolbarItem ToolbarItem; typedef struct _ToolbarClawsActions ToolbarClawsActions; typedef enum { - TOOLBAR_MAIN = 0, + TOOLBAR_MAIN = 0, TOOLBAR_COMPOSE, TOOLBAR_MSGVIEW } ToolbarType; #define NUM_TOOLBARS 3 -typedef enum +typedef enum { COMPOSEBUTTON_MAIL, COMPOSEBUTTON_NEWS } ComposeButtonType; -typedef enum +typedef enum { LEARN_SPAM, LEARN_HAM @@ -65,7 +65,7 @@ struct _Toolbar { GtkWidget *replylist_btn; GtkWidget *fwd_btn; - + GtkWidget *trash_btn; GtkWidget *delete_btn; GtkWidget *delete_dup_btn; @@ -77,11 +77,11 @@ struct _Toolbar { GtkWidget *learn_spam_btn; GtkWidget *learn_spam_icon; GtkWidget *learn_ham_icon; - + GtkWidget *cancel_inc_btn; GtkWidget *cancel_send_btn; GtkWidget *cancel_all_btn; - + ComposeButtonType compose_btn_type; LearnButtonType learn_btn_type; @@ -216,8 +216,6 @@ enum { A_SEPARATOR, - A_CLAWS_PLUGINS, - N_ACTION_VAL }; @@ -236,19 +234,19 @@ void toolbar_set_default (ToolbarType source); void toolbar_clear_list (ToolbarType source); GSList *toolbar_get_list (ToolbarType source); -void toolbar_set_list_item (ToolbarItem *t_item, +void toolbar_set_list_item (ToolbarItem *t_item, ToolbarType source); gint toolbar_ret_val_from_descr (const gchar *descr); gchar *toolbar_ret_descr_from_val (gint val); void toolbar_main_set_sensitive (gpointer data); -void toolbar_comp_set_sensitive (gpointer data, +void toolbar_comp_set_sensitive (gpointer data, gboolean sensitive); /* invoked by mainwindow entries and toolbar actions */ -void delete_msgview_cb (gpointer data, - guint action, +void delete_msgview_cb (gpointer data, + guint action, GtkWidget *widget); void inc_mail_cb (gpointer data, guint action, @@ -259,19 +257,19 @@ void inc_all_account_mail_cb (gpointer data, void send_queue_cb (gpointer data, guint action, GtkWidget *widget); -void compose_mail_cb (gpointer data, +void compose_mail_cb (gpointer data, guint action, GtkWidget *widget); -void compose_news_cb (gpointer data, +void compose_news_cb (gpointer data, guint action, GtkWidget *widget); /* END */ void toolbar_toggle (guint action, gpointer data); -void toolbar_update (ToolbarType type, - gpointer data); -Toolbar *toolbar_create (ToolbarType type, +void toolbar_update (ToolbarType type, + gpointer data); +Toolbar *toolbar_create (ToolbarType type, GtkWidget *container, gpointer data); void toolbar_set_style (GtkWidget *toolbar_wid, @@ -280,7 +278,7 @@ void toolbar_set_style (GtkWidget *toolbar_wid, void toolbar_destroy (Toolbar *toolbar); void toolbar_item_destroy (ToolbarItem *toolbar_item); -void toolbar_set_learn_button (Toolbar *toolbar, +void toolbar_set_learn_button (Toolbar *toolbar, LearnButtonType learn_btn_type); const gchar *toolbar_get_short_text (int action); int toolbar_get_icon (int action); diff --git a/src/wizard.c b/src/wizard.c @@ -36,7 +36,6 @@ #include "file-utils.h" #include "utils.h" #include "gtk/menu.h" -#include "plugin.h" #include "account.h" #include "prefs_account.h" #include "mainwindow.h" @@ -74,14 +73,14 @@ typedef struct GtkWidget *notebook; MainWindow *mainwin; - + GtkWidget *email; GtkWidget *full_name; GtkWidget *organization; GtkWidget *mailbox_name; GtkWidget *mailbox_label; - + GtkWidget *smtp_server; GtkWidget *smtp_auth; GtkWidget *smtp_username; @@ -299,10 +298,10 @@ static gchar *accountrc_tmpl = static gchar *wizard_get_default_domain_name(void) { static gchar *domain_name = NULL; - + if (domain_name == NULL) { domain_name = g_strdup(get_domain_name()); - if (strchr(domain_name, '.') != NULL + if (strchr(domain_name, '.') != NULL && strchr(domain_name, '.') != strrchr(domain_name, '.') && strlen(strchr(domain_name, '.')) > 6) { gchar *tmp = g_strdup(strchr(domain_name, '.')+1); @@ -321,7 +320,7 @@ static gchar *get_name_for_mail(void) name = g_utf8_strdown(tmpl.name, -1); while(strstr(name, " ")) *strstr(name, " ")='.'; - + return name; } @@ -451,7 +450,7 @@ static void initialize_fonts(WizardWindow *wizard) prefs_common.boldfont = pango_font_description_to_string(bold_desc); pango_font_description_free(bold_desc); g_free(curfont); -#endif +#endif tmp = g_strdup(prefs_common.textfont); if (strrchr(tmp, ' ')) { *(strrchr(tmp, ' ')) = '\0'; @@ -460,7 +459,7 @@ static void initialize_fonts(WizardWindow *wizard) prefs_common.textfont = new; } g_free(tmp); - + tmp = g_strdup(prefs_common.smallfont); if (strrchr(tmp, ' ')) { *(strrchr(tmp, ' ')) = '\0'; @@ -469,7 +468,7 @@ static void initialize_fonts(WizardWindow *wizard) prefs_common.smallfont = new; } g_free(tmp); - + tmp = g_strdup(prefs_common.normalfont); if (strrchr(tmp, ' ')) { *(strrchr(tmp, ' ')) = '\0'; @@ -515,16 +514,16 @@ static void write_welcome_email(WizardWindow *wizard) FolderItem *inbox = folder ? folder->inbox:NULL; gchar *file = get_tmp_file(); gchar enc_from_name[BUFFSIZE], enc_to_name[BUFFSIZE], enc_subject[BUFFSIZE]; - + get_rfc822_date(date, sizeof(date)); - conv_encode_header_full(enc_subject, sizeof(enc_subject), + conv_encode_header_full(enc_subject, sizeof(enc_subject), C_("Welcome Mail Subject", "Welcome to Claws Mail"), strlen("Subject: "), FALSE, CS_INTERNAL); - conv_encode_header_full(enc_to_name, sizeof(enc_to_name), + conv_encode_header_full(enc_to_name, sizeof(enc_to_name), gtk_entry_get_text(GTK_ENTRY(wizard->full_name)), strlen("To: "), TRUE, CS_INTERNAL); - conv_encode_header_full(enc_from_name, sizeof(enc_from_name), + conv_encode_header_full(enc_from_name, sizeof(enc_from_name), _("The Claws Mail Team"), strlen("From: "), TRUE, CS_INTERNAL); @@ -550,12 +549,6 @@ static void write_welcome_email(WizardWindow *wizard) "mail by clicking the 'Get Mail' button at the left of the\n" "toolbar.\n" "\n" - "Claws Mail has lots of extra features accessible via plugins,\n" - "like anti-spam filtering and learning (via the Bogofilter or\n" - "SpamAssassin plugins), privacy protection (via PGP/Mime), an RSS\n" - "aggregator, a calendar, and much more. You can load them from\n" - "the menu entry '/Configuration/Plugins'.\n" - "\n" "You can change your Account Preferences by using the menu\n" "entry '/Configuration/Preferences for current account'\n" "and change the general Preferences by using\n" @@ -586,7 +579,7 @@ static void write_welcome_email(WizardWindow *wizard) "so at <%s>.\n\n"), HOMEPAGE_URI, MANUAL_URI, FAQ_URI, THEMES_URI, MAILING_LIST_URI, GPL_URI, DONATE_URI); - + msg = g_strconcat(head, body, NULL); if (inbox && inbox->total_msgs == 0 @@ -614,20 +607,20 @@ static gboolean wizard_write_config(WizardWindow *wizard) prefs_account->protocol = combobox_get_active_data( GTK_COMBO_BOX(wizard->recv_type)); - - if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 && + + if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4 && !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->mailbox_name)))) { alertpanel_error(_("Please enter the mailbox name.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), MAILBOX_PAGE); return FALSE; } if (!mailbox_ok) { if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) { - mailbox_ok = setup_write_mailbox_path(wizard->mainwin, + mailbox_ok = setup_write_mailbox_path(wizard->mainwin, gtk_entry_get_text( GTK_ENTRY(wizard->mailbox_name))); } else @@ -638,21 +631,21 @@ static gboolean wizard_write_config(WizardWindow *wizard) /* alertpanel done by setup_write_mailbox_path */ g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), MAILBOX_PAGE); return FALSE; } - + if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->full_name))) || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->email)))) { alertpanel_error(_("Please enter your name and email address.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), USER_PAGE); return FALSE; } - + if (prefs_account->protocol != A_LOCAL) { if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_username))) || !strlen(gtk_entry_get_text(GTK_ENTRY(wizard->recv_server)))) { @@ -660,7 +653,7 @@ static gboolean wizard_write_config(WizardWindow *wizard) "and username.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), RECV_PAGE); return FALSE; } @@ -669,17 +662,17 @@ static gboolean wizard_write_config(WizardWindow *wizard) alertpanel_error(_("Please enter your username.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), RECV_PAGE); return FALSE; } } - + if (!strlen(gtk_entry_get_text(GTK_ENTRY(wizard->smtp_server)))) { alertpanel_error(_("Please enter your SMTP server.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), SMTP_PAGE); return FALSE; } @@ -690,9 +683,9 @@ static gboolean wizard_write_config(WizardWindow *wizard) alertpanel_error(_("Please enter your SMTP username.")); g_free(prefs_account); gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), SMTP_PAGE); - return FALSE; + return FALSE; } /* if it's not local we'll use the reception server */ } @@ -724,7 +717,7 @@ static gboolean wizard_write_config(WizardWindow *wizard) prefs_account->set_smtpport = TRUE; prefs_account->smtpport = smtp_port; } - + prefs_account->name = g_strdup( gtk_entry_get_text(GTK_ENTRY(wizard->full_name))); prefs_account->address = g_strdup( @@ -743,7 +736,7 @@ static gboolean wizard_write_config(WizardWindow *wizard) prefs_account->local_inbox = g_strdup(prefs_account->inbox); } else if (prefs_account->protocol != A_IMAP4) { if (folder_get_default_inbox()) - prefs_account->local_inbox = + prefs_account->local_inbox = folder_item_get_identifier(folder_get_default_inbox()); } @@ -773,7 +766,7 @@ static gboolean wizard_write_config(WizardWindow *wizard) #ifdef USE_GNUTLS smtp_ssl_type = SSL_NONE; - recv_ssl_type = SSL_NONE; + recv_ssl_type = SSL_NONE; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_ssl))) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wizard->smtp_use_tls))) @@ -814,7 +807,7 @@ static gboolean wizard_write_config(WizardWindow *wizard) if (directory && strlen(directory)) { prefs_account->imap_dir = g_strdup(directory); } - prefs_account->imap_subsonly = + prefs_account->imap_subsonly = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn)); g_free(directory); @@ -829,9 +822,6 @@ static gboolean wizard_write_config(WizardWindow *wizard) if (wizard->create_mailbox && prefs_account->protocol != A_IMAP4) write_welcome_email(wizard); -#ifndef G_OS_WIN32 - plugin_load_standard_plugins(); -#endif return TRUE; } @@ -878,12 +868,12 @@ static gchar *get_default_server(WizardWindow * wizard, const gchar *type) if (!strcmp(type, "smtp")) { if (!tmpl.smtpserver || !strlen(tmpl.smtpserver)) return g_strconcat(type, ".", tmpl.domain, NULL); - else + else return g_strdup(tmpl.smtpserver); } else { if (!tmpl.recvserver || !strlen(tmpl.recvserver)) return g_strconcat(type, ".", tmpl.domain, NULL); - else + else return g_strdup(tmpl.recvserver); } } @@ -891,14 +881,14 @@ static gchar *get_default_server(WizardWindow * wizard, const gchar *type) static gchar *get_default_account(WizardWindow * wizard) { gchar *result = NULL; - + if (!tmpl.recvuser || !strlen(tmpl.recvuser)) { result = gtk_editable_get_chars( GTK_EDITABLE(wizard->email), 0, -1); if (strstr(result, "@")) { *(strstr(result,"@")) = '\0'; - } + } } else { result = g_strdup(tmpl.recvuser); } @@ -908,7 +898,7 @@ static gchar *get_default_account(WizardWindow * wizard) static gchar *get_default_smtp_account(WizardWindow * wizard) { gchar *result = NULL; - + if (!tmpl.smtpuser || !strlen(tmpl.smtpuser)) { return g_strdup(""); } else { @@ -923,7 +913,7 @@ static void wizard_email_changed(GtkWidget *widget, gpointer data) RecvProtocol protocol; gchar *text; protocol = combobox_get_active_data(GTK_COMBO_BOX(wizard->recv_type)); - + text = get_default_server(wizard, "smtp"); gtk_entry_set_text(GTK_ENTRY(wizard->smtp_server), text); g_free(text); @@ -943,7 +933,7 @@ static void wizard_email_changed(GtkWidget *widget, gpointer data) } else if (protocol == A_LOCAL) { gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:""); } - + } static GtkWidget* user_page (WizardWindow * wizard) @@ -952,7 +942,7 @@ static GtkWidget* user_page (WizardWindow * wizard) GtkWidget *vbox; GtkWidget *label; GtkWidget *user_table; - + gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 8); @@ -1001,7 +991,7 @@ static GtkWidget* user_page (WizardWindow * wizard) gtk_widget_set_hexpand(wizard->organization, TRUE); gtk_widget_set_halign(wizard->organization, GTK_ALIGN_FILL); gtk_widget_set_margin_start(wizard->organization, 4); - + g_signal_connect(G_OBJECT(wizard->email), "changed", G_CALLBACK(wizard_email_changed), wizard); @@ -1086,7 +1076,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) GtkWidget *smtp_cert_table; #endif gchar *text; - + gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 8); @@ -1123,7 +1113,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) label = gtk_label_new(g_strconcat("<span size=\"small\">", _("(empty to use the same as receive)"), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label); + SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); @@ -1139,7 +1129,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) wizard->smtp_username_label = gtk_label_new(_("SMTP username:")); gtk_label_set_xalign(GTK_LABEL(wizard->smtp_username_label), 1.0); gtk_grid_attach(GTK_GRID(smtp_auth_table), wizard->smtp_username_label, 0, 0, 1, 1); - + text = get_default_smtp_account(wizard); wizard->smtp_username = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(wizard->smtp_username), text); @@ -1155,7 +1145,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) gtk_grid_attach(GTK_GRID(smtp_auth_table), wizard->smtp_password_label, 0, 1, 1, 1); wizard->smtp_password = gtk_entry_new(); - gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:""); + gtk_entry_set_text(GTK_ENTRY(wizard->smtp_password), tmpl.smtppass?tmpl.smtppass:""); gtk_entry_set_visibility(GTK_ENTRY(wizard->smtp_password), FALSE); gtk_grid_attach(GTK_GRID(smtp_auth_table), wizard->smtp_password, 1, 1, 1, 1); gtk_widget_set_hexpand(wizard->smtp_password, TRUE); @@ -1182,7 +1172,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) tmpl.smtpssl == 2); gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_use_tls, FALSE, FALSE, 0); SET_TOGGLE_SENSITIVITY (wizard->smtp_use_ssl, wizard->smtp_use_tls); - + smtp_cert_table = gtk_grid_new(); gtk_box_pack_start (GTK_BOX(vbox), smtp_cert_table, FALSE, FALSE, 4); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); @@ -1223,7 +1213,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); hbox_spc = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_size_request (hbox_spc, 12, -1); - gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); label = gtk_label_new(_("Password:")); gtk_label_set_xalign(GTK_LABEL(label), 1.0); gtk_widget_set_margin_start(label, 4); @@ -1248,7 +1238,7 @@ static GtkWidget* smtp_page (WizardWindow * wizard) static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol) { gchar *text; - + if (protocol == A_POP3) { text = get_default_server(wizard, "pop"); gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), text); @@ -1334,7 +1324,7 @@ static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol) #endif } else if (protocol == A_LOCAL) { gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:""); - gtk_label_set_text(GTK_LABEL(wizard->recv_label), + gtk_label_set_text(GTK_LABEL(wizard->recv_label), g_strconcat("<span weight=\"bold\">", _("Local mailbox:"), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE); @@ -1369,7 +1359,7 @@ static void wizard_protocol_changed(GtkComboBox *combo, gpointer data) WizardWindow *wizard = (WizardWindow *)data; RecvProtocol protocol = combobox_get_active_data(combo); - wizard_protocol_change(wizard, protocol); + wizard_protocol_change(wizard, protocol); } #if defined USE_GNUTLS @@ -1474,7 +1464,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) GtkWidget *table = gtk_grid_new(); GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *hbox_spc; + GtkWidget *hbox_spc; GtkWidget *recv_table; GtkWidget *label; #ifdef USE_GNUTLS @@ -1499,7 +1489,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_grid_attach(GTK_GRID(table), vbox, 0, 1, 1, 1); - recv_table = gtk_grid_new(); + recv_table = gtk_grid_new(); gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0); @@ -1517,7 +1507,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) COMBOBOX_ADD(store, _("Local mbox file"), A_LOCAL); switch(tmpl.recvtype) { - case A_POP3: + case A_POP3: index = 0; break; case A_IMAP4: @@ -1568,7 +1558,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_widget_set_margin_start(wizard->recv_server, 4); gtk_widget_set_margin_bottom(wizard->recv_server, 4); g_free(text); - + CLAWS_SET_TIP(wizard->recv_server, _("You can specify the port number by appending it at the end: " "\"mail.example.com:110\"")); @@ -1591,7 +1581,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_widget_set_halign(wizard->recv_username, GTK_ALIGN_FILL); gtk_widget_set_margin_start(wizard->recv_username, 4); gtk_widget_set_margin_bottom(wizard->recv_username, 4); - + wizard->recv_password_label = gtk_label_new(_("Password:")); gtk_label_set_xalign(GTK_LABEL(wizard->recv_password_label), 1.0); gtk_grid_attach(GTK_GRID(recv_table), wizard->recv_password_label, 0, 4, 1, 1); @@ -1618,7 +1608,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); hbox_spc = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_size_request (hbox_spc, 12, -1); - gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); wizard->recv_use_tls = gtk_check_button_new_with_label( _("Use STARTTLS command to start encryption")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->recv_use_tls), @@ -1627,7 +1617,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, wizard->recv_use_tls); recv_cert_table = gtk_grid_new(); - + gtk_box_pack_start (GTK_BOX(vbox), recv_cert_table, FALSE, FALSE, 4); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); hbox_spc = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); @@ -1635,7 +1625,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0); label = gtk_label_new(_("Client TLS certificate (optional)")); gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_grid_attach(GTK_GRID(recv_cert_table), hbox, 0, 0, 1, 1); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); @@ -1645,7 +1635,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) label = gtk_label_new(_("File:")); gtk_label_set_xalign(GTK_LABEL(label), 1.0); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); gtk_grid_attach(GTK_GRID(recv_cert_table), hbox, 0, 1, 1, 1); wizard->recv_ssl_cert_file = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(wizard->recv_ssl_cert_file), tmpl.recvssl_cert?tmpl.recvssl_cert:""); @@ -1680,9 +1670,9 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_widget_set_margin_start(wizard->recv_ssl_cert_pass, 4); gtk_widget_set_margin_bottom(wizard->recv_ssl_cert_pass, 4); - SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table); + SET_TOGGLE_SENSITIVITY (wizard->recv_use_ssl, recv_cert_table); wizard->recv_cert_table = recv_cert_table; -#endif +#endif hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); wizard->recv_imap_subdir = gtk_entry_new(); @@ -1691,7 +1681,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_label_set_xalign(GTK_LABEL(wizard->recv_imap_label), 1.0); gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), wizard->recv_imap_subdir, TRUE, TRUE, 0); - + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); hbox_spc = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); @@ -1702,7 +1692,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wizard->subsonly_checkbtn), tmpl.subsonly); gtk_box_pack_start(GTK_BOX(hbox), wizard->subsonly_checkbtn, FALSE, FALSE, 0); - + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); wizard->no_imap_warning = gtk_label_new(g_strconcat("<span weight=\"bold\">", @@ -1758,7 +1748,7 @@ wizard_response_cb (GtkDialog * dialog, int response, gpointer data) current_page--; } gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), current_page); } } @@ -1771,14 +1761,14 @@ wizard_response_cb (GtkDialog * dialog, int response, gpointer data) current_page++; } gtk_notebook_set_current_page ( - GTK_NOTEBOOK(wizard->notebook), + GTK_NOTEBOOK(wizard->notebook), current_page); } } set_sens: - gtk_dialog_set_response_sensitive (dialog, GO_BACK, + gtk_dialog_set_response_sensitive (dialog, GO_BACK, current_page > 0); - gtk_dialog_set_response_sensitive (dialog, GO_FORWARD, + gtk_dialog_set_response_sensitive (dialog, GO_FORWARD, current_page < (num_pages - 1)); if (current_page == (num_pages -1)) { gtk_dialog_set_response_sensitive (dialog, FINISHED, TRUE); @@ -1797,7 +1787,7 @@ static gint wizard_close_cb(GtkWidget *widget, GdkEventAny *event, WizardWindow *wizard = (WizardWindow *)data; wizard->result = FALSE; wizard->finished = TRUE; - + return FALSE; } @@ -1820,13 +1810,13 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gint i = 0; wizard->mainwin = mainwin; wizard->create_mailbox = create_mailbox; - + gtk_widget_hide(mainwin->window); - + wizard_read_defaults(); - + wizard->window = gtk_dialog_new_with_buttons (_("Claws Mail Setup Wizard"), - NULL, 0, + NULL, 0, _("_Previous"), GO_BACK, _("_Next"), GO_FORWARD, _("_Save"), FINISHED, @@ -1835,37 +1825,37 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_window_set_position(GTK_WINDOW(wizard->window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(wizard->window), 550, 500); - g_signal_connect(wizard->window, "response", + g_signal_connect(wizard->window, "response", G_CALLBACK(wizard_response_cb), wizard); gtk_widget_realize(wizard->window); - gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), + gtk_dialog_set_default_response(GTK_DIALOG(wizard->window), GO_FORWARD); - gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), + gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), GO_BACK, FALSE); - gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), + gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), GO_FORWARD, TRUE); - gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), + gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), FINISHED, FALSE); - gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), + gtk_dialog_set_response_sensitive(GTK_DIALOG(wizard->window), CANCEL, TRUE); - + wizard->notebook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(wizard->notebook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(wizard->notebook), FALSE); - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))), + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(wizard->window))), wizard->notebook, TRUE, TRUE, 0); - + wizard->pages = NULL; - + /*welcome page: 0 */ WELCOME_PAGE = i; page = create_page(wizard, _("Welcome to Claws Mail")); - + wizard->pages = g_slist_append(wizard->pages, page); widget = priv_pixmap_widget(PRIV_PIXMAP_CLAWS_MAIL_LOGO); gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0); - + text = g_strdup(_("Welcome to the Claws Mail setup wizard.\n\n" "We will begin by defining some basic " "information about you and your most common " @@ -1887,7 +1877,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_container_add(GTK_CONTAINER(scrolled_window), user_page(wizard)); PACK_WARNING(_("Bold fields must be completed")); - + wizard->pages = g_slist_append(wizard->pages, widget); /* recv+auth page: 2 */ @@ -1901,7 +1891,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_container_add(GTK_CONTAINER(scrolled_window), recv_page(wizard)); PACK_WARNING(_("Bold fields must be completed")); - + wizard->pages = g_slist_append(wizard->pages, widget); /*smtp page: 3 */ @@ -1915,7 +1905,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_container_add(GTK_CONTAINER(scrolled_window), smtp_page(wizard)); PACK_WARNING(_("Bold fields must be completed")); - + wizard->pages = g_slist_append(wizard->pages, widget); /* mailbox page: 4 */ @@ -1930,7 +1920,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_container_add(GTK_CONTAINER(scrolled_window), mailbox_page(wizard)); PACK_WARNING(_("Bold fields must be completed")); - + wizard->pages = g_slist_append(wizard->pages, widget); } @@ -1938,12 +1928,12 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { i++; DONE_PAGE = i; page = create_page(wizard, _("Configuration finished")); - + wizard->pages = g_slist_append(wizard->pages, page); widget = priv_pixmap_widget(PRIV_PIXMAP_CLAWS_MAIL_LOGO); gtk_box_pack_start (GTK_BOX(page), widget, FALSE, FALSE, 0); - + text = g_strdup(_("Claws Mail is now ready.\n" "Click Save to start.")); widget = gtk_label_new(text); @@ -1952,10 +1942,10 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { for (cur = wizard->pages; cur && cur->data; cur = cur->next) { - gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook), + gtk_notebook_append_page (GTK_NOTEBOOK(wizard->notebook), GTK_WIDGET(cur->data), NULL); } - + g_signal_connect(G_OBJECT(wizard->window), "delete_event", G_CALLBACK(wizard_close_cb), wizard); gtk_widget_show_all (wizard->window); @@ -1972,7 +1962,7 @@ gboolean run_wizard(MainWindow *mainwin, gboolean create_mailbox) { gtk_main_iteration(); result = wizard->result; - + GTK_EVENTS_FLUSH(); gtk_widget_show(mainwin->window);