*/
#include <string.h>
-#include <hildon/hildon-program.h>
+#include <hildon/hildon.h>
#include "modest-hildon2-window-mgr.h"
#include "modest-msg-edit-window.h"
#include "modest-main-window.h"
{
ModestHildon2WindowMgrPrivate *priv = NULL;
gboolean ret_value = FALSE;
- HildonStackableWindow *window;
- HildonProgram *program;
+ GtkWidget *window;
+ HildonWindowStack *stack;
gboolean failed = FALSE;
-
+
g_return_val_if_fail (MODEST_IS_HILDON2_WINDOW_MGR (self), FALSE);
priv = MODEST_HILDON2_WINDOW_MGR_GET_PRIVATE (self);
-
- program = hildon_program_get_instance ();
- while ((window = hildon_program_peek_window_stack (program)) != NULL) {
+ stack = hildon_window_stack_get_default ();
+
+ while ((window = hildon_window_stack_peek (stack)) != NULL) {
g_signal_emit_by_name (G_OBJECT (window), "delete-event", NULL, &ret_value);
if (ret_value == TRUE) {
failed = TRUE;
gint *handler_id;
HildonProgram *program;
GtkWidget *current_top;
+ HildonWindowStack *stack;
+ gboolean nested_msg;
g_return_val_if_fail (MODEST_IS_HILDON2_WINDOW_MGR (self), FALSE);
g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
return TRUE;
}
+ stack = hildon_window_stack_get_default ();
+
if (!MODEST_WINDOW_MGR_CLASS (parent_class)->register_window (self, window, parent))
goto fail;
g_object_ref (window);
priv->window_list = g_list_prepend (priv->window_list, window);
- current_top = GTK_WIDGET (hildon_program_peek_window_stack (program));
-
- /* policy is: if no parent, then we close all up message views, but no account/folder/header window */
+ current_top = hildon_window_stack_peek (stack);
- if (!parent || ((GtkWidget *) parent != current_top)) {
- gboolean close_canceled = FALSE;
+ nested_msg = MODEST_IS_MSG_VIEW_WINDOW (window) &&
+ MODEST_IS_MSG_VIEW_WINDOW (parent);
+ /* Close views if they're being shown */
+ if (!nested_msg &&
+ (MODEST_IS_MSG_EDIT_WINDOW (current_top) ||
+ MODEST_IS_MSG_VIEW_WINDOW (current_top))) {
+ gboolean retval;
+ /* If the current view has modal dialogs then
+ we fail to register the new view */
if ((current_top != NULL) &&
window_has_modals (MODEST_WINDOW (current_top))) {
/* Window on top but it has opened dialogs */
goto fail;
}
- while (current_top && !close_canceled) {
- current_top = GTK_WIDGET (hildon_program_peek_window_stack (program));
- if (MODEST_IS_MSG_VIEW_WINDOW (current_top) || MODEST_IS_MSG_EDIT_WINDOW (current_top)) {
- g_signal_emit_by_name (G_OBJECT (current_top), "delete-event", NULL, &close_canceled);
- } else {
- break;
- }
- }
- if (close_canceled)
+ /* Close the current view */
+ g_signal_emit_by_name (G_OBJECT (current_top), "delete-event", NULL, &retval);
+ if (retval == TRUE) {
+ /* Cancelled closing top window, then we fail to register */
goto fail;
-
+ }
}
/* Listen to object destruction */
/* Add to list. Keep a reference to the window */
priv->window_list = g_list_remove (priv->window_list, window);
g_object_unref (window);
- current_top = GTK_WIDGET (hildon_program_peek_window_stack (program));
+ current_top = hildon_window_stack_peek (stack);
if (current_top)
gtk_window_present (GTK_WINDOW (current_top));
return FALSE;
toplevels = gtk_window_list_toplevels ();
for (node = toplevels; node != NULL; node = g_list_next (node)) {
if (GTK_IS_WINDOW (node->data) &&
- gtk_window_get_transient_for (GTK_WINDOW (node->data)) == GTK_WINDOW (window)) {
+ gtk_window_get_transient_for (GTK_WINDOW (node->data)) == GTK_WINDOW (window) &&
+ GTK_WIDGET_VISIBLE (node->data)) {
retvalue = TRUE;
break;
}