#include <sys/types.h>
#ifdef G_OS_UNIX
# include <signal.h>
+# include <errno.h>
+# include <fcntl.h>
#endif
#ifdef HAVE_LIBSM
#include <X11/SM/SMlib.h>
-#include <fcntl.h>
#endif
#include "wizard.h"
static void initial_processing (FolderItem *item, gpointer data);
static void quit_signal_handler (int sig);
static void install_basic_sighandlers (void);
+#if (defined linux && defined SIGIO)
+static void install_memory_sighandler (void);
+#endif
static void exit_claws (MainWindow *mainwin);
#ifdef HAVE_NETWORKMANAGER_SUPPORT
}
#endif
+static void main_dump_features_list(gboolean show_debug_only)
+/* display compiled-in features list */
+{
+ if (show_debug_only && !debug_get_mode())
+ return;
+
+ if (show_debug_only)
+ debug_print("GTK+ %d.%d.%d / GLib %d.%d.%d\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ glib_major_version, glib_minor_version, glib_micro_version);
+ else
+ g_print("GTK+ %d.%d.%d / GLib %d.%d.%d\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ glib_major_version, glib_minor_version, glib_micro_version);
+ if (show_debug_only)
+ debug_print("Compiled-in features:\n");
+ else
+ g_print("Compiled-in features:\n");
+#if HAVE_LIBCOMPFACE
+ if (show_debug_only)
+ debug_print(" compface\n");
+ else
+ g_print(" compface\n");
+#endif
+#if USE_ASPELL
+ if (show_debug_only)
+ debug_print(" aspell\n");
+ else
+ g_print(" aspell\n");
+#endif
+#if USE_GNUTLS
+ if (show_debug_only)
+ debug_print(" gnutls\n");
+ else
+ g_print(" gnutls\n");
+#endif
+#if INET6
+ if (show_debug_only)
+ debug_print(" ipv6\n");
+ else
+ g_print(" ipv6\n");
+#endif
+#if HAVE_ICONV
+ if (show_debug_only)
+ debug_print(" iconv\n");
+ else
+ g_print(" iconv\n");
+#endif
+#if USE_JPILOT
+ if (show_debug_only)
+ debug_print(" jpilot\n");
+ else
+ g_print(" jpilot\n");
+#endif
+#if USE_LDAP
+ if (show_debug_only)
+ debug_print(" ldap\n");
+ else
+ g_print(" ldap\n");
+#endif
+#if HAVE_LIBETPAN
+ if (show_debug_only)
+ debug_print(" libetpan %d.%d\n", LIBETPAN_VERSION_MAJOR, LIBETPAN_VERSION_MINOR);
+ else
+ g_print(" libetpan %d.%d\n", LIBETPAN_VERSION_MAJOR, LIBETPAN_VERSION_MINOR);
+#endif
+#if USE_GNOMEPRINT
+ if (show_debug_only)
+ debug_print(" gnomeprint\n");
+ else
+ g_print(" gnomeprint\n");
+#endif
+#if HAVE_LIBSM
+ if (show_debug_only)
+ debug_print(" libsm\n");
+ else
+ g_print(" libsm\n");
+#endif
+#if HAVE_NETWORKMANAGER_SUPPORT
+ if (show_debug_only)
+ debug_print(" NetworkManager\n");
+ else
+ g_print(" NetworkManager\n");
+#endif
+#if USE_OPENSSL
+ if (show_debug_only)
+ debug_print(" openssl\n");
+ else
+ g_print(" openssl\n");
+#endif
+}
+
int main(int argc, char *argv[])
{
#ifdef MAEMO
return 0;
}
- debug_print("GTK+ %d.%d.%d / GLib %d.%d.%d\n",
- gtk_major_version, gtk_minor_version, gtk_micro_version,
- glib_major_version, glib_minor_version, glib_micro_version);
- debug_print("Compiled-in features:\n");
-#if HAVE_LIBCOMPFACE
- debug_print(" compface\n");
-#endif
-#if USE_ASPELL
- debug_print(" aspell\n");
-#endif
-#if USE_GNUTLS
- debug_print(" gnutls\n");
-#endif
-#if INET6
- debug_print(" ipv6\n");
-#endif
-#if HAVE_ICONV
- debug_print(" iconv\n");
-#endif
-#if USE_JPILOT
- debug_print(" jpilot\n");
-#endif
-#if USE_LDAP
- debug_print(" ldap\n");
-#endif
-#if HAVE_LIBETPAN
- debug_print(" libetpan %d.%d\n", LIBETPAN_VERSION_MAJOR, LIBETPAN_VERSION_MINOR);
-#endif
-#if USE_GNOMEPRINT
- debug_print(" gnomeprint\n");
-#endif
-#if HAVE_LIBSM
- debug_print(" libsm\n");
-#endif
-#if HAVE_NETWORKMANAGER_SUPPORT
- debug_print(" NetworkManager\n");
-#endif
-#if USE_OPENSSL
- debug_print(" openssl\n");
-#endif
+ main_dump_features_list(TRUE);
prog_version = PROG_VERSION;
argv0 = g_strdup(argv[0]);
crash_install_handlers();
#endif
install_basic_sighandlers();
+#if (defined linux && defined SIGIO)
+ install_memory_sighandler();
+#endif
sock_init();
/* check and create unix domain socket for remote operation */
} else if (cmd.receive && !cmd.target) {
start_done = FALSE;
g_timeout_add(1000, defer_check, NULL);
- } else {
- gtk_widget_grab_focus(folderview->ctree);
- }
+ }
+ gtk_widget_grab_focus(folderview->ctree);
if (cmd.compose) {
open_compose_new(cmd.compose_mailto, cmd.attach_files);
}
} else if (!strncmp(argv[i], "--send", 6)) {
cmd.send = TRUE;
+ } else if (!strncmp(argv[i], "--version-full", 14) ||
+ !strncmp(argv[i], "-V", 2)) {
+ g_print("Claws Mail version " VERSION "\n");
+ main_dump_features_list(FALSE);
+ exit(0);
} else if (!strncmp(argv[i], "--version", 9) ||
!strncmp(argv[i], "-v", 2)) {
g_print("Claws Mail version " VERSION "\n");
g_print("%s\n", _(" --debug debug mode"));
g_print("%s\n", _(" --help -h display this help and exit"));
g_print("%s\n", _(" --version -v output version information and exit"));
+ g_print("%s\n", _(" --version-full -V output version and built-in features information and exit"));
g_print("%s\n", _(" --config-dir output configuration directory"));
g_print("%s\n", _(" --alternate-config-dir [dir]\n"
" use specified configuration directory"));
cmd.compose_mailto = p;
}
}
+ } else if (!strncmp(argv[i], "file://", 7)) {
+ cmd.target = argv[i];
} else if (strstr(argv[i], "://")) {
const gchar *p = argv[i];
if (p && *p != '\0' && *p != '-') {
}
} else if (!strcmp(argv[i], "--sync")) {
/* gtk debug */
+ } else if (is_dir_exist(argv[i]) || is_file_exist(argv[i])) {
+ cmd.target = argv[i];
} else {
g_print(_("Unknown option\n"));
exit(1);
#endif /* !G_OS_WIN32 */
}
+#if (defined linux && defined SIGIO)
+static int mem_notify_fd = 0;
+
+static gboolean clean_caches(gpointer unused)
+{
+ if (static_mainwindow && static_mainwindow->lock_count > 0)
+ return TRUE;
+ debug_print("/dev/mem_notify: callback: Freeing some memory now!\n");
+ folder_clean_cache_memory_force();
+ return FALSE;
+}
+
+static void memory_signal_handler(int sig)
+{
+ debug_print("/dev/mem_notify: Kernel says we should free up some memory!\n");
+ g_timeout_add(10, clean_caches, NULL);
+}
+
+static void install_memory_sighandler()
+{
+ sigset_t mask;
+ struct sigaction act;
+ int flags;
+
+ mem_notify_fd = open("/dev/mem_notify", O_RDONLY|O_NONBLOCK);
+ if (mem_notify_fd == -1) {
+ debug_print("/dev/mem_notify not available (%s)\n",
+ strerror(errno));
+ return;
+ }
+
+ fcntl(mem_notify_fd, F_SETOWN, getpid());
+ flags = fcntl(mem_notify_fd, F_GETFL);
+ fcntl(mem_notify_fd, flags|FASYNC);
+
+ sigemptyset(&mask);
+
+ sigaddset(&mask, SIGIO);
+
+ act.sa_handler = memory_signal_handler;
+ act.sa_mask = mask;
+ act.sa_flags = 0;
+
+ sigaction(SIGIO, &act, 0);
+
+ sigprocmask(SIG_UNBLOCK, &mask, 0);
+
+ debug_print("/dev/mem_notify: installed handler\n");
+}
+#endif /* linux && SIGIO */
+
#ifdef MAEMO
osso_context_t *get_osso_context(void)
{