summaryrefslogtreecommitdiff
path: root/src/editor.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-11-19 23:45:18 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-11-19 23:45:18 (GMT)
commitfc363c31cc0a24e026bac74b5f62f33f44bf0143 (patch)
treec8944e1e6b7d2b9faa2658df8cf785648b06232d /src/editor.c
parent783e5e1977c1e4dadf938befa9fce9a311079413 (diff)
Better supervised the closing of the editor.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@138 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/editor.c')
-rw-r--r--src/editor.c118
1 files changed, 96 insertions, 22 deletions
diff --git a/src/editor.c b/src/editor.c
index eed0868..5e39f27 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -69,8 +69,10 @@ void sigchld_handler(int num);
GtkWidget *create_editor(void);
/* Quitte le programme en sortie de la boucle de GTK. */
-void destroy_editor(GtkWidget *, gpointer);
+static gboolean on_delete_editor(GtkWidget *, GdkEvent *, gpointer);
+/* Quitte le programme en sortie de la boucle de GTK. */
+static void on_destroy_editor(GtkWidget *, gpointer);
/* Réagit au menu "Fichier -> Nouveau projet". */
void mcb_file_new_project(GtkMenuItem *, gpointer);
@@ -216,7 +218,8 @@ GtkWidget *create_editor(void)
gtk_container_set_border_width(GTK_CONTAINER(result), 4);
gtk_window_set_title(GTK_WINDOW(result), _("OpenIDA"));
- g_signal_connect(G_OBJECT(result), "destroy", G_CALLBACK(destroy_editor), NULL);
+ g_signal_connect(G_OBJECT(result), "delete-event", G_CALLBACK(on_delete_editor), NULL);
+ g_signal_connect(G_OBJECT(result), "destroy", G_CALLBACK(on_destroy_editor), NULL);
ref = G_OBJECT(result);
@@ -554,6 +557,7 @@ GtkWidget *create_editor(void)
/******************************************************************************
* *
* Paramètres : widget = fenêtre de l'éditeur de préférences. *
+* event = informations liées à l'événement. *
* data = adresse non utilisée ici. *
* *
* Description : Quitte le programme en sortie de la boucle de GTK. *
@@ -564,15 +568,77 @@ GtkWidget *create_editor(void)
* *
******************************************************************************/
-void destroy_editor(GtkWidget *widget, gpointer data)
+static gboolean on_delete_editor(GtkWidget *widget, GdkEvent *event, gpointer data)
{
- close_openida_project(get_current_openida_project());
+ gboolean result; /* Continuation à retourner */
+ openida_project *project; /* Projet courant */
+ GtkWidget *dialog; /* Boîte à afficher */
- gtk_main_quit();
+ result = FALSE;
+
+ project = get_current_openida_project();
+
+ if (g_openida_project_get_filename(project) == NULL)
+ {
+ dialog = gtk_message_dialog_new(widget,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("The current project will be lost. Do you you want to save it ?"));
+
+ gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_YES, GTK_RESPONSE_YES);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_NO, GTK_RESPONSE_NO);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+ switch (gtk_dialog_run(GTK_DIALOG(dialog)))
+ {
+ case GTK_RESPONSE_YES:
+ mcb_file_save_project_as(NULL, widget);
+ break;
+
+ case GTK_RESPONSE_NO:
+ break;
+
+ case GTK_RESPONSE_CANCEL:
+ result = TRUE;
+ break;
+
+ }
+
+ gtk_widget_destroy(dialog);
+
+ }
+
+ return result;
}
+/******************************************************************************
+* *
+* Paramètres : widget = fenêtre de l'éditeur de préférences. *
+* event = informations liées à l'événement. *
+* data = adresse non utilisée ici. *
+* *
+* Description : Quitte le programme en sortie de la boucle de GTK. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void on_destroy_editor(GtkWidget *widget, gpointer data)
+{
+ close_openida_project(get_current_openida_project());
+
+ /* Fermeture propre */
+
+ /* ... */
+
+ gtk_main_quit();
+
+}
@@ -620,16 +686,21 @@ void mcb_file_new_project(GtkMenuItem *menuitem, gpointer data)
void mcb_file_open_project(GtkMenuItem *menuitem, gpointer data)
{
GtkWidget *dialog; /* Boîte à afficher */
- gchar *filename; /* Nom du fichier à intégrer */
openida_project *project; /* Projet chargé */
+ gchar *filename; /* Nom du fichier à intégrer */
- dialog = gtk_file_chooser_dialog_new (_("Open a project"), GTK_WINDOW(data),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
+ dialog = gtk_file_chooser_dialog_new(_("Open a project"), GTK_WINDOW(data),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ project = get_current_openida_project();
+
+ if (g_openida_project_get_filename(project) != NULL)
+ gtk_file_chooser_set_filename(dialog, g_openida_project_get_filename(project));
- if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
@@ -669,7 +740,7 @@ void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data)
project = get_current_openida_project();
- if (has_storing_filename(project))
+ if (g_openida_project_get_filename(project) != NULL)
{
if (g_openida_project_save(project, NULL))
push_openida_project_into_recent_list(project);
@@ -700,16 +771,19 @@ void mcb_file_save_project_as(GtkMenuItem *menuitem, gpointer data)
openida_project *project; /* Projet courant */
gchar *filename; /* Nom du fichier à intégrer */
- dialog = gtk_file_chooser_dialog_new (_("Save the project as..."), GTK_WINDOW(data),
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
+ dialog = gtk_file_chooser_dialog_new(_("Save the project as..."), GTK_WINDOW(data),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
- if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- project = get_current_openida_project();
+ project = get_current_openida_project();
+
+ if (g_openida_project_get_filename(project) != NULL)
+ gtk_file_chooser_set_filename(dialog, g_openida_project_get_filename(project));
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
if (g_openida_project_save(project, filename))
@@ -892,7 +966,7 @@ void mcb_project_add_binary(GtkMenuItem *menuitem, gpointer data)
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
- if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));