/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
*
* 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
#include <sys/types.h>
#include <signal.h>
-#if USE_GPGME
-# include <gpgme.h>
-# include "passphrase.h"
+#ifdef HAVE_STARTUP_NOTIFICATION
+# define SN_API_NOT_YET_FROZEN
+# include <libsn/sn-launchee.h>
+# include <gdk/gdkx.h>
#endif
#include "sylpheed.h"
#include "prefs_actions.h"
#include "prefs_ext_prog.h"
#include "prefs_fonts.h"
+#include "prefs_msg_colors.h"
#include "prefs_spelling.h"
#include "prefs_themes.h"
+#include "prefs_wrapping.h"
#include "prefs_display_header.h"
#include "account.h"
#include "procmsg.h"
#include "log.h"
#include "prefs_toolbar.h"
#include "plugin.h"
+#include "mh_gtk.h"
+#include "imap_gtk.h"
+#include "news_gtk.h"
+#include "matcher.h"
-#if USE_GPGME
-# include "sgpgme.h"
-# include "pgpmime.h"
-#endif
#if USE_OPENSSL
# include "ssl.h"
#endif
gchar *argv0;
#endif
+#ifdef HAVE_STARTUP_NOTIFICATION
+static SnLauncheeContext *sn_context = NULL;
+static SnDisplay *sn_display = NULL;
+#endif
+
static gint lock_socket = -1;
static gint lock_socket_tag = 0;
static MainWindow *static_mainwindow;
+#ifdef HAVE_STARTUP_NOTIFICATION
+static void sn_error_trap_push(SnDisplay *display, Display *xdisplay)
+{
+ gdk_error_trap_push();
+}
+
+static void sn_error_trap_pop(SnDisplay *display, Display *xdisplay)
+{
+ gdk_error_trap_pop();
+}
+
+static void startup_notification_complete(gboolean with_window)
+{
+ Display *xdisplay;
+ GtkWidget *hack = NULL;
+
+ if (with_window) {
+ /* this is needed to make the startup notification leave,
+ * if we have been launched from a menu.
+ * We have to display a window, so let it be very little */
+ hack = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_uposition(hack, 0, 0);
+ gtk_widget_set_usize(hack, 1, 1);
+ gtk_widget_show(hack);
+ }
+
+ xdisplay = GDK_DISPLAY();
+ sn_display = sn_display_new(xdisplay,
+ sn_error_trap_push,
+ sn_error_trap_pop);
+ sn_context = sn_launchee_context_new_from_environment(sn_display,
+ DefaultScreen(xdisplay));
+
+ if (sn_context != NULL)
+ {
+ sn_launchee_context_complete(sn_context);
+ sn_launchee_context_unref(sn_context);
+ sn_display_unref(sn_display);
+ }
+}
+#endif /* HAVE_STARTUP_NOTIFICATION */
+
+void sylpheed_gtk_idle(void)
+{
+ while(gtk_events_pending())
+ gtk_main_iteration();
+}
+
int main(int argc, char *argv[])
{
+
gchar *userrc;
MainWindow *mainwin;
FolderView *folderview;
/* check and create unix domain socket */
lock_socket = prohibit_duplicate_launch();
- if (lock_socket < 0) return 0;
+ if (lock_socket < 0) {
+#ifdef HAVE_STARTUP_NOTIFICATION
+ if(gtk_init_check(&argc, &argv))
+ startup_notification_complete(TRUE);
+#endif
+ return 0;
+ }
if (cmd.status || cmd.status_full) {
puts("0 Sylpheed not running.");
gtk_rc_parse(userrc);
g_free(userrc);
- gtk_rc_parse("./gtkrc");
-
userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL);
gtk_item_factory_parse_rc(userrc);
g_free(userrc);
prefs_common_init();
prefs_common_read_config();
-#if USE_GPGME
- sgpgme_init();
- pgpmime_init();
-#endif
- prefs_ext_prog_init();
prefs_themes_init();
prefs_fonts_init();
+ prefs_ext_prog_init();
+ prefs_wrapping_init();
+ prefs_msg_colors_init();
#ifdef USE_ASPELL
gtkaspell_checkers_init();
prefs_spelling_init();
gtkut_widget_init();
+ folderview_initialize();
+ mh_gtk_init();
+ imap_gtk_init();
+ news_gtk_init();
mainwin = main_window_create
(prefs_common.sep_folder | prefs_common.sep_msg << 1);
folderview = mainwin->folderview;
lock_socket_input_cb,
mainwin);
+ prefs_account_init();
account_read_config_all();
if (folder_read_list() < 0) {
prefs_matcher_read_config();
/* make one all-folder processing before using sylpheed */
+ main_window_cursor_wait(mainwin);
folder_func_to_all_folders(initial_processing, (gpointer *)mainwin);
+ main_window_cursor_normal(mainwin);
/* if Sylpheed crashed, rebuild caches */
if (!cmd.crash && is_file_exist(get_crashfile_name())) {
if (cmd.online_mode == ONLINE_MODE_ONLINE)
main_window_toggle_work_offline(mainwin, FALSE);
+ if (cmd.status_folders) {
+ g_ptr_array_free(cmd.status_folders, TRUE);
+ cmd.status_folders = NULL;
+ }
+ if (cmd.status_full_folders) {
+ g_ptr_array_free(cmd.status_full_folders, TRUE);
+ cmd.status_full_folders = NULL;
+ }
+
+ sylpheed_register_idle_function(sylpheed_gtk_idle);
+
+ prefs_toolbar_init();
+
+ plugin_load_all("GTK");
+
+ static_mainwindow = mainwin;
+
+#ifdef HAVE_STARTUP_NOTIFICATION
+ startup_notification_complete(FALSE);
+#endif
+
if (cmd.receive_all)
inc_all_account_mail(mainwin, FALSE,
prefs_common.newmail_notify_manu);
}
if (cmd.send)
send_queue();
- if (cmd.status_folders) {
- g_ptr_array_free(cmd.status_folders, TRUE);
- cmd.status_folders = NULL;
- }
- if (cmd.status_full_folders) {
- g_ptr_array_free(cmd.status_full_folders, TRUE);
- cmd.status_full_folders = NULL;
- }
- prefs_toolbar_init();
-
- plugin_load_all("GTK");
-
- static_mainwindow = mainwin;
gtk_main();
exit_sylpheed(mainwin);
static void exit_sylpheed(MainWindow *mainwin)
{
gchar *filename;
- GList *list, *cur;
debug_print("shutting down\n");
main_window_get_size(mainwin);
main_window_get_position(mainwin);
- prefs_common_save_config();
- account_save_config_all();
+ prefs_common_write_config();
+ account_write_config_all();
addressbook_export_to_file();
filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL);
addressbook_destroy();
-#ifdef USE_GPGME
- pgpmime_done();
- sgpgme_done();
-#endif
- prefs_ext_prog_done();
prefs_themes_done();
prefs_fonts_done();
+ prefs_ext_prog_done();
+ prefs_wrapping_done();
+ prefs_msg_colors_done();
#ifdef USE_ASPELL
prefs_spelling_done();
gtkaspell_checkers_quit();
debug_print("%s\n", buf);
g_free(buf);
- main_window_cursor_wait(mainwin);
-
if (item->prefs->enable_processing)
folder_item_apply_processing(item);
debug_print("done.\n");
STATUSBAR_POP(mainwin);
- main_window_cursor_normal(mainwin);
}
static void draft_all_messages(void)
MainWindow *mainwin = data;
if (compose_get_compose_list()) {
- gint val = alertpanel(_("Notice"),
+ gint val = alertpanel(_("Really quit?"),
_("Composing message exists."),
_("Draft them"), _("Discard them"), _("Don't quit"));
switch (val) {
#ifdef SIGINT
sigaddset(&mask, SIGINT);
#endif
+#ifdef SIGHUP
+ sigaddset(&mask, SIGHUP);
+#endif
act.sa_handler = quit_signal_handler;
act.sa_mask = mask;
#ifdef SIGINT
sigaction(SIGINT, &act, 0);
#endif
+#ifdef SIGHUP
+ sigaction(SIGHUP, &act, 0);
+#endif
sigprocmask(SIG_UNBLOCK, &mask, 0);
}