summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com>2009-04-12 20:07:43 -0400
committerSøren Sandmann Pedersen <ssp@dhcp-100-2-40.bos.redhat.com>2009-04-12 20:07:43 -0400
commit6ac0852cd27494aff9b04042542b0ca51b75c30a (patch)
tree4faf75f2f811affbe870ed33dc9260e3b974378a
parent53e065e96a449d24a73433c810ff295cfc6cef06 (diff)
Handle SIGINT
-rw-r--r--siv.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/siv.c b/siv.c
index accdc13..f29eaba 100644
--- a/siv.c
+++ b/siv.c
@@ -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 ();
}