From a73d1b55bb2fbb066215640ec83a9fd8f4e49f9b Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Wed, 30 May 2012 16:22:04 -0400 Subject: [PATCH] * #11818: gnome: stop daemon on SIGTERM, SIGINT or SIGHUP --- daemon/src/main.cpp | 10 ++++++---- gnome/src/actions.c | 4 ++-- gnome/src/actions.h | 2 +- gnome/src/main.c | 11 +++++++++++ gnome/src/mainwindow.c | 2 +- gnome/src/statusicon.c | 2 +- gnome/src/uimanager.c | 4 ++-- 7 files changed, 24 insertions(+), 11 deletions(-) diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp index e7a68e114b..2891ff76ac 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 d3bee67268..eaf77ff91c 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 6349c4cb8b..4bb3cbdf13 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 7c5da73a96..6c579516b2 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 398de6e996..9d77a6a72d 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 b94864c3f0..947e39bb6e 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 6e2b6431f0..79aca847e9 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 -- GitLab