* Fixes: NB#57465
[modest] / src / gnome / modest-msg-view-window.c
index d3b453a..849b015 100644 (file)
@@ -72,18 +72,20 @@ static const GtkActionEntry modest_action_entries [] = {
        { "Edit", NULL, N_("_Edit") },
        { "Actions", NULL, N_("_Actions") },
        { "Help", NULL, N_("_Help") },
+       { "Email", NULL, N_("E_mail") },
 
        /* EDIT */
        { "EditUndo",        GTK_STOCK_UNDO,   N_("_Undo"), "<CTRL>Z",        N_("Undo last action"),  NULL },
        { "EditRedo",        GTK_STOCK_REDO,   N_("_Redo"), "<shift><CTRL>Z", N_("Redo previous action"),  NULL },
-       { "EditCut",         GTK_STOCK_CUT,    N_("Cut"),   "<CTRL>X",        N_("_Cut"), NULL   },
-       { "EditCopy",        GTK_STOCK_COPY,   N_("Copy"),  "<CTRL>C",        N_("Copy"), NULL },
-       { "EditPaste",       GTK_STOCK_PASTE,  N_("Paste"), "<CTRL>V",        N_("Paste"), NULL },
+       { "Cut",         GTK_STOCK_CUT,    N_("Cut"),   "<CTRL>X",        N_("_Cut"), G_CALLBACK (modest_ui_actions_on_cut)   },
+       { "Copy",        GTK_STOCK_COPY,   N_("Copy"),  "<CTRL>C",        N_("Copy"), G_CALLBACK (modest_ui_actions_on_copy) },
+       { "Paste",       GTK_STOCK_PASTE,  N_("Paste"), "<CTRL>V",        N_("Paste"), G_CALLBACK (modest_ui_actions_on_paste) },
        { "EditDelete",      GTK_STOCK_DELETE, N_("_Delete"),      "<CTRL>Q",         N_("Delete"), NULL },
-       { "EditSelectAll",   NULL,             N_("Select all"),   "<CTRL>A",         N_("Select all"), NULL },
+       { "SelectAll",   NULL,         N_("Select all"),   "<CTRL>A",         N_("Select all"), G_CALLBACK (modest_ui_actions_on_select_all) },
        { "EditDeselectAll", NULL,             N_("Deselect all"), "<Shift><CTRL>A",  N_("Deselect all"), NULL },
 
        /* ACTIONS */
+       { "ActionsNewMessage",  MODEST_STOCK_NEW_MAIL, N_("_New"), "<CTRL>N", N_("Compose new message"), G_CALLBACK (modest_ui_actions_on_new_msg) },
        { "ActionsReply",       MODEST_STOCK_REPLY, N_("_Reply"),         NULL, N_("Reply to a message"), G_CALLBACK (modest_ui_actions_on_reply) },
        { "ActionsReplyAll",    MODEST_STOCK_REPLY_ALL, N_("Reply to all"),   NULL, N_("Reply to all"), G_CALLBACK (modest_ui_actions_on_reply_all) },
        { "ActionsForward",     MODEST_STOCK_FORWARD, N_("_Forward"),       NULL, N_("Forward a message"), G_CALLBACK (modest_ui_actions_on_forward) },
@@ -121,6 +123,23 @@ modest_msg_view_window_get_type (void)
 }
 
 static void
+save_state (ModestWindow *self)
+{
+       modest_widget_memory_save (modest_runtime_get_conf (),
+                                  G_OBJECT(self), 
+                                  MODEST_CONF_MSG_VIEW_WINDOW_KEY);
+}
+
+
+static void
+restore_settings (ModestWindow *self)
+{
+       modest_widget_memory_restore (modest_runtime_get_conf (),
+                                     G_OBJECT(self), 
+                                     MODEST_CONF_MSG_VIEW_WINDOW_KEY);
+}
+
+static void
 modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
 {
        GObjectClass *gobject_class;
@@ -130,6 +149,9 @@ modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
        gobject_class->finalize = modest_msg_view_window_finalize;
 
        g_type_class_add_private (gobject_class, sizeof(ModestMsgViewWindowPrivate));
+
+       ModestWindowClass *modest_window_class = (ModestWindowClass *) klass;
+       modest_window_class->save_state_func = save_state;
 }
 
 static void
@@ -143,21 +165,6 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        priv->msg_view      = NULL;
 }
 
-static void
-save_settings (ModestMsgViewWindow *self)
-{
-       modest_widget_memory_save (modest_runtime_get_conf (),
-                                   G_OBJECT(self), "modest-msg-view-window");
-}
-
-
-static void
-restore_settings (ModestMsgViewWindow *self)
-{
-       modest_widget_memory_restore (modest_runtime_get_conf (),
-                                     G_OBJECT(self), "modest-msg-view-window");
-}
-
 
 static void
 init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
@@ -177,8 +184,8 @@ init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
        scrolled_window = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
                                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-       gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), 
-                                              priv->msg_view);
+       gtk_container_add (GTK_CONTAINER (scrolled_window), 
+                          priv->msg_view);
        gtk_box_pack_start (GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 6);
 
        gtk_widget_show_all (GTK_WIDGET(main_vbox));
@@ -197,7 +204,7 @@ modest_msg_view_window_finalize (GObject *obj)
 static gboolean
 on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgViewWindow *self)
 {
-       save_settings (self);
+       modest_window_save_state (MODEST_WINDOW(self));
        return FALSE;
 }
 
@@ -210,6 +217,8 @@ modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
        ModestWindowPrivate *parent_priv;
        GtkActionGroup *action_group;
        GError *error = NULL;
+       TnyHeader *header = NULL;
+       const gchar *subject = NULL;
 
        g_return_val_if_fail (msg, NULL);
 
@@ -254,9 +263,20 @@ modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
 
        /* Init window */
        init_window (MODEST_MSG_VIEW_WINDOW(obj), msg);
-       restore_settings (MODEST_MSG_VIEW_WINDOW(obj));
+       restore_settings (MODEST_WINDOW(obj));
+
+       header = tny_msg_get_header (msg);
+       if (header)
+               subject = tny_header_get_subject (header);
        
-       gtk_window_set_title (GTK_WINDOW(obj), "Modest");
+       if (subject != NULL)
+               gtk_window_set_title (GTK_WINDOW (obj), subject);
+       else
+               gtk_window_set_title (GTK_WINDOW(obj), "Modest");
+
+       if (header)
+               g_object_unref (header);
+
        gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL);
 
        g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj);
@@ -275,3 +295,71 @@ modest_msg_view_window_get_message (ModestMsgViewWindow *self)
 
        return modest_msg_view_get_message (MODEST_MSG_VIEW(msg_view));
 }
+
+const gchar*
+modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
+{
+       TnyMsg *msg;
+       TnyHeader *header;
+       const gchar *retval = NULL;
+
+       msg = modest_msg_view_window_get_message (self);
+
+       if (!msg)
+               return NULL;
+
+       header = tny_msg_get_header (msg);
+       if (header) {
+               retval = tny_header_get_uid (header);
+               g_object_unref (header);
+       }
+       g_object_unref (msg);
+
+       return retval;
+}
+
+ModestWindow*   
+modest_msg_view_window_new_with_header_model (TnyMsg *msg, 
+                                             const gchar *account, 
+                                             GtkTreeModel *model, 
+                                             GtkTreeRowReference *row_reference)
+{
+       /* Currently we simply redirect to new constructor. It should store a
+          reference to the header list model, to enable next/prev message
+          actions */
+       g_message ("partially implemented %s", __FUNCTION__);
+
+       return modest_msg_view_window_new (msg, account);
+}
+
+
+gboolean
+modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
+{
+       g_message ("not implemented %s", __FUNCTION__);
+       return FALSE;
+}
+
+gboolean
+modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
+{
+       g_message ("not implemented %s", __FUNCTION__);
+       return FALSE;
+}
+
+void
+modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart *mime_part)
+{
+       g_message ("not implemented %s", __FUNCTION__);
+}
+
+void
+modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mime_parts)
+{
+       g_message ("not implemented %s", __FUNCTION__);
+}
+void
+modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, GList *mime_parts)
+{
+       g_message ("not implemented %s", __FUNCTION__);
+}