Branch: refs/heads/master Author: Thomas Martitz kugel@rockbox.org Committer: Thomas Martitz kugel@rockbox.org Date: Thu, 03 Jul 2014 20:33:26 UTC Commit: db90411b0e7684fb5d7868309e1fc96a93df664b https://github.com/geany/geany/commit/db90411b0e7684fb5d7868309e1fc96a93df66...
Log Message: ----------- main: Refactor quit functions
Move quit-related functions to main.c and make them static. main_quit() now does all the heavy work and can be called from signal handlers.
Modified Paths: -------------- src/callbacks.c src/keybindings.c src/main.c src/main.h
Modified: src/callbacks.c 54 lines changed, 2 insertions(+), 52 deletions(-) =================================================================== @@ -157,61 +157,11 @@ G_MODULE_EXPORT void on_clone1_activate(GtkMenuItem *menuitem, gpointer user_dat /*static gboolean switch_tv_notebook_page = FALSE; */
-static gboolean check_no_unsaved(void) -{ - guint i; - - for (i = 0; i < documents_array->len; i++) - { - if (documents[i]->is_valid && documents[i]->changed) - { - return FALSE; - } - } - return TRUE; /* no unsaved edits */ -} - - -/* should only be called from on_window_delete_event */ -static void quit_app(void) -{ - configuration_save(); - - if (app->project != NULL) - project_close(FALSE); /* save project session files */ - - document_close_all(); - - main_status.quitting = TRUE; - - main_quit(); -} -
/* wrapper function to abort exit process if cancel button is pressed */ G_MODULE_EXPORT gboolean on_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer gdata) { - main_status.quitting = TRUE; - - if (! check_no_unsaved()) - { - if (document_account_for_unsaved()) - { - quit_app(); - return FALSE; - } - } - else - if (! prefs.confirm_exit || - dialogs_show_question_full(NULL, GTK_STOCK_QUIT, GTK_STOCK_CANCEL, NULL, - _("Do you really want to quit?"))) - { - quit_app(); - return FALSE; - } - - main_status.quitting = FALSE; - return TRUE; + return !main_quit(); }
@@ -296,7 +246,7 @@ G_MODULE_EXPORT void on_close1_activate(GtkMenuItem *menuitem, gpointer user_dat
G_MODULE_EXPORT void on_quit1_activate(GtkMenuItem *menuitem, gpointer user_data) { - on_window_delete_event(NULL, NULL, NULL); + main_quit(); }
Modified: src/keybindings.c 3 lines changed, 2 insertions(+), 1 deletions(-) =================================================================== @@ -39,6 +39,7 @@ #include "documentprivate.h" #include "filetypes.h" #include "keybindingsprivate.h" +#include "main.h" #include "msgwindow.h" #include "navqueue.h" #include "notebook.h" @@ -1364,7 +1365,7 @@ static gboolean cb_func_file_action(guint key_id) on_print1_activate(NULL, NULL); break; case GEANY_KEYS_FILE_QUIT: - on_quit1_activate(NULL, NULL); + main_quit(); break; } return TRUE;
Modified: src/main.c 56 lines changed, 53 insertions(+), 3 deletions(-) =================================================================== @@ -788,13 +788,13 @@ static gint setup_config_dir(void) return mkdir_result; }
-/* Signal handling removed since on_quit1_activate() uses functions that are +/* Signal handling removed since main_quit() uses functions that are * illegal in signal handlers static void signal_cb(gint sig) { if (sig == SIGTERM) { - on_quit1_activate(NULL, NULL); + main_quit(); } } */ @@ -1247,10 +1247,19 @@ static void queue_free(GQueue *queue) }
-void main_quit(void) +static void do_main_quit(void) { geany_debug("Quitting...");
+ configuration_save(); + + if (app->project != NULL) + project_close(FALSE); /* save project session files */ + + document_close_all(); + + main_status.quitting = TRUE; + #ifdef HAVE_SOCKET socket_finalize(); #endif @@ -1343,6 +1352,47 @@ void main_quit(void) }
+static gboolean check_no_unsaved(void) +{ + guint i; + + for (i = 0; i < documents_array->len; i++) + { + if (documents[i]->is_valid && documents[i]->changed) + { + return FALSE; + } + } + return TRUE; /* no unsaved edits */ +} + + +/* Returns false when quitting is aborted due to user cancellation */ +gboolean main_quit(void) +{ + main_status.quitting = TRUE; + + if (! check_no_unsaved()) + { + if (document_account_for_unsaved()) + { + do_main_quit(); + return TRUE; + } + } + else + if (! prefs.confirm_exit || + dialogs_show_question_full(NULL, GTK_STOCK_QUIT, GTK_STOCK_CANCEL, NULL, + _("Do you really want to quit?"))) + { + do_main_quit(); + return TRUE; + } + + main_status.quitting = FALSE; + return FALSE; +} + /** * Reloads most of Geany's configuration files without restarting. Currently the following * files are reloaded: all template files, also new file templates and the 'New (with template)'
Modified: src/main.h 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -60,7 +60,7 @@ const gchar *main_get_version_string(void);
gchar *main_get_argv_filename(const gchar *filename);
-void main_quit(void); +gboolean main_quit(void);
gboolean main_handle_filename(const gchar *locale_filename);
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).