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;
+ }
}
}
modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
_("mcen_nc_no_email_message_modified_save_changes"));
/* Save to drafts */
- if (response != GTK_RESPONSE_CANCEL)
+ if (response != GTK_RESPONSE_CANCEL)
modest_ui_actions_on_save_to_drafts (NULL, MODEST_MSG_EDIT_WINDOW (window));
}
}
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);
}
gint
modest_window_mgr_num_windows (ModestWindowMgr *self)
{
- ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
+ ModestWindowMgrPrivate *priv;
gint num_windows = 0;
+ g_return_val_if_fail (self && MODEST_IS_WINDOW_MGR(self), -1);
+
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
+
if (priv->window_list)
num_windows = g_list_length (priv->window_list);
- return num_windows;
+ return num_windows + priv->banner_counter;
}
GtkWidget *
modest_window_mgr_get_msg_edit_window (ModestWindowMgr *self)
{
GtkWidget *result;
- ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
+ ModestWindowMgrPrivate *priv;
+
+ g_return_val_if_fail (self && MODEST_IS_WINDOW_MGR(self), NULL);
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
+
if (priv->cached_editor) {
result = priv->cached_editor;
priv->cached_editor = NULL;
modest_window_mgr_get_msg_view_window (ModestWindowMgr *self)
{
GtkWidget *result;
- ModestWindowMgrPrivate *priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
+ ModestWindowMgrPrivate *priv;
+
+ g_return_val_if_fail (self && MODEST_IS_WINDOW_MGR(self), NULL);
+
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE(self);
if (priv->cached_view) {
result = priv->cached_view;
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++;
+ g_message ("REGISTER BANNER -> %d", 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--;
+ g_message ("UNREGISTER BANNER -> %d", priv->banner_counter);
+ if (priv->window_list == NULL && priv->banner_counter == 0) {
+ g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0);
+ g_message ("WINDOW LIST EMPTY");
+ }
+
+}