+static void
+removed_from_session (GnomeClient *client, EvApplication *application)
+{
+ ev_application_shutdown (application);
+}
+
+static gint
+save_session (GnomeClient *client, gint phase, GnomeSaveStyle save_style, gint shutdown,
+ GnomeInteractStyle interact_style, gint fast, EvApplication *application)
+{
+ GList *windows, *l;
+ char **restart_argv;
+ int argc = 0, k;
+
+ windows = ev_application_get_windows (application);
+ restart_argv = g_new (char *, g_list_length (windows) + 1);
+ restart_argv[argc++] = g_strdup ("evince");
+
+ for (l = windows; l != NULL; l = l->next) {
+ EvWindow *window = EV_WINDOW (l->data);
+ restart_argv[argc++] = g_strdup (ev_window_get_uri (window));
+ }
+
+ gnome_client_set_restart_command (client, argc, restart_argv);
+
+ for (k = 0; k < argc; k++) {
+ g_free (restart_argv[k]);
+ }
+
+ g_list_free (windows);
+ g_free (restart_argv);
+
+ return TRUE;
+}
+
+static void
+init_session (EvApplication *application)
+{
+ GnomeClient *client;
+
+ client = gnome_master_client ();
+
+ g_signal_connect (client, "save_yourself",
+ G_CALLBACK (save_session), application);
+ g_signal_connect (client, "die",
+ G_CALLBACK (removed_from_session), application);
+}
+