diff options
author | Søren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com> | 2009-04-12 20:07:43 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com> | 2009-04-12 20:07:43 -0400 |
commit | 6ac0852cd27494aff9b04042542b0ca51b75c30a (patch) | |
tree | 4faf75f2f811affbe870ed33dc9260e3b974378a | |
parent | 53e065e96a449d24a73433c810ff295cfc6cef06 (diff) |
Handle SIGINT
-rw-r--r-- | siv.c | 30 |
1 files changed, 27 insertions, 3 deletions
@@ -5,6 +5,7 @@ #include <string.h> #include <math.h> #include <libnul.h> +#include <signal.h> #include "siv.h" #define _(a) a @@ -90,12 +91,16 @@ app_register_window (App *app, { ++app->n_windows; + g_print ("register: %d windows\n", app->n_windows); + g_ptr_array_add (app->windows, window); } void app_unregister_window (App *app, SivWindow *window) { + g_print ("unregister n windows: %d\n", app->n_windows); + if (--app->n_windows == 0) gtk_main_quit (); @@ -452,7 +457,7 @@ on_open (App *app, const char *filename) * asking to load many files at once */ - app_show_could_not_open (NULL, 1, &filename); + app_show_could_not_open (NULL, 1, (char **)&filename); } app_end_load (app); @@ -521,6 +526,21 @@ make_object (gpointer data) NULL); } +static void +on_sigint (int signo, gpointer data) +{ + App *app = data; + + while (app->windows->len) + { + SivWindow *window = app->windows->pdata[0]; + + window_free (window); + } + + gtk_main_quit (); +} + int main (int argc, char **argv) @@ -545,6 +565,8 @@ main (int argc, if (nul_dbus_service_start (service) /* FIXME: or if it failed due to lack of dbus daemon */) { + App *app; + gtk_init (&argc, &argv); if (!g_file_test (GLADE_FILE, G_FILE_TEST_EXISTS)) @@ -557,9 +579,11 @@ main (int argc, return FALSE; } + + app = app_new (argc, argv); - nul_dbus_service_add_object ( - service, make_object (app_new (argc, argv))); + nul_dbus_service_add_object (service, make_object (app)); + nul_signal_set_handler (SIGINT, on_sigint, app, NULL); gtk_main (); } |