* Fixed a reference leak when unregistering windows
* Removed window handling code from modest-main
* Fixed a couple memory issues found by valgrind when unregistering windows
pmo-trunk-r4426
GParamSpec *arg1,
gpointer user_data)
{
GParamSpec *arg1,
gpointer user_data)
{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (gobject));
- if (!GTK_WIDGET_VISIBLE (user_data))
- remove_banners (MODEST_MAIN_WINDOW (user_data));
+ if (!GTK_WIDGET_VISIBLE (gobject))
+ remove_banners (MODEST_MAIN_WINDOW (gobject));
}
static void
on_window_destroy (GtkObject *widget,
gpointer user_data)
{
}
static void
on_window_destroy (GtkObject *widget,
gpointer user_data)
{
- g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data));
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (widget));
- remove_banners (MODEST_MAIN_WINDOW (user_data));
+ remove_banners (MODEST_MAIN_WINDOW (widget));
static gboolean
on_idle_exit_modest (gpointer data)
{
static gboolean
on_idle_exit_modest (gpointer data)
{
- ModestWindow *main_win;
- ModestWindowMgr *mgr;
MainSignalHandlers *handlers;
/* Protect the Gtk calls */
MainSignalHandlers *handlers;
/* Protect the Gtk calls */
g_signal_handler_disconnect (modest_runtime_get_window_mgr (),
handlers->window_list_handler);
g_signal_handler_disconnect (modest_runtime_get_window_mgr (),
handlers->window_list_handler);
- /* If the main window is still there but hidden, then unregister it */
- mgr = modest_runtime_get_window_mgr();
- main_win = modest_window_mgr_get_main_window (mgr, FALSE);
- if (main_win)
- modest_window_mgr_unregister_window (mgr, main_win);
-
/* Wait for remaining tasks */
while (gtk_events_pending ())
gtk_main_iteration ();
/* Wait for remaining tasks */
while (gtk_events_pending ())
gtk_main_iteration ();
}
modest_signal_mgr_disconnect_all_and_destroy (priv->window_state_uids);
}
modest_signal_mgr_disconnect_all_and_destroy (priv->window_state_uids);
+ priv->window_state_uids = NULL;
if (priv->window_list) {
GList *iter = priv->window_list;
if (priv->window_list) {
GList *iter = priv->window_list;
}
modest_signal_mgr_disconnect_all_and_destroy (priv->modal_handler_uids);
}
modest_signal_mgr_disconnect_all_and_destroy (priv->modal_handler_uids);
+ priv->modal_handler_uids = NULL;
if (priv->modal_windows) {
g_mutex_lock (priv->queue_lock);
if (priv->modal_windows) {
g_mutex_lock (priv->queue_lock);
cancel_window_operations (window);
/* Disconnect the "window-state-event" handler, we won't need it anymore */
cancel_window_operations (window);
/* Disconnect the "window-state-event" handler, we won't need it anymore */
+ if (priv->window_state_uids) {
#ifdef MODEST_PLATFORM_MAEMO
#ifdef MODEST_PLATFORM_MAEMO
- priv->window_state_uids = modest_signal_mgr_disconnect (priv->window_state_uids,
- G_OBJECT (window),
- "notify::is-topmost");
+ priv->window_state_uids =
+ modest_signal_mgr_disconnect (priv->window_state_uids,
+ G_OBJECT (window),
+ "notify::is-topmost");
- priv->window_state_uids = modest_signal_mgr_disconnect (priv->window_state_uids,
- G_OBJECT (window),
- "window-state-event");
+ priv->window_state_uids =
+ modest_signal_mgr_disconnect (priv->window_state_uids,
+ G_OBJECT (window),
+ "window-state-event");
/* Disconnect the "delete-event" handler, we won't need it anymore */
g_signal_handler_disconnect (window, handler_id);
/* Disconnect the "delete-event" handler, we won't need it anymore */
g_signal_handler_disconnect (window, handler_id);
/* Disconnect all the window signals */
modest_window_disconnect_signals (window);
/* Disconnect all the window signals */
modest_window_disconnect_signals (window);
- /* Destroy the window */
+ /* Destroy the window and unref the extra reference */
+ g_object_unref (win->data);
gtk_widget_destroy (win->data);
/* If there are no more windows registered emit the signal */
if (modest_window_mgr_num_windows (self) == 0)
gtk_widget_destroy (win->data);
/* If there are no more windows registered emit the signal */
if (modest_window_mgr_num_windows (self) == 0)
-/* if (priv->window_list == NULL && priv->banner_counter == 0) */
g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
}
g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
}
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
priv->banner_counter--;
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
priv->banner_counter--;
-/* if (priv->window_list == NULL && priv->banner_counter == 0) */
if (modest_window_mgr_num_windows (self) == 0)
g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
}
if (modest_window_mgr_num_windows (self) == 0)
g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
}