const gchar*
modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
{
- ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ ModestMsgViewWindowPrivate *priv;
+
+ g_return_val_if_fail (self, NULL);
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
return (const gchar*) priv->msg_uid;
}
TnyHeader *header = NULL;
ModestWindowMgr *mgr;
ModestWindow *msg_win = NULL;
-
+ gboolean found;
+
header = tny_msg_get_header (TNY_MSG (mime_part));
- mgr = modest_runtime_get_window_mgr ();
- msg_win = modest_window_mgr_find_window_by_header (mgr, header);
-
- if (!msg_win) {
+ mgr = modest_runtime_get_window_mgr ();
+ found = modest_window_mgr_find_registered_header (mgr, header, &msg_win);
+
+ if (found) {
+ if (msg_win) /* there is already a window for this uid; top it */
+ gtk_window_present (GTK_WINDOW(msg_win));
+ else
+ /* if it's found, but there is no msg_win, it's probably in the process of being created;
+ * thus, we don't do anything */
+ g_warning ("window for is already being created");
+ } else {
+ /* it's not found, so create a new window for it */
+ modest_window_mgr_register_header (mgr, header); /* register the uid before building the window */
gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
msg_win = modest_msg_view_window_new (TNY_MSG (mime_part), account, NULL);
modest_window_mgr_register_window (mgr, msg_win);
gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (window));
+ gtk_widget_show_all (GTK_WIDGET (msg_win));
}
-
- gtk_widget_show_all (GTK_WIDGET (msg_win));
}
g_object_unref (mime_part);
}
header_list = get_selected_headers (win);
if (!header_list) return;
- /* Check if any of the headers is already opened */
+ /* Check if any of the headers is already opened, or in the process of being opened */
iter = tny_list_create_iterator (header_list);
found = FALSE;
mgr = modest_runtime_get_window_mgr ();
while (!tny_iterator_is_done (iter) && !found) {
header = TNY_HEADER (tny_iterator_get_current (iter));
- if (modest_window_mgr_find_window_by_header (mgr, header))
- found = TRUE;
+ found = modest_window_mgr_find_registered_header (mgr, header, NULL);
g_object_unref (header);
tny_iterator_next (iter);
}
win = modest_msg_edit_window_new (msg, account);
} else {
gchar *uid = modest_tny_folder_get_header_unique_id (header);
-
+
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
GtkWidget *header_view;
GtkTreeSelection *sel;
GList *sel_list = NULL;
GtkTreeModel *model;
-
+
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(parent_win),
MODEST_WIDGET_TYPE_HEADER_VIEW);
not_opened_headers = tny_simple_list_new ();
not_opened_cached_headers = tny_simple_list_new ();
while (!tny_iterator_is_done (iter)) {
+
ModestWindow *window;
TnyHeader *header;
+ gboolean found;
header = TNY_HEADER (tny_iterator_get_current (iter));
flags = tny_header_get_flags (header);
- window = modest_window_mgr_find_window_by_header (mgr, header);
+ window = NULL;
+ found = modest_window_mgr_find_registered_header (mgr, header, &window);
+
/* Do not open again the message and present the
window to the user */
- if (window)
- gtk_window_present (GTK_WINDOW (window));
- else if (!(flags & TNY_HEADER_FLAG_CACHED))
- tny_list_append (not_opened_headers, G_OBJECT (header));
- /* Check if msg has already been retreived */
- else
- tny_list_append (not_opened_cached_headers, G_OBJECT (header));
-
+ if (found) {
+ if (window)
+ gtk_window_present (GTK_WINDOW (window));
+ else
+ /* the header has been registered already, we don't do
+ * anything but wait for the window to come up*/
+ g_warning ("debug: header %p already registered, waiting for window",
+ header);
+ } else {
+ /* register the header before actually creating the window */
+ modest_window_mgr_register_header (mgr, header);
+
+ if (!(flags & TNY_HEADER_FLAG_CACHED))
+ tny_list_append (not_opened_headers, G_OBJECT (header));
+ /* Check if msg has already been retreived */
+ else
+ tny_list_append (not_opened_cached_headers, G_OBJECT (header));
+ }
g_object_unref (header);
tny_iterator_next (iter);
}
TnyIterator *iter;
TnyHeader *header;
TnyHeaderFlags flags;
- GtkWidget *msg_view_window;
+ ModestWindow *msg_view_window = NULL;
+ gboolean found;
+
g_return_if_fail (MODEST_IS_MAIN_WINDOW (win));
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
return;
}
- msg_view_window = GTK_WIDGET (modest_window_mgr_find_window_by_header (modest_runtime_get_window_mgr (), header));
+ found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
+ header, &msg_view_window);
flags = tny_header_get_flags (header);
if (!(flags & TNY_HEADER_FLAG_CACHED))
return;
-
- if (msg_view_window != NULL) {
- modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
+ if (found) {
+ if (msg_view_window != NULL)
+ modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
+ else {
+ /* do nothing; uid was registered before, so window is probably on it's way */
+ g_warning ("debug: header %p has already been registered", header);
+ }
} else {
ModestMailOperation *mail_op = NULL;
+ modest_window_mgr_register_header (modest_runtime_get_window_mgr (), header);
mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN,
G_OBJECT (win),
modest_ui_actions_get_msgs_full_error_handler,
NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
modest_mail_operation_get_msg (mail_op, header, open_msg_for_purge_cb, win);
-
+
g_object_unref (mail_op);
}
if (header)
static gboolean
_purged_attach_selected (ModestWindow *win, gboolean all, ModestDimmingRule *rule)
{
- GList *attachments = NULL, *node = NULL;
+ GList *attachments = NULL, *node;
gint purged = 0;
gint n_attachments = 0;
gboolean result = FALSE;
_already_opened_msg (ModestWindow *win,
guint *n_messages)
{
- ModestWindow *window = NULL;
+ //ModestWindow *window = NULL;
ModestWindowMgr *mgr = NULL;
GtkWidget *header_view = NULL;
TnyList *selected_headers = NULL;
TnyIterator *iter = NULL;
TnyHeader *header = NULL;
- gboolean result = TRUE;
+ gboolean found;
g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
/* Check dimmed rule (TODO: check focus on widgets */
mgr = modest_runtime_get_window_mgr ();
iter = tny_list_create_iterator (selected_headers);
- while (!tny_iterator_is_done (iter) && result) {
+ found = FALSE;
+ while (!tny_iterator_is_done (iter)) {
header = TNY_HEADER (tny_iterator_get_current (iter));
- window = modest_window_mgr_find_window_by_header (mgr, header);
- result = result && (window != NULL);
-
+ found = modest_window_mgr_find_registered_header (mgr,header, NULL);
+
g_object_unref (header);
tny_iterator_next (iter);
+
+ if (found)
+ break;
}
-
+
/* free */
if (selected_headers != NULL)
g_object_unref (selected_headers);
if (iter != NULL)
g_object_unref (iter);
- return result;
+ return found;
}
static gboolean