/*
* 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>
+#ifdef HAVE_STARTUP_NOTIFICATION
+# define SN_API_NOT_YET_FROZEN
+# include <libsn/sn-launchee.h>
+# include <gdk/gdkx.h>
+#endif
+
#if USE_GPGME
# include <gpgme.h>
# include "passphrase.h"
#include "prefs_common.h"
#include "prefs_account.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;
/* 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.");
lock_socket_remove();
gtk_rc_parse(userrc);
g_free(userrc);
- gtk_rc_parse("./gtkrc-2.0");
-
userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL);
gtk_accel_map_load (userrc);
g_free(userrc);
+ gtk_settings_set_long_property(gtk_settings_get_default(),
+ "gtk-can-change-accels",
+ (glong)TRUE, "XProperty");
+
CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1);
MAKE_DIR_IF_NOT_EXIST(RC_DIR);
prefs_common_init();
prefs_common_read_config();
-#if USE_GPGME
- sgpgme_init();
- pgpmime_init();
-#endif
-
+ 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;
cmd.status_full_folders = NULL;
}
+ sylpheed_register_idle_function(sylpheed_gtk_idle);
+
prefs_toolbar_init();
- plugin_load_all("GTK");
+ plugin_load_all("GTK2");
static_mainwindow = mainwin;
+
+#ifdef HAVE_STARTUP_NOTIFICATION
+ startup_notification_complete(FALSE);
+#endif
gtk_main();
exit_sylpheed(mainwin);
static void exit_sylpheed(MainWindow *mainwin)
{
gchar *filename;
- GList *list;
debug_print("shutting down\n");
/* save all state before exiting */
folder_write_list();
folder_func_to_all_folders(save_all_caches, NULL);
- for (list = folder_get_list(); list != NULL; list = g_list_next(list)) {
- Folder *folder = FOLDER(list->data);
-
- folder_tree_destroy(folder);
- }
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);
-#warning FIXME_GTK2 gtk_item_factory_dump_rc() not existing
-#if 0
- gtk_item_factory_dump_rc(filename, NULL, TRUE);
-#endif
gtk_accel_map_save(filename);
g_free(filename);
main_window_destroy(mainwin);
- plugin_unload_all("GTK");
+ plugin_unload_all("GTK2");
prefs_toolbar_done();
addressbook_destroy();
-#ifdef USE_GPGME
- pgpmime_done();
- sgpgme_done();
-#endif
-
+ 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();
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);
}