+
+ if (!gtk_window_has_toplevel_focus (window)) {
+ GList *toplevels, *node;
+
+ toplevels = gtk_window_list_toplevels ();
+ for (node = toplevels; node != NULL; node = g_list_next (node)) {
+ if (gtk_window_has_toplevel_focus (GTK_WINDOW (node->data))) {
+ if (GTK_IS_DIALOG (node->data)) {
+ gtk_window_set_transient_for (window, GTK_WINDOW (node->data));
+ }
+ break;
+ }
+ }
+ }
+}
+
+static void
+close_all_but_first (gpointer data)
+{
+ gint num_windows, i;
+ gboolean retval;
+ HildonWindowStack *stack;
+
+ stack = hildon_window_stack_get_default ();
+ g_return_if_fail (stack);
+
+ num_windows = hildon_window_stack_size (stack);
+
+ for (i = 0; i < (num_windows - 1); i++) {
+ GtkWidget *current_top;
+
+ /* Close window */
+ current_top = hildon_window_stack_peek (stack);
+ g_signal_emit_by_name (G_OBJECT (current_top), "delete-event", NULL, &retval);
+ }
+}
+
+static gboolean
+on_idle_close_all_but_first (gpointer data)
+{
+ gdk_threads_enter ();
+ close_all_but_first (data);
+ gdk_threads_leave ();
+
+ return FALSE;