void
-modest_window_mgr_register_header (ModestWindowMgr *self, TnyHeader *header)
+modest_window_mgr_register_header (ModestWindowMgr *self, TnyHeader *header, const gchar *alt_uid)
{
ModestWindowMgrPrivate *priv;
gchar* uid;
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
uid = modest_tny_folder_get_header_unique_id (header);
-
+ if (uid == NULL)
+ uid = g_strdup (alt_uid);
+
if (!has_uid (priv->preregistered_uids, uid)) {
g_debug ("registering new uid %s", uid);
priv->preregistered_uids = append_uid (priv->preregistered_uids, uid);
} else
g_debug ("already had uid %s", uid);
-
+
g_free (uid);
}
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
uid = modest_tny_folder_get_header_unique_id (header);
-
+
if (!has_uid (priv->preregistered_uids, uid)) {
g_debug ("trying to unregister non-existing uid %s", uid);
priv->preregistered_uids = append_uid (priv->preregistered_uids, uid);
} else
g_debug ("unregistering uid %s", uid);
-
+
if (has_uid (priv->preregistered_uids, uid)) {
priv->preregistered_uids = remove_uid (priv->preregistered_uids, uid);
if (has_uid (priv->preregistered_uids, uid))
else
g_debug ("uid %s removed", uid);
}
-
+
g_free (uid);
}
return 1;
}
-
void
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);
if (win)
*win = NULL;
-
+
has_header = has_uid (priv->preregistered_uids, uid);
-
+
item = g_list_find_custom (priv->window_list, uid, (GCompareFunc) compare_msguids);
if (item) {
has_window = TRUE;
}
}
}
-
g_free (uid);
+
return has_header || has_window;
}
if (MODEST_IS_MSG_VIEW_WINDOW(window)) {
const gchar *uid = modest_msg_view_window_get_message_uid
(MODEST_MSG_VIEW_WINDOW (window));
-
+
if (!has_uid (priv->preregistered_uids, uid))
g_debug ("weird: no uid for window (%s)", uid);
g_debug ("registering window for %s", uid ? uid : "<none>");
-
+
priv->preregistered_uids =
remove_uid (priv->preregistered_uids,
modest_msg_view_window_get_message_uid
(MODEST_MSG_VIEW_WINDOW (window)));
-
} else if (MODEST_IS_MSG_EDIT_WINDOW(window)) {
const gchar *uid = modest_msg_edit_window_get_message_uid
(MODEST_MSG_EDIT_WINDOW (window));
GdkEvent *event,
ModestWindowMgr *self)
{
+ gint dialog_response = GTK_RESPONSE_NONE;
+
/* Specific stuff first */
if (MODEST_IS_MAIN_WINDOW (window)) {
ModestWindowMgrPrivate *priv;
/* If more than one window already opened */
if (g_list_length (priv->window_list) > 1) {
+ /* Create the confirmation dialog MSG-NOT308 */
+ dialog_response = modest_platform_run_confirmation_dialog (
+ GTK_WINDOW (window), _("emev_nc_close_windows"));
+
/* If the user wants to close all the windows */
- if (modest_main_window_close_all (MODEST_MAIN_WINDOW (window))) {
- GList *iter = priv->window_list;
- do {
- if (iter->data != window) {
- GList *tmp = iter->next;
- on_window_destroy (MODEST_WINDOW (iter->data),
- event,
- self);
- iter = tmp;
- } else {
- iter = g_list_next (iter);
- }
- } while (iter);
- }
+ if ((dialog_response == GTK_RESPONSE_OK)
+ || (dialog_response == GTK_RESPONSE_ACCEPT)
+ || (dialog_response == GTK_RESPONSE_YES))
+ {
+ GList *iter = priv->window_list;
+ do {
+ if (iter->data != window) {
+ GList *tmp = iter->next;
+ on_window_destroy (MODEST_WINDOW (iter->data),
+ event,
+ self);
+ iter = tmp;
+ } else {
+ iter = g_list_next (iter);
+ }
+ } while (iter);
+ }
+ else
+ {
+ return TRUE;
+ }
}
}
else {
when there were other windows remaining */
if (MODEST_IS_MSG_VIEW_WINDOW (window) && priv->viewer_handlers) {
tmp = (gulong *) g_hash_table_lookup (priv->viewer_handlers, window);
- g_signal_handler_disconnect (window, *tmp);
- g_hash_table_remove (priv->viewer_handlers, window);
+ /* If the viewer was created without a main window
+ (for example when opening a message through D-Bus
+ the viewer handlers was not registered */
+ if (tmp) {
+ g_signal_handler_disconnect (window, *tmp);
+ g_hash_table_remove (priv->viewer_handlers, window);
+ }
}
/* Save state */
}
ModestWindow*
-modest_window_mgr_get_main_window (ModestWindowMgr *self)
+modest_window_mgr_get_main_window (ModestWindowMgr *self, gboolean create)
{
ModestWindowMgrPrivate *priv;
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
/* create the main window, if it hasn't been created yet */
- if (!priv->main_window) {
+ if (!priv->main_window && create) {
/* modest_window_mgr_register_window will set priv->main_window */
modest_window_mgr_register_window (self, modest_main_window_new ());
g_debug ("%s: created main window: %p\n", __FUNCTION__, priv->main_window);
}
+gboolean
+modest_window_mgr_main_window_exists (ModestWindowMgr *self)
+{
+ ModestWindowMgrPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_WINDOW_MGR (self), FALSE);
+ priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
+
+ return priv->main_window != NULL;
+}
+
+
GtkWindow *
modest_window_mgr_get_modal (ModestWindowMgr *self)
{