Have an event loop thread.
[apps/madmutt.git] / main.c
diff --git a/main.c b/main.c
index 1db6a40..74f95be 100644 (file)
--- a/main.c
+++ b/main.c
 #include <lib-lib/lib-lib.h>
 
 #include <sys/utsname.h>
+#include <pthread.h>
 
 #include <lib-lua/lib-lua.h>
 #include <lib-sys/mutt_signal.h>
+#include <lib-sys/evtloop.h>
 #include <lib-mime/mime.h>
 #include <lib-ui/lib-ui.h>
 #include <lib-mx/mx.h>
@@ -56,6 +58,8 @@ extern int optind;
 #include <gnutls/gnutls.h>
 #include <gpgme.h>
 
+#include <libintl.h>
+
 void mutt_exit(int code)
 {
     mutt_endwin(NULL);
@@ -172,6 +176,14 @@ static void mutt_nocurses_error (const char *fmt, ...)
     fputc('\n', stderr);
 }
 
+static void *evtloop(void *data)
+{
+    for (;;) {
+        el_dispatch(100);
+        pthread_testcancel();
+    }
+}
+
 int main (int argc, char **argv)
 {
   char folder[_POSIX_PATH_MAX] = "";
@@ -186,6 +198,7 @@ int main (int argc, char **argv)
   int version = 0;
   int i;
   int explicit_folder = 0;
+  pthread_t pt;
 
   /* initialize random number for tmp file creation */ 
   srand48((unsigned int) time (NULL));
@@ -301,8 +314,10 @@ int main (int argc, char **argv)
   }
 
   /* set defaults and read init files */
+  el_initialize();
   mutt_init (flags & M_NOSYSRC, commands);
   string_list_wipe(&commands);
+  pthread_create(&pt, NULL, &evtloop, NULL);
 
   if (!option(OPTNOCURSES)) {
       ui_layout_init();
@@ -488,6 +503,7 @@ int main (int argc, char **argv)
                                    NULL)) || !explicit_folder)
     {
       mutt_index_menu ();
+
       if (option (OPTXTERMSETTITLES))
         printf("\033]2;%s\007", NONULL(XtermLeave));
       if (Context)
@@ -496,7 +512,10 @@ int main (int argc, char **argv)
     mutt_endwin (Errorbuf);
   }
 
+  pthread_cancel(pt);
+  pthread_join(pt, NULL);
   luaM_shutdown();
   mutt_sasl_shutdown();
+  el_shutdown();
   exit (0);
 }