diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp index e7a68e114bcce62ac04d88f2b56204114d9856a9..2891ff76aca2b03a9b2989977c127c335621855c 100644 --- a/daemon/src/main.cpp +++ b/daemon/src/main.cpp @@ -121,10 +121,12 @@ namespace { } } -void signal_handler(int code) -{ - std::cerr << "Caught signal " << strsignal(code) << ", terminating..." << std::endl; - Manager::instance().finish(); +namespace { + void signal_handler(int code) + { + std::cerr << "Caught signal " << strsignal(code) << ", terminating..." << std::endl; + Manager::instance().finish(); + } } int main(int argc, char *argv []) diff --git a/gnome/src/actions.c b/gnome/src/actions.c index d3bee67268bdb927cfc0558d55b5256fd69d1615..eaf77ff91cd193ca9be68b14578bc9f7c52f76b4 100644 --- a/gnome/src/actions.c +++ b/gnome/src/actions.c @@ -143,9 +143,9 @@ status_bar_display_account() void -sflphone_quit() +sflphone_quit(gboolean force_quit) { - if (calllist_get_size(current_calls_tab) == 0 || main_window_ask_quit()) { + if (force_quit || calllist_get_size(current_calls_tab) == 0 || main_window_ask_quit()) { dbus_unregister(getpid()); dbus_clean(); account_list_free(); diff --git a/gnome/src/actions.h b/gnome/src/actions.h index 6349c4cb8be4d410f2b833d0a173496906fb1b49..4bb3cbdf1382a3a336a1cb2447026d8a5cf2891f 100644 --- a/gnome/src/actions.h +++ b/gnome/src/actions.h @@ -57,7 +57,7 @@ gboolean sflphone_init(GError **error); /** * Steps when closing the application. Will ask for confirmation if a call is in progress. */ -void sflphone_quit(); +void sflphone_quit(gboolean force_quit); /** * Hang up / refuse the current call diff --git a/gnome/src/main.c b/gnome/src/main.c index 7c5da73a9639c3530c9c79977b22fb5d0c952dd2..6c579516b2a4ef8467d55dcaf8cc7805f8b25557 100644 --- a/gnome/src/main.c +++ b/gnome/src/main.c @@ -43,9 +43,20 @@ #include "shortcuts.h" #include "history.h" +static void +signal_handler(int code) +{ + printf("Caught signal %s, terminating...\n", strsignal(code)); + sflphone_quit(TRUE); +} + int main(int argc, char *argv[]) { + signal(SIGINT, signal_handler); + signal(SIGHUP, signal_handler); + signal(SIGTERM, signal_handler); + GError *error = NULL; // Handle logging int i; diff --git a/gnome/src/mainwindow.c b/gnome/src/mainwindow.c index 398de6e996177fec1a02c1e9476de11f0ff84b72..9d77a6a72d48295243cf8c302d85946eda7f84ee 100644 --- a/gnome/src/mainwindow.c +++ b/gnome/src/mainwindow.c @@ -116,7 +116,7 @@ on_delete(GtkWidget * widget UNUSED, gpointer data UNUSED) gtk_widget_hide(get_main_window()); set_minimized(TRUE); } else - sflphone_quit(); + sflphone_quit(FALSE); return TRUE; } diff --git a/gnome/src/statusicon.c b/gnome/src/statusicon.c index b94864c3f0e73f97bac5d72f7e11ad25b683745e..947e39bb6e3740395b699df4b9e5d7c9b56b3cab 100644 --- a/gnome/src/statusicon.c +++ b/gnome/src/statusicon.c @@ -76,7 +76,7 @@ hide_status_hangup_icon() void status_quit(void * foo UNUSED) { - sflphone_quit(); + sflphone_quit(FALSE); } void diff --git a/gnome/src/uimanager.c b/gnome/src/uimanager.c index 6e2b6431f0ebbed4646ccc5b7e796fff03011bd8..79aca847e906ead253f1be1f1f3195bf1a6d4f0d 100644 --- a/gnome/src/uimanager.c +++ b/gnome/src/uimanager.c @@ -623,7 +623,7 @@ call_new_call(void * foo UNUSED) static void call_quit(void * foo UNUSED) { - sflphone_quit(); + sflphone_quit(FALSE); } static void @@ -633,7 +633,7 @@ call_minimize(void * foo UNUSED) gtk_widget_hide(get_main_window()); set_minimized(TRUE); } else - sflphone_quit(); + sflphone_quit(FALSE); } static void