Dialog for selecting attachments to save has changed title (fixes NB#108391)
[modest] / src / dbus_api / modest-dbus-callbacks.c
index 8f037cc..97edc98 100644 (file)
@@ -40,6 +40,7 @@
 #include "widgets/modest-msg-edit-window.h"
 #include "modest-tny-msg.h"
 #include "modest-platform.h"
+#include "modest-defs.h"
 #include <libmodest-dbus-client/libmodest-dbus-client.h>
 #include <libgnomevfs/gnome-vfs-utils.h>
 #include <stdio.h>
@@ -450,8 +451,8 @@ find_msg_async_cb (TnyFolder *folder,
                    GError *err, 
                    gpointer user_data)
 {
-        TnyHeader *header;
-        gchar *msg_uid;
+        TnyHeader *header = NULL;
+        gchar *msg_uid = NULL;
         ModestWindowMgr *win_mgr;
         ModestWindow *msg_view = NULL;
         gboolean is_draft = FALSE;
@@ -464,8 +465,7 @@ find_msg_async_cb (TnyFolder *folder,
         }
 
         header = tny_msg_get_header (msg);
-        if (header && (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED)) {
-                g_object_unref (header);
+        if (!header || (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED)) {
                modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), TRUE);
                g_idle_add (notify_error_in_dbus_callback, NULL);
                 goto end;
@@ -494,18 +494,18 @@ find_msg_async_cb (TnyFolder *folder,
                 } else {
                         modest_account_name = NULL;
                 }
-                        
+
                 /* Drafts will be opened in the editor, and others will be opened in the viewer */
                 if (is_draft) {
                        gchar *modest_account_name = NULL;
                        gchar *from_header;
-                       
+
                        /* we cannot edit without a valid account... */
                        if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr (), TRUE)) {
                                if (!modest_ui_actions_run_account_setup_wizard(NULL)) {
                                        modest_window_mgr_unregister_header (win_mgr, 
                                                                             header);
-                                       goto cleanup;
+                                       goto end;
                                }
                        }
                
@@ -555,10 +555,11 @@ find_msg_async_cb (TnyFolder *folder,
                }
         }
 
-cleanup:
-        g_object_unref (header);
-
 end:
+       if (header)
+               g_object_unref (header);
+       if (msg_uid)
+               g_free (msg_uid);
         on_find_msg_async_destroy (info);
 }
 
@@ -888,11 +889,9 @@ static gboolean
 on_idle_send_receive(gpointer user_data)
 {
        gboolean auto_update;
-       ModestWindow *main_win = NULL;
+       ModestWindow *top_win = NULL;
 
-       main_win =
-               modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
-                                                  FALSE); /* don't create */
+       top_win = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
 
        gdk_threads_enter (); /* CHECKED */
 
@@ -902,7 +901,7 @@ on_idle_send_receive(gpointer user_data)
 
        if (auto_update)
                /* Do send receive */
-               modest_ui_actions_do_send_receive_all (main_win, FALSE, FALSE, FALSE);
+               modest_ui_actions_do_send_receive_all (top_win, FALSE, FALSE, FALSE);
        else
                /* Disable auto update */
                modest_platform_set_update_interval (0);
