X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-platform.c;h=09ff30e9f5c875d41c3d6d007ac7483c3513e54f;hp=1248a96aada6b44a9aff3daa06fc646dc387fdbc;hb=597d09f3e99a5d657328472afab0f64e0e0e0ebb;hpb=5c6d0fb527a735c4a53b4041c57c325927fb4cfe diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index 1248a96..09ff30e 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -29,6 +29,7 @@ #include #include + #include #include #include @@ -42,7 +43,10 @@ #include #include #include +#include +#include #include +#include #include #include #include @@ -54,7 +58,7 @@ #include #include #include "modest-hildon2-sort-dialog.h" -#include +#include #include #include "hildon2/modest-hildon2-details-dialog.h" #include "hildon2/modest-hildon2-window-mgr.h" @@ -92,6 +96,7 @@ #define COMMON_FOLDER_DIALOG_ENTRY "entry" #define COMMON_FOLDER_DIALOG_ACCOUNT_PICKER "account-picker" #define FOLDER_PICKER_CURRENT_FOLDER "current-folder" +#define MODEST_ALARMD_APPID PACKAGE_NAME static void _modest_platform_play_email_tone (void); @@ -461,7 +466,7 @@ modest_platform_show_uri_popup (const gchar *uri) 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; @@ -473,7 +478,7 @@ modest_platform_show_uri_popup (const gchar *uri) 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 { @@ -483,25 +488,15 @@ modest_platform_show_uri_popup (const gchar *uri) } } - /* always add the copy item */ - GtkWidget* menu_item = gtk_menu_item_new_with_label (dgettext("osso-uri", - "uri_link_copy_link_location")); - g_object_set_data_full (G_OBJECT(menu_item), HILDON_OSSO_URI_ACTION, - g_strconcat (URI_ACTION_COPY, uri, NULL), - g_free); - g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (activate_uri_popup_item),NULL); - 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 ()); - + } else { hildon_banner_show_information (NULL, NULL, _("mcen_ib_unsupported_link")); } - + return TRUE; } @@ -520,7 +515,7 @@ modest_platform_get_icon (const gchar *name, guint icon_size) */ if (!name || strlen(name) == 0) return NULL; - + current_theme = gtk_icon_theme_get_default (); pixbuf = gtk_icon_theme_load_icon (current_theme, name, icon_size, GTK_ICON_LOOKUP_NO_SVG, @@ -570,6 +565,10 @@ entry_insert_text (GtkEditable *editable, g_free (msg); g_free (tmp); } else { + if (length >= 20) { + hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, + _CS("ckdg_ib_maximum_characters_reached")); + } /* Write the text in the entry if it's valid */ g_signal_handlers_block_by_func (editable, (gpointer) entry_insert_text, data); @@ -597,11 +596,11 @@ entry_changed (GtkEditable *editable, g_return_if_fail (chars != NULL); - if (g_utf8_strlen (chars,-1) >= 20) + 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")); - else - gtk_widget_set_sensitive (ok_button, modest_text_utils_validate_folder_name(chars)); + } + gtk_widget_set_sensitive (ok_button, modest_text_utils_validate_folder_name(chars)); /* Free */ g_list_free (buttons); @@ -694,7 +693,8 @@ folder_chooser_dialog_run (ModestFolderView *original) modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS); - modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), MODEST_FOLDER_VIEW (folder_view)); + modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), + MODEST_FOLDER_VIEW (folder_view)); visible_id = modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(original)); @@ -703,10 +703,11 @@ folder_chooser_dialog_run (ModestFolderView *original) 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_widget_show (folder_view); gtk_widget_show (pannable); - gtk_widget_show_all (userdata.dialog); - gtk_widget_set_size_request (pannable, -1, 320); + gtk_widget_show (userdata.dialog); g_signal_connect (G_OBJECT (folder_view), "folder-activated", G_CALLBACK (folder_chooser_activated), (gpointer) &userdata); @@ -760,12 +761,48 @@ folder_picker_set_store (GtkButton *button, TnyFolderStore *store) if (store == NULL) { g_object_set_data (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER, NULL); } else { + GdkPixbuf *pixbuf; + const gchar *icon_name = NULL; + g_object_ref (store); g_object_set_data_full (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER, store, (GDestroyNotify) g_object_unref); name = folder_store_get_display_name (store); hildon_button_set_value (HILDON_BUTTON (button), name); g_free (name); + + /* Select icon */ + if (TNY_IS_ACCOUNT (store)) { + if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (store))) + icon_name = MODEST_FOLDER_ICON_LOCAL_FOLDERS; + else if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (store))) + icon_name = MODEST_FOLDER_ICON_MMC; + else + icon_name = MODEST_FOLDER_ICON_ACCOUNT; + } else { + if (modest_tny_folder_is_remote_folder (TNY_FOLDER (store))) { + TnyFolderType type = modest_tny_folder_guess_folder_type (TNY_FOLDER (store)); + switch (type) { + case TNY_FOLDER_TYPE_INBOX: + icon_name = MODEST_FOLDER_ICON_INBOX; + break; + default: + icon_name = MODEST_FOLDER_ICON_ACCOUNT; + } + } else if (modest_tny_folder_is_local_folder (TNY_FOLDER (store))) + icon_name = MODEST_FOLDER_ICON_NORMAL; + else if (modest_tny_folder_is_memory_card_folder (TNY_FOLDER (store))) + icon_name = MODEST_FOLDER_ICON_MMC_FOLDER; + } + + /* Set icon */ + pixbuf = modest_platform_get_icon (icon_name, MODEST_ICON_SIZE_SMALL); + + if (pixbuf) { + hildon_button_set_image (HILDON_BUTTON (button), + gtk_image_new_from_pixbuf (pixbuf)); + g_object_unref (pixbuf); + } } } @@ -785,15 +822,10 @@ static GtkWidget * folder_picker_new (ModestFolderView *folder_view, TnyFolderStore *suggested) { GtkWidget *button; - GdkPixbuf *pixbuf; button = hildon_button_new (MODEST_EDITABLE_SIZE, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL); - pixbuf = modest_platform_get_icon (MODEST_FOLDER_ICON_NORMAL, - MODEST_ICON_SIZE_SMALL); - hildon_button_set_image (HILDON_BUTTON (button), - gtk_image_new_from_pixbuf (pixbuf)); hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 1.0); if (suggested) { @@ -818,16 +850,20 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, TnyFolderStore **parent) { GtkWidget *accept_btn = NULL; - GtkWidget *dialog, *entry, *label_entry, *label_location, *hbox; - GtkWidget *account_picker; + GtkWidget *dialog, *entry = NULL, *label_entry = NULL, *label_location = NULL, *hbox; + GtkWidget *account_picker = NULL; GList *buttons = NULL; gint result; GtkSizeGroup *sizegroup; ModestFolderView *folder_view; + ModestWindow *folder_window; + ModestHildon2WindowMgr *window_mgr; - g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW (parent_window), GTK_RESPONSE_NONE); + window_mgr = (ModestHildon2WindowMgr *) modest_runtime_get_window_mgr (); + folder_window = modest_hildon2_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 (parent_window)); + folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (folder_window)); /* Ask the user for the folder name */ dialog = gtk_dialog_new_with_buttons (dialog_title, @@ -922,7 +958,7 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), parent_window); gtk_widget_show_all (GTK_WIDGET(dialog)); - + result = gtk_dialog_run (GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_ACCEPT) { if (show_name) @@ -951,6 +987,8 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window, { gchar *real_suggested_name = NULL, *tmp = NULL; gint result; + ModestTnyAccountStore *acc_store; + TnyAccount *account; if(suggested_name == NULL) { @@ -986,10 +1024,20 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window, } /* In hildon 2.2 we always suggest the archive folder as parent */ - suggested_folder = TNY_FOLDER_STORE ( - modest_tny_account_get_special_folder - (modest_tny_account_store_get_local_folders_account (modest_runtime_get_account_store ()), - TNY_FOLDER_TYPE_ARCHIVE)); + acc_store = modest_runtime_get_account_store (); + account = modest_tny_account_store_get_mmc_folders_account (acc_store); + if (account) { + suggested_folder = (TnyFolderStore *) + modest_tny_account_get_special_folder (account, + TNY_FOLDER_TYPE_ARCHIVE); + g_object_unref (account); + account = NULL; + } + + /* If there is not archive folder then fallback to local folders account */ + if (!suggested_folder) + suggested_folder = (TnyFolderStore *) + modest_tny_account_store_get_local_folders_account (acc_store); tmp = g_strconcat (_("mcen_fi_new_folder_name"), ":", NULL); result = modest_platform_run_folder_common_dialog (parent_window, @@ -1307,7 +1355,7 @@ modest_platform_set_update_interval (guint minutes) /* Delete any existing alarm, * because we will replace it: */ if (alarm_cookie) { - if (alarmd_event_del(alarm_cookie) != 1) + if (alarmd_event_del(alarm_cookie) != 0) g_warning ("%s: alarm %d was not on the queue", __FUNCTION__, (int)alarm_cookie); alarm_cookie = 0; modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, 0, NULL); @@ -1324,6 +1372,7 @@ modest_platform_set_update_interval (guint minutes) 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: */ @@ -1337,7 +1386,7 @@ modest_platform_set_update_interval (guint minutes) action->dbus_interface = g_strdup (MODEST_DBUS_IFACE); action->dbus_service = g_strdup (MODEST_DBUS_SERVICE); action->dbus_name = g_strdup (MODEST_DBUS_METHOD_SEND_RECEIVE); - action->flags = ALARM_ACTION_TYPE_DBUS | ALARM_ACTION_DBUS_USE_ACTIVATION; + action->flags = ALARM_ACTION_WHEN_TRIGGERED | ALARM_ACTION_TYPE_DBUS | ALARM_ACTION_DBUS_USE_ACTIVATION; /* Use ALARM_EVENT_NO_DIALOG: Otherwise, a dialog will be shown if * exec_name or dbus_path is NULL, even though we have specified no dialog text. @@ -1370,11 +1419,13 @@ modest_platform_set_update_interval (guint minutes) void modest_platform_push_email_notification(void) { - gboolean screen_on = TRUE, app_in_foreground; + 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)) { @@ -1870,7 +1921,7 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name, gchar *question = g_strdup_printf (_("mcen_nc_unknown_certificate"), server_name); - + /* We use GTK_RESPONSE_APPLY because we want the button in the middle of OK and CANCEL the same as the browser does for example. With GTK_RESPONSE_HELP the view button is aligned @@ -1882,7 +1933,7 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name, _HL("wdgt_bd_view"), GTK_RESPONSE_APPLY, /* abusing this... */ _HL("wdgt_bd_no"), GTK_RESPONSE_CANCEL, NULL, NULL); - + g_signal_connect (G_OBJECT(note), "response", G_CALLBACK(on_cert_dialog_response), (gpointer) certificate); @@ -2154,12 +2205,19 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, gpointer user_data) { TnyAccount *account = NULL; - - if (!folder_store) { + + if (!folder_store || + (TNY_IS_MERGE_FOLDER (folder_store) && + (tny_folder_get_folder_type (TNY_FOLDER(folder_store)) == TNY_FOLDER_TYPE_OUTBOX))) { + /* We promise to instantly perform the callback, so ... */ if (callback) { - callback (FALSE, NULL, parent_window, NULL, user_data); - } + GError *error = NULL; + g_set_error (&error, TNY_ERROR_DOMAIN, TNY_SERVICE_ERROR_UNKNOWN, + "Unable to move or not found folder"); + callback (FALSE, error, parent_window, NULL, user_data); + g_error_free (error); + } return; } else if (TNY_IS_FOLDER (folder_store)) { @@ -2281,7 +2339,7 @@ modest_platform_check_memory_low (ModestWindow *win, if (win && lowmem && visuals) modest_platform_run_information_dialog ( GTK_WINDOW(win), - dgettext("ke-recv","memr_ib_operation_disabled"), + _KR("memr_ib_operation_disabled"), TRUE); if (lowmem) @@ -2403,7 +2461,7 @@ 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, - _("mcen_bd_new"), MODEST_GTK_RESPONSE_NEW_FOLDER, + _HL("wdgt_bd_new"), MODEST_GTK_RESPONSE_NEW_FOLDER, NULL); /* Create folder view */ @@ -2415,6 +2473,9 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, G_CALLBACK (on_move_to_dialog_folder_activated), dialog); + tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (*folder_view), + (TnyAccountStore *) modest_runtime_get_account_store ()); + /* Create pannable and add it to the dialog */ folder_view_container = hildon_pannable_area_new (); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), folder_view_container); @@ -2432,16 +2493,16 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, TnyList * modest_platform_get_list_to_move (ModestWindow *window) { + TnyList *list = NULL; + if (MODEST_IS_HEADER_WINDOW (window)) { ModestHeaderView *header_view; header_view = modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)); - - return modest_header_view_get_selected_headers (header_view); + list = modest_header_view_get_selected_headers (header_view); } else if (MODEST_IS_FOLDER_WINDOW (window)) { ModestFolderView *folder_view; TnyFolderStore *selected_folder; - TnyList *list; list = TNY_LIST (tny_simple_list_new ()); folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)); @@ -2451,7 +2512,18 @@ modest_platform_get_list_to_move (ModestWindow *window) g_object_unref (selected_folder); } return list; + } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) { + TnyHeader *header; + + header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (window)); + if (header) { + list = TNY_LIST (tny_simple_list_new ()); + tny_list_prepend (list, G_OBJECT (header)); + g_object_unref (header); + } } else { - return NULL; + g_return_val_if_reached (NULL); } + + return list; }