HildonWindowStack *stack;
gboolean nested_msg = FALSE;
ModestWindow *current_top;
+ GtkWidget *modal;
g_return_val_if_fail (MODEST_IS_HILDON2_WINDOW_MGR (self), FALSE);
g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
priv = MODEST_HILDON2_WINDOW_MGR_GET_PRIVATE (self);
+ /* Check that there is no active modal dialog */
+ modal = (GtkWidget *) modest_window_mgr_get_modal (self);
+ while (modal && GTK_IS_DIALOG (modal)) {
+ GtkWidget *parent;
+
+ /* Get the parent */
+ parent = (GtkWidget *) gtk_window_get_transient_for (GTK_WINDOW (modal));
+
+ /* Try to close it */
+ gtk_dialog_response (GTK_DIALOG (modal), GTK_RESPONSE_DELETE_EVENT);
+
+ /* Maybe the dialog was not closed, because a close
+ confirmation dialog for example. Then ignore the
+ register process */
+ if (GTK_IS_WINDOW (modal)) {
+ gtk_window_present (GTK_WINDOW (modal));
+ return FALSE;
+ }
+
+ /* Get next modal */
+ modal = parent;
+ }
+
stack = hildon_window_stack_get_default ();
current_top = (ModestWindow *) hildon_window_stack_peek (stack);
return FALSE;
}
+ /* Do not allow standalone editors or standalone viewers */
+ if (!current_top &&
+ (MODEST_IS_MSG_VIEW_WINDOW (window) ||
+ MODEST_IS_MSG_EDIT_WINDOW (window)))
+ modest_window_mgr_show_initial_window (self);
+
if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
gchar *uid;
TnyHeader *header;
}
static void
+close_all_but_first (HildonWindowStack *stack)
+{
+ gint num_windows, i;
+ gboolean retval;
+
+ 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 void
on_account_removed (TnyAccountStore *acc_store,
TnyAccount *account,
gpointer user_data)
header_view = modest_header_window_get_header_view (MODEST_HEADER_WINDOW (current_top));
folder = modest_header_view_get_folder (header_view);
if (folder) {
- gboolean retval;
-
/* Close if it's my account */
if (!TNY_IS_MERGE_FOLDER (folder)) {
TnyAccount *my_account;
my_account = tny_folder_get_account (folder);
if (my_account) {
if (my_account == account) {
- g_signal_emit_by_name (G_OBJECT (current_top),
- "delete-event",
- NULL, &retval);
+ close_all_but_first (stack);
deleted = TRUE;
}
g_object_unref (my_account);
/* Close if viewing outbox and no account left */
if (tny_folder_get_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX) {
if (!has_accounts) {
- g_signal_emit_by_name (G_OBJECT (current_top),
- "delete-event",
- NULL, &retval);
+ close_all_but_first (stack);
deleted = TRUE;
}
}
g_object_unref (folder);
- if (deleted) {
+ if (deleted)
current_top = (ModestWindow *) hildon_window_stack_peek (stack);
- }
}
}
}