diff options
| -rw-r--r-- | src/gui/editor.c | 5 | ||||
| -rw-r--r-- | src/main.c | 52 | 
2 files changed, 52 insertions, 5 deletions
diff --git a/src/gui/editor.c b/src/gui/editor.c index 11c7f06..7047f32 100644 --- a/src/gui/editor.c +++ b/src/gui/editor.c @@ -481,7 +481,10 @@ static void on_destroy_editor(GtkWidget *widget, GObject *ref)      on_focus_out(widget, NULL, ref); -    gtk_main_quit(); + +    /* Si la boucle principale est bien lancée, on en sort ! */ +    if (gtk_main_level() > 0) +        gtk_main_quit();  } @@ -25,6 +25,7 @@  #include <getopt.h>  #include <locale.h>  #include <stdlib.h> +#include <unistd.h>  #include <gtk/gtk.h>  #include <config.h> @@ -81,7 +82,7 @@ static void show_chrysalide_help(const char *name)      printf("\n");      printf("Usage: %s [--help] [--version]\n", base); -    printf("       %s [--batch] <filename(s)...>\n", base); +    printf("       %s [args] <filename(s)...>\n", base);      printf("\n"); @@ -92,6 +93,7 @@ static void show_chrysalide_help(const char *name)      printf("\t--verbosity=level\tSet the log level (0 for all messages, %u for none).\n", LMT_COUNT);      printf("\t--batch\t\t\tExit after processing files.\n"); +    printf("\t--project=filename\tOpen an existing project or create a new one.\n");      printf("\n"); @@ -149,6 +151,7 @@ int main(int argc, char **argv)      bool show_version;                      /* Affichage de la version ?   */      LogMessageType verbosity;               /* Niveau de filtre de message */      bool batch_mode;                        /* Exécution sans GUI ?        */ +    char *prj_filename;                     /* Chemin vers un projet       */      int index;                              /* Indice d'argument           */      int ret;                                /* Bilan d'un appel            */      GtkWidget *editor;                      /* Fenêtre graphique           */ @@ -161,12 +164,14 @@ int main(int argc, char **argv)      char *pub;                              /* Chemin de la clef publique  */      bool welcome;                           /* Affichage de la bienvenue ? */ +    GStudyProject *project;                 /* Nouveau projet courant      */      static struct option long_options[] = {          { "help",       no_argument,        NULL,   'h' },          { "version",    no_argument,        NULL,   'v' },          { "verbosity",  required_argument,  NULL,   'V' },          { "batch",      no_argument,        NULL,   'b' }, +        { "project",    required_argument,  NULL,   'p' },          { NULL,         0,                  NULL,   0 }      }; @@ -186,10 +191,11 @@ int main(int argc, char **argv)      verbosity = LMT_INFO;      batch_mode = false; +    prj_filename = NULL;      while (true)      { -        ret = getopt_long(argc, argv, "hvV:b", long_options, &index); +        ret = getopt_long(argc, argv, "hvV:bp:", long_options, &index);          if (ret == -1) break;          switch (ret) @@ -210,6 +216,10 @@ int main(int argc, char **argv)                  batch_mode = true;                  break; +            case 'p': +                prj_filename = optarg; +                break; +          }      } @@ -287,11 +297,43 @@ int main(int argc, char **argv)      else          g_generic_config_get_value(config, MPK_WELCOME_STARTUP, &welcome); -    if (!welcome) +    if (!welcome && prj_filename == NULL)          g_idle_add((GSourceFunc)load_last_project, config);      else -        set_current_project(g_study_project_new()); +    { +        if (prj_filename == NULL) +            project = g_study_project_new(); + +        else +        { +            ret = access(prj_filename, R_OK); + +            if (ret == 0) +            { +                project = g_study_project_open(prj_filename); +                if (project == NULL) goto bad_project; +            } + +            else +            { +                project = g_study_project_new(); + +                status = g_study_project_save(project, prj_filename); + +                if (!status) +                { +                    g_object_unref(G_OBJECT(project)); +                    goto bad_project; +                } + +            } + +        } + +        set_current_project(project); + +    }      /* Exécution du programme */ @@ -303,6 +345,8 @@ int main(int argc, char **argv)      else          gtk_main(); + bad_project: +      g_db_server_stop(server);      g_object_unref(G_OBJECT(server));  | 
