#include <libebook/e-vcard.h>
#include "modest-hildon-includes.h"
#include <libosso-abook/osso-abook.h>
+#include <libedataserver/e-data-server-util.h>
#include "modest-platform.h"
#include "modest-runtime.h"
#include "widgets/modest-window-mgr.h"
contact_name = osso_abook_contact_get_name (contact);
/* contact_name includes both name and surname */
- if (contact_name && name && strstr (contact_name, name))
+ if (contact_name && name && e_util_utf8_strstrcase (contact_name, name))
return TRUE;
else
return FALSE;
base_klass->save = on_save;
}
+static void
+check_username_for_provider (const gchar *provider_id,
+ const gchar *domain,
+ gchar **username)
+{
+ gchar *providers_to_check[] = { "ovi.com", "yahoomailplus.com" };
+ gint i;
+ gboolean found = FALSE;
+ gchar *old;
+
+ /* Check if the username contains the @hostname, if not then add it */
+ if (strchr (*username, '@'))
+ return;
+
+ /* Check if it's one of the providers to check */
+ for (i = 0; i < G_N_ELEMENTS (providers_to_check) && !found; i++) {
+ if (!g_ascii_strncasecmp (providers_to_check[i], provider_id, strlen (providers_to_check[i])))
+ found = TRUE;
+ }
+
+ if (!found)
+ return;
+
+ /* Replace the username */
+ old = *username;
+ *username = g_strconcat (*username, "@", domain, NULL);
+ g_free (old);
+}
+
/**
* save_to_settings:
* @self: a #ModestEasysetupWizardDialog
ModestEasysetupWizardDialogPrivate *priv = MODEST_EASYSETUP_WIZARD_DIALOG_GET_PRIVATE (self);
guint special_port;
gchar *provider_id = NULL;
- gchar* display_name;
+ gchar *alternate_username = NULL;
+ gchar *display_name;
const gchar *username, *password;
gchar *store_hostname, *transport_hostname;
guint store_port, transport_port;
if (provider_id) {
ModestProtocolType store_provider_server_type;
gboolean store_provider_use_alternate_port;
+ gchar *domain = NULL;
+
/* Use presets: */
store_hostname = modest_presets_get_server (priv->presets, provider_id,
TRUE /* store */);
provider_id,
TRUE /* store */);
+
+ /* This is HORRIBLE, but it seems that somehow it helps users
+ that do not like to read the user instructions for their
+ email accounts */
+ domain = modest_presets_get_domain (priv->presets, provider_id);
+ if (domain) {
+ alternate_username = g_strdup (username);
+ check_username_for_provider (provider_id, domain, &alternate_username);
+ g_free (domain);
+ }
+
/* We don't check for SMTP here as that is impossible for an incoming server. */
if (store_provider_server_type == MODEST_PROTOCOL_REGISTRY_TYPE_INVALID)
store_protocol = MODEST_PROTOCOLS_STORE_POP;
/* now we store the common store account settings */
modest_server_account_settings_set_hostname (store_settings, store_hostname);
- modest_server_account_settings_set_username (store_settings, username);
+ modest_server_account_settings_set_username (store_settings, (alternate_username) ? alternate_username : username);
modest_server_account_settings_set_password (store_settings, password);
modest_server_account_settings_set_protocol (store_settings, store_protocol);
/* now we store the common transport account settings */
modest_server_account_settings_set_hostname (transport_settings, transport_hostname);
- modest_server_account_settings_set_username (transport_settings, username);
+ modest_server_account_settings_set_username (transport_settings, (alternate_username) ? alternate_username : username);
modest_server_account_settings_set_password (transport_settings, password);
modest_server_account_settings_set_protocol (transport_settings, transport_protocol);
g_object_unref (transport_settings);
g_free (transport_hostname);
+ if (alternate_username)
+ g_free (alternate_username);
fullname = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_name));
email_address = hildon_entry_get_text (HILDON_ENTRY (priv->entry_user_email));
GtkWidget *csm_menu;
gdouble x_coord;
gdouble y_coord;
+
+ /* weak refs */
+ GtkTreeModel *model_weak_ref;
};
#define MODEST_HEADER_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_HEADER_WINDOW, \
gdouble initial_x,
gdouble initial_y,
gpointer user_data);
+static void on_header_view_model_destroyed (gpointer user_data,
+ GObject *model);
/* globals */
static GtkWindowClass *parent_class = NULL;
priv->progress_hint = FALSE;
priv->queue_change_handler = 0;
priv->sort_column_handler = 0;
+ priv->model_weak_ref = NULL;
priv->current_store_account = NULL;
priv->sort_button = NULL;
priv->new_message_button = NULL;
priv = MODEST_HEADER_WINDOW_GET_PRIVATE(obj);
+ if (priv->model_weak_ref) {
+ g_object_weak_unref ((GObject *) priv->model_weak_ref,
+ on_header_view_model_destroyed,
+ obj);
+ if (g_signal_handler_is_connected (G_OBJECT (priv->model_weak_ref),
+ priv->sort_column_handler)) {
+ g_signal_handler_disconnect (G_OBJECT (priv->model_weak_ref),
+ priv->sort_column_handler);
+ }
+ on_header_view_model_destroyed (obj, (GObject *) priv->model_weak_ref);
+ }
+
folder = modest_header_view_get_folder ((ModestHeaderView *) priv->header_view);
if (folder) {
tny_folder_sync_async (folder, FALSE, NULL, NULL, NULL);
return;
priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+ priv->model_weak_ref = NULL;
- if (g_signal_handler_is_connected (G_OBJECT (model),
- priv->sort_column_handler)) {
- g_signal_handler_disconnect (G_OBJECT (model),
- priv->sort_column_handler);
- priv->sort_column_handler = 0;
- }
+ priv->sort_column_handler = 0;
}
static void
ModestHeaderWindowPrivate *priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (gobject));
+ if (priv->model_weak_ref ) {
+ g_object_weak_unref ((GObject *) priv->model_weak_ref,
+ on_header_view_model_destroyed,
+ self);
+ if (g_signal_handler_is_connected (G_OBJECT (priv->model_weak_ref),
+ priv->sort_column_handler)) {
+ g_signal_handler_disconnect (G_OBJECT (priv->model_weak_ref),
+ priv->sort_column_handler);
+ }
+ on_header_view_model_destroyed (self, (GObject *) priv->model_weak_ref);
+ }
+
if (!model)
return;
"sort-column-changed",
G_CALLBACK (on_sort_column_changed),
self);
+ priv->model_weak_ref = model;
g_object_weak_ref ((GObject *) model, on_header_view_model_destroyed, self);
}
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)
+ /* If the screen is on and the app is in the foreground we
+ don't show anything, just play a chime */
+ if (screen_on && app_in_foreground) {
+ modest_platform_play_email_tone ();
return;
+ }
if (g_list_length (URI_list) == 0)
return;
modest_conf_set_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, MODEST_CONNECTED_VIA_WLAN_OR_WIMAX, NULL);
if (!modest_conf_key_exists (conf, MODEST_CONF_UPDATE_INTERVAL, NULL))
- modest_conf_set_int (conf, MODEST_CONF_UPDATE_INTERVAL, MODEST_UPDATE_INTERVAL_15_MIN, NULL);
+ modest_conf_set_int (conf, MODEST_CONF_UPDATE_INTERVAL, MODEST_UPDATE_INTERVAL_30_MIN, NULL);
if (!modest_conf_key_exists (conf, MODEST_CONF_MSG_SIZE_LIMIT, NULL))
modest_conf_set_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, 100, NULL);
NULL, msg_info);
g_object_unref (folder);
+ g_object_unref (header);
msg_num++;
tny_iterator_next (iter);
}
g_object_unref (iter);
+ g_object_unref (new_headers);
/* The mail operation will finish when the last
message is retrieved */
gdk_threads_enter ();
mail_op_queue = modest_runtime_get_mail_operation_queue ();
- if (modest_mail_operation_queue_running_shutdown (mail_op_queue)) {
+ if (modest_tny_account_store_is_shutdown (modest_runtime_get_account_store ()) &&
+ modest_mail_operation_queue_running_shutdown (mail_op_queue)) {
/* Disconnect signals. Will be freed by the destroy notify */
handlers = (MainSignalHandlers *) data;
}
gboolean
+modest_tny_account_store_is_shutdown (ModestTnyAccountStore *self)
+{
+ ModestTnyAccountStorePrivate *priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self);
+ TnyIterator *iter;
+ gboolean found;
+
+ found = FALSE;
+
+ for (iter = tny_list_create_iterator (priv->store_accounts);
+ !found && !tny_iterator_is_done (iter);
+ tny_iterator_next (iter)) {
+ TnyAccount *account;
+
+ account = (TnyAccount *) tny_iterator_get_current (iter);
+ if (TNY_IS_ACCOUNT (account)) {
+ found = (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_CONNECTED) ||
+ (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_RECONNECTING);
+ }
+ g_object_unref (account);
+ }
+ g_object_unref (iter);
+
+ if (found)
+ return !found;
+
+ for (iter = tny_list_create_iterator (priv->transport_accounts);
+ !found && !tny_iterator_is_done (iter);
+ tny_iterator_next (iter)) {
+ TnyAccount *account;
+
+ account = (TnyAccount *) tny_iterator_get_current (iter);
+ if (TNY_IS_ACCOUNT (account)) {
+ found = (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_CONNECTED) ||
+ (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_RECONNECTING);
+ }
+ g_object_unref (account);
+ }
+ g_object_unref (iter);
+
+ return !found;
+
+}
+
+
+gboolean
modest_tny_account_store_is_send_mail_blocked (ModestTnyAccountStore *self)
{
ModestTnyAccountStorePrivate *priv;
void modest_tny_account_store_shutdown (ModestTnyAccountStore *self,
ModestTnyAccountStoreShutdownCallback callback,
gpointer userdata);
-
+
+/**
+ * modest_tny_account_store_is_shutdown:
+ * @self: a #ModestTnyAccountStore
+ *
+ * Check if all accounts are disconnected
+ *
+ * Returns: %TRUE if all accounts are disconnected, %FALSE otherwise.
+ */
+gboolean modest_tny_account_store_is_shutdown (ModestTnyAccountStore *self);
/**
* modest_tny_account_store_is_send_mail_blocked:
static void modest_attachment_view_class_init (ModestAttachmentViewClass *klass);
static void tny_mime_part_view_init (gpointer g, gpointer iface_data);
+static void on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata);
+static void update_style (ModestAttachmentView *self);
static void update_filename_request (ModestAttachmentView *self);
+static void
+on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata)
+{
+ if (strcmp ("style", spec->name) == 0) {
+ update_style (MODEST_ATTACHMENT_VIEW (obj));
+ gtk_widget_queue_draw (GTK_WIDGET (obj));
+ }
+}
+
+/* This method updates the color (and other style settings) of widgets using secondary text color,
+ * tracking the gtk style */
+static void
+update_style (ModestAttachmentView *self)
+{
+#ifdef MODEST_COMPACT_HEADER_BG
+ GdkColor bg_color;
+ GtkStyle *style;
+ GdkColor *current_bg;
+
+ g_return_if_fail (MODEST_IS_ATTACHMENT_VIEW (self));
+
+ gdk_color_parse (MODEST_COMPACT_HEADER_BG, &bg_color);
+ style = gtk_widget_get_style (GTK_WIDGET (self));
+ current_bg = &(style->bg[GTK_STATE_NORMAL]);
+ if (current_bg->red != bg_color.red || current_bg->blue != bg_color.blue || current_bg->green != bg_color.green)
+ gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, &bg_color);
+#endif
+}
+
+
+
static void update_size_label (ModestAttachmentView *self)
{
ModestAttachmentViewPrivate *priv = MODEST_ATTACHMENT_VIEW_GET_PRIVATE (self);
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (instance), GTK_CAN_FOCUS);
+ g_signal_connect (G_OBJECT (instance), "notify::style", G_CALLBACK (on_notify_style), (gpointer) instance);
+
+ update_style (MODEST_ATTACHMENT_VIEW (instance));
+
+
return;
}
#include <modest-attachments-view.h>
#include <modest-tny-mime-part.h>
#include <modest-tny-msg.h>
+#include <modest-ui-constants.h>
static GObjectClass *parent_class = NULL;
static void clipboard_get (GtkClipboard *clipboard, GtkSelectionData *selection_data,
guint info, gpointer userdata);
static void own_clipboard (ModestAttachmentsView *atts_view);
+static void on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata);
+static void update_style (ModestAttachmentsView *self);
static guint signals[LAST_SIGNAL] = {0};
GTK_WIDGET_SET_FLAGS (instance, GTK_CAN_FOCUS);
+ g_signal_connect (G_OBJECT (instance), "notify::style", G_CALLBACK (on_notify_style), (gpointer) instance);
+
+ update_style (MODEST_ATTACHMENTS_VIEW (instance));
+
return;
}
return result;
}
+
+static void
+on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata)
+{
+ if (strcmp ("style", spec->name) == 0) {
+ update_style (MODEST_ATTACHMENTS_VIEW (obj));
+ gtk_widget_queue_draw (GTK_WIDGET (obj));
+ }
+}
+
+/* This method updates the color (and other style settings) of widgets using secondary text color,
+ * tracking the gtk style */
+static void
+update_style (ModestAttachmentsView *self)
+{
+#ifdef MODEST_COMPACT_HEADER_BG
+ GdkColor bg_color;
+ GtkStyle *style;
+ GdkColor *current_bg;
+
+ g_return_if_fail (MODEST_IS_ATTACHMENTS_VIEW (self));
+
+ gdk_color_parse (MODEST_COMPACT_HEADER_BG, &bg_color);
+ style = gtk_widget_get_style (GTK_WIDGET (self));
+ current_bg = &(style->bg[GTK_STATE_NORMAL]);
+ if (current_bg->red != bg_color.red || current_bg->blue != bg_color.blue || current_bg->green != bg_color.green)
+ gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, &bg_color);
+#endif
+}
+
struct _ModestCompactMailHeaderViewPriv
{
GtkWidget *headers_vbox;
+ GtkWidget *event_box;
GtkWidget *fromto_label;
GtkWidget *fromto_contents;
}
static void
+unref_event_box (ModestCompactMailHeaderView *self,
+ GtkWidget *event_box)
+{
+ ModestCompactMailHeaderViewPriv *priv = MODEST_COMPACT_MAIL_HEADER_VIEW_GET_PRIVATE (self);
+ priv->event_box = NULL;
+}
+
+static void
modest_compact_mail_header_view_instance_init (GTypeInstance *instance, gpointer g_class)
{
ModestCompactMailHeaderView *self = (ModestCompactMailHeaderView *)instance;
gtk_box_pack_start (GTK_BOX (vbox), from_date_hbox, FALSE, FALSE, 0);
- update_style (self);
-
- g_signal_connect (G_OBJECT (self), "notify::style", G_CALLBACK (on_notify_style), (gpointer) self);
-
priv->datetime_formatter = modest_datetime_formatter_new ();
g_signal_connect (G_OBJECT (priv->datetime_formatter), "format-changed",
G_CALLBACK (datetime_format_changed), (gpointer) self);
gtk_box_pack_start (GTK_BOX (main_vbox), headers_date_hbox, FALSE, FALSE, 0);
main_align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (main_align), 0, 0, MODEST_MARGIN_DOUBLE, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (main_align), 0, MODEST_MARGIN_HALF, MODEST_MARGIN_DOUBLE, 0);
+ priv->event_box = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), TRUE);
gtk_container_add (GTK_CONTAINER (main_align), main_vbox);
- gtk_box_pack_start (GTK_BOX (self), main_align, TRUE, TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (priv->event_box), main_align);
+ gtk_box_pack_start (GTK_BOX (self), priv->event_box, TRUE, TRUE, 0);
+ g_object_weak_ref (G_OBJECT (priv->event_box), (GWeakNotify) unref_event_box, (gpointer) self);
+
+ update_style (self);
- gtk_widget_show_all (main_align);
+ g_signal_connect (G_OBJECT (self), "notify::style", G_CALLBACK (on_notify_style), (gpointer) self);
+
+ gtk_widget_show_all (priv->event_box);
priv->is_outgoing = FALSE;
priv->is_draft = FALSE;
ModestCompactMailHeaderView *self = (ModestCompactMailHeaderView *)object;
ModestCompactMailHeaderViewPriv *priv = MODEST_COMPACT_MAIL_HEADER_VIEW_GET_PRIVATE (self);
+ if (priv->event_box) {
+ g_object_weak_unref (G_OBJECT (priv->event_box), (GWeakNotify) unref_event_box, (gpointer) self);
+ priv->event_box = NULL;
+ }
+
if (priv->datetime_formatter) {
g_object_unref (priv->datetime_formatter);
priv->datetime_formatter = NULL;
PangoColor color;
PangoAttrList *attr_list;
GSList *node;
+ GdkColor bg_color;
g_return_if_fail (MODEST_IS_COMPACT_MAIL_HEADER_VIEW (self));
priv = MODEST_COMPACT_MAIL_HEADER_VIEW_GET_PRIVATE (self);
}
pango_attr_list_unref (attr_list);
+ gdk_color_parse (MODEST_COMPACT_HEADER_BG, &bg_color);
+ gtk_widget_modify_bg (GTK_WIDGET (priv->event_box), GTK_STATE_NORMAL, &bg_color);
}
static void
{
ModestGtkhtmlMsgViewPrivate *priv;
GtkAdjustment *html_vadj;
- GtkWidget *separator;
GTK_WIDGET_UNSET_FLAGS (obj, GTK_NO_WINDOW);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (obj), TRUE);
g_free (att_label);
}
+#ifndef MODEST_TOOLKIT_HILDON2
separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX(priv->headers_box), separator, FALSE, FALSE, 0);
+#endif
gtk_widget_set_parent (priv->headers_box, GTK_WIDGET (obj));
#define MODEST_DIALOG_WINDOW_MAX_WIDTH 642
#define MODEST_DIALOG_WINDOW_MIN_WIDTH 172
#ifdef MODEST_TOOLKIT_HILDON2
+#define MODEST_COMPACT_HEADER_BG "#404040"
#define MODEST_MARGIN_HALF HILDON_MARGIN_HALF
#define MODEST_MARGIN_DEFAULT HILDON_MARGIN_DEFAULT
#define MODEST_MARGIN_DOUBLE HILDON_MARGIN_DOUBLE