X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-email-clipboard.c;h=0a71d884c3440ec3b6e42332d8fa1ee038baf024;hp=b91eea4d33a542b48a6aab8f4702b8623fcc155f;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hpb=250e23c3f8c9b93a86641c4c8acecc1adb817e02 diff --git a/src/modest-email-clipboard.c b/src/modest-email-clipboard.c index b91eea4..0a71d88 100644 --- a/src/modest-email-clipboard.c +++ b/src/modest-email-clipboard.c @@ -27,7 +27,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include +#include /* 'private'/'protected' functions */ static void modest_email_clipboard_class_init (ModestEmailClipboardClass * klass); @@ -37,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; @@ -56,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 */ @@ -98,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 @@ -118,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); } @@ -197,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); @@ -246,21 +245,21 @@ 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; ModestEmailClipboardPrivate *priv = NULL;; const gchar *id1 = NULL; const gchar *id2 = NULL; @@ -275,12 +274,65 @@ modest_email_clipboard_check_source_folder (ModestEmailClipboard *self, /* Check target and source folders */ id1 = tny_folder_get_id (priv->src); - id2 = tny_folder_get_id (TNY_FOLDER(folder)); - same_folder = !g_ascii_strcasecmp (id1, id2); + 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)