typedef struct _ModestWindowMgrPrivate ModestWindowMgrPrivate;
struct _ModestWindowMgrPrivate {
GList *window_list;
+ guint banner_counter;
ModestWindow *main_window;
priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj);
priv->window_list = NULL;
+ priv->banner_counter = 0;
priv->main_window = NULL;
priv->fullscreen_mode = FALSE;
modest_window_mgr_close_all_windows (ModestWindowMgr *self)
{
ModestWindowMgrPrivate *priv = NULL;
- GList *wins = NULL;
gboolean ret_value = FALSE;
g_return_if_fail (MODEST_IS_WINDOW_MGR (self));
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
- /* delete-event handler already removes window_list item, */
- /* so no next its required on this loop */
- wins = priv->window_list;
- while (wins) {
- g_signal_emit_by_name (G_OBJECT (wins->data), "delete-event", NULL, &ret_value);
+ /* If there is a main window then try to close it, and it will
+ close the others if needed */
+ if (priv->main_window) {
+ g_signal_emit_by_name (priv->main_window, "delete-event", NULL, &ret_value);
+ } else {
+ GList *wins = NULL, *next = NULL;
+ /* delete-event handler actually removes window_list item, */
wins = priv->window_list;
+ while (wins) {
+ next = g_list_next (wins);
+ g_signal_emit_by_name (G_OBJECT (wins->data), "delete-event", NULL, &ret_value);
+ wins = next;
+ }
}
}
/* If the user wants to close all the windows */
if ((dialog_response == GTK_RESPONSE_OK)
- || (dialog_response == GTK_RESPONSE_ACCEPT)
- || (dialog_response == GTK_RESPONSE_YES))
- {
+ || (dialog_response == GTK_RESPONSE_ACCEPT)
+ || (dialog_response == GTK_RESPONSE_YES)) {
GList *iter = priv->window_list;
do {
if (iter->data != window) {
iter = g_list_next (iter);
}
} while (iter);
- }
- else
- {
- return TRUE;
- }
+ } else {
+ return TRUE;
+ }
}
}
else {
modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
_("mcen_nc_no_email_message_modified_save_changes"));
/* Save to drafts */
- if (response != GTK_RESPONSE_CANCEL)
- modest_ui_actions_on_save_to_drafts (NULL, MODEST_MSG_EDIT_WINDOW (window));
+ if (response != GTK_RESPONSE_CANCEL)
+ if (!modest_ui_actions_on_save_to_drafts (NULL, MODEST_MSG_EDIT_WINDOW (window)))
+ return TRUE;
}
}
}
gtk_widget_destroy (win->data);
/* If there are no more windows registered emit the signal */
- if (priv->window_list == NULL)
+ if (priv->window_list == NULL && priv->banner_counter == 0)
g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
}
if (priv->window_list)
num_windows = g_list_length (priv->window_list);
- return num_windows;
+ return num_windows + priv->banner_counter;
}
GtkWidget *
return result;
}
+void
+modest_window_mgr_register_banner (ModestWindowMgr *self)
+{
+ ModestWindowMgrPrivate *priv;
+
+ g_return_if_fail (MODEST_IS_WINDOW_MGR (self));
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
+
+ priv->banner_counter++;
+
+}
+
+void
+modest_window_mgr_unregister_banner (ModestWindowMgr *self)
+{
+ ModestWindowMgrPrivate *priv;
+
+ g_return_if_fail (MODEST_IS_WINDOW_MGR (self));
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
+
+ priv->banner_counter--;
+ if (priv->window_list == NULL && priv->banner_counter == 0) {
+ g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
+ }
+
+}