Work to fix bug NB#81989:
[modest] / src / dbus_api / modest-dbus-callbacks.c
index 0cc5cda..b0c4f04 100644 (file)
@@ -221,7 +221,7 @@ on_idle_mail_to(gpointer user_data)
        }
 
        gdk_threads_enter (); /* CHECKED */
-       modest_ui_actions_compose_msg(NULL, to, cc, bcc, subject, body, NULL);
+       modest_ui_actions_compose_msg(NULL, to, cc, bcc, subject, body, NULL, FALSE);
        gdk_threads_leave (); /* CHECKED */
 
 cleanup:
@@ -271,6 +271,7 @@ on_idle_compose_mail(gpointer user_data)
                g_free(idle_data->attachments);
                idle_data->attachments = tmp;
        }
+
        if (idle_data->attachments != NULL) {
                gchar **list = g_strsplit(idle_data->attachments, ",", 0);
                gint i = 0;
@@ -279,10 +280,25 @@ on_idle_compose_mail(gpointer user_data)
                }
                g_strfreev(list);
        }
+
+       /* If the message has nothing then mark the buffers as not
+          modified. This happens in Maemo for example when opening a
+          new message from Contacts plugin, it sends "" instead of
+          NULLs */
        gdk_threads_enter (); /* CHECKED */
-       modest_ui_actions_compose_msg(NULL, idle_data->to, idle_data->cc,
-                                     idle_data->bcc, idle_data->subject,
-                                     idle_data->body, attachments);
+       if (!strncmp (idle_data->to, "", 1) &&
+           !strncmp (idle_data->to, "", 1) &&
+           !strncmp (idle_data->cc, "", 1) &&
+           !strncmp (idle_data->bcc, "", 1) &&
+           !strncmp (idle_data->subject, "", 1) &&
+           !strncmp (idle_data->body, "", 1) &&
+           attachments == NULL) {
+               modest_ui_actions_compose_msg(NULL, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
+       } else {
+               modest_ui_actions_compose_msg(NULL, idle_data->to, idle_data->cc,
+                                             idle_data->bcc, idle_data->subject,
+                                             idle_data->body, attachments, TRUE);
+       }
        gdk_threads_leave (); /* CHECKED */
 cleanup:
        g_slist_foreach(attachments, (GFunc)g_free, NULL);
@@ -443,7 +459,8 @@ on_open_message_performer (gboolean canceled,
                account_store = modest_runtime_get_account_store ();
                local_folders_account = MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (
                        modest_tny_account_store_get_local_folders_account (account_store));
-               folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);            
+               folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);
+               g_object_unref (local_folders_account);
        } else {
                folder = tny_store_account_find_folder (TNY_STORE_ACCOUNT (account), uri, NULL);
        }
@@ -576,6 +593,7 @@ on_open_message (GArray * arguments, gpointer data, osso_rpc_t * retval)
                        local_folders_account = MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (
                                modest_tny_account_store_get_local_folders_account (account_store));
                        folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);
+                       g_object_unref (local_folders_account);
                }
                if (folder) {
                        TnyMsg *msg = tny_folder_find_msg (folder, uri, NULL);
@@ -776,7 +794,7 @@ on_idle_send_receive(gpointer user_data)
 
        if (auto_update)
                /* Do send receive */
-               modest_ui_actions_do_send_receive_all (main_win, FALSE);
+               modest_ui_actions_do_send_receive_all (main_win, FALSE, FALSE, FALSE);
        else
                /* Disable auto update */
                modest_platform_set_update_interval (0);
@@ -971,8 +989,19 @@ on_dbus_method_dump_accounts (DBusConnection *con, DBusMessage *message)
 static gint 
 on_send_receive(GArray *arguments, gpointer data, osso_rpc_t * retval)
 {      
-       /* Use g_idle to context-switch into the application's thread: */
-       g_idle_add(on_idle_send_receive, NULL);
+       ModestConnectedVia connect_when;
+
+       connect_when = modest_conf_get_int (modest_runtime_get_conf (), 
+                                           MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, NULL);
+       
+       /* Perform a send and receive if the user selected to connect
+          via any mean or if the current connection method is the
+          same as the one specified by the user */
+       if (connect_when == MODEST_CONNECTED_VIA_ANY ||
+           connect_when == modest_platform_get_current_connection ()) {
+               /* Use g_idle to context-switch into the application's thread: */
+               g_idle_add(on_idle_send_receive, NULL);
+       }
        
        return OSSO_OK;
 }