X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-platform.c;h=aa0ef8d3e7855d2262dc6babbbb4988ee836341b;hp=614aa13e156831da54767d25a6db98009bcece7f;hb=09dfe9998a95da74c29035fd1a19332be0737cad;hpb=454354bdd5a2370614e99d0a95b5d016b4467f17 diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index 614aa13..aa0ef8d 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -40,7 +40,6 @@ #include #include #include -#include /* For alarm_event_add(), etc. */ #include #include #include @@ -58,12 +57,14 @@ #include #endif /*MODEST_HAVE_ABOOK*/ +#ifdef MODEST_HAVE_LIBALARM +#include /* For alarm_event_add(), etc. */ +#endif /*MODEST_HAVE_LIBALARM*/ + #define HILDON_OSSO_URI_ACTION "uri-action" #define URI_ACTION_COPY "copy:" -static osso_context_t *osso_context = NULL; /* urgh global */ - static void on_modest_conf_update_interval_changed (ModestConf* self, const gchar *key, @@ -101,10 +102,12 @@ check_required_files (void) } - +/* the gpointer here is the osso_context. */ gboolean modest_platform_init (int argc, char *argv[]) { + osso_context_t *osso_context; + osso_hw_state_t hw_state = { 0 }; DBusConnection *con; GSList *acc_names; @@ -113,20 +116,18 @@ modest_platform_init (int argc, char *argv[]) g_printerr ("modest: missing required files\n"); return FALSE; } - - osso_context = - osso_initialize(PACKAGE,PACKAGE_VERSION, - FALSE, NULL); + osso_context = osso_initialize(PACKAGE,PACKAGE_VERSION, + FALSE, NULL); if (!osso_context) { g_printerr ("modest: failed to acquire osso context\n"); return FALSE; } + modest_maemo_utils_set_osso_context (osso_context); if ((con = osso_get_dbus_connection (osso_context)) == NULL) { g_printerr ("modest: could not get dbus connection\n"); return FALSE; - } /* Add a D-Bus handler to be used when the main osso-rpc @@ -151,20 +152,9 @@ modest_platform_init (int argc, char *argv[]) modest_dbus_req_handler, NULL /* user_data */); if (result != OSSO_OK) { g_printerr ("modest: Error setting D-BUS callback (%d)\n", result); - return FALSE; + return FALSE; } - /* Add handler for Exit D-BUS messages. - * Not used because osso_application_set_exit_cb() is deprecated and obsolete: - result = osso_application_set_exit_cb(osso_context, - modest_dbus_exit_event_handler, - (gpointer) NULL); - if (result != OSSO_OK) { - g_print("Error setting exit callback (%d)\n", result); - return OSSO_ERROR; - } - */ - /* Register hardware event dbus callback: */ hw_state.shutdown_ind = TRUE; osso_hw_set_event_cb(osso_context, NULL,/*&hw_state*/ modest_osso_cb_hw_state_handler, NULL); @@ -211,10 +201,23 @@ modest_platform_init (int argc, char *argv[]) } #endif /*MODEST_HAVE_ABOOK*/ + return TRUE; +} + +gboolean +modest_platform_uninit (void) +{ + osso_context_t *osso_context = + modest_maemo_utils_get_osso_context (); + if (osso_context) + osso_deinitialize (osso_context); return TRUE; } + + + TnyDevice* modest_platform_get_new_device (void) { @@ -304,7 +307,7 @@ modest_platform_activate_file (const gchar *path, const gchar *mime_type) gchar *uri_path = NULL; uri_path = g_strconcat ("file://", path, NULL); - con = osso_get_dbus_connection (osso_context); + con = osso_get_dbus_connection (modest_maemo_utils_get_osso_context()); if (mime_type) result = hildon_mime_open_file_with_mime_type (con, uri_path, mime_type); @@ -565,8 +568,9 @@ launch_sort_headers_dialog (GtkWindow *parent_window, header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(parent_window), MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW)); } - if (!header_view) return; - + if (!header_view) + return; + /* Add sorting keys */ cols = modest_header_view_get_columns (header_view); if (cols == NULL) return; @@ -616,8 +620,9 @@ launch_sort_headers_dialog (GtkWindow *parent_window, sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN; sort_ids[sort_key] = TNY_HEADER_FLAG_PRIORITY_MASK; priority_sort_id = sort_key; - - sortable = GTK_TREE_SORTABLE (gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view))))); + + sortable = GTK_TREE_SORTABLE (gtk_tree_model_filter_get_model + (GTK_TREE_MODEL_FILTER (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view))))); /* Launch dialogs */ if (!gtk_tree_sortable_get_sort_column_id (sortable, ¤t_sort_colid, ¤t_sort_type)) { @@ -1142,7 +1147,11 @@ modest_platform_run_sort_dialog (GtkWindow *parent_window, dialog = hildon_sort_dialog_new (parent_window); modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); - + + hildon_help_dialog_help_enable (GTK_DIALOG(dialog), + "applications_email_sort", + modest_maemo_utils_get_osso_context()); + /* Fill sort keys */ switch (type) { case MODEST_SORT_HEADERS: @@ -1159,6 +1168,8 @@ modest_platform_run_sort_dialog (GtkWindow *parent_window, gboolean modest_platform_set_update_interval (guint minutes) { +#ifdef MODEST_HAVE_LIBALARM + ModestConf *conf = modest_runtime_get_conf (); if (!conf) return FALSE; @@ -1237,7 +1248,7 @@ modest_platform_set_update_interval (guint minutes) return FALSE; } - +#endif /* MODEST_HAVE_LIBALARM */ return TRUE; } @@ -1256,12 +1267,14 @@ modest_platform_on_new_headers_received (TnyList *header_list) iter = tny_list_create_iterator (header_list); while (!tny_iterator_is_done (iter)) { - gchar *url = NULL, *display_address = NULL, *display_date = NULL, *summary = NULL; + gchar *url = NULL, *display_address = NULL, *summary = NULL; + const gchar *display_date; TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter)); TnyFolder *folder = tny_header_get_folder (header); gboolean first_notification = TRUE; gint notif_id; - + + /* constant string, don't free */ display_date = modest_text_utils_get_display_date (tny_header_get_date_received (header)); display_address = g_strdup(tny_header_get_from (header)); @@ -1272,7 +1285,6 @@ modest_platform_on_new_headers_received (TnyList *header_list) tny_header_get_subject (header), "qgn_list_messagin", "email.arrive"); - /* Create the message URL */ url = g_strdup_printf ("%s/%s", tny_folder_get_url_string (folder), tny_header_get_uid (header)); @@ -1318,7 +1330,6 @@ modest_platform_on_new_headers_received (TnyList *header_list) not to store the list in gconf */ /* Free & carry on */ - g_free (display_date); g_free (display_address); g_free (summary); g_free (url); @@ -1390,12 +1401,11 @@ modest_platform_show_help (GtkWindow *parent_window, const gchar *help_id) { osso_return_t result; - g_return_if_fail (help_id); - g_return_if_fail (osso_context); - - result = hildon_help_show (osso_context, help_id, HILDON_HELP_SHOW_DIALOG); + result = hildon_help_show (modest_maemo_utils_get_osso_context(), + help_id, HILDON_HELP_SHOW_DIALOG); + if (result != OSSO_OK) { gchar *error_msg; error_msg = g_strdup_printf ("FIXME The help topic %s could not be found", help_id); @@ -1406,28 +1416,14 @@ modest_platform_show_help (GtkWindow *parent_window, } } -void -modest_platform_set_dialog_help (GtkDialog *parent_window, - const gchar *help_id) -{ - gboolean result; - g_return_if_fail (help_id); - g_return_if_fail (osso_context); - g_return_if_fail (GTK_IS_DIALOG (parent_window)); - - result = hildon_help_dialog_help_enable (parent_window, help_id, osso_context); - - if (!result) - g_warning ("Help topic %s not found", help_id); - -} - void modest_platform_show_search_messages (GtkWindow *parent_window) { osso_return_t result = OSSO_ERROR; - result = osso_rpc_run_with_defaults (osso_context, "osso_global_search", "search_email", NULL, DBUS_TYPE_INVALID); + result = osso_rpc_run_with_defaults (modest_maemo_utils_get_osso_context(), + "osso_global_search", + "search_email", NULL, DBUS_TYPE_INVALID); if (result != OSSO_OK) { g_warning ("%s: osso_rpc_run_with_defaults() failed.\n", __FUNCTION__); @@ -1439,7 +1435,9 @@ modest_platform_show_addressbook (GtkWindow *parent_window) { osso_return_t result = OSSO_ERROR; - result = osso_rpc_run_with_defaults (osso_context, "osso_addressbook", "top_application", NULL, DBUS_TYPE_INVALID); + result = osso_rpc_run_with_defaults (modest_maemo_utils_get_osso_context(), + "osso_addressbook", + "top_application", NULL, DBUS_TYPE_INVALID); if (result != OSSO_OK) { g_warning ("%s: osso_rpc_run_with_defaults() failed.\n", __FUNCTION__); @@ -1501,18 +1499,11 @@ on_timeout_check_account_is_online(gpointer user_data) { printf ("DEBUG: %s:\n", __FUNCTION__); CheckAccountIdleData *data = (CheckAccountIdleData*)user_data; + + g_return_val_if_fail (data && data->account, FALSE); - if (!data) { - g_warning ("%s: data is NULL.\n", __FUNCTION__); - } - - if (!(data->account)) { - g_warning ("%s: data->account is NULL.\n", __FUNCTION__); - } - - if (data && data->account) { - printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n", __FUNCTION__, tny_account_get_connection_status (data->account)); - } + printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n", __FUNCTION__, + tny_account_get_connection_status (data->account)); gboolean stop_trying = FALSE; if (data && data->account && @@ -1637,14 +1628,24 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name, { GtkWidget *note; gint response; - GtkWindow *main_win = - (GtkWindow*)modest_window_mgr_get_main_window (modest_runtime_get_window_mgr()); + ModestWindow *main_win; + + if (!modest_window_mgr_main_window_exists (modest_runtime_get_window_mgr())) { + g_warning ("%s: don't show dialogs if there's no main window; assuming 'Cancel'", + __FUNCTION__); + return FALSE; + } + /* don't create it */ + main_win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE); + g_return_val_if_fail (main_win, FALSE); /* should not happen */ + + gchar *question = g_strdup_printf (_("mcen_nc_unknown_certificate"), server_name); note = hildon_note_new_confirmation_add_buttons ( - main_win, + GTK_WINDOW(main_win), question, _("mcen_bd_dialog_ok"), GTK_RESPONSE_OK, _("mcen_bd_view"), GTK_RESPONSE_HELP, /* abusing this... */ @@ -1671,8 +1672,16 @@ gboolean modest_platform_run_alert_dialog (const gchar* prompt, gboolean is_question) { - ModestWindow *main_window = - modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ()); + ModestWindow *main_win; + + if (!modest_window_mgr_main_window_exists (modest_runtime_get_window_mgr())) { + g_warning ("%s:\n'%s'\ndon't show dialogs if there's no main window;" + " assuming 'Cancel' for questions, 'Ok' otherwise", prompt, __FUNCTION__); + return is_question ? FALSE : TRUE; + } + + main_win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); + g_return_val_if_fail (main_win, FALSE); /* should not happen */ gboolean retval = TRUE; if (is_question) { @@ -1680,7 +1689,7 @@ modest_platform_run_alert_dialog (const gchar* prompt, * when it is a question. * Obviously, we need tinymail to use more specific error codes instead, * so we know what buttons to show. */ - GtkWidget *dialog = GTK_WIDGET (hildon_note_new_confirmation (GTK_WINDOW (main_window), + GtkWidget *dialog = GTK_WIDGET (hildon_note_new_confirmation (GTK_WINDOW (main_win), prompt)); modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); @@ -1691,7 +1700,7 @@ modest_platform_run_alert_dialog (const gchar* prompt, on_destroy_dialog (GTK_DIALOG(dialog)); } else { /* Just show the error text and use the default response: */ - modest_platform_run_information_dialog (GTK_WINDOW (main_window), + modest_platform_run_information_dialog (GTK_WINDOW (main_win), prompt); } return retval;