* Updated the bug fixes for week 24 release.
pmo-diablo-r4633
+modest (1.0-2008.24-1) hardy; urgency=low
+
+ * Fixes: NB#86097, NB#85201, NB#81429, NB#81798, NB#83135, NB#83892
+ * Fixes: NB#83920, NB#85343, NB#84348, NB#84538, NB#84757, NB#84791
+ * Fixes: NB#84808, NB#85034, NB#85344, NB#82137, NB#86176, NB#86116
+
+ -- Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com> Tue, 10 Jun 2008 14:23:45 +0300
+
modest (1.0-2008.23-2) hardy; urgency=low
* Fixes: NB#85621, NB#86079, NB#85060, NB#86186
GtkWidget *delete_button;
GtkWidget *close_button;
ModestAccountView *account_view;
+ guint acc_removed_handler;
};
#define MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_ACCOUNT_VIEW_WINDOW, \
gobject_class->finalize = modest_account_view_window_finalize;
g_type_class_add_private (gobject_class, sizeof(ModestAccountViewWindowPrivate));
-
- /* signal definitions go here, e.g.: */
-/* signals[MY_SIGNAL_1] = */
-/* g_signal_new ("my_signal_1",....); */
-/* signals[MY_SIGNAL_2] = */
-/* g_signal_new ("my_signal_2",....); */
-/* etc. */
}
static void
-modest_account_view_window_finalize (GObject *obj)
+modest_account_view_window_finalize (GObject *self)
{
- G_OBJECT_CLASS(parent_class)->finalize (obj);
+ ModestAccountViewWindowPrivate *priv;
+ ModestAccountMgr *mgr;
+
+ priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (self);
+ mgr = modest_runtime_get_account_mgr ();
+
+ if (g_signal_handler_is_connected (mgr, priv->acc_removed_handler))
+ g_signal_handler_disconnect (mgr, priv->acc_removed_handler);
+ priv->acc_removed_handler = 0;
+
+ G_OBJECT_CLASS(parent_class)->finalize (self);
}
/* Set the status of the buttons */
gtk_widget_set_sensitive (priv->edit_button, has_selection);
- gtk_widget_set_sensitive (priv->delete_button, has_selection);
+ gtk_widget_set_sensitive (priv->delete_button, has_selection);
}
/** Check whether any connections are active, and cancel them if
if (!removed) {
g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
}
+
}
g_free (account_title);
}
}
static void
-on_wizard_response (GtkDialog *dialog, gint response, gpointer user_data)
+on_wizard_response (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
{
/* The response has already been handled by the wizard dialog itself,
* creating the new account.
*/
- /* Destroy the dialog: */
if (dialog)
gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ /* Re-focus the account list view widget */
+ if (MODEST_IS_ACCOUNT_VIEW_WINDOW (user_data)) {
+ ModestAccountViewWindowPrivate *priv;
+ priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (user_data);
+ gtk_widget_grab_focus (GTK_WIDGET (priv->account_view));
+ }
}
static void
{
GtkDialog *wizard;
GtkWindow *dialog;
-
+
/* Show the easy-setup wizard: */
dialog = modest_window_mgr_get_modal (modest_runtime_get_window_mgr());
if (dialog && MODEST_IS_EASYSETUP_WIZARD_DIALOG(dialog)) {
gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
}
-
-
static GtkWidget*
button_box_new (ModestAccountViewWindow *self)
{
g_signal_connect (G_OBJECT(priv->close_button), "clicked",
G_CALLBACK(on_close_button_clicked),
self);
-
+
gtk_box_pack_start (GTK_BOX(button_box), priv->new_button, FALSE, FALSE,2);
gtk_box_pack_start (GTK_BOX(button_box), priv->edit_button, FALSE, FALSE,2);
gtk_box_pack_start (GTK_BOX(button_box), priv->delete_button, FALSE, FALSE,2);
static void
-modest_account_view_window_init (ModestAccountViewWindow *obj)
+modest_account_view_window_init (ModestAccountViewWindow *self)
{
- gtk_box_pack_start (GTK_BOX((GTK_DIALOG (obj)->vbox)), GTK_WIDGET (window_vbox_new (obj)),
- TRUE, TRUE, 2);
-
- gtk_box_pack_start (GTK_BOX((GTK_DIALOG (obj)->action_area)), GTK_WIDGET (button_box_new (obj)),
- TRUE, TRUE, 2);
+ ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
+
+ priv->acc_removed_handler = 0;
+}
- gtk_window_set_title (GTK_WINDOW (obj), _("mcen_ti_emailsetup_accounts"));
+static void
+on_account_removed (ModestAccountMgr *acc_mgr,
+ const gchar *account,
+ gpointer user_data)
+{
+ ModestAccountViewWindowPrivate *priv;
+ /* If there is no account left then close the window */
+ if (!modest_account_mgr_has_accounts (acc_mgr, TRUE)) {
+ gboolean ret_value;
+ g_signal_emit_by_name (G_OBJECT (user_data), "delete-event", NULL, &ret_value);
+ } else {
+ /* Re-focus the account list view widget */
+ priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (user_data);
+ gtk_widget_grab_focus (GTK_WIDGET (priv->account_view));
+ }
}
GtkWidget*
modest_account_view_window_new (void)
{
- GObject *obj = g_object_new(MODEST_TYPE_ACCOUNT_VIEW_WINDOW, NULL);
+ GObject *self = g_object_new(MODEST_TYPE_ACCOUNT_VIEW_WINDOW, NULL);
+ ModestAccountViewWindowPrivate *priv;
+ ModestAccountMgr *account_mgr = modest_runtime_get_account_mgr ();
+
+ /* Add widgets */
+ gtk_box_pack_start (GTK_BOX((GTK_DIALOG (self)->vbox)),
+ window_vbox_new (MODEST_ACCOUNT_VIEW_WINDOW (self)),
+ TRUE, TRUE, 2);
+
+ gtk_box_pack_start (GTK_BOX((GTK_DIALOG (self)->action_area)),
+ button_box_new (MODEST_ACCOUNT_VIEW_WINDOW (self)),
+ TRUE, TRUE, 2);
+
+ gtk_window_set_title (GTK_WINDOW (self), _("mcen_ti_emailsetup_accounts"));
+
+ /* Connect signals */
+ priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
+ priv->acc_removed_handler = g_signal_connect (G_OBJECT(account_mgr), "account_removed",
+ G_CALLBACK (on_account_removed), self);
- return GTK_WIDGET(obj);
+ return GTK_WIDGET (self);
}
return FALSE;
}
+static void
+hide_check_names_banner (GtkWidget **banner, guint banner_timeout)
+{
+ g_source_remove (banner_timeout);
+ if (*banner != NULL) {
+ gtk_widget_destroy (*banner);
+ *banner = NULL;
+ } else {
+ g_source_remove (banner_timeout);
+ }
+
+}
+
gboolean
modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean update_addressbook)
{
gint offset_delta = 0;
gint last_length;
GtkTextIter start_iter, end_iter;
- guint banner_timeout;
- GtkWidget *banner = NULL;
g_return_val_if_fail (MODEST_IS_RECPT_EDITOR (recpt_editor), FALSE);
}
}
- banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
-
current_start = start_indexes;
current_end = end_indexes;
buffer = modest_recpt_editor_get_buffer (recpt_editor);
/* here goes searching in addressbook */
gchar *contact_id = NULL;
GSList *resolved_addresses = NULL;
+
result = resolve_address (address, &resolved_addresses, &contact_id);
if (result) {
g_slist_free (start_indexes);
g_slist_free (end_indexes);
- g_source_remove (banner_timeout);
- if (banner != NULL) {
- gtk_widget_destroy (banner);
- banner = NULL;
- } else {
- g_source_remove (banner_timeout);
- }
-
return result;
}
resolve_address (const gchar *address, GSList **resolved_addresses, gchar **contact_id)
{
GList *resolved_contacts;
+ guint banner_timeout;
+ GtkWidget *banner = NULL;
+
+ banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
contact_model = osso_abook_contact_model_new ();
if (!open_addressbook_sync ()) {
if (resolved_contacts == NULL) {
/* no matching contacts for the search string */
modest_platform_run_information_dialog (NULL, _("mcen_nc_no_matching_contacts"), FALSE);
+ hide_check_names_banner (&banner, banner_timeout);
+
return FALSE;
}
/* show a dialog to select the contact from the resolved ones */
g_list_free (resolved_contacts);
+ hide_check_names_banner (&banner, banner_timeout);
resolved_contacts = select_contacts_for_name_dialog (address);
+ banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
+
}
/* get the resolved contacts (can be no contact) */
EContact *contact = (EContact *) resolved_contacts->data;
*resolved_addresses = get_recipients_for_given_contact (contact);
+ hide_check_names_banner (&banner, banner_timeout);
if (*resolved_addresses) {
*contact_id = g_strdup (e_contact_get_const (contact, E_CONTACT_UID));
found = TRUE;
} else {
/* cancelled dialog to select more than one contact or
* selected no contact */
+ hide_check_names_banner (&banner, banner_timeout);
return FALSE;
}
if (selected_headers > 1) {
hildon_banner_show_information (NULL, NULL, _("mcen_ib_select_one_message"));
return TRUE;
+ } else {
+ GtkTreePath * cursor_path;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (widget), &cursor_path, NULL);
+ if (cursor_path == NULL) {
+ GtkTreeSelection *selection;
+ GList *list;
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+ list = gtk_tree_selection_get_selected_rows (selection, NULL);
+
+ if (list != NULL)
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), (GtkTreePath *) list->data, NULL, FALSE);
+ g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL);
+ g_list_free (list);
+ }
}
}
} else if (MODEST_IS_FOLDER_VIEW (widget) && event->keyval == GDK_Right)
{
GtkToggleAction *toggle;
ModestWindowPrivate *parent_priv;
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
parent_priv = MODEST_WINDOW_GET_PRIVATE (obj);
toggle = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"));
gtk_toggle_action_set_active (toggle, FALSE);
+ modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
}
static void
deleted account */
modest_account_mgr_set_first_account_as_default (self);
}
-
- /* Notify the observers. We do this *after* deleting
- the keys, because otherwise a call to account_names
- will retrieve also the deleted account */
- g_signal_emit (G_OBJECT(self), signals[ACCOUNT_REMOVED_SIGNAL], 0, name);
/* if this was the last account, stop any auto-updating */
/* (re)set the automatic account update */
} else
modest_account_mgr_free_account_names (acc_names);
+ /* Notify the observers. We do this *after* deleting
+ the keys, because otherwise a call to account_names
+ will retrieve also the deleted account */
+ g_signal_emit (G_OBJECT(self), signals[ACCOUNT_REMOVED_SIGNAL], 0, name);
+
return TRUE;
}
const gchar *account_name,
const gchar *display_name)
{
+ gboolean notify = TRUE;
+
+ if (!modest_account_mgr_get_display_name (self, account_name))
+ notify = FALSE;
+
modest_account_mgr_set_string (self,
account_name,
MODEST_ACCOUNT_DISPLAY_NAME,
FALSE /* not server account */);
/* Notify about the change in the display name */
- g_signal_emit (self, signals[DISPLAY_NAME_CHANGED_SIGNAL], 0, account_name);
+ if (notify)
+ g_signal_emit (self, signals[DISPLAY_NAME_CHANGED_SIGNAL], 0, account_name);
}
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op);
mgr = modest_runtime_get_account_mgr ();
+ /* Set the last updated as the current time, do it even if the inbox refresh failed */
+ modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL));
+
if (canceled || err) {
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
if (err)
g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED,
"canceled");
+
/* Notify the user about the error and then exit */
update_account_notify_user_and_free (info, NULL);
return;
g_object_unref (info->inbox_observer);
info->inbox_observer = NULL;
- /* Update the last updated key, even if we don't have to get new headers */
- modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL));
-
if (new_headers_array->len == 0)
goto send_mail;
update_account_notify_user_and_free (info, new_headers);
}
+static void
+inbox_refresh_status_update (GObject *obj,
+ TnyStatus *status,
+ gpointer user_data)
+{
+ UpdateAccountInfo *info = NULL;
+ ModestMailOperation *self = NULL;
+ ModestMailOperationPrivate *priv = NULL;
+ ModestMailOperationState *state;
+
+ g_return_if_fail (user_data != NULL);
+ g_return_if_fail (status != NULL);
+
+ /* Show only the status information we want */
+ if (status->code != TNY_FOLDER_STATUS_CODE_REFRESH)
+ return;
+
+ info = (UpdateAccountInfo *) user_data;
+ self = info->mail_op;
+ g_return_if_fail (MODEST_IS_MAIL_OPERATION(self));
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+ priv->done = status->position;
+ priv->total = status->of_total;
+
+ state = modest_mail_operation_clone_state (self);
+
+ /* This is not a GDK lock because we are a Tinymail callback and
+ * Tinymail already acquires the Gdk lock */
+ g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
+
+ g_slice_free (ModestMailOperationState, state);
+}
+
static void
recurse_folders_async_cb (TnyFolderStore *folder_store,
gboolean canceled,
tny_folder_add_observer (inbox, info->inbox_observer);
/* Refresh the INBOX */
- tny_folder_refresh_async (inbox, inbox_refreshed_cb, NULL, info);
+ tny_folder_refresh_async (inbox, inbox_refreshed_cb, inbox_refresh_status_update, info);
g_object_unref (inbox);
} else {
/* We could not perform the inbox refresh but
{
GSList *addresses, *cursor;
GHashTable *table;
- gchar *new_list;
+ gchar *new_list = NULL;
g_return_val_if_fail (address_list, NULL);
table = g_hash_table_new (g_str_hash, g_str_equal);
addresses = modest_text_utils_split_addresses_list (address_list);
- new_list = g_strdup("");
cursor = addresses;
while (cursor) {
const gchar* address = (const gchar*)cursor->data;
/* ignore the address if already seen */
if (g_hash_table_lookup (table, address) == 0) {
-
- gchar *tmp = g_strjoin (",", new_list, address, NULL);
- g_free (new_list);
+ gchar *tmp;
+
+ if (!new_list) {
+ tmp = g_strdup (address);
+ } else {
+ tmp = g_strjoin (",", new_list, address, NULL);
+ g_free (new_list);
+ }
new_list = tmp;
g_hash_table_insert (table, (gchar*)address, GINT_TO_POINTER(1));
old_cid = tny_mime_part_get_content_id (old_attachment);
attachment_part = copy_mime_part (old_attachment, err);
if (attachment_part != NULL) {
- tny_mime_part_set_header_pair (attachment_part, "Content-Disposition",
- add_inline?"inline":"attachment");
+ if (add_inline) {
+ tny_mime_part_set_header_pair (attachment_part, "Content-Disposition",
+ "inline");
+ } else {
+ const gchar *filename;
+ filename = tny_mime_part_get_filename (old_attachment);
+ if (filename)
+ tny_mime_part_set_filename (attachment_part, filename);
+ else
+ tny_mime_part_set_header_pair (attachment_part, "Content-Disposition",
+ "attachment");
+ }
tny_mime_part_set_transfer_encoding (TNY_MIME_PART (attachment_part), "base64");
ret = tny_mime_part_add_part (TNY_MIME_PART (part), attachment_part);
if (old_cid)
/* If the window was closed when renaming a folder this could
happen */
- if (MODEST_IS_FOLDER_VIEW (user_data))
+ if (!MODEST_IS_FOLDER_VIEW (user_data))
return;
folder_view = MODEST_FOLDER_VIEW (user_data);
} else {
modest_folder_view_select_first_inbox_or_local (folder_view);
}
+ gtk_widget_grab_focus (GTK_WIDGET (folder_view));
}
static void
if (dimmed)
modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
}
+ if (!dimmed) {
+ dimmed = modest_window_get_dimming_state (win)->any_marked_as_deleted;
+ if (dimmed) {
+ gchar *msg = modest_ui_actions_get_msg_already_deleted_error_msg (win);
+ modest_dimming_rule_set_notification (rule, msg);
+ g_free (msg);
+ }
+ }
if (!dimmed) {
dimmed = _selected_msg_sent_in_progress (win);
if (selected_name) {
modest_account_view_select_account (view, selected_name);
g_free (selected_name);
+ } else {
+ modest_account_view_select_first_account (view);
}
}
{
ModestAccountView *self;
ModestAccountViewPrivate *priv;
+ gchar *selected_name;
g_return_if_fail (MODEST_IS_ACCOUNT_VIEW (user_data));
self = MODEST_ACCOUNT_VIEW (user_data);
priv = MODEST_ACCOUNT_VIEW_GET_PRIVATE (self);
+
+ /* Do not refresh the view with transport accounts */
+ if (!TNY_IS_STORE_ACCOUNT (account))
+ return;
- gchar *selected_name = modest_account_view_get_selected_account (self);
+ selected_name = modest_account_view_get_selected_account (self);
if (selected_name == NULL) {
/* we select the first account if none is selected */
modest_account_view_select_first_account (self);
static void
-on_account_changed (TnyAccountStore *account_store,
- TnyAccount *account,
- gpointer user_data)
-{
- ModestAccountView *self = NULL;
- ModestAccountViewPrivate *priv = NULL;
-
- g_return_if_fail (MODEST_IS_ACCOUNT_VIEW (user_data));
- g_return_if_fail (account);
- g_return_if_fail (TNY_IS_ACCOUNT (account));
-
- self = MODEST_ACCOUNT_VIEW (user_data);
- priv = MODEST_ACCOUNT_VIEW_GET_PRIVATE (self);
-
- /* Update account view */
-/* update_account_view (priv->account_mgr, self); */
-}
-
-static void
on_account_default_toggled (GtkCellRendererToggle *cell_renderer,
gchar *path,
ModestAccountView *self)
self);
priv->sig_handlers =
modest_signal_mgr_connect (priv->sig_handlers,
- G_OBJECT (modest_runtime_get_account_store ()),
- "account_changed",
- G_CALLBACK(on_account_changed),
- self);
- priv->sig_handlers =
- modest_signal_mgr_connect (priv->sig_handlers,
G_OBJECT(priv->account_mgr),
"account_busy_changed",
G_CALLBACK(on_account_busy_changed),
date_time_buffer);
}
- /* for outbox, drafts: Modified: (_created) */
- if ((folder_type == TNY_FOLDER_TYPE_DRAFTS) ||
- (folder_type == TNY_FOLDER_TYPE_OUTBOX) ||
- (folder_type == TNY_FOLDER_TYPE_SENT)) {
+ /* for drafts (created) */
+ if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
modest_text_utils_strftime (date_time_buffer, DATE_TIME_BUFFER_SIZE, "%x %X",
received);
modest_details_dialog_add_data (self, _("mcen_fi_message_properties_created"),
if (new_folder) {
/* Select the folder */
modest_folder_view_select_folder (MODEST_FOLDER_VIEW (user_data),
- new_folder, TRUE);
+ new_folder, FALSE);
}
}