* Fixes NB#86408, merged from trunk r4871
[modest] / src / maemo / modest-platform.c
index 4519e0f..3b72f02 100644 (file)
@@ -965,9 +965,16 @@ modest_platform_run_rename_folder_dialog (GtkWindow *parent_window,
 
 
 static void
-on_destroy_dialog (GtkDialog *dialog)
+on_destroy_dialog (GtkWidget *dialog)
 {
-       gtk_widget_destroy (GTK_WIDGET(dialog));
+       /* This could happen when the dialogs get programatically
+          hidden or destroyed (for example when closing the
+          application while a dialog is being shown) */
+       if (!GTK_IS_WIDGET (dialog))
+               return;
+
+       gtk_widget_destroy (dialog);
+
        if (gtk_events_pending ())
                gtk_main_iteration ();
 }
@@ -985,10 +992,7 @@ modest_platform_run_confirmation_dialog (GtkWindow *parent_window,
 
        response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-       on_destroy_dialog (GTK_DIALOG(dialog));
-       
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
+       on_destroy_dialog (dialog);
 
        return response;
 }
@@ -1011,10 +1015,7 @@ modest_platform_run_confirmation_dialog_with_buttons (GtkWindow *parent_window,
 
        response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-       on_destroy_dialog (GTK_DIALOG(dialog));
-       
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
+       on_destroy_dialog (dialog);
 
        return response;
 }
@@ -1033,10 +1034,7 @@ modest_platform_run_yes_no_dialog (GtkWindow *parent_window,
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog));
        response = gtk_dialog_run (GTK_DIALOG (dialog));
        
-       on_destroy_dialog (GTK_DIALOG(dialog));
-
-       while (gtk_events_pending ())
-               gtk_main_iteration ();
+       on_destroy_dialog (dialog);
 
        return response;
 }
@@ -1057,10 +1055,7 @@ modest_platform_run_information_dialog (GtkWindow *parent_window,
        if (block) {
                gtk_dialog_run (GTK_DIALOG (note));
        
-               on_destroy_dialog (GTK_DIALOG (note));
-
-               while (gtk_events_pending ())
-                       gtk_main_iteration ();
+               on_destroy_dialog (note);
        } else {
                g_signal_connect_swapped (note,
                                          "response", 
@@ -1265,7 +1260,7 @@ modest_platform_run_sort_dialog (GtkWindow *parent_window,
        }
        
        /* Free */
-       on_destroy_dialog (GTK_DIALOG(dialog));
+       on_destroy_dialog (dialog);
 }
 
 
@@ -1659,11 +1654,29 @@ modest_platform_information_banner (GtkWidget *parent,
                                    const gchar *icon_name,
                                    const gchar *text)
 {
-       GtkWidget *banner;
+       GtkWidget *banner, *banner_parent = NULL;
        ModestWindowMgr *mgr;
 
        mgr = modest_runtime_get_window_mgr ();
-       banner = hildon_banner_show_information (parent, icon_name, text);
+       if (parent && GTK_IS_WINDOW (parent)) {
+               /* If the window is the active one then show the
+                  banner on top of this window */
+               if (gtk_window_is_active (GTK_WINDOW (parent)))
+                       banner_parent = parent;
+               /* If the window is not the topmost but it's visible
+                  (it's minimized for example) then show the banner
+                  with no parent */ 
+               else if (GTK_WIDGET_VISIBLE (parent))
+                       banner_parent = NULL;
+               /* If the window is hidden (like the main window when
+                  running in the background) then do not show
+                  anything */
+               else 
+                       return;
+       }
+
+
+       banner = hildon_banner_show_information (banner_parent, icon_name, text);
 
        modest_window_mgr_register_banner (mgr);
        g_object_ref (mgr);
@@ -1873,7 +1886,7 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name,
                                     GTK_WINDOW (note));
        response = gtk_dialog_run(GTK_DIALOG(note));
 
-       on_destroy_dialog (GTK_DIALOG(note));
+       on_destroy_dialog (note);
        g_free (question);
        
        return response == GTK_RESPONSE_OK;
@@ -1908,7 +1921,7 @@ modest_platform_run_alert_dialog (const gchar* prompt,
                const int response = gtk_dialog_run (GTK_DIALOG (dialog));
                retval = (response == GTK_RESPONSE_YES) || (response == GTK_RESPONSE_OK);
                
-               on_destroy_dialog (GTK_DIALOG(dialog));         
+               on_destroy_dialog (dialog);             
        } else {
                /* Just show the error text and use the default response: */
                modest_platform_run_information_dialog (GTK_WINDOW (main_win),