X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fdbus_api%2Fmodest-dbus-callbacks.c;h=64bca8e84e88cc02c2197e715fb3421361eff086;hp=61b749504319d9a485f02348f723dcd5c8ab5947;hb=ceb738aa17582bc899c28c4df84719db60975144;hpb=c8197a3a48140d14fbe553c5947a75b4212175cf diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index 61b7495..64bca8e 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -38,6 +38,7 @@ #include "modest-debug.h" #include "modest-search.h" #include "widgets/modest-msg-edit-window.h" +#include "widgets/modest-window-mgr.h" #include "modest-tny-msg.h" #include "modest-platform.h" #include "modest-defs.h" @@ -60,6 +61,7 @@ #include #include #include +#include #endif #include @@ -627,7 +629,8 @@ on_open_message_performer (gboolean canceled, gtk_widget_show_all (GTK_WIDGET (msg_view)); } } - g_object_unref (account); + if (account) + g_object_unref (account); } on_find_msg_async_destroy (info); @@ -923,6 +926,9 @@ static gboolean on_idle_send_receive(gpointer user_data) { gboolean auto_update; + ModestMailOperation *mail_op = (ModestMailOperation *) user_data; + ModestConnectedVia connect_when; + gdk_threads_enter (); /* CHECKED */ @@ -930,14 +936,29 @@ on_idle_send_receive(gpointer user_data) auto_update = modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_AUTO_UPDATE, NULL); - if (auto_update) + if (auto_update) { /* Do send receive. Never set the current top window as we always assume that DBus send/receive requests are not user driven */ - modest_ui_actions_do_send_receive_all (NULL, FALSE, FALSE, FALSE); - else + + 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 ()) { + modest_ui_actions_do_send_receive_all (NULL, FALSE, FALSE, FALSE); + } + } else { /* Disable auto update */ modest_platform_set_update_interval (0); + } + + modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), + mail_op); + + g_object_unref (mail_op); gdk_threads_leave (); /* CHECKED */ @@ -1144,26 +1165,17 @@ on_send_receive_performer(gboolean canceled, TnyAccount *account, gpointer user_data) { - ModestConnectedVia connect_when; + ModestMailOperation *mail_op; if (err || canceled) { g_idle_add (notify_error_in_dbus_callback, NULL); return; } - 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 ()) { - g_idle_add (on_idle_send_receive, NULL); - } else { - /* We need this to allow modest to finish */ - g_idle_add (notify_error_in_dbus_callback, NULL); - } + mail_op = modest_mail_operation_new (NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_heartbeat_add (on_idle_send_receive, mail_op); } @@ -1206,32 +1218,30 @@ on_idle_open_account (gpointer user_data) top = modest_window_mgr_show_initial_window (mgr); #ifdef MODEST_TOOLKIT_HILDON2 - if (MODEST_IS_ACCOUNTS_WINDOW (top)) { - GtkWidget *new_window; - ModestProtocolType store_protocol; - gboolean mailboxes_protocol; - - store_protocol = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), - acc_name); - mailboxes_protocol = - modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (), - store_protocol, - MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS); - - if (mailboxes_protocol) { - new_window = GTK_WIDGET (modest_mailboxes_window_new (acc_name)); - } else { - new_window = GTK_WIDGET (modest_folder_window_new (NULL)); - modest_folder_window_set_account (MODEST_FOLDER_WINDOW (new_window), - acc_name); - } + GtkWidget *new_window; + ModestProtocolType store_protocol; + gboolean mailboxes_protocol; + + store_protocol = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), + acc_name); + mailboxes_protocol = + modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (), + store_protocol, + MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS); + + if (mailboxes_protocol) { + new_window = GTK_WIDGET (modest_mailboxes_window_new (acc_name)); + } else { + new_window = GTK_WIDGET (modest_folder_window_new (NULL)); + modest_folder_window_set_account (MODEST_FOLDER_WINDOW (new_window), + acc_name); + } - if (modest_window_mgr_register_window (mgr, MODEST_WINDOW (new_window), NULL)) { - gtk_widget_show (new_window); - } else { - gtk_widget_destroy (new_window); - new_window = NULL; - } + if (modest_window_mgr_register_window (mgr, MODEST_WINDOW (new_window), NULL)) { + gtk_widget_show (new_window); + } else { + gtk_widget_destroy (new_window); + new_window = NULL; } #else if (MODEST_IS_MAIN_WINDOW (top)) { @@ -1370,18 +1380,38 @@ on_idle_show_memory_low (gpointer user_data) return FALSE; } +static gboolean +on_idle_present_modal (gpointer user_data) +{ + gdk_threads_enter (); + gtk_window_present (user_data); + gdk_threads_leave (); + + return FALSE; +} + + /* Callback for normal D-BUS messages */ gint modest_dbus_req_handler(const gchar * interface, const gchar * method, GArray * arguments, gpointer data, osso_rpc_t * retval) { + GtkWindow *dialog; + /* Check memory low conditions */ if (modest_platform_check_memory_low (NULL, FALSE)) { g_idle_add (on_idle_show_memory_low, NULL); goto param_error; } + /* Check if there is already a dialog or note open */ + dialog = modest_window_mgr_get_modal (modest_runtime_get_window_mgr()); + if (dialog) { + g_idle_add (on_idle_present_modal, dialog); + return OSSO_OK; + } + if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_MAIL_TO) == 0) { if (arguments->len != MODEST_DBUS_MAIL_TO_ARGS_COUNT) goto param_error; @@ -1432,7 +1462,7 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method, g_idle_add (notify_error_in_dbus_callback, NULL); return OSSO_ERROR; } - + /* A complex D-Bus type (like a struct), * used to return various information about a search hit. */