* Changes in the autotools stuff affecting a lot of platform dependent
[modest] / src / widgets / modest-window-mgr.c
index 9e4cbb2..fb88abf 100644 (file)
@@ -255,9 +255,9 @@ modest_window_mgr_finalize (GObject *obj)
                GList *iter = priv->window_list;
                /* unregister pending windows */
                while (iter) {
                GList *iter = priv->window_list;
                /* unregister pending windows */
                while (iter) {
-                       modest_window_mgr_unregister_window (MODEST_WINDOW_MGR (obj), 
-                                                            MODEST_WINDOW (iter->data));
+                       ModestWindow *window = (ModestWindow *) iter->data;
                        iter = g_list_next (iter);
                        iter = g_list_next (iter);
+                       modest_window_mgr_unregister_window (MODEST_WINDOW_MGR (obj), window);
                }
                g_list_free (priv->window_list);
                priv->window_list = NULL;
                }
                g_list_free (priv->window_list);
                priv->window_list = NULL;
@@ -330,7 +330,7 @@ remove_uid (GSList *list, const gchar *uid)
        GSList *cursor = list, *start = list;
        
        if (!uid)
        GSList *cursor = list, *start = list;
        
        if (!uid)
-               return FALSE;
+               return list;
        
        while (cursor) {
                GSList *next = g_slist_next (cursor);
        
        while (cursor) {
                GSList *next = g_slist_next (cursor);
@@ -546,7 +546,7 @@ get_show_toolbar_key (GType window_type,
        return key;
 }
 
        return key;
 }
 
-#ifdef MODEST_PLATFORM_MAEMO
+#ifndef MODEST_TOOLKIT_GTK
 static void
 on_window_is_topmost (GObject    *gobject,
                      GParamSpec *arg1,
 static void
 on_window_is_topmost (GObject    *gobject,
                      GParamSpec *arg1,
@@ -672,7 +672,7 @@ modest_window_mgr_register_window (ModestWindowMgr *self,
        /* Listen to window state changes. Unfortunately
           window-state-event does not properly work for the Maemo
           version, so we need to use is-topmost and the ifdef */
        /* Listen to window state changes. Unfortunately
           window-state-event does not properly work for the Maemo
           version, so we need to use is-topmost and the ifdef */
-#ifdef MODEST_PLATFORM_MAEMO
+#ifndef MODEST_TOOLKIT_GTK
        priv->window_state_uids = 
                modest_signal_mgr_connect (priv->window_state_uids, 
                                           G_OBJECT (window), 
        priv->window_state_uids = 
                modest_signal_mgr_connect (priv->window_state_uids, 
                                           G_OBJECT (window), 
@@ -753,8 +753,10 @@ on_window_destroy (ModestWindow *window,
                if (g_list_length (priv->window_list) > 1) {
 
                        /* Present the window if it's not visible now */
                if (g_list_length (priv->window_list) > 1) {
 
                        /* Present the window if it's not visible now */
-                       if (!gtk_window_has_toplevel_focus (GTK_WINDOW (window)))
+                       if (!gtk_window_has_toplevel_focus (GTK_WINDOW (window))) {
                                gtk_window_present (GTK_WINDOW (window));
                                gtk_window_present (GTK_WINDOW (window));
+                               priv->current_top = window;
+                       }
                        /* Create the confirmation dialog MSG-NOT308 */
                        dialog_response = modest_platform_run_confirmation_dialog (
                                        GTK_WINDOW (window), _("emev_nc_close_windows"));
                        /* Create the confirmation dialog MSG-NOT308 */
                        dialog_response = modest_platform_run_confirmation_dialog (
                                        GTK_WINDOW (window), _("emev_nc_close_windows"));
@@ -815,7 +817,7 @@ on_window_destroy (ModestWindow *window,
                }
                /* Unregister window */
                modest_window_mgr_unregister_window (self, window);
                }
                /* Unregister window */
                modest_window_mgr_unregister_window (self, window);
-               no_propagate = FALSE;
+               no_propagate = TRUE;
        }
 
        return no_propagate;
        }
 
        return no_propagate;
@@ -887,6 +889,7 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self,
        priv->window_list = g_list_remove_link (priv->window_list, win);
        tmp = g_hash_table_lookup (priv->destroy_handlers, window);
        handler_id = *tmp;
        priv->window_list = g_list_remove_link (priv->window_list, win);
        tmp = g_hash_table_lookup (priv->destroy_handlers, window);
        handler_id = *tmp;
+
        g_hash_table_remove (priv->destroy_handlers, window);
 
        /* cancel open and receive operations */
        g_hash_table_remove (priv->destroy_handlers, window);
 
        /* cancel open and receive operations */
@@ -901,7 +904,7 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self,
 
        /* Disconnect the "window-state-event" handler, we won't need it anymore */
        if (priv->window_state_uids) {
 
        /* Disconnect the "window-state-event" handler, we won't need it anymore */
        if (priv->window_state_uids) {
-#ifdef MODEST_PLATFORM_MAEMO
+#ifndef MODEST_TOOLKIT_GTK
                priv->window_state_uids = 
                        modest_signal_mgr_disconnect (priv->window_state_uids, 
                                                      G_OBJECT (window), 
                priv->window_state_uids = 
                        modest_signal_mgr_disconnect (priv->window_state_uids, 
                                                      G_OBJECT (window), 
@@ -921,7 +924,9 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self,
        modest_window_disconnect_signals (window);
        
        /* Destroy the window */
        modest_window_disconnect_signals (window);
        
        /* Destroy the window */
+       g_object_unref (win->data);
        gtk_widget_destroy (win->data);
        gtk_widget_destroy (win->data);
+       g_list_free (win);
        
        /* If there are no more windows registered emit the signal */
        if (modest_window_mgr_num_windows (self) == 0)
        
        /* If there are no more windows registered emit the signal */
        if (modest_window_mgr_num_windows (self) == 0)
@@ -1232,6 +1237,10 @@ idle_top_modal (gpointer data)
        if (topmost) {
                gdk_threads_enter ();
                gtk_window_present (topmost);
        if (topmost) {
                gdk_threads_enter ();
                gtk_window_present (topmost);
+               /* It seems that the window looses modality if some
+                  other is shown on top of it after set_transient_for
+                  and set_parent */
+               gtk_window_set_modal (topmost, TRUE);
                gdk_threads_leave ();
        }
 
                gdk_threads_leave ();
        }