GtkWidget *msg_view;
gchar *msg_uid;
+ TnyMimePart *other_body;
};
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
priv->menubar = NULL;
priv->msg_view = NULL;
priv->msg_uid = NULL;
+ priv->other_body = NULL;
}
priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
if (other_body) {
+ priv->other_body = g_object_ref (other_body);
modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body);
} else {
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
+ if (priv->other_body != NULL) {
+ g_object_unref (priv->other_body);
+ priv->other_body = NULL;
+ }
+
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
}
+gboolean
+modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv = NULL;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ return (priv->other_body != NULL);
+}
+
ModestWindow *
modest_msg_view_window_new_with_other_body (TnyMsg *msg,
TnyMimePart *other_body,
restore_settings (MODEST_WINDOW(obj));
header = tny_msg_get_header (msg);
- if (header)
- subject = tny_header_dup_subject (header);
+ if (other_body) {
+ gchar *description;
+
+ description = modest_tny_mime_part_get_header_value (other_body, "Content-Description");
+ if (description) {
+ g_strstrip (description);
+ subject = description;
+ }
+ } else {
+ if (header)
+ subject = tny_header_dup_subject (header);
+ }
+
if (subject != NULL)
gtk_window_set_title (GTK_WINDOW (obj), subject);
if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
gchar *uid;
TnyHeader *header;
+
+ uid = g_strdup (modest_msg_view_window_get_message_uid (MODEST_MSG_VIEW_WINDOW (window)));
+
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (window));
- if (header) {
+ if (uid == NULL)
uid = modest_tny_folder_get_header_unique_id (header);
-
- /* Embedded messages do not have uid */
- if (uid) {
- if (g_list_find_custom (priv->window_list, uid, (GCompareFunc) compare_msguids)) {
- g_debug ("%s found another view window showing the same header", __FUNCTION__);
- g_free (uid);
- g_object_unref (header);
- return FALSE;
- }
+ /* Embedded messages do not have uid */
+ if (uid) {
+ if (g_list_find_custom (priv->window_list, uid, (GCompareFunc) compare_msguids)) {
+ g_debug ("%s found another view window showing the same header", __FUNCTION__);
g_free (uid);
- } else {
- if (g_list_find_custom (priv->window_list, header, (GCompareFunc) compare_headers)) {
- g_debug ("%s found another view window showing the same header", __FUNCTION__);
- g_object_unref (header);
- return FALSE;
- }
+ g_object_unref (header);
+ return FALSE;
+ }
+ g_free (uid);
+ } else {
+ if (g_list_find_custom (priv->window_list, header, (GCompareFunc) compare_headers)) {
+ g_debug ("%s found another view window showing the same header", __FUNCTION__);
+ g_object_unref (header);
+ return FALSE;
}
- g_object_unref (header);
}
+ g_object_unref (header);
}
/* Do not go backwards */
GtkWidget *remove_attachment_banner;
gchar *msg_uid;
- gboolean is_other_body;
+ TnyMimePart *other_body;
GSList *sighandlers;
};
priv->purge_timeout = 0;
priv->remove_attachment_banner = NULL;
priv->msg_uid = NULL;
- priv->is_other_body = FALSE;
+ priv->other_body = NULL;
priv->sighandlers = NULL;
call this function before */
modest_msg_view_window_disconnect_signals (MODEST_WINDOW (obj));
+ if (priv->other_body != NULL) {
+ g_object_unref (priv->other_body);
+ priv->other_body = NULL;
+ }
+
if (priv->header_model != NULL) {
g_object_unref (priv->header_model);
priv->header_model = NULL;
return MODEST_WINDOW(window);
}
+gboolean
+modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv = NULL;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ return (priv->other_body != NULL);
+}
+
ModestWindow *
modest_msg_view_window_new_with_other_body (TnyMsg *msg,
TnyMimePart *other_body,
modest_account_name, mailbox, msg_uid);
if (other_body) {
- priv->is_other_body = TRUE;
+ priv->other_body = g_object_ref (other_body);
modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body);
} else {
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), NULL);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
- if (priv->is_other_body)
- return NULL;
-
/* If the message was not obtained from a treemodel,
* for instance if it was opened directly by the search UI:
*/
modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed"));
} else if (!modest_tny_mime_part_is_msg (mime_part)) {
ModestWindowMgr *mgr;
- mgr = modest_runtime_get_window_mgr ();
ModestWindow *msg_win = NULL;
TnyMsg *current_msg;
-
- gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
- const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window));
- if (!account)
- account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+ gboolean found;
+ TnyHeader *header;
current_msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (window));
- msg_win = modest_msg_view_window_new_with_other_body (TNY_MSG (current_msg), TNY_MIME_PART (mime_part),
- account, mailbox, attachment_uid);
- g_object_unref (current_msg);
-
- modest_window_set_zoom (MODEST_WINDOW (msg_win),
- modest_window_get_zoom (MODEST_WINDOW (window)));
- if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window)))
- gtk_widget_show_all (GTK_WIDGET (msg_win));
- else
- gtk_widget_destroy (GTK_WIDGET (msg_win));
+ mgr = modest_runtime_get_window_mgr ();
+ header = tny_msg_get_header (TNY_MSG (current_msg));
+ found = modest_window_mgr_find_registered_message_uid (mgr,
+ attachment_uid,
+ &msg_win);
+ if (found) {
+ g_warning ("window for this body is already being created");
+ } else {
+
+ /* it's not found, so create a new window for it */
+ modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
+ gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
+ const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window));
+ if (!account)
+ account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
+
+ msg_win = modest_msg_view_window_new_with_other_body (TNY_MSG (current_msg), TNY_MIME_PART (mime_part),
+ account, mailbox, attachment_uid);
+
+ modest_window_set_zoom (MODEST_WINDOW (msg_win),
+ modest_window_get_zoom (MODEST_WINDOW (window)));
+ if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window)))
+ gtk_widget_show_all (GTK_WIDGET (msg_win));
+ else
+ gtk_widget_destroy (GTK_WIDGET (msg_win));
+ }
+ g_object_unref (current_msg);
} else {
/* message attachment */
TnyHeader *header = NULL;
msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
- if (msg != NULL) {
+ if (priv->other_body) {
+ gchar *description;
+
+ description = modest_tny_mime_part_get_header_value (priv->other_body, "Content-Description");
+ if (description) {
+ g_strstrip (description);
+ subject = description;
+ }
+ } else if (msg != NULL) {
header = tny_msg_get_header (msg);
subject = tny_header_dup_subject (header);
g_object_unref (header);
guint progress_bar_timeout;
gchar *msg_uid;
+ TnyMimePart *other_body;
GSList *sighandlers;
};
priv->purge_timeout = 0;
priv->remove_attachment_banner = NULL;
priv->msg_uid = NULL;
+ priv->other_body = NULL;
priv->sighandlers = NULL;
call this function before */
modest_msg_view_window_disconnect_signals (MODEST_WINDOW (obj));
+ if (priv->other_body != NULL) {
+ g_object_unref (priv->other_body);
+ priv->other_body = NULL;
+ }
+
if (priv->header_model != NULL) {
g_object_unref (priv->header_model);
priv->header_model = NULL;
return MODEST_WINDOW(window);
}
+gboolean
+modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv = NULL;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ return (priv->other_body != NULL);
+}
+
ModestWindow *
modest_msg_view_window_new_with_other_body (TnyMsg *msg,
TnyMimePart *part,
modest_account_name, msg_uid);
if (other_body) {
+ priv->other_body = g_object_ref (other_body);
modest_msg_view_set_msg_with_other_body (TNY_MSG_VIEW (priv->msg_view), msg, other_body);
} else {
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
- if (msg != NULL) {
+ if (priv->other_body) {
+ gchar *description;
+
+ description = modest_tny_mime_part_get_header_value (priv->other_body, "Content-Description");
+ if (description) {
+ g_strstrip (description);
+ subject = description;
+ }
+ } else if (msg != NULL) {
header = tny_msg_get_header (msg);
subject = tny_header_dup_subject (header);
g_object_unref (header);
const gchar *msg_uid);
/**
+ * modest_msg_view_window_is_other_body:
+ * @self: a #ModestMsgViewWindow
+ *
+ * tells if the view window is showing other body
+ *
+ * Returns: %TRUE if showing "not first body"
+ */
+gboolean modest_msg_view_window_is_other_body (ModestMsgViewWindow *self);
+
+/**
* modest_msg_view_window_new_with_header_model:
* @msg: an #TnyMsg instance
* @modest_account_name: the account name
g_return_if_fail (TNY_IS_HEADER(header));
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
- uid = modest_tny_folder_get_header_unique_id (header);
-
- if (uid == NULL)
+ if (alt_uid != NULL) {
uid = g_strdup (alt_uid);
-
+ } else {
+ uid = modest_tny_folder_get_header_unique_id (header);
+ }
+
if (!has_uid (priv->preregistered_uids, uid)) {
MODEST_DEBUG_BLOCK(g_debug ("registering new uid %s", uid););
priv->preregistered_uids = append_uid (priv->preregistered_uids, uid);