X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-window-mgr.c;h=fb88abf2cb08f3584af8f5e9dbfe7660a67e792b;hp=e32ae5769bdeb4d0b0ee4746e17947e1aa169b38;hb=f6d386ff93e929092ba105385a29d760aeba9ff7;hpb=7e60664f27f84e5caf4b80c591e03dfefc46d3f3 diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index e32ae57..fb88abf 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -255,9 +255,9 @@ modest_window_mgr_finalize (GObject *obj) 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); + modest_window_mgr_unregister_window (MODEST_WINDOW_MGR (obj), window); } 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) - return FALSE; + return list; while (cursor) { GSList *next = g_slist_next (cursor); @@ -546,7 +546,7 @@ get_show_toolbar_key (GType window_type, return key; } -#ifdef MODEST_PLATFORM_MAEMO +#ifndef MODEST_TOOLKIT_GTK 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 */ -#ifdef MODEST_PLATFORM_MAEMO +#ifndef MODEST_TOOLKIT_GTK priv->window_state_uids = modest_signal_mgr_connect (priv->window_state_uids, G_OBJECT (window), @@ -817,7 +817,7 @@ on_window_destroy (ModestWindow *window, } /* Unregister window */ modest_window_mgr_unregister_window (self, window); - no_propagate = FALSE; + no_propagate = TRUE; } return no_propagate; @@ -889,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; + g_hash_table_remove (priv->destroy_handlers, window); /* cancel open and receive operations */ @@ -903,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) { -#ifdef MODEST_PLATFORM_MAEMO +#ifndef MODEST_TOOLKIT_GTK priv->window_state_uids = modest_signal_mgr_disconnect (priv->window_state_uids, G_OBJECT (window), @@ -923,7 +924,9 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self, modest_window_disconnect_signals (window); /* Destroy the window */ + g_object_unref (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) @@ -1234,6 +1237,10 @@ idle_top_modal (gpointer data) 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 (); }