X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fdbus_api%2Fmodest-dbus-callbacks.c;h=8bff930bf13e1628b7513ba1a9a4f13990edabc4;hp=f03629b899e9f0dad406f90e462bf03f77fac125;hb=d2154a1eb8e59adbb4e31a511c646a86541f2fe4;hpb=76380df99326d051264ab09a5e6ea192076bd4a9 diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index f03629b..8bff930 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -47,13 +47,8 @@ #include #include #include -#ifdef MODEST_HAVE_HILDON0_WIDGETS -#include -#include -#else #include #include -#endif #include #ifdef MODEST_TOOLKIT_HILDON2 @@ -261,7 +256,7 @@ on_mail_to(GArray * arguments, gpointer data, osso_rpc_t * retval) /* Note that we cannot report failures during sending, * because that would be asynchronous. */ - return OSSO_OK; + return OSSO_OK; } @@ -356,7 +351,7 @@ on_compose_mail(GArray * arguments, gpointer data, osso_rpc_t * retval) /* Use g_idle to context-switch into the application's thread: */ g_idle_add(on_idle_compose_mail, (gpointer)idle_data); - return OSSO_OK; + return OSSO_OK; } static TnyMsg * @@ -546,7 +541,7 @@ find_msg_async_cb (TnyFolder *folder, mail_op = modest_mail_operation_new (NULL); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); - modest_mail_operation_sync_folder (mail_op, folder, FALSE); + modest_mail_operation_sync_folder (mail_op, folder, FALSE, NULL, NULL); g_object_unref (mail_op); } g_object_unref (header); @@ -570,11 +565,11 @@ end: } -static void -on_open_message_performer (gboolean canceled, +static void +on_open_message_performer (gboolean canceled, GError *err, - GtkWindow *parent_window, - TnyAccount *account, + ModestWindow *parent_window, + TnyAccount *account, gpointer user_data) { OpenMsgPerformerInfo *info; @@ -656,11 +651,11 @@ on_idle_open_message_performer (gpointer user_data) /* Lock before the call as we're in an idle handler */ gdk_threads_enter (); if (info->connect) { - modest_platform_connect_and_perform (GTK_WINDOW (top_win), TRUE, - info->account, + modest_platform_connect_and_perform (top_win, TRUE, + info->account, on_open_message_performer, info); } else { - on_open_message_performer (FALSE, NULL, GTK_WINDOW (top_win), + on_open_message_performer (FALSE, NULL, top_win, info->account, info); } gdk_threads_leave (); @@ -919,7 +914,7 @@ on_delete_message (GArray *arguments, gpointer data, osso_rpc_t *retval) /* Use g_idle to context-switch into the application's thread: */ g_idle_add(on_idle_delete_message, (gpointer)uri); - return OSSO_OK; + return OSSO_OK; } typedef struct _SendReceivePerformerData { @@ -988,8 +983,6 @@ on_idle_send_receive(gpointer user_data) return FALSE; } - - static gint on_dbus_method_dump_send_queues (DBusConnection *con, DBusMessage *message) { @@ -1184,7 +1177,7 @@ on_dbus_method_dump_accounts (DBusConnection *con, DBusMessage *message) static void on_send_receive_performer(gboolean canceled, GError *err, - GtkWindow *parent_window, + ModestWindow *parent_window, TnyAccount *account, gpointer user_data) { @@ -1225,7 +1218,7 @@ on_send_receive(GArray *arguments, gpointer data, osso_rpc_t * retval) else on_send_receive_performer (FALSE, NULL, NULL, NULL, srp_data); - return OSSO_OK; + return OSSO_OK; } static gint @@ -1257,7 +1250,42 @@ on_send_receive_full (GArray *arguments, gpointer data, osso_rpc_t * retval) else on_send_receive_performer (FALSE, NULL, NULL, NULL, srp_data); - return OSSO_OK; + return OSSO_OK; +} + +static gboolean +on_idle_update_folder_counts (gpointer userdata) +{ + ModestMailOperation *mail_op; + gchar *account_id = (gchar *) userdata; + + mail_op = modest_mail_operation_new (NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_update_folder_counts (mail_op, account_id); + g_object_unref (mail_op); + g_free (account_id); + + return FALSE; + +} + +static gint +on_update_folder_counts (GArray *arguments, gpointer data, osso_rpc_t * retval) +{ + osso_rpc_t val; + gchar *account_id; + + val = g_array_index (arguments, osso_rpc_t, MODEST_DBUS_SEND_RECEIVE_FULL_ARG_ACCOUNT_ID); + account_id = g_strdup (val.value.s); + + if (account_id != NULL) { + g_idle_add (on_idle_update_folder_counts, g_strdup (account_id)); + } + + g_free (account_id); + + return OSSO_OK; } static gint @@ -1265,7 +1293,7 @@ on_open_default_inbox(GArray * arguments, gpointer data, osso_rpc_t * retval) { g_idle_add(on_idle_top_application, NULL); - return OSSO_OK; + return OSSO_OK; } @@ -1370,11 +1398,6 @@ on_idle_top_application (gpointer user_data) mgr = modest_runtime_get_window_mgr (); window = (GtkWidget *) modest_window_mgr_show_initial_window (mgr); - if (window) { - modest_platform_remove_new_mail_notifications (FALSE); - } else { - g_printerr ("modest: failed to get main window instance\n"); - } } gdk_threads_leave (); /* CHECKED */ @@ -1424,13 +1447,67 @@ on_idle_top_application (gpointer user_data) } #endif -static gint +static gint on_top_application(GArray * arguments, gpointer data, osso_rpc_t * retval) { /* Use g_idle to context-switch into the application's thread: */ g_idle_add(on_idle_top_application, NULL); - - return OSSO_OK; + + return OSSO_OK; +} + +static gboolean +on_idle_open_edit_accounts_dialog (gpointer user_data) +{ + ModestWindow *top; + ModestWindowMgr *mgr; + gboolean closed; + + /* This is a GDK lock because we are an idle callback and + * the code below is or does Gtk+ code */ + + gdk_threads_enter (); /* CHECKED */ + + mgr = modest_runtime_get_window_mgr (); + closed = modest_window_mgr_close_all_but_initial (mgr); + top = modest_window_mgr_get_current_top (mgr); + + if (closed) { + /* Show edit accounts dialog */ + modest_ui_actions_on_accounts (NULL, top); + } else { + gboolean has_accounts; + + has_accounts = modest_account_mgr_has_accounts (modest_runtime_get_account_mgr (), + TRUE); + + /* Present the current top window */ + gdk_threads_leave (); + on_idle_top_application (NULL); + gdk_threads_enter (); + + /* Show edit accounts dialog if we're launching the + program and there is no account (if there is at + least one account then on_idle_top_application will + show the accounts wizard */ + if (!top && has_accounts) { + top = modest_window_mgr_get_current_top (mgr); + modest_ui_actions_on_accounts (NULL, top); + } + } + + gdk_threads_leave (); /* CHECKED */ + + return FALSE; /* Do not call this callback again. */ +} + +static gint +on_open_edit_accounts_dialog (GArray * arguments, gpointer data, osso_rpc_t * retval) +{ + /* Use g_idle to context-switch into the application's thread: */ + g_idle_add (on_idle_open_edit_accounts_dialog, NULL); + + return OSSO_OK; } static gboolean @@ -1483,17 +1560,14 @@ 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; - modest_runtime_set_allow_shutdown (TRUE); 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; - modest_runtime_set_allow_shutdown (TRUE); 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; - modest_runtime_set_allow_shutdown (TRUE); return on_open_account (arguments, data, retval); } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_SEND_RECEIVE) == 0) { if (arguments->len != 0) @@ -1503,10 +1577,13 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method, if (arguments->len != MODEST_DBUS_SEND_RECEIVE_FULL_ARGS_COUNT) goto param_error; return on_send_receive_full (arguments, data, retval); + } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_UPDATE_FOLDER_COUNTS) == 0) { + if (arguments->len != MODEST_DBUS_UPDATE_FOLDER_COUNTS_ARGS_COUNT) + goto param_error; + return on_update_folder_counts (arguments, data, retval); } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_COMPOSE_MAIL) == 0) { if (arguments->len != MODEST_DBUS_COMPOSE_MAIL_ARGS_COUNT) goto param_error; - modest_runtime_set_allow_shutdown (TRUE); return on_compose_mail (arguments, data, retval); } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_DELETE_MESSAGE) == 0) { if (arguments->len != MODEST_DBUS_DELETE_MESSAGE_ARGS_COUNT) @@ -1515,14 +1592,16 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method, } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_OPEN_DEFAULT_INBOX) == 0) { if (arguments->len != 0) goto param_error; - modest_runtime_set_allow_shutdown (TRUE); return on_open_default_inbox (arguments, data, retval); } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_TOP_APPLICATION) == 0) { if (arguments->len != 0) goto param_error; - modest_runtime_set_allow_shutdown (TRUE); - return on_top_application (arguments, data, retval); - } else { + return on_top_application (arguments, data, retval); + } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_OPEN_EDIT_ACCOUNTS_DIALOG) == 0) { + if (arguments->len != 0) + goto param_error; + return on_open_edit_accounts_dialog (arguments, data, retval); + } else { /* We need to return INVALID here so * libosso will return DBUS_HANDLER_RESULT_NOT_YET_HANDLED, * so that our modest_dbus_req_filter will then be tried instead.