Fixed message times for the email home applet
[modest] / src / gtk / modest-gtk-window-mgr.c
index 65830ef..1165405 100644 (file)
@@ -33,7 +33,6 @@
 #include "modest-msg-edit-window.h"
 #include "modest-mailboxes-window.h"
 #include "modest-header-window.h"
-#include "modest-main-window.h"
 #include "modest-window-mgr-priv.h"
 #include "modest-conf.h"
 #include "modest-defs.h"
@@ -45,7 +44,6 @@
 #include "modest-tny-folder.h"
 #include "modest-folder-window.h"
 #include "modest-accounts-window.h"
-#include "modest-maemo-utils.h"
 #include "modest-utils.h"
 #include "modest-tny-msg.h"
 #include "modest-tny-account.h"
@@ -86,7 +84,7 @@ static gboolean modest_gtk_window_mgr_find_registered_message_uid (ModestWindowM
 static GList *modest_gtk_window_mgr_get_window_list (ModestWindowMgr *self);
 static gboolean modest_gtk_window_mgr_close_all_windows (ModestWindowMgr *self);
 static gboolean modest_gtk_window_mgr_close_all_but_initial (ModestWindowMgr *self);
-static gboolean window_has_modals (ModestWindow *window);
+static gboolean shell_has_modals (ModestShell *window);
 static ModestWindow *modest_gtk_window_mgr_show_initial_window (ModestWindowMgr *self);
 static ModestWindow *modest_gtk_window_mgr_get_current_top (ModestWindowMgr *self);
 static gboolean modest_gtk_window_mgr_screen_is_on (ModestWindowMgr *self);
@@ -115,6 +113,8 @@ struct _ModestGtkWindowMgrPrivate {
 
        gulong        accounts_handler;
        GtkWidget    *shell;
+
+       gboolean      fullscreen;
 };
 #define MODEST_GTK_WINDOW_MGR_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                                                   MODEST_TYPE_GTK_WINDOW_MGR, \
@@ -191,6 +191,7 @@ modest_gtk_window_mgr_instance_init (ModestGtkWindowMgr *obj)
 
        priv->modal_windows = g_queue_new ();
        priv->queue_lock = g_mutex_new ();
+       priv->fullscreen = FALSE;
 
        /* Could not initialize it from gconf, singletons are not
           ready yet */
@@ -201,6 +202,7 @@ modest_gtk_window_mgr_instance_init (ModestGtkWindowMgr *obj)
 
        priv->modal_handler_uids = NULL;
        priv->shell = modest_shell_new ();
+       gtk_widget_show (priv->shell);
 }
 
 static void
