X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fdbus_api%2Fmodest-dbus-callbacks.c;h=d8d2abb35cf9e26d5d84cf259bcd9e3d99f2c605;hp=dba54092c67049d6665c6885f503441b977ce526;hb=c99eb2da3fb8c78077e17c8e873e7d4cb20b587b;hpb=1e2df2db3f610fd81169e327d72230f9b8d57ccf;ds=sidebyside diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index dba5409..d8d2abb 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -34,6 +34,7 @@ #include "modest-tny-account.h" #include "modest-tny-folder.h" #include "modest-ui-actions.h" +#include "modest-utils.h" #include "modest-debug.h" #include "modest-search.h" #include "widgets/modest-msg-edit-window.h" @@ -45,12 +46,20 @@ #include #include #ifdef MODEST_HAVE_HILDON0_WIDGETS +#include #include #else +#include #include #endif #include +#ifdef MODEST_TOOLKIT_HILDON2 +#include +#include +#include +#endif + #include #include #include @@ -397,15 +406,17 @@ typedef struct { GtkWidget *animation; } OpenMsgPerformerInfo; +#ifndef MODEST_TOOLKIT_HILDON2 static gboolean on_show_opening_animation (gpointer userdata) { OpenMsgPerformerInfo *info = (OpenMsgPerformerInfo *) userdata; info->animation = modest_platform_animation_banner (NULL, NULL, _("mail_me_opening")); info->animation_timeout = 0; - + return FALSE; } +#endif static gboolean on_find_msg_async_destroy (gpointer userdata) @@ -455,7 +466,6 @@ 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); - g_object_unref (msg); 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; @@ -500,27 +510,12 @@ find_msg_async_cb (TnyFolder *folder, } from_header = tny_header_dup_from (header); - if (from_header) { - GSList *accounts = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE); - GSList *node = NULL; - for (node = accounts; node != NULL; node = g_slist_next (node)) { - gchar *from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr (), node->data); - - if (from && (strcmp (from_header, from) == 0)) { - g_free (modest_account_name); - modest_account_name = g_strdup (node->data); - g_free (from); - break; - } - g_free (from); - } - g_slist_foreach (accounts, (GFunc) g_free, NULL); - g_slist_free (accounts); - g_free (from_header); - } + modest_account_name = modest_utils_get_account_name_from_recipient (from_header); + g_free (from_header); if (modest_account_name == NULL) { - modest_account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ()); + ModestAccountMgr *mgr = modest_runtime_get_account_mgr (); + modest_account_name = modest_account_mgr_get_default_account (mgr); } msg_view = modest_msg_edit_window_new (msg, modest_account_name, TRUE); g_free (modest_account_name); @@ -552,14 +547,16 @@ find_msg_async_cb (TnyFolder *folder, } if (msg_view != NULL) { - modest_window_mgr_register_window (win_mgr, msg_view); - gtk_widget_show_all (GTK_WIDGET (msg_view)); + if (!modest_window_mgr_register_window (win_mgr, msg_view, NULL)) { + gtk_widget_destroy (GTK_WIDGET (msg_view)); + } else { + gtk_widget_show_all (GTK_WIDGET (msg_view)); + } } } cleanup: g_object_unref (header); - g_object_unref (msg); end: on_find_msg_async_destroy (info); @@ -588,7 +585,7 @@ on_open_message_performer (gboolean canceled, if (!account) { ModestTnyAccountStore *account_store; ModestTnyLocalFoldersAccount *local_folders_account; - + 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)); @@ -603,8 +600,9 @@ on_open_message_performer (gboolean canceled, on_find_msg_async_destroy (info); return; } - +#ifndef MODEST_TOOLKIT_HILDON2 info->animation_timeout = g_timeout_add (1000, on_show_opening_animation, info); +#endif /* Get message */ tny_folder_find_msg_async (folder, info->uri, find_msg_async_cb, NULL, info); g_object_unref (folder); @@ -721,7 +719,6 @@ on_remove_msgs_finished (ModestMailOperation *mail_op, { TnyHeader *header; ModestWindow *main_win = NULL, *msg_view = NULL; - ModestHeaderView *header_view; header = (TnyHeader *) user_data; @@ -740,16 +737,14 @@ on_remove_msgs_finished (ModestMailOperation *mail_op, } g_object_unref (header); - /* Refilter the header view explicitly */ - header_view = (ModestHeaderView *) - modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(main_win), - MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); - if (header_view && MODEST_IS_HEADER_VIEW (header_view)) - modest_header_view_refilter (header_view); + /* Refilter the header views explicitely */ + + /* TODO: call modest_window_mgr_refilter_header_views */ + /* this call will go through all the windows, get the header views and refilter them */ } -static gboolean -on_idle_delete_message (gpointer user_data) +static gpointer +thread_prepare_delete_message (gpointer userdata) { TnyList *headers = NULL, *tmp_headers = NULL; TnyFolder *folder = NULL; @@ -757,13 +752,13 @@ on_idle_delete_message (gpointer user_data) TnyHeader *header = NULL, *msg_header = NULL; TnyMsg *msg = NULL; TnyAccount *account = NULL; - const char *uri = NULL; + char *uri; gchar *uid = NULL; ModestMailOperation *mail_op = NULL; ModestWindow *main_win = NULL; - uri = (char *) user_data; - + uri = (char *) userdata; + msg = find_message_by_url (uri, &account); if (account) g_object_unref (account); @@ -771,6 +766,7 @@ on_idle_delete_message (gpointer user_data) if (!msg) { g_warning ("%s: Could not find message '%s'", __FUNCTION__, uri); g_idle_add (notify_error_in_dbus_callback, NULL); + g_free (uri); return FALSE; } @@ -782,6 +778,7 @@ on_idle_delete_message (gpointer user_data) g_warning ("%s: Could not find folder (uri:'%s')", __FUNCTION__, uri); g_object_unref (msg); g_idle_add (notify_error_in_dbus_callback, NULL); + g_free (uri); return FALSE; } @@ -824,6 +821,7 @@ on_idle_delete_message (gpointer user_data) if (folder) g_object_unref (folder); g_idle_add (notify_error_in_dbus_callback, NULL); + g_free (uri); return FALSE; } @@ -851,10 +849,24 @@ on_idle_delete_message (gpointer user_data) /* Clean */ if (header) g_object_unref (header); + g_free (uri); return FALSE; } +static gboolean +on_idle_delete_message (gpointer user_data) +{ + const char *uri = NULL; + + uri = (char *) user_data; + + g_thread_create (thread_prepare_delete_message, g_strdup (uri), FALSE, NULL); + + return FALSE; + +} + @@ -1145,7 +1157,40 @@ on_open_default_inbox(GArray * arguments, gpointer data, osso_rpc_t * retval) return OSSO_OK; } +#ifdef MODEST_TOOLKIT_HILDON2 +static gboolean +on_idle_top_application (gpointer user_data) +{ + HildonWindowStack *stack; + GtkWidget *window; + + /* This is a GDK lock because we are an idle callback and + * the code below is or does Gtk+ code */ + + gdk_threads_enter (); /* CHECKED */ + + stack = hildon_window_stack_get_default (); + window = GTK_WIDGET (hildon_window_stack_peek (stack)); + + if (window) { + gtk_window_present (GTK_WINDOW (window)); + } else { + ModestWindowMgr *mgr; + + 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 */ + + return FALSE; /* Do not call this callback again. */ +} +#else static gboolean on_idle_top_application (gpointer user_data) { @@ -1167,11 +1212,6 @@ on_idle_top_application (gpointer user_data) } if (main_win) { - /* Ideally, we would just use gtk_widget_show(), - * but this widget is not coded correctly to support that: */ - gtk_widget_show_all (GTK_WIDGET (main_win)); - gtk_window_present (GTK_WINDOW (main_win)); - /* If we're showing an already existing window then reselect the INBOX */ if (!new_window) { @@ -1182,10 +1222,16 @@ on_idle_top_application (gpointer user_data) } } + if (main_win) { + gtk_widget_show_all (GTK_WIDGET (main_win)); + gtk_window_present (GTK_WINDOW (main_win)); + } + gdk_threads_leave (); /* CHECKED */ return FALSE; /* Do not call this callback again. */ } +#endif static gint on_top_application(GArray * arguments, gpointer data, osso_rpc_t * retval) @@ -1661,6 +1707,7 @@ add_folders_to_list (TnyFolderStore *folder_store, GList** list) tny_folder_store_get_folders (folder_store, all_folders, NULL /* query */, + FALSE, NULL /* error */); TnyIterator *iter = tny_list_create_iterator (all_folders);