@@ -1121,7 +1120,7 @@ on_send_receive_performer(gboolean canceled,
 
        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 */
@@ -1135,27 +1134,101 @@ on_send_receive_performer(gboolean canceled,
 }
 
 
-static gint 
+static gint
 on_send_receive(GArray *arguments, gpointer data, osso_rpc_t * retval)
-{      
+{
        TnyDevice *device = modest_runtime_get_device ();
 
        if (!tny_device_is_online (device))
                modest_platform_connect_and_perform (NULL, FALSE, NULL, on_send_receive_performer, NULL);
        else
                on_send_receive_performer (FALSE, NULL, NULL, NULL, NULL);
-       
+
        return OSSO_OK;
 }
 
-static gint 
+static gint
 on_open_default_inbox(GArray * arguments, gpointer data, osso_rpc_t * retval)
 {
        g_idle_add(on_idle_top_application, NULL);
-       
+
        return OSSO_OK;
 }
 
+
+static gboolean
+on_idle_open_account (gpointer user_data)
+{
+       ModestWindow *top;
+       ModestWindowMgr *mgr;
+       gchar *acc_name;
+       gboolean retval = TRUE;
+
+       gdk_threads_enter ();
+
+       acc_name = (gchar *) user_data;
+       mgr = modest_runtime_get_window_mgr ();
+
+       /* If Modest is already launched then just ignore this call */
+       if (modest_window_mgr_get_current_top (mgr)) {
+               retval = FALSE;
+               goto end;
+       }
+
+       top = modest_window_mgr_show_initial_window (mgr);
+
+#ifdef MODEST_TOOLKIT_HILDON2
+       if (MODEST_IS_ACCOUNTS_WINDOW (top)) {
+               GtkWidget *folder_window;
+
+               folder_window = (GtkWidget *) modest_folder_window_new (NULL);
+               modest_folder_window_set_account (MODEST_FOLDER_WINDOW (folder_window),
+                                                 acc_name);
+               if (modest_window_mgr_register_window (mgr, MODEST_WINDOW (folder_window), NULL)) {
+                       gtk_widget_show (folder_window);
+               } else {
+                       gtk_widget_destroy (folder_window);
+                       folder_window = NULL;
+               }
+       }
+#else
+       if (MODEST_IS_MAIN_WINDOW (top)) {
+               gchar *server_name;
+               GtkWidget *folder_view;
+
+               folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (top),
+                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+               server_name = modest_account_mgr_get_server_account_name (modest_runtime_get_account_mgr (), 
+                                                                         acc_name, TNY_ACCOUNT_TYPE_STORE);
+               if (server_name) {
+                       modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (folder_view),
+                                                                                    server_name);
+                       g_free (server_name);
+               }
+       }
+#endif
+       gdk_threads_leave ();
+
+ end:
+       g_free (acc_name);
+       return FALSE;
+}
+
+static gint
+on_open_account (GArray *arguments, gpointer data, osso_rpc_t *retval)
+{
+       osso_rpc_t val;
+       gchar *account_id;
+
+       /* Get the arguments: */
+       val = g_array_index(arguments, osso_rpc_t, MODEST_DBUS_OPEN_MESSAGE_ARG_URI);
+       account_id = g_strdup (val.value.s);
+
+       g_idle_add (on_idle_open_account, account_id);
+
+       return OSSO_OK;
+}
+
 #ifdef MODEST_TOOLKIT_HILDON2
 static gboolean
 on_idle_top_application (gpointer user_data)
@@ -1186,21 +1259,21 @@ on_idle_top_application (gpointer user_data)
        }
 
        gdk_threads_leave (); /* CHECKED */
-       
+
        return FALSE; /* Do not call this callback again. */
 }
 #else
-static gboolean 
+static gboolean
 on_idle_top_application (gpointer user_data)
 {
        ModestWindow *main_win;
        gboolean new_window = FALSE;
-       
+
        /* This is a GDK lock because we are an idle callback and
         * the code below is or does Gtk+ code */
 
        gdk_threads_enter (); /* CHECKED */
-       
+
        main_win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                      FALSE);
 
@@ -1227,7 +1300,7 @@ on_idle_top_application (gpointer user_data)
        }
 
        gdk_threads_leave (); /* CHECKED */
-       
+
        return FALSE; /* Do not call this callback again. */
 }
 #endif
@@ -1252,12 +1325,12 @@ on_idle_show_memory_low (gpointer user_data)
                                                dgettext("ke-recv","memr_ib_operation_disabled"),
                                                TRUE);
        gdk_threads_leave ();
-       
+
        return FALSE;
 }
-                      
+
 /* Callback for normal D-BUS messages */
-gint 
+gint
 modest_dbus_req_handler(const gchar * interface, const gchar * method,
                        GArray * arguments, gpointer data,
                        osso_rpc_t * retval)
@@ -1271,11 +1344,15 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method,
        if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_MAIL_TO) == 0) {
                if (arguments->len != MODEST_DBUS_MAIL_TO_ARGS_COUNT)
                        goto param_error;
-               return on_mail_to (arguments, data, retval);            
+               return on_mail_to (arguments, data, retval);
        } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_OPEN_MESSAGE) == 0) {
                if (arguments->len != MODEST_DBUS_OPEN_MESSAGE_ARGS_COUNT)
                        goto param_error;
                return on_open_message (arguments, data, retval);
+       } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_OPEN_ACCOUNT) == 0) {
+               if (arguments->len != MODEST_DBUS_OPEN_ACCOUNT_ARGS_COUNT)
+                       goto param_error;
+               return on_open_account (arguments, data, retval);
        } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_SEND_RECEIVE) == 0) {
                if (arguments->len != 0)
                        goto param_error;
@@ -1527,12 +1604,12 @@ on_dbus_method_search (DBusConnection *con, DBusMessage *message)
        }
 
        if (sd_v > 0) {
-               search->flags |= MODEST_SEARCH_BEFORE;
+               search->flags |= MODEST_SEARCH_AFTER;
                search->start_date = start_date;
        }
 
        if (ed_v > 0) {
-               search->flags |= MODEST_SEARCH_AFTER;
+               search->flags |= MODEST_SEARCH_BEFORE;
                search->end_date = end_date;
        }