+
+ if (ev_window_is_empty (window))
+ uri_list[i] = empty;
+ else
+ uri_list[i] = ev_window_get_uri (window);
+ }
+ g_key_file_set_string_list (state_file,
+ "Evince",
+ "documents",
+ (const char **)uri_list,
+ i);
+ g_free (uri_list);
+}
+
+static void
+smclient_quit_cb (EggSMClient *client,
+ EvApplication *application)
+{
+ ev_application_shutdown (application);
+}
+
+static void
+ev_application_init_session (EvApplication *application)
+{
+ egg_set_desktop_file (GNOMEDATADIR "/applications/evince.desktop");
+
+ application->smclient = egg_sm_client_get ();
+ g_signal_connect (application->smclient, "save_state",
+ G_CALLBACK (smclient_save_state_cb),
+ application);
+ g_signal_connect (application->smclient, "quit",
+ G_CALLBACK (smclient_quit_cb),
+ application);
+}
+
+/**
+ * ev_display_open_if_needed:
+ * @name: the name of the display to be open if it's needed.
+ *
+ * Search among all the open displays if any of them have the same name as the
+ * passed name. If the display isn't found it tries the open it.
+ *
+ * Returns: a #GdkDisplay of the display with the passed name.
+ */
+static GdkDisplay *
+ev_display_open_if_needed (const gchar *name)
+{
+ GSList *displays;
+ GSList *l;
+ GdkDisplay *display = NULL;
+
+ displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
+
+ for (l = displays; l != NULL; l = l->next) {
+ const gchar *display_name = gdk_display_get_name ((GdkDisplay *) l->data);
+
+ if (g_ascii_strcasecmp (display_name, name) == 0) {
+ display = l->data;
+ break;
+ }