#include "modest-edit-msg-window.h"
#include "modest-icon-names.h"
#include "modest-tny-platform-factory.h"
+#include "modest-tny-msg-actions.h"
#include "modest-mail-operation.h"
/* 'private'/'protected' functions */
gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about),
_("a modest e-mail client\n\n"
"design and implementation: Dirk-Jan C. Binnema\n"
- "contributions from the fine people at KernelConcepts\n\n"
+ "contributions from the fine people at KernelConcepts and Igalia\n"
"uses the tinymail email framework written by Philip van Hoof"));
gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
ModestHeaderView *header_view;
TnyList *header_list;
TnyIterator *iter;
+ gchar *reply_key, *forward_key;
+ ModestMailOperationReplyType reply_type;
+ ModestMailOperationForwardType forward_type;
+ ModestConf *conf;
+ GError *error;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
header_view = modest_widget_factory_get_header_view (priv->widget_factory);
header_list = modest_header_view_get_selected_headers (header_view);
+ /* Get reply and forward types */
+ error = NULL;
+ reply_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_REPLY_TYPE);
+ reply_type = modest_conf_get_int (conf, reply_key, &error);
+ if (error || reply_type == 0) {
+ g_warning ("key %s not defined", reply_key);
+ reply_type = MODEST_MAIL_OPERATION_REPLY_TYPE_CITE;
+ if (error) {
+ g_error_free (error);
+ error = NULL;
+ }
+ }
+ g_free (reply_key);
+
+ forward_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_FORWARD_TYPE);
+ forward_type = modest_conf_get_int (conf, forward_key, &error);
+ if (error || forward_type == 0) {
+ g_warning ("key %s not defined", forward_key);
+ forward_type = MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE;
+ if (error) {
+ g_error_free (error);
+ error = NULL;
+ }
+ }
+ g_free (forward_key);
+
if (header_list) {
+ TnyHeader *header, *new_header;
+ TnyFolder *folder;
+ TnyMsg *msg, *new_msg;
+ ModestEditType edit_type;
+ gchar *from, *email_key;
+ const gchar *account_name;
+
+ /* We assume that we can only select messages of the
+ same folder and that we reply all of them from the
+ same account. In fact the interface currently only
+ allows single selection */
+ account_name = modest_folder_view_get_selected_account (priv->folder_view);
+ email_key = g_strdup_printf ("%s/%s/%s", MODEST_ACCOUNT_NAMESPACE,
+ account_name, MODEST_ACCOUNT_EMAIL);
+ from = modest_conf_get_string (conf, email_key, NULL);
+ g_free (email_key);
+
iter = tny_list_create_iterator (header_list);
- do {
- TnyHeader *header;
- TnyFolder *folder;
- TnyMsg *msg, *new_msg;
- ModestEditType edit_type;
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ folder = tny_header_get_folder (header);
+ do {
/* Get msg from header */
header = TNY_HEADER (tny_iterator_get_current (iter));
- folder = tny_header_get_folder (header);
- msg = tny_folder_get_msg (folder, header);
+ msg = tny_folder_get_msg (folder, header, NULL); /* FIXME */
/* FIXME: select proper action */
switch (action) {
case 1:
- /* TODO: get reply type from config */
new_msg =
- modest_mail_operation_create_reply_mail (msg,
- MODEST_MAIL_OPERATION_REPLY_TYPE_CITE,
+ modest_mail_operation_create_reply_mail (msg, from, reply_type,
MODEST_MAIL_OPERATION_REPLY_MODE_SENDER);
edit_type = MODEST_EDIT_TYPE_REPLY;
break;
case 2:
- /* TODO: get reply type from config */
new_msg =
- modest_mail_operation_create_reply_mail (msg,
- MODEST_MAIL_OPERATION_REPLY_TYPE_QUOTE,
+ modest_mail_operation_create_reply_mail (msg, from, reply_type,
MODEST_MAIL_OPERATION_REPLY_MODE_ALL);
edit_type = MODEST_EDIT_TYPE_REPLY;
break;
case 3:
- /* TODO: get forward type from config */
new_msg =
- modest_mail_operation_create_forward_mail (msg,
- MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE);
+ modest_mail_operation_create_forward_mail (msg, from, forward_type);
edit_type = MODEST_EDIT_TYPE_FORWARD;
break;
+ default:
+ g_warning ("unexpected action type: %d", action);
+ }
+
+ if (new_msg) {
+ /* Set from */
+ new_header = tny_msg_get_header (new_msg);
+ tny_header_set_from (new_header, from);
+
+ /* Show edit window */
+ msg_win = modest_edit_msg_window_new (priv->widget_factory,
+ edit_type,
+ new_msg);
+ gtk_widget_show (msg_win);
+
+ /* Clean and go on */
+ g_object_unref (new_msg);
}
- /* Show edit window */
- msg_win = modest_edit_msg_window_new (priv->widget_factory,
- edit_type,
- new_msg);
- gtk_widget_show (msg_win);
-
- /* Clean and go on */
- g_object_unref (new_msg);
tny_iterator_next (iter);
} while (!tny_iterator_is_done (iter));
+
+ /* Clean */
+ g_free (from);
+ g_object_unref (G_OBJECT (iter));
+ g_object_unref (G_OBJECT (folder));
}
}
gtk_widget_destroy (GTK_WIDGET(self));
}
+static void
+on_menu_delete (ModestMainWindow *self, guint action, GtkWidget *widget)
+{
+ ModestMainWindowPrivate *priv;
+ ModestHeaderView *header_view;
+ TnyList *header_list;
+ TnyIterator *iter;
+ GtkTreeModel *model;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+ header_list = modest_header_view_get_selected_headers (header_view);
+
+ if (header_list) {
+ iter = tny_list_create_iterator (header_list);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_SORT (model))
+ model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model));
+ do {
+ TnyHeader *header;
+ ModestMailOperation *mail_op;
+
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ /* TODO: thick grain mail operation involving
+ a list of objects. Composite pattern ??? */
+ mail_op = modest_mail_operation_new ();
+
+ /* Move to trash */
+ modest_mail_operation_remove_msg (mail_op, header, TRUE);
+
+ /* Remove from tree model */
+ tny_list_remove (TNY_LIST (model), G_OBJECT (header));
+
+ g_object_unref (G_OBJECT (mail_op));
+ g_object_unref (header);
+ tny_iterator_next (iter);
+
+ } while (!tny_iterator_is_done (iter));
+ }
+}
+
/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
static GtkItemFactoryEntry menu_items[] = {
{ "/_Actions", NULL, NULL, 0, "<Branch>" ,NULL},
{ "/Actions/_New Message", NULL, on_menu_new_message, 0, "<Item>",NULL },
- { "/Actions/_Reply", NULL, NULL, 0, "<Item>" ,NULL},
- { "/Actions/_Forward", NULL, NULL, 0, "<Item>" ,NULL},
+ { "/Actions/_Reply", NULL, on_menu_reply_forward, 1, "<Item>" ,NULL},
+ { "/Actions/_Forward", NULL, on_menu_reply_forward, 3, "<Item>" ,NULL},
{ "/Actions/_Bounce", NULL, NULL, 0, "<Item>",NULL },
{ "/_Options", NULL, NULL, 0, "<Branch>" ,NULL},
header_view_new (ModestMainWindow *self)
{
int i;
- GSList *columns = NULL;
+ GList *columns = NULL;
ModestHeaderView *header_view;
ModestMainWindowPrivate *priv;
ModestHeaderViewColumn cols[] = {
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
for (i = 0 ; i != sizeof(cols) / sizeof(ModestHeaderViewColumn); ++i)
- columns = g_slist_append (columns, GINT_TO_POINTER(cols[i]));
+ columns = g_list_append (columns, GINT_TO_POINTER(cols[i]));
header_view = modest_widget_factory_get_header_view (priv->widget_factory);
modest_header_view_set_columns (header_view, columns);
- g_slist_free (columns);
+ g_list_free (columns);
return header_view;
}
break;
case MODEST_TOOLBAR_BUTTON_DELETE:
+ on_menu_delete (self, 0, GTK_WIDGET (toolbar));
+ break;
default:
g_printerr ("modest: key %d pressed\n", button_id);
"modest-msg-paned");
modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->main_paned),
"modest-main-paned");
+ modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->header_view),
+ "modest-header-view");
+
}
"modest-msg-paned");
modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->main_paned),
"modest-main-paned");
+ modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->header_view),
+ "modest-header-view");
}
static GtkWidget*
return FALSE;
}
-static GtkWidget*
-favorites_view ()
-{
- GtkWidget *favorites;
- GtkTreeStore *store;
- GtkTreeViewColumn *col;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
- favorites = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
- col = gtk_tree_view_column_new_with_attributes (_("Favorites"),
- gtk_cell_renderer_text_new(),
- "text", 0, NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW(favorites), col);
- gtk_widget_show_all (favorites);
-
- g_object_unref (G_OBJECT(store));
-
- return favorites;
-}
-
-
GtkWidget*
modest_main_window_new (ModestWidgetFactory *widget_factory)
GtkWidget *main_vbox;
GtkWidget *status_hbox;
- GtkWidget *header_win, *folder_win, *favorites_win;
+ GtkWidget *header_win, *folder_win;
g_return_val_if_fail (widget_factory, NULL);
FALSE);
header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view),
FALSE);
- favorites_win = wrapped_in_scrolled_window (favorites_view(),FALSE);
/* tool/menubar */
priv->menubar = menubar_new (MODEST_MAIN_WINDOW(obj));
priv->folder_paned = gtk_vpaned_new ();
priv->msg_paned = gtk_vpaned_new ();
priv->main_paned = gtk_hpaned_new ();
- gtk_paned_add1 (GTK_PANED(priv->main_paned), priv->folder_paned);
+ gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win);
gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned);
- gtk_paned_add1 (GTK_PANED(priv->folder_paned), favorites_win);
- gtk_paned_add2 (GTK_PANED(priv->folder_paned), folder_win);
gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win);
gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview));