Modified webpage: now tinymail repository is in gitorious.
[modest] / src / modest-email-clipboard.c
index c6f6a23..0a71d88 100644 (file)
@@ -27,6 +27,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <modest-defs.h>
 #include <modest-email-clipboard.h>
 #include <modest-tny-folder.h>
 
@@ -38,7 +39,6 @@ static void modest_email_clipboard_finalize   (GObject * obj);
 /* globals */
 static GObjectClass *parent_class = NULL;
 
-typedef struct _ModestEmailClipboardPrivate ModestEmailClipboardPrivate;
 struct _ModestEmailClipboardPrivate {
        TnyList    *selection;
        TnyFolder  *src;        
@@ -57,7 +57,7 @@ modest_email_clipboard_get_type (void)
 {
        static GType my_type = 0;
 
-       if (!my_type) {
+       if (G_UNLIKELY (!my_type)) {
                static const GTypeInfo my_info = {
                        sizeof (ModestEmailClipboardClass),
                        NULL,   /* base init */
@@ -99,13 +99,14 @@ modest_email_clipboard_class_init (ModestEmailClipboardClass * klass)
 static void
 modest_email_clipboard_init (ModestEmailClipboard * obj)
 {
-       ModestEmailClipboardPrivate *priv =
-               MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (obj);
+
+       if (obj->priv == NULL)
+               obj->priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (obj);
        
-       priv->src = NULL;
-       priv->selection = NULL;
-       priv->hidding = NULL;
-       priv->delete = FALSE;
+       obj->priv->src = NULL;
+       obj->priv->selection = NULL;
+       obj->priv->hidding = NULL;
+       obj->priv->delete = FALSE;
 }
 
 static void
@@ -119,13 +120,10 @@ modest_email_clipboard_finalize (GObject * obj)
 
 
 ModestEmailClipboard *
-modest_email_clipboard_new ()
+modest_email_clipboard_new (void)
 {
        GObject *obj;
-       ModestEmailClipboardPrivate *priv;
-
        obj = G_OBJECT (g_object_new (MODEST_TYPE_EMAIL_CLIPBOARD, NULL));
-       priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (obj);
        
        return MODEST_EMAIL_CLIPBOARD (obj);
 }
@@ -198,7 +196,7 @@ modest_email_clipboard_set_data (ModestEmailClipboard *self,
                        while (!tny_iterator_is_done (iter)) {
                                obj = tny_iterator_get_current (iter);
                                if (obj && TNY_IS_HEADER (obj))
-                                       id = g_strdup(tny_header_get_message_id (TNY_HEADER (obj)));
+                                       id = tny_header_dup_message_id (TNY_HEADER (obj));
                                
                                priv->hidding[i++] = id;
                                tny_iterator_next (iter);
@@ -247,20 +245,18 @@ modest_email_clipboard_clear (ModestEmailClipboard *self)
 gboolean
 modest_email_clipboard_cleared (ModestEmailClipboard *self)
 {
-       ModestEmailClipboardPrivate *priv = NULL;;
        gboolean cleared = FALSE;
 
        g_return_val_if_fail (MODEST_IS_EMAIL_CLIPBOARD (self), TRUE);
-       priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (self);
 
-       cleared = ((priv->src == NULL) && (priv->selection == NULL));
+       cleared = ((self->priv->src == NULL) && (self->priv->selection == NULL));
 
        return cleared;
 }
 
 gboolean 
 modest_email_clipboard_check_source_folder (ModestEmailClipboard *self,
-                                           const TnyFolder *folder)
+                                           TnyFolder *folder)
 {
        TnyFolderType folder_type1;
        TnyFolderType folder_type2;
@@ -281,12 +277,62 @@ modest_email_clipboard_check_source_folder (ModestEmailClipboard *self,
        id2 = tny_folder_get_id (TNY_FOLDER(folder));   
        folder_type1 = modest_tny_folder_guess_folder_type (priv->src);
        folder_type2 = modest_tny_folder_guess_folder_type (folder);
+       
+       if (folder_type1 == TNY_FOLDER_TYPE_INVALID || folder_type2 == TNY_FOLDER_TYPE_INVALID)
+               g_warning ("%s: BUG: folder of type TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
+       
        same_folder = ((folder_type1 == folder_type2) && 
                       (!g_ascii_strcasecmp (id1, id2)));
        
        return same_folder;
 }
 
+gboolean 
+modest_email_clipboard_headers_copied (ModestEmailClipboard *self)
+{
+       ModestEmailClipboardPrivate *priv = NULL;;
+       gboolean result = FALSE;
+
+       g_return_val_if_fail (MODEST_IS_EMAIL_CLIPBOARD (self), FALSE);
+       priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (self);
+
+       result = priv->selection != NULL;
+
+       return result;
+}
+
+gboolean 
+modest_email_clipboard_folder_copied (ModestEmailClipboard *self)
+{
+       ModestEmailClipboardPrivate *priv = NULL;;
+       gboolean result = FALSE;
+
+       g_return_val_if_fail (MODEST_IS_EMAIL_CLIPBOARD (self), FALSE);
+       priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (self);
+       
+       result = ((priv->selection == NULL) && (priv->src != NULL));
+       
+       return result; 
+}
+
+const gchar *
+modest_email_clipboard_get_folder_name (ModestEmailClipboard *self)
+{
+       ModestEmailClipboardPrivate *priv = NULL;;
+       const gchar *folder_name = NULL;
+
+       g_return_val_if_fail (MODEST_IS_EMAIL_CLIPBOARD (self), NULL);
+       priv = MODEST_EMAIL_CLIPBOARD_GET_PRIVATE (self);
+       
+       /* If cleared, return always FALSE*/
+       if (modest_email_clipboard_cleared (self)) return NULL;
+
+       /* Check target and source folders */
+       folder_name = tny_folder_get_name (priv->src);
+       
+       return folder_name;
+}
+
 const gchar **
 modest_email_clipboard_get_hidding_ids (ModestEmailClipboard *self,
                                        guint *n_selected)