/*! *\brief this handler will probably evolve into * something better. */ static void crash_handler(int sig) { pid_t pid; static volatile unsigned long crashed_ = 0; /* * let's hope argv0 aren't trashed. * both are defined in main.c. */ extern gchar *argv0; /* * besides guarding entrancy it's probably also better * to mask off signals */ if (crashed_) return; crashed_++; #ifdef SIGTERM if (sig == SIGTERM) clean_quit(NULL); #endif /* * gnome ungrabs focus, and flushes gdk. mmmh, good idea. */ gdk_pointer_ungrab(GDK_CURRENT_TIME); gdk_keyboard_ungrab(GDK_CURRENT_TIME); gdk_flush(); if (0 == (pid = fork())) { char buf[50]; char *args[5]; /* * probably also some other parameters (like GTK+ ones). * also we pass the full startup dir and the real command * line typed in (argv0) */ args[0] = argv0; args[1] = "--debug"; args[2] = "--crash"; sprintf(buf, "%d,%d,%s", getppid(), sig, argv0); args[3] = buf; args[4] = NULL; chdir(claws_get_startup_dir()); setgid(getgid()); setuid(getuid()); execvp(argv0, args); } else { waitpid(pid, NULL, 0); crash_cleanup_exit(); _exit(253); } _exit(253); }
gint import_mbox(FolderItem *default_dest) /* return values: -2 skipped/cancelled, -1 error, 0 OK */ { gchar *dest_id = NULL; import_ok = -2; // skipped or cancelled if (!window) { import_create(); } else { gtk_widget_show(window); } gtk_window_set_modal(GTK_WINDOW(window), TRUE); change_dir(claws_get_startup_dir()); if (default_dest && default_dest->path) { dest_id = folder_item_get_identifier(default_dest); } if (dest_id) { gtk_entry_set_text(GTK_ENTRY(dest_entry), dest_id); g_free(dest_id); } else { gtk_entry_set_text(GTK_ENTRY(dest_entry), ""); } gtk_entry_set_text(GTK_ENTRY(file_entry), ""); gtk_widget_grab_focus(file_entry); manage_window_set_transient(GTK_WINDOW(window)); gtk_main(); gtk_widget_hide(window); gtk_window_set_modal(GTK_WINDOW(window), FALSE); return import_ok; }