X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-platform.c;h=a435c17e8741611f4d20de90b7b1219a52962f9c;hb=b915850d41f5f4912cff1f36c5d96e4e00093d93;hp=8bf47cc49f68b888332ca780266def4e60d584b3;hpb=d113e366426368f815589e3e641e9089a52f4798;p=modest diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index 8bf47cc..a435c17 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -32,8 +32,8 @@ #include #include +#include #include -#include #include #include "modest-hildon2-global-settings-dialog.h" #include "modest-widget-memory.h" @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -64,10 +63,11 @@ #include #include #include "hildon2/modest-hildon2-details-dialog.h" -#include "hildon2/modest-hildon2-window-mgr.h" +#include "widgets/modest-window-mgr.h" +#include "widgets/modest-msg-view-window.h" #ifdef MODEST_USE_PROFILE -#include -#include +#include +#include #endif #include #include @@ -79,6 +79,7 @@ #include #include #include +#include #ifdef MODEST_HAVE_MCE #include @@ -96,7 +97,7 @@ #define HILDON_OSSO_URI_ACTION "uri-action" #define URI_ACTION_COPY "copy:" #define MODEST_NOTIFICATION_CATEGORY "email-message" -#define MODEST_NEW_MAIL_LIGHTING_PATTERN "PatternCommunicationEmail" +#define MODEST_NEW_MAIL_LIGHTING_PATTERN "PatternChatAndEmail" #ifdef MODEST_USE_PROFILE #define PROFILE_MAIL_TONE PROFILEKEY_EMAIL_ALERT_TONE #define PROFILE_MAIL_VOLUME PROFILEKEY_EMAIL_ALERT_VOLUME @@ -111,6 +112,7 @@ #define MODEST_ALARMD_APPID PACKAGE_NAME static ca_context *ca_con = NULL; +static gboolean ca_con_opened = FALSE; static void modest_platform_play_email_tone (void); @@ -137,26 +139,21 @@ on_modest_conf_update_interval_changed (ModestConf* self, static gboolean check_required_files (void) { - FILE *mcc_file = modest_utils_open_mcc_mapping_file (FALSE, NULL); + FILE *mcc_file = modest_utils_open_mcc_mapping_file (); + if (!mcc_file) { g_printerr ("modest: check for mcc file (for LANG) failed\n"); return FALSE; - } else - fclose (mcc_file); - - mcc_file = modest_utils_open_mcc_mapping_file (TRUE, NULL); - if (!mcc_file) { - g_printerr ("modest: check for mcc file (for LC_MESSAGES) failed\n"); - return FALSE; - } else + } else { fclose (mcc_file); - + } + if (access(MODEST_PROVIDER_DATA_FILE, R_OK) != 0 && access(MODEST_FALLBACK_PROVIDER_DATA_FILE, R_OK) != 0) { g_printerr ("modest: cannot find providers data\n"); return FALSE; } - + return TRUE; } @@ -211,15 +208,6 @@ modest_platform_init (int argc, char *argv[]) hw_state.shutdown_ind = TRUE; osso_hw_set_event_cb(osso_context, NULL, NULL, NULL); - /* Register osso auto-save callbacks: */ - result = osso_application_set_autosave_cb (osso_context, - modest_on_osso_application_autosave, NULL /* user_data */); - if (result != OSSO_OK) { - g_printerr ("modest: osso_application_set_autosave_cb() failed.\n"); - return FALSE; - } - - /* Make sure that the update interval is changed whenever its gconf key * is changed */ /* CAUTION: we're not using here the @@ -340,7 +328,7 @@ modest_platform_activate_uri (const gchar *uri) HildonURIAction *action; gboolean result = FALSE; GSList *actions, *iter = NULL; - + g_return_val_if_fail (uri, FALSE); if (!uri) return FALSE; @@ -348,9 +336,9 @@ modest_platform_activate_uri (const gchar *uri) /* don't try to activate file: uri's -- they might confuse the user, * and/or might have security implications */ if (!g_str_has_prefix (uri, "file:")) { - + actions = hildon_uri_get_actions_by_uri (uri, -1, NULL); - + for (iter = actions; iter; iter = g_slist_next (iter)) { action = (HildonURIAction*) iter->data; if (action && strcmp (hildon_uri_action_get_service (action), @@ -359,20 +347,20 @@ modest_platform_activate_uri (const gchar *uri) break; } } - + /* if we could not open it with email, try something else */ if (!result) - result = checked_hildon_uri_open (uri, NULL); - } - + result = checked_hildon_uri_open (uri, NULL); + } + if (!result) { ModestWindow *parent = - modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE); + modest_window_mgr_get_current_top (modest_runtime_get_window_mgr()); hildon_banner_show_information (parent ? GTK_WIDGET(parent): NULL, NULL, _("mcen_ib_unsupported_link")); g_debug ("%s: cannot open uri '%s'", __FUNCTION__,uri); - } - + } + return result; } @@ -432,23 +420,24 @@ activate_uri_popup_item (GtkMenuItem *menu_item, /* if it's a copy thingy, the uri will look like 'copy:http://slashdot.org' */ if (g_str_has_prefix (action_name, URI_ACTION_COPY)) { GtkClipboard *clipboard = gtk_clipboard_get (GDK_NONE); - action_name += strlen(URI_ACTION_COPY); /* jump past the prefix */ + const gchar *uri = (const gchar *) popup_info->uri; - if (g_str_has_prefix (action_name, "mailto:")) /* ignore mailto: prefixes */ - action_name += strlen ("mailto:"); - - gtk_clipboard_set_text (clipboard, action_name, strlen (action_name)); - modest_platform_information_banner (NULL, NULL, _CS("ecoc_ib_edwin_copied")); + /* Special case: ignore "mailto:" prefixes */ + if (g_str_has_prefix (uri, "mailto:")) + uri = popup_info->uri + strlen ("mailto:"); + + gtk_clipboard_set_text (clipboard, uri, strlen (uri)); + modest_platform_information_banner (NULL, NULL, _CS_COPIED); return; /* we're done */ } - + /* now, the real uri-actions... */ for (node = popup_info->actions; node != NULL; node = g_slist_next (node)) { HildonURIAction *action = (HildonURIAction *) node->data; if (strcmp (action_name, hildon_uri_action_get_name (action))==0) { if (!checked_hildon_uri_open (popup_info->uri, action)) { ModestWindow *parent = - modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE); + modest_window_mgr_get_current_top (modest_runtime_get_window_mgr()); hildon_banner_show_information (parent ? GTK_WIDGET(parent): NULL, NULL, _("mcen_ib_unsupported_link")); } @@ -457,60 +446,67 @@ activate_uri_popup_item (GtkMenuItem *menu_item, } } -gboolean +gboolean modest_platform_show_uri_popup (const gchar *uri) { - GSList *actions_list; + GSList *actions_list, *node; + GtkWidget *menu; + ModestPlatformPopupInfo *popup_info; + GtkWidget *menu_item; if (uri == NULL) return FALSE; - - actions_list = hildon_uri_get_actions_by_uri (uri, -1, NULL); - if (actions_list) { - GtkWidget *menu = gtk_menu_new (); - ModestPlatformPopupInfo *popup_info = g_new0 (ModestPlatformPopupInfo, 1); - - /* don't add actions for file: uri's -- they might confuse the user, - * and/or might have security implications - * we still allow to copy the url though - */ - if (!g_str_has_prefix (uri, "file:")) { - - GSList *node; - popup_info->actions = actions_list; - popup_info->uri = g_strdup (uri); - - for (node = actions_list; node != NULL; node = g_slist_next (node)) { - GtkWidget *menu_item; - const gchar *action_name; - const gchar *translation_domain; - HildonURIAction *action = (HildonURIAction *) node->data; - action_name = hildon_uri_action_get_name (action); - translation_domain = hildon_uri_action_get_translation_domain (action); - menu_item = gtk_menu_item_new_with_label (dgettext(translation_domain, action_name)); - g_object_set_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, (gpointer)action_name); /* hack */ - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), - popup_info); - - if (hildon_uri_is_default_action (action, NULL)) { - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); - } else { - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); - } - gtk_widget_show (menu_item); - } - } + /* Create menu */ + menu = gtk_menu_new (); + popup_info = g_new0 (ModestPlatformPopupInfo, 1); + popup_info->uri = g_strdup (uri); + /* don't add actions for file: uri's -- they might confuse the user, + * and/or might have security implications + * we still allow to copy the url though + */ + if (g_str_has_prefix (uri, "file:")) + goto add_copy_link; - /* and what to do when the link is deleted */ - g_signal_connect (G_OBJECT (menu), "delete-event", G_CALLBACK (delete_uri_popup), popup_info); - gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time ()); + actions_list = hildon_uri_get_actions_by_uri (uri, -1, NULL); + if (!actions_list) + goto add_copy_link; - } else { - hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); + popup_info->actions = actions_list; + for (node = actions_list; node != NULL; node = g_slist_next (node)) { + const gchar *action_name; + const gchar *translation_domain; + HildonURIAction *action = (HildonURIAction *) node->data; + action_name = hildon_uri_action_get_name (action); + translation_domain = hildon_uri_action_get_translation_domain (action); + menu_item = gtk_menu_item_new_with_label (dgettext(translation_domain, action_name)); + hildon_gtk_widget_set_theme_size (menu_item, MODEST_EDITABLE_SIZE); + g_object_set_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, (gpointer)action_name); /* hack */ + g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item), + popup_info); + + if (hildon_uri_is_default_action (action, NULL)) { + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); + } else { + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + } + gtk_widget_show (menu_item); } + add_copy_link: + /* Add the "Copy link" menu option */ + menu_item = gtk_menu_item_new_with_label (_UR("uri_link_copy_link_location")); + hildon_gtk_widget_set_theme_size (menu_item, MODEST_EDITABLE_SIZE); + g_object_set_data (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, (gpointer) URI_ACTION_COPY); + g_signal_connect (G_OBJECT (menu_item), "activate", (GCallback) activate_uri_popup_item, popup_info); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + gtk_widget_show (menu_item); + + /* and what to do when the link is deleted */ + g_signal_connect (G_OBJECT (menu), "delete-event", G_CALLBACK (delete_uri_popup), popup_info); + gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time ()); + return TRUE; } @@ -565,7 +561,7 @@ entry_insert_text (GtkEditable *editable, /* Show WID-INF036 */ if (chars_length >= 20) { hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, - _CS("ckdg_ib_maximum_characters_reached")); + _CS_MAXIMUM_CHARACTERS_REACHED); } else { if (modest_text_utils_is_forbidden_char (*text, FOLDER_NAME_FORBIDDEN_CHARS)) { /* Show an error */ @@ -573,7 +569,7 @@ entry_insert_text (GtkEditable *editable, tmp = g_strndup (folder_name_forbidden_chars, FOLDER_NAME_FORBIDDEN_CHARS_LENGTH); - msg = g_strdup_printf (_CS("ckdg_ib_illegal_characters_entered"), tmp); + msg = g_strdup_printf (_CS_ILLEGAL_CHARACTERS_ENTERED, tmp); hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, msg); g_free (msg); @@ -581,7 +577,7 @@ entry_insert_text (GtkEditable *editable, } else { if (length >= 20) { hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, - _CS("ckdg_ib_maximum_characters_reached")); + _CS_MAXIMUM_CHARACTERS_REACHED); } /* Write the text in the entry if it's valid */ g_signal_handlers_block_by_func (editable, @@ -612,7 +608,7 @@ entry_changed (GtkEditable *editable, if (g_utf8_strlen (chars,-1) >= 20) { hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (user_data)), NULL, - _CS("ckdg_ib_maximum_characters_reached")); + _CS_MAXIMUM_CHARACTERS_REACHED); } gtk_widget_set_sensitive (ok_button, modest_text_utils_validate_folder_name(chars)); @@ -664,9 +660,9 @@ on_response (GtkDialog *dialog, if (exists) { /* Show an error */ hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (dialog)), - NULL, _CS("ckdg_ib_folder_already_exists")); + NULL, _CS_FOLDER_ALREADY_EXISTS); /* Select the text */ - gtk_entry_select_region (GTK_ENTRY (entry), 0, -1); + gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); gtk_widget_grab_focus (entry); /* Do not close the dialog */ g_signal_stop_emission_by_name (dialog, "response"); @@ -694,14 +690,14 @@ folder_chooser_dialog_run (ModestFolderView *original, { GtkWidget *folder_view; FolderChooserData userdata = {NULL, NULL}; - GtkWidget *pannable; + GtkWidget *scrollable; const gchar *visible_id = NULL; - userdata.dialog = hildon_dialog_new (); - pannable = hildon_pannable_area_new (); + userdata.dialog = gtk_dialog_new (); + scrollable = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ()); folder_view = modest_platform_create_folder_view (NULL); - gtk_window_set_title (GTK_WINDOW (userdata.dialog), _FM("ckdg_ti_change_folder")); + gtk_window_set_title (GTK_WINDOW (userdata.dialog), _FM_CHANGE_FOLDER); modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), MODEST_FOLDER_VIEW (folder_view)); @@ -734,12 +730,12 @@ folder_chooser_dialog_run (ModestFolderView *original, modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view), visible_id); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (userdata.dialog)->vbox), pannable); - gtk_container_add (GTK_CONTAINER (pannable), folder_view); - gtk_widget_set_size_request (pannable, -1, 320); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (userdata.dialog)->vbox), scrollable); + gtk_container_add (GTK_CONTAINER (scrollable), folder_view); + gtk_widget_set_size_request (scrollable, -1, 320); gtk_widget_show (folder_view); - gtk_widget_show (pannable); + gtk_widget_show (scrollable); gtk_widget_show (userdata.dialog); g_signal_connect (G_OBJECT (folder_view), "folder-activated", G_CALLBACK (folder_chooser_activated), @@ -874,7 +870,7 @@ static gchar * get_next_folder_name (const gchar *suggested_name, TnyFolderStore *suggested_folder) { - const gchar *default_name = _FM("ckdg_va_new_folder_name_stub"); + const gchar *default_name = _FM_NEW_FOLDER_NAME_STUB; unsigned int i; gchar *real_suggested_name; @@ -889,7 +885,7 @@ get_next_folder_name (const gchar *suggested_name, real_suggested_name = g_strdup (default_name); else real_suggested_name = g_strdup_printf ("%s(%d)", - _FM("ckdg_va_new_folder_name_stub"), + _FM_NEW_FOLDER_NAME_STUB, i); exists = modest_tny_folder_has_subfolder_with_name (suggested_folder, real_suggested_name, @@ -997,7 +993,7 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, gchar **folder_name, TnyFolderStore **parent) { - GtkWidget *accept_btn = NULL; + GtkWidget *accept_btn = NULL; GtkWidget *dialog, *entry = NULL, *label_entry = NULL, *label_location = NULL, *hbox; GtkWidget *account_picker = NULL; GList *buttons = NULL; @@ -1005,12 +1001,12 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, GtkSizeGroup *sizegroup; ModestFolderView *folder_view; ModestWindow *folder_window; - ModestHildon2WindowMgr *window_mgr; + ModestWindowMgr *window_mgr; FolderPickerHelper *helper = NULL; GtkWidget *top_vbox, *top_align; - window_mgr = (ModestHildon2WindowMgr *) modest_runtime_get_window_mgr (); - folder_window = modest_hildon2_window_mgr_get_folder_window (window_mgr); + window_mgr = modest_runtime_get_window_mgr (); + folder_window = modest_window_mgr_get_folder_window (window_mgr); g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW (folder_window), GTK_RESPONSE_NONE); folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (folder_window)); @@ -1023,7 +1019,7 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, dialog = gtk_dialog_new_with_buttons (dialog_title, parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, - _FM("ckdg_bd_new_folder_dialog_ok"), + _FM_NEW_FOLDER_DIALOG_OK, GTK_RESPONSE_ACCEPT, NULL); @@ -1035,7 +1031,7 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, if (show_name) { label_entry = gtk_label_new (label_text); - entry = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH); + entry = modest_toolkit_factory_create_entry (modest_runtime_get_toolkit_factory ()); gtk_entry_set_max_length (GTK_ENTRY (entry), 20); gtk_misc_set_alignment (GTK_MISC (label_entry), 0.0, 0.5); @@ -1044,16 +1040,16 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, if (suggested_name) gtk_entry_set_text (GTK_ENTRY (entry), suggested_name); else - gtk_entry_set_text (GTK_ENTRY (entry), _FM("ckdg_va_new_folder_name_stub")); + gtk_entry_set_text (GTK_ENTRY (entry), _FM_NEW_FOLDER_NAME_STUB); gtk_entry_set_width_chars (GTK_ENTRY (entry), MAX (g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (entry)), -1), - g_utf8_strlen (_FM("ckdg_va_new_folder_name_stub"), -1))); - gtk_entry_select_region (GTK_ENTRY (entry), 0, -1); + g_utf8_strlen (_FM_NEW_FOLDER_NAME_STUB, -1))); + gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); } if (show_parent) { - label_location = gtk_label_new (_FM("ckdg_fi_new_folder_location")); + label_location = gtk_label_new (_FM_NEW_FOLDER_LOCATION); gtk_misc_set_alignment (GTK_MISC (label_location), 0.0, 0.5); gtk_size_group_add_widget (sizegroup, label_location); @@ -1182,7 +1178,7 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window, result = modest_platform_run_folder_common_dialog (parent_window, suggested_folder, _HL("ckdg_ti_new_folder"), - _FM("ckdg_fi_new_folder_name"), + _FM_NEW_FOLDER_NAME, real_suggested_name, TRUE, TRUE, @@ -1198,14 +1194,14 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window, } gint -modest_platform_run_rename_folder_dialog (GtkWindow *parent_window, +modest_platform_run_rename_folder_dialog (ModestWindow *parent_window, TnyFolderStore *parent_folder, const gchar *suggested_name, gchar **folder_name) { g_return_val_if_fail (TNY_IS_FOLDER_STORE (parent_folder), GTK_RESPONSE_REJECT); - return modest_platform_run_folder_common_dialog (parent_window, + return modest_platform_run_folder_common_dialog ((GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *) parent_window), parent_folder, _HL("ckdg_ti_rename_folder"), _HL("ckdg_fi_rename_name"), @@ -1483,7 +1479,8 @@ gboolean modest_platform_set_update_interval (guint minutes) { #ifdef MODEST_HAVE_LIBALARM - + + cookie_t alarm_cookie, *alarm_cookies; ModestConf *conf = modest_runtime_get_conf (); if (!conf) return FALSE; @@ -1497,38 +1494,38 @@ modest_platform_set_update_interval (guint minutes) } } - cookie_t alarm_cookie = modest_conf_get_int (conf, MODEST_CONF_ALARM_ID, NULL); + /* cookie_t alarm_cookie = modest_conf_get_int (conf, MODEST_CONF_ALARM_ID, NULL); */ - /* Delete any existing alarm, - * because we will replace it: */ - if (alarm_cookie) { - if (alarmd_event_del(alarm_cookie) != 0) - g_debug ("%s: alarm %d was not on the queue", __FUNCTION__, (int)alarm_cookie); - alarm_cookie = 0; + /* Delete any existing alarm, because we will replace it: */ + alarm_cookies = alarmd_event_query (0,0, 0,0, MODEST_ALARMD_APPID); + if (alarm_cookies) { + /* alarmd_event_query returns a zero terminated array */ + for (; *alarm_cookies != 0; alarm_cookies++) { + alarmd_event_del (*alarm_cookies); + } modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, 0, NULL); } - + /* 0 means no updates: */ if (minutes == 0) return TRUE; - - + /* Register alarm: */ - + /* Set the interval in alarm_event_t structure: */ alarm_event_t *event = alarm_event_create (); alarm_event_add_actions (event, 1); alarm_action_t *action = alarm_event_get_action (event, 0); alarm_event_set_alarm_appid (event, MODEST_ALARMD_APPID); event->alarm_time = minutes * 60; /* seconds */ - + /* Set recurrence every few minutes: */ event->recur_secs = minutes*60; event->recur_count = -1; /* Means infinite */ /* Specify what should happen when the alarm happens: * It should call this D-Bus method: */ - + action->dbus_path = g_strdup(MODEST_DBUS_OBJECT); action->dbus_interface = g_strdup (MODEST_DBUS_IFACE); action->dbus_service = g_strdup (MODEST_DBUS_SERVICE); @@ -1542,24 +1539,24 @@ modest_platform_set_update_interval (guint minutes) * (The old maemo email-client did this, though it isn't specified in the UI spec.) * ALARM_EVENT_CONNECTED will prevent the alarm from being called in case that the device is offline */ - event->flags = ALARM_EVENT_CONNECTED; - + event->flags = ALARM_EVENT_CONNECTED | ALARM_EVENT_RUN_DELAYED; + alarm_cookie = alarmd_event_add (event); /* now, free it */ alarm_event_delete (event); - + /* Store the alarm ID in GConf, so we can remove it later: * This is apparently valid between application instances. */ modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, alarm_cookie, NULL); - + if (!alarm_cookie) { /* Error */ g_warning ("Error setting alarm event. \n"); - + return FALSE; } -#endif /* MODEST_HAVE_LIBALARM */ +#endif /* MODEST_HAVE_LIBALARM */ return TRUE; } @@ -1598,15 +1595,8 @@ void modest_platform_on_new_headers_received (GList *URI_list, gboolean show_visual) { - gboolean screen_on, app_in_foreground; - - /* Get the window status */ - app_in_foreground = hildon_program_get_is_topmost (hildon_program_get_instance ()); - screen_on = modest_window_mgr_screen_is_on (modest_runtime_get_window_mgr ()); - - /* If the screen is on and the app is in the - foreground we don't show anything */ - if (screen_on && app_in_foreground) + /* Check if the user wants to show notifications or not */ + if (!modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_NOTIFICATIONS, NULL)) return; if (g_list_length (URI_list) == 0) @@ -1620,6 +1610,7 @@ modest_platform_on_new_headers_received (GList *URI_list, gchar *from; TnyAccountStore *acc_store; TnyAccount *account; + gchar *acc_name; data = (ModestMsgNotificationData *) URI_list->data; @@ -1669,25 +1660,24 @@ modest_platform_on_new_headers_received (GList *URI_list, /* Set the account of the headers */ acc_store = (TnyAccountStore *) modest_runtime_get_account_store (); account = tny_account_store_find_account (acc_store, data->uri); + acc_name = NULL; if (account) { - const gchar *acc_name; - acc_name = - modest_tny_account_get_parent_modest_account_name_for_server_account (account); + acc_name = g_strdup (modest_tny_account_get_parent_modest_account_name_for_server_account (account)); notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification), "email-account", acc_name); g_object_unref (account); } - /* Play sound */ - modest_platform_play_email_tone (); if (notify_notification_show (NOTIFY_NOTIFICATION (notification), NULL)) { GSList *notifications_list = NULL; /* Get previous notifications ids */ - notifications_list = modest_conf_get_list (modest_runtime_get_conf (), - MODEST_CONF_NOTIFICATION_IDS, - MODEST_CONF_VALUE_INT, NULL); + if (acc_name) { + notifications_list = modest_account_mgr_get_list (modest_runtime_get_account_mgr (), acc_name, + MODEST_ACCOUNT_NOTIFICATION_IDS, + MODEST_CONF_VALUE_INT, FALSE); + } /* Save id in the list */ g_object_get(G_OBJECT (notification), "id", ¬if_id, NULL); @@ -1698,19 +1688,22 @@ modest_platform_on_new_headers_received (GList *URI_list, not to store the list in gconf */ /* Save the ids */ - modest_conf_set_list (modest_runtime_get_conf (), MODEST_CONF_NOTIFICATION_IDS, - notifications_list, MODEST_CONF_VALUE_INT, NULL); - + if (acc_name) + modest_account_mgr_set_list (modest_runtime_get_account_mgr (), acc_name, + MODEST_ACCOUNT_NOTIFICATION_IDS, + notifications_list, MODEST_CONF_VALUE_INT, FALSE); + g_slist_free (notifications_list); } else { g_warning ("Failed to send notification"); } + g_free (acc_name); #endif /*MODEST_HAVE_HILDON_NOTIFY*/ } void -modest_platform_remove_new_mail_notifications (gboolean only_visuals) +modest_platform_remove_new_mail_notifications (gboolean only_visuals, const gchar *acc_name) { if (only_visuals) { #ifdef MODEST_HAVE_MCE @@ -1730,9 +1723,10 @@ modest_platform_remove_new_mail_notifications (gboolean only_visuals) GSList *notif_list = NULL; /* Get previous notifications ids */ - notif_list = modest_conf_get_list (modest_runtime_get_conf (), - MODEST_CONF_NOTIFICATION_IDS, - MODEST_CONF_VALUE_INT, NULL); + notif_list = modest_account_mgr_get_list (modest_runtime_get_account_mgr (), + acc_name, + MODEST_ACCOUNT_NOTIFICATION_IDS, + MODEST_CONF_VALUE_INT, FALSE); while (notif_list) { gint notif_id; @@ -1755,10 +1749,13 @@ modest_platform_remove_new_mail_notifications (gboolean only_visuals) } /* Save the ids */ - modest_conf_set_list (modest_runtime_get_conf (), MODEST_CONF_NOTIFICATION_IDS, - notif_list, MODEST_CONF_VALUE_INT, NULL); + if (notif_list) { + modest_account_mgr_set_list (modest_runtime_get_account_mgr (), acc_name, + MODEST_ACCOUNT_NOTIFICATION_IDS, + notif_list, MODEST_CONF_VALUE_INT, FALSE); - g_slist_free (notif_list); + g_slist_free (notif_list); + } #endif /* MODEST_HAVE_HILDON_NOTIFY */ } @@ -1934,17 +1931,14 @@ on_timeout_check_account_is_online(CheckAccountIdleData* data) { gboolean stop_trying = FALSE; g_return_val_if_fail (data && data->account, FALSE); - - printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n", __FUNCTION__, - tny_account_get_connection_status (data->account)); - + if (data && data->account && /* We want to wait until TNY_CONNECTION_STATUS_INIT has changed to something else, * after which the account is likely to be usable, or never likely to be usable soon: */ (tny_account_get_connection_status (data->account) != TNY_CONNECTION_STATUS_INIT) ) { data->is_online = TRUE; - + stop_trying = TRUE; } else { /* Give up if we have tried too many times: */ @@ -1955,15 +1949,15 @@ on_timeout_check_account_is_online(CheckAccountIdleData* data) ++(data->count_tries); } } - + if (stop_trying) { /* Allow the function that requested this idle callback to continue: */ if (data->loop) g_main_loop_quit (data->loop); - + if (data->account) g_object_unref (data->account); - + return FALSE; /* Don't call this again. */ } else { return TRUE; /* Call this timeout callback again. */ @@ -2136,7 +2130,7 @@ modest_platform_run_alert_dialog (const gchar* prompt, /***************/ typedef struct { - GtkWindow *parent_window; + ModestWindow *parent_window; ModestConnectedPerformer callback; TnyAccount *account; gpointer user_data; @@ -2236,7 +2230,7 @@ on_conic_device_went_online (TnyMaemoConicDevice *device, const gchar* iap_id, g } void -modest_platform_connect_and_perform (GtkWindow *parent_window, +modest_platform_connect_and_perform (ModestWindow *parent_window, gboolean force, TnyAccount *account, ModestConnectedPerformer callback, @@ -2269,7 +2263,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window, info->account = NULL; if (parent_window) - info->parent_window = (GtkWindow *) g_object_ref (parent_window); + info->parent_window = (ModestWindow *) g_object_ref (parent_window); else info->parent_window = NULL; info->user_data = user_data; @@ -2314,7 +2308,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window, info->account = TNY_ACCOUNT (g_object_ref (account)); if (parent_window) - info->parent_window = (GtkWindow *) g_object_ref (parent_window); + info->parent_window = (ModestWindow *) g_object_ref (parent_window); else info->parent_window = NULL; @@ -2347,7 +2341,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window, } void -modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, +modest_platform_connect_if_remote_and_perform (ModestWindow *parent_window, gboolean force, TnyFolderStore *folder_store, ModestConnectedPerformer callback, @@ -2396,7 +2390,7 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, static void src_account_connect_performer (gboolean canceled, GError *err, - GtkWindow *parent_window, + ModestWindow *parent_window, TnyAccount *src_account, gpointer user_data) { @@ -2418,13 +2412,13 @@ src_account_connect_performer (gboolean canceled, } -void -modest_platform_double_connect_and_perform (GtkWindow *parent_window, +void +modest_platform_double_connect_and_perform (ModestWindow *parent_window, gboolean force, TnyFolderStore *folder_store, DoubleConnectionInfo *connect_info) { - modest_platform_connect_if_remote_and_perform(parent_window, + modest_platform_connect_if_remote_and_perform(parent_window, force, folder_store, src_account_connect_performer, @@ -2505,7 +2499,8 @@ modest_platform_run_folder_details_dialog (GtkWindow *parent_window, GtkWidget *dialog; /* Create dialog */ - dialog = modest_hildon2_details_dialog_new_with_folder (parent_window, folder); + dialog = modest_toolkit_factory_create_details_dialog_with_folder (modest_runtime_get_toolkit_factory (), + parent_window, folder); /* Run dialog */ modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), @@ -2590,7 +2585,8 @@ modest_platform_run_header_details_dialog (GtkWindow *parent_window, GtkWidget *dialog; /* Create dialog */ - dialog = modest_hildon2_details_dialog_new_with_header (parent_window, header, !async_get_size); + dialog = modest_toolkit_factory_create_details_dialog_with_header (modest_runtime_get_toolkit_factory (), + parent_window, header, !async_get_size); if (async_get_size && msg && TNY_IS_MSG (msg)) { HeaderDetailsGetSizeInfo *info; @@ -2620,6 +2616,19 @@ modest_platform_get_osso_context (void) return modest_maemo_utils_get_osso_context (); } +static gfloat +convert_volume_to_db (int linear_volume) +{ + gfloat linear_converted = linear_volume / 100.0; + gfloat db_vol = 0.0; + + db_vol = 20 * log10 (linear_converted); + if (isinf (db_vol) != 0) + return -60.0; + + return db_vol; +} + static void modest_platform_play_email_tone (void) { @@ -2627,6 +2636,7 @@ modest_platform_play_email_tone (void) gint mail_volume_int; int ret; ca_proplist *pl = NULL; + gfloat db_volume; #ifdef MODEST_USE_PROFILE gchar *active_profile; @@ -2639,7 +2649,7 @@ modest_platform_play_email_tone (void) g_free (mail_volume); g_free (active_profile); #else - mail_tone = MAIL_TONE; + mail_tone = g_strdup (MAIL_TONE); mail_volume_int = 100; #endif @@ -2656,18 +2666,29 @@ modest_platform_play_email_tone (void) if (ca_con == NULL) { if ((ret = ca_context_create (&ca_con)) != CA_SUCCESS) { g_warning("ca_context_create: %s\n", ca_strerror(ret)); + ca_con = NULL; + return; + } + if ((ret = ca_context_set_driver (ca_con, "gstreamer")) != CA_SUCCESS) { + g_warning ("ca_context_set_driver: %s\n", ca_strerror (ret)); + ca_con = NULL; return; } } - if ((ret = ca_context_open(ca_con)) != CA_SUCCESS) { - g_warning("ca_context_open: %s\n", ca_strerror(ret)); - return; + if (!ca_con_opened) { + if ((ret = ca_context_open(ca_con)) != CA_SUCCESS) { + g_warning("ca_context_open: %s\n", ca_strerror(ret)); + return; + } else { + ca_con_opened = TRUE; + } } ca_proplist_create(&pl); ca_proplist_sets(pl, CA_PROP_MEDIA_FILENAME, mail_tone); - ca_proplist_setf(pl, CA_PROP_CANBERRA_VOLUME, "%f", (gfloat) mail_volume_int); + db_volume = convert_volume_to_db (mail_volume_int); + ca_proplist_setf(pl, CA_PROP_CANBERRA_VOLUME, "%f", db_volume); ret = ca_context_play_full(ca_con, 0, pl, NULL, NULL); g_debug("ca_context_play_full (vol %f): %s\n", (gfloat) mail_volume_int, ca_strerror(ret)); @@ -2682,7 +2703,7 @@ modest_platform_play_email_tone (void) #define MOVE_TO_DIALOG_BACK_BUTTON "back-button" #define MOVE_TO_DIALOG_ACTION_BUTTON "action-button" #define MOVE_TO_DIALOG_SHOWING_FOLDERS "showing-folders" -#define MOVE_TO_DIALOG_PANNABLE "pannable" +#define MOVE_TO_DIALOG_SCROLLABLE "scrollable" #define MOVE_TO_FOLDER_SEPARATOR "/" static void @@ -2799,13 +2820,13 @@ move_to_dialog_show_accounts (GtkWidget *dialog) { GtkWidget *back_button; GtkWidget *folder_view; - GtkWidget *pannable; + GtkWidget *scrollable; GtkWidget *action_button; back_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_BACK_BUTTON)); action_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON)); folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); - pannable = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE)); + scrollable = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SCROLLABLE)); gtk_widget_set_sensitive (back_button, FALSE); gtk_widget_set_sensitive (action_button, FALSE); @@ -2830,7 +2851,7 @@ move_to_dialog_show_accounts (GtkWidget *dialog) MODEST_FOLDER_VIEW_FILTER_HIDE_ACCOUNTS); modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_FILTER_HIDE_FOLDERS); - hildon_pannable_area_jump_to (HILDON_PANNABLE_AREA (pannable), 0, 0); + modest_scrollable_jump_to (MODEST_SCROLLABLE (scrollable), 0, 0); } static void @@ -2840,7 +2861,7 @@ move_to_dialog_show_folders (GtkWidget *dialog, TnyFolderStore *folder_store) GtkWidget *folder_view; TnyAccount *account; const gchar *account_id; - GtkWidget *pannable; + GtkWidget *scrollable; GtkWidget *action_button; back_button = @@ -2849,8 +2870,8 @@ move_to_dialog_show_folders (GtkWidget *dialog, TnyFolderStore *folder_store) GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON)); folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); - pannable = - GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE)); + scrollable = + GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SCROLLABLE)); gtk_widget_set_sensitive (back_button, TRUE); gtk_widget_set_sensitive (action_button, TRUE); @@ -2886,7 +2907,7 @@ move_to_dialog_show_folders (GtkWidget *dialog, TnyFolderStore *folder_store) modest_folder_view_set_style (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_STYLE_SHOW_ONE); modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_FILTER_HIDE_ACCOUNTS); modest_folder_view_unset_filter (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_FILTER_HIDE_FOLDERS); - hildon_pannable_area_jump_to (HILDON_PANNABLE_AREA (pannable), 0, 0); + modest_scrollable_jump_to (MODEST_SCROLLABLE (scrollable), 0, 0); } static void @@ -2939,6 +2960,7 @@ on_move_to_dialog_row_activated (GtkTreeView *tree_view, } else { move_to_dialog_set_selected_folder_store (dialog, selected); } + g_object_unref (selected); } static void @@ -3019,7 +3041,8 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, GTK_WINDOW (parent_window), GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, - _HL("wdgt_bd_new"), MODEST_GTK_RESPONSE_NEW_FOLDER, + _FM_CHANGE_FOLDER_NEW_FOLDER, + MODEST_GTK_RESPONSE_NEW_FOLDER, NULL); align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0); @@ -3040,7 +3063,7 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, buttons_hbox = gtk_hbox_new (FALSE, MODEST_MARGIN_HALF); back_button = gtk_button_new (); - back_pixbuf = modest_platform_get_icon (_FM("filemanager_folder_up"), MODEST_ICON_SIZE_BIG); + back_pixbuf = modest_platform_get_icon (_FM_FOLDER_UP, MODEST_ICON_SIZE_BIG); if (back_pixbuf) { gtk_button_set_image (GTK_BUTTON (back_button), gtk_image_new_from_pixbuf (back_pixbuf)); g_object_unref (back_pixbuf); @@ -3056,8 +3079,8 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, gtk_widget_set_sensitive (GTK_WIDGET (action_button), FALSE); gtk_box_pack_start (GTK_BOX (top_vbox), buttons_hbox, FALSE, FALSE, 0); - /* Create pannable and add it to the dialog */ - folder_view_container = hildon_pannable_area_new (); + /* Create scrollable and add it to the dialog */ + folder_view_container = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ()); gtk_container_add (GTK_CONTAINER (folder_view_container), *folder_view); gtk_box_pack_start (GTK_BOX (top_vbox), folder_view_container, TRUE, TRUE, 0); @@ -3079,7 +3102,7 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW, *folder_view); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_BACK_BUTTON, back_button); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON, action_button); - g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE, folder_view_container); + g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SCROLLABLE, folder_view_container); /* Simulate the behaviour of a HildonPickerDialog by emitting a response when a folder is selected */