@@ -264,7 +266,7 @@ modest_gtk_window_mgr_close_all_windows (ModestWindowMgr *self)
 {
        ModestGtkWindowMgrPrivate *priv = NULL;
        gboolean ret_value = FALSE;
-       GtkWidget *window;
+       ModestWindow *window;
        gboolean failed = FALSE;
 
        g_return_val_if_fail (MODEST_IS_GTK_WINDOW_MGR (self), FALSE);
@@ -417,7 +419,6 @@ modest_gtk_window_mgr_register_window (ModestWindowMgr *self,
        ModestWindow *current_top;
 
        g_return_val_if_fail (MODEST_IS_GTK_WINDOW_MGR (self), FALSE);
-       g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
 
        priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
 
@@ -486,7 +487,7 @@ modest_gtk_window_mgr_register_window (ModestWindowMgr *self,
        if (MODEST_IS_FOLDER_WINDOW (current_top) && MODEST_IS_FOLDER_WINDOW (window)) {
                gboolean retval;
 
-               retval = modest_shell_delete_window (MODEST_SHELL (priv->shell), shell);
+               retval = modest_shell_delete_window (MODEST_SHELL (priv->shell), MODEST_WINDOW (window));
 
                if (retval) {
                        gtk_window_present (GTK_WINDOW (priv->shell));
@@ -541,7 +542,7 @@ modest_gtk_window_mgr_register_window (ModestWindowMgr *self,
                /* 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))) {
+                   shell_has_modals (MODEST_SHELL (priv->shell))) {
                        /* Window on top but it has opened dialogs */
                        goto fail;
                }
@@ -601,7 +602,7 @@ cancel_window_operations (ModestWindow *window)
 }
 
 static gboolean
-window_has_modals (ModestWindow *window)
+shell_has_modals (ModestShell *shell)
 {
        GList *toplevels;
        GList *node;
@@ -611,7 +612,7 @@ window_has_modals (ModestWindow *window)
        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 (priv->shell) &&
+                   gtk_window_get_transient_for (GTK_WINDOW (node->data)) == GTK_WINDOW (shell) &&
                    GTK_WIDGET_VISIBLE (node->data)) {
                        retvalue = TRUE;
                        break;
@@ -626,10 +627,13 @@ on_window_destroy (ModestWindow *window,
                   GdkEvent *event,
                   ModestGtkWindowMgr *self)
 {
+       ModestGtkWindowMgrPrivate *priv;
        gboolean no_propagate = FALSE;
 
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
+
        /* Do not close the window if it has modals on top */
-       if (!MODEST_IS_MSG_EDIT_WINDOW (window) && window_has_modals (window))
+       if (!MODEST_IS_MSG_EDIT_WINDOW (window) && shell_has_modals (MODEST_SHELL (priv->shell)))
                return TRUE;
 
        if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
@@ -750,13 +754,26 @@ modest_gtk_window_mgr_set_fullscreen_mode (ModestWindowMgr *self,
 {
        g_return_if_fail (MODEST_IS_GTK_WINDOW_MGR (self));
 
+       ModestGtkWindowMgrPrivate *priv = NULL;
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
+       
+       priv->fullscreen = on;
+
+       if (on) {
+               gtk_window_fullscreen (GTK_WINDOW (priv->shell));
+       } else {
+               gtk_window_unfullscreen (GTK_WINDOW (priv->shell));
+       }
        return;
 }
 
 static gboolean
 modest_gtk_window_mgr_get_fullscreen_mode (ModestWindowMgr *self)
 {
-       return FALSE;
+       ModestGtkWindowMgrPrivate *priv = NULL;
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
+       
+       return priv->fullscreen;
 }
 
 static void 
@@ -794,7 +811,7 @@ modest_gtk_window_mgr_get_modal (ModestWindowMgr *self)
 {
        ModestGtkWindowMgrPrivate *priv;
        GList *toplevel_list;
-       GtkWidget *current_top, *toplevel;
+       GtkWidget *toplevel;
 
        g_return_val_if_fail (MODEST_IS_GTK_WINDOW_MGR (self), NULL);
        priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
@@ -825,11 +842,20 @@ modest_gtk_window_mgr_set_modal (ModestWindowMgr *self,
                                     GtkWindow *window,
                                     GtkWindow *parent)
 {
+       ModestGtkWindowMgrPrivate *priv;
+
        g_return_if_fail (MODEST_IS_GTK_WINDOW_MGR (self));
        g_return_if_fail (GTK_IS_WINDOW (window));
 
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
+
        gtk_window_set_modal (window, TRUE);
-       gtk_window_set_transient_for (window, parent);
+
+       if (GTK_IS_WINDOW (parent)) {
+               gtk_window_set_transient_for (window, parent);
+       } else {
+               gtk_window_set_transient_for (window, GTK_WINDOW (priv->shell));
+       }
        gtk_window_set_destroy_with_parent (window, TRUE);
 }
 
@@ -838,15 +864,13 @@ 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);
+       ModestGtkWindowMgrPrivate *priv;
 
-       num_windows = hildon_window_stack_size (stack);
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE(data);
+       num_windows = modest_shell_count_windows (MODEST_SHELL (priv->shell));
 
        for (i = 0; i < (num_windows - 1); i++) {
-               GtkWidget *current_top;
+               ModestWindow *current_top;
 
                /* Close window */
                current_top = modest_shell_peek_window (MODEST_SHELL (priv->shell));
@@ -870,6 +894,9 @@ on_account_removed (TnyAccountStore *acc_store,
                    gpointer user_data)
 {
        ModestWindow *current_top;
+       ModestGtkWindowMgrPrivate *priv;
+
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (user_data);
 
        /* Ignore transport account removals */
        if (TNY_IS_TRANSPORT_ACCOUNT (account))
@@ -893,7 +920,7 @@ on_account_removed (TnyAccountStore *acc_store,
                       modal dialog would otherwise, prevent the
                       windows from being closed */
                    if (!strcmp (acc_name, modest_window_get_active_account (current_top)))
-                           g_idle_add (on_idle_close_all_but_first, NULL);
+                           g_idle_add (on_idle_close_all_but_first, (gpointer) user_data);
        }
 }
 
@@ -927,7 +954,6 @@ modest_gtk_window_mgr_show_initial_window (ModestWindowMgr *self)
 static ModestWindow *
 modest_gtk_window_mgr_get_current_top (ModestWindowMgr *self)
 {
-       ModestWindow *initial_window = NULL;
        ModestGtkWindowMgrPrivate *priv;
 
        priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE (self);
@@ -984,6 +1010,9 @@ static gboolean
 modest_gtk_window_mgr_close_all_but_initial (ModestWindowMgr *self)
 {
        ModestWindow *top;
+       ModestGtkWindowMgrPrivate *priv;
+
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE(self);
 
        /* Exit if there are no windows */
        if (!modest_window_mgr_get_num_windows (self)) {
@@ -1000,7 +1029,7 @@ modest_gtk_window_mgr_close_all_but_initial (ModestWindowMgr *self)
        /* Close all but first */
        top = modest_window_mgr_get_current_top (self);
        if (!MODEST_IS_ACCOUNTS_WINDOW (top))
-               close_all_but_first (NULL);
+               close_all_but_first ((gpointer) priv->shell);
 
        /* If some cannot be closed return */
        top = modest_window_mgr_get_current_top (self);
@@ -1011,3 +1040,13 @@ modest_gtk_window_mgr_close_all_but_initial (ModestWindowMgr *self)
 
        return TRUE;
 }
+
+GtkWidget *
+modest_gtk_window_mgr_get_shell (ModestGtkWindowMgr *self)
+{
+       ModestGtkWindowMgrPrivate *priv;
+
+       priv = MODEST_GTK_WINDOW_MGR_GET_PRIVATE(self);
+
+       return priv->shell;
+}