diff src/audacious/signals.c @ 4315:c942eaef7bc6

Implement session management.
author Ivan N. Zlatev <contact@i-nz.net>
date Mon, 03 Mar 2008 18:42:36 +0000
parents b26a96a5da69
children 51b7809c2d87
line wrap: on
line diff
--- a/src/audacious/signals.c	Mon Mar 03 22:13:27 2008 +0300
+++ b/src/audacious/signals.c	Mon Mar 03 18:42:36 2008 +0000
@@ -36,6 +36,7 @@
 #include "ui_main.h"
 #include "signals.h"
 #include "build_stamp.h"
+#include "eggsmclient.h"
 
 gint linuxthread_signal_number = 0;
 
@@ -249,9 +250,36 @@
     return FALSE;
 }
 
+static void
+signal_session_quit_cb(EggSMClient *client, gpointer user_data)
+{
+    g_print("Session quit requested. Saving state and shutting down.\n");    
+    mainwin_quit_cb();
+}
+
+static void
+signal_session_save_cb(EggSMClient *client, const char *state_dir, gpointer user_data)
+{
+    g_print("Session save requested. Saving state.\n");    
+    bmp_config_save();
+}
+
 void 
 signal_handlers_init(void)
 {
+    EggSMClient *client;
+
+    client = egg_sm_client_get ();
+    if (client != NULL) 
+    {
+        egg_sm_client_set_mode (EGG_SM_CLIENT_MODE_NORMAL);
+        g_signal_connect (client, "quit",
+                          G_CALLBACK (signal_session_quit_cb), NULL);
+        g_signal_connect (client, "save-state",
+                          G_CALLBACK (signal_session_save_cb), NULL);
+    
+    }
+
     if (signal_check_for_broken_impl() != TRUE)
     {
         signal_initialize_blockers();