X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-platform.c;h=8b0f3b5098a59073fda18387113690a6fb6bc7d7;hp=4a9c238f412f0288d924858b0cd5b071158df894;hb=6cfc86073c3ad33565a50c70fce034e9b3fb0a96;hpb=7929406e046ed92142ff337bd9161e6a16e1d04e diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index 4a9c238..8b0f3b5 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,7 @@ #include #include #include +#include #ifdef MODEST_HAVE_ABOOK #include @@ -67,6 +69,8 @@ #define HILDON_OSSO_URI_ACTION "uri-action" #define URI_ACTION_COPY "copy:" +#define MODEST_NEW_MAIL_SOUND_FILE "/usr/share/sounds/ui-new_email.wav" +#define MODEST_NEW_MAIL_LIGHTING_PATTERN "PatternCommunicationEmail" static void on_modest_conf_update_interval_changed (ModestConf* self, @@ -335,7 +339,7 @@ modest_platform_activate_file (const gchar *path, const gchar *mime_type) DBusConnection *con; gchar *uri_path = NULL; - uri_path = g_strconcat ("file://", path, NULL); + uri_path = gnome_vfs_get_uri_from_local_path (path); con = osso_get_dbus_connection (modest_maemo_utils_get_osso_context()); if (mime_type) @@ -477,7 +481,7 @@ modest_platform_show_uri_popup (const gchar *uri) GdkPixbuf* -modest_platform_get_icon (const gchar *name) +modest_platform_get_icon (const gchar *name, guint icon_size) { GError *err = NULL; GdkPixbuf* pixbuf = NULL; @@ -491,20 +495,8 @@ modest_platform_get_icon (const gchar *name) if (!name || strlen(name) == 0) return NULL; -#if 0 /* do we still need this? */ - if (g_str_has_suffix (name, ".png")) { /*FIXME: hack*/ - pixbuf = gdk_pixbuf_new_from_file (name, &err); - if (!pixbuf) { - g_printerr ("modest: error loading icon '%s': %s\n", - name, err->message); - g_error_free (err); - return NULL; - } - return pixbuf; - } -#endif /* */ current_theme = gtk_icon_theme_get_default (); - pixbuf = gtk_icon_theme_load_icon (current_theme, name, 26, + pixbuf = gtk_icon_theme_load_icon (current_theme, name, icon_size, GTK_ICON_LOOKUP_NO_SVG, &err); if (!pixbuf) { @@ -643,7 +635,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window, MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT); sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"), - SORT_ID_NUM - 1); + SORT_ID_NUM); if (outgoing) { sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_TO_COLUMN; sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT; @@ -653,7 +645,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window, } sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"), - SORT_ID_NUM - 1); + SORT_ID_NUM); if (outgoing) { sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN; sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE; @@ -664,7 +656,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window, default_key = sort_key; sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"), - SORT_ID_NUM -1); + SORT_ID_NUM); sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN; if (outgoing) sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT; @@ -672,18 +664,18 @@ launch_sort_headers_dialog (GtkWindow *parent_window, sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN; sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_attachment"), - SORT_ID_NUM - 1); + SORT_ID_NUM); sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN; sort_ids[sort_key] = TNY_HEADER_FLAG_ATTACHMENTS; attachments_sort_id = sort_key; sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_size"), - SORT_ID_NUM - 1); + SORT_ID_NUM); sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN; sort_ids[sort_key] = 0; sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_priority"), - SORT_ID_NUM - 1); + SORT_ID_NUM); 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; @@ -984,6 +976,32 @@ modest_platform_run_confirmation_dialog (GtkWindow *parent_window, return response; } + +gint +modest_platform_run_confirmation_dialog_with_buttons (GtkWindow *parent_window, + const gchar *message, + const gchar *button_accept, + const gchar *button_cancel) +{ + GtkWidget *dialog; + gint response; + + dialog = hildon_note_new_confirmation_add_buttons (parent_window, message, + button_accept, GTK_RESPONSE_ACCEPT, + button_cancel, GTK_RESPONSE_CANCEL, + NULL); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), + GTK_WINDOW (dialog)); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + on_destroy_dialog (GTK_DIALOG(dialog)); + + while (gtk_events_pending ()) + gtk_main_iteration (); + + return response; +} gint modest_platform_run_yes_no_dialog (GtkWindow *parent_window, @@ -1315,8 +1333,49 @@ modest_platform_set_update_interval (guint minutes) } void -modest_platform_on_new_headers_received (TnyList *header_list) +modest_platform_on_new_headers_received (TnyList *header_list, + gboolean show_visual) { + gboolean play_sound; + + /* Check whether or not we should play a sound */ + play_sound = modest_conf_get_bool (modest_runtime_get_conf (), + MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, + NULL); + + if (!show_visual) { + gboolean screen_on, app_in_foreground; + ModestWindow *main_window; + + /* Get the screen status */ + main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); + screen_on = modest_main_window_screen_is_on (MODEST_MAIN_WINDOW (main_window)); + + /* Get the window status */ + app_in_foreground = hildon_program_get_is_topmost (hildon_program_get_instance ()); + + /* If the screen is on and the app is in the + foreground we don't show anything */ + if (!(screen_on && app_in_foreground)) { + /* Play a sound */ + if (play_sound) + hildon_play_system_sound (MODEST_NEW_MAIL_SOUND_FILE); + + /* Activate LED. This must be deactivated by + modest_platform_remove_new_mail_notifications */ + osso_rpc_run_system (modest_maemo_utils_get_osso_context (), + MCE_SERVICE, + MCE_REQUEST_PATH, + MCE_REQUEST_IF, + MCE_ACTIVATE_LED_PATTERN, + NULL, + DBUS_TYPE_STRING, MODEST_NEW_MAIL_LIGHTING_PATTERN, + DBUS_TYPE_INVALID); + } + /* We do a return here to avoid indentation with an else */ + return; + } + #ifdef MODEST_HAVE_HILDON_NOTIFY HildonNotification *notification; TnyIterator *iter; @@ -1365,11 +1424,9 @@ modest_platform_on_new_headers_received (TnyList *header_list) pattern. Show and play just one */ if (G_UNLIKELY (first_notification)) { first_notification = FALSE; - if (modest_conf_get_bool (modest_runtime_get_conf (), - MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, - NULL)) { + if (play_sound) { notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification), - "sound-file", "/usr/share/sounds/ui-new_email.wav"); + "sound-file", MODEST_NEW_MAIL_SOUND_FILE); } /* Set the led pattern */ @@ -1377,7 +1434,7 @@ modest_platform_on_new_headers_received (TnyList *header_list) "dialog-type", 4); notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification), "led-pattern", - "PatternCommunicationEmail"); + MODEST_NEW_MAIL_LIGHTING_PATTERN); } /* Notify. We need to do this in an idle because this function @@ -1411,8 +1468,20 @@ modest_platform_on_new_headers_received (TnyList *header_list) } void -modest_platform_remove_new_mail_notifications (void) +modest_platform_remove_new_mail_notifications (gboolean only_visuals) { + if (only_visuals) { + osso_rpc_run_system (modest_maemo_utils_get_osso_context (), + MCE_SERVICE, + MCE_REQUEST_PATH, + MCE_REQUEST_IF, + MCE_DEACTIVATE_LED_PATTERN, + NULL, + DBUS_TYPE_STRING, MODEST_NEW_MAIL_LIGHTING_PATTERN, + DBUS_TYPE_INVALID); + return; + } + #ifdef MODEST_HAVE_HILDON_NOTIFY GSList *notif_list = NULL; @@ -1532,6 +1601,17 @@ modest_platform_information_banner (GtkWidget *parent, hildon_banner_show_information (parent, icon_name, text); } +void +modest_platform_information_banner_with_timeout (GtkWidget *parent, + const gchar *icon_name, + const gchar *text, + gint timeout) +{ + GtkWidget *banner; + banner = hildon_banner_show_information (parent, icon_name, text); + hildon_banner_set_timeout(HILDON_BANNER(banner), timeout); +} + GtkWidget * modest_platform_animation_banner (GtkWidget *parent, const gchar *animation_name, @@ -1978,9 +2058,9 @@ modest_platform_connect_and_perform (GtkWindow *parent_window, void modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, - TnyFolderStore *folder_store, - ModestConnectedPerformer callback, - gpointer user_data) + TnyFolderStore *folder_store, + ModestConnectedPerformer callback, + gpointer user_data) { TnyAccount *account = NULL;