[evolution] Bug 240905 - Can't edit Follow Up flag
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 240905 - Can't edit Follow Up flag
- Date: Mon, 23 Jul 2018 21:45:16 +0000 (UTC)
commit b0d3546a9d1009ab519d26631444f4331da8e3d6
Author: Milan Crha <mcrha redhat com>
Date: Mon Jul 23 23:42:31 2018 +0200
Bug 240905 - Can't edit Follow Up flag
Closes https://bugzilla.gnome.org/show_bug.cgi?id=240905
src/mail/e-mail-reader.c | 52 ++++++++++++++++++++++++++-------
src/mail/e-mail-reader.h | 4 ++-
src/mail/e-mail-tag-editor.c | 14 +--------
src/mail/em-utils.c | 38 +++++++++++++++---------
src/mail/mail-dialogs.ui | 19 ++----------
src/modules/mail/e-mail-shell-content.c | 18 ++++++++++++
6 files changed, 90 insertions(+), 55 deletions(-)
---
diff --git a/src/mail/e-mail-reader.c b/src/mail/e-mail-reader.c
index eeda54709c..98dde18a82 100644
--- a/src/mail/e-mail-reader.c
+++ b/src/mail/e-mail-reader.c
@@ -718,19 +718,17 @@ static void
action_mail_flag_clear_cb (GtkAction *action,
EMailReader *reader)
{
- EMailDisplay *display;
CamelFolder *folder;
GtkWindow *window;
GPtrArray *uids;
folder = e_mail_reader_ref_folder (reader);
- display = e_mail_reader_get_mail_display (reader);
uids = e_mail_reader_get_selected_uids_with_collapsed_threads (reader);
window = e_mail_reader_get_window (reader);
em_utils_flag_for_followup_clear (window, folder, uids);
- e_mail_display_reload (display);
+ e_mail_reader_reload (reader);
g_clear_object (&folder);
g_ptr_array_unref (uids);
@@ -740,19 +738,17 @@ static void
action_mail_flag_completed_cb (GtkAction *action,
EMailReader *reader)
{
- EMailDisplay *display;
CamelFolder *folder;
GtkWindow *window;
GPtrArray *uids;
folder = e_mail_reader_ref_folder (reader);
- display = e_mail_reader_get_mail_display (reader);
uids = e_mail_reader_get_selected_uids_with_collapsed_threads (reader);
window = e_mail_reader_get_window (reader);
em_utils_flag_for_followup_completed (window, folder, uids);
- e_mail_display_reload (display);
+ e_mail_reader_reload (reader);
g_clear_object (&folder);
g_ptr_array_unref (uids);
@@ -770,6 +766,8 @@ action_mail_flag_for_followup_cb (GtkAction *action,
em_utils_flag_for_followup (reader, folder, uids);
+ e_mail_reader_reload (reader);
+
g_clear_object (&folder);
g_ptr_array_unref (uids);
}
@@ -3310,6 +3308,29 @@ mail_reader_manage_followup_flag (EMailReader *reader,
mail_reader_remove_followup_alert (reader);
}
+static void
+mail_reader_reload (EMailReader *reader)
+{
+ CamelFolder *folder;
+ GPtrArray *uids;
+ EMailDisplay *mail_display;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ folder = e_mail_reader_ref_folder (reader);
+ uids = e_mail_reader_get_selected_uids_with_collapsed_threads (reader);
+
+ if (uids && uids->len == 1)
+ mail_reader_manage_followup_flag (reader, folder, uids->pdata[0]);
+
+ g_clear_object (&folder);
+ if (uids)
+ g_ptr_array_unref (uids);
+
+ mail_display = e_mail_reader_get_mail_display (reader);
+ e_mail_display_reload (mail_display);
+}
+
static void
mail_reader_message_loaded_cb (CamelFolder *folder,
GAsyncResult *result,
@@ -3881,7 +3902,6 @@ mail_reader_update_actions (EMailReader *reader,
gboolean any_messages_selected;
gboolean enable_flag_clear;
gboolean enable_flag_completed;
- gboolean enable_flag_for_followup;
gboolean have_enabled_account;
gboolean multiple_messages_selected;
gboolean selection_has_attachment_messages;
@@ -3913,8 +3933,6 @@ mail_reader_update_actions (EMailReader *reader,
(state & E_MAIL_READER_SELECTION_FLAG_CLEAR);
enable_flag_completed =
(state & E_MAIL_READER_SELECTION_FLAG_COMPLETED);
- enable_flag_for_followup =
- (state & E_MAIL_READER_SELECTION_FLAG_FOLLOWUP);
selection_has_attachment_messages =
(state & E_MAIL_READER_SELECTION_HAS_ATTACHMENTS);
selection_has_deleted_messages =
@@ -4060,7 +4078,7 @@ mail_reader_update_actions (EMailReader *reader,
gtk_action_set_sensitive (action, sensitive);
action_name = "mail-flag-for-followup";
- sensitive = enable_flag_for_followup;
+ sensitive = any_messages_selected;
action = e_mail_reader_get_action (reader, action_name);
gtk_action_set_sensitive (action, sensitive);
@@ -4371,6 +4389,7 @@ e_mail_reader_default_init (EMailReaderInterface *iface)
iface->show_search_bar = mail_reader_show_search_bar;
iface->update_actions = mail_reader_update_actions;
iface->close_on_delete_or_junk = mail_reader_close_on_delete_or_junk;
+ iface->reload = mail_reader_reload;
g_object_interface_install_property (
iface,
@@ -5967,3 +5986,16 @@ e_mail_reader_connect_remote_content (EMailReader *reader)
g_signal_connect (mail_display, "load-changed",
G_CALLBACK (mail_reader_display_load_changed_cb), reader);
}
+
+void
+e_mail_reader_reload (EMailReader *reader)
+{
+ EMailReaderInterface *iface;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ iface = E_MAIL_READER_GET_INTERFACE (reader);
+ g_return_if_fail (iface->reload != NULL);
+
+ iface->reload (reader);
+}
diff --git a/src/mail/e-mail-reader.h b/src/mail/e-mail-reader.h
index 8d3ab2a922..7cf77432bc 100644
--- a/src/mail/e-mail-reader.h
+++ b/src/mail/e-mail-reader.h
@@ -136,9 +136,10 @@ struct _EMailReaderInterface {
guint32 state);
gboolean (*close_on_delete_or_junk)
(EMailReader *reader);
+ void (*reload) (EMailReader *reader);
/* Padding for future expansion */
- gpointer reserved[3];
+ gpointer reserved[2];
};
GType e_mail_reader_get_type (void);
@@ -212,6 +213,7 @@ void e_mail_reader_composer_created (EMailReader *reader,
CamelMimeMessage *message);
void e_mail_reader_connect_remote_content
(EMailReader *reader);
+void e_mail_reader_reload (EMailReader *reader);
G_END_DECLS
diff --git a/src/mail/e-mail-tag-editor.c b/src/mail/e-mail-tag-editor.c
index 73958de824..fbca4d21b6 100644
--- a/src/mail/e-mail-tag-editor.c
+++ b/src/mail/e-mail-tag-editor.c
@@ -56,14 +56,6 @@ enum {
G_DEFINE_TYPE (EMailTagEditor, e_mail_tag_editor, GTK_TYPE_DIALOG)
-static void
-mail_tag_editor_clear_clicked_cb (EMailTagEditor *editor)
-{
- gtk_combo_box_set_active (editor->priv->combo_entry, DEFAULT_FLAG);
- e_date_edit_set_time (editor->priv->target_date, (time_t) -1);
- e_mail_tag_editor_set_completed (editor, FALSE);
-}
-
static void
mail_tag_editor_set_property (GObject *object,
guint property_id,
@@ -166,6 +158,7 @@ e_mail_tag_editor_init (EMailTagEditor *editor)
gtk_dialog_add_buttons (
dialog,
_("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("Cl_ear"), GTK_RESPONSE_REJECT,
_("_OK"), GTK_RESPONSE_OK,
NULL);
@@ -222,11 +215,6 @@ e_mail_tag_editor_init (EMailTagEditor *editor)
G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE);
- widget = e_builder_get_widget (builder, "clear");
- g_signal_connect_swapped (
- widget, "clicked",
- G_CALLBACK (mail_tag_editor_clear_clicked_cb), editor);
-
g_object_unref (builder);
}
diff --git a/src/mail/em-utils.c b/src/mail/em-utils.c
index f92e9e124c..2d3c03dbc2 100644
--- a/src/mail/em-utils.c
+++ b/src/mail/em-utils.c
@@ -236,11 +236,11 @@ em_utils_flag_for_followup (EMailReader *reader,
CamelFolder *folder,
GPtrArray *uids)
{
- EMailDisplay *display;
GtkWidget *editor;
GtkWindow *window;
CamelNameValueArray *tags;
guint ii, tags_len;
+ gint response;
g_return_if_fail (E_IS_MAIL_READER (reader));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
@@ -285,14 +285,19 @@ em_utils_flag_for_followup (EMailReader *reader,
}
}
- if (gtk_dialog_run (GTK_DIALOG (editor)) != GTK_RESPONSE_OK)
+ response = gtk_dialog_run (GTK_DIALOG (editor));
+ if (response != GTK_RESPONSE_OK && response != GTK_RESPONSE_REJECT)
goto exit;
- tags = e_mail_tag_editor_get_tag_list (E_MAIL_TAG_EDITOR (editor));
- if (tags == NULL)
- goto exit;
+ if (response == GTK_RESPONSE_OK) {
+ tags = e_mail_tag_editor_get_tag_list (E_MAIL_TAG_EDITOR (editor));
+ if (!tags)
+ goto exit;
+ } else {
+ tags = NULL;
+ }
- tags_len = camel_name_value_array_get_length (tags);
+ tags_len = tags ? camel_name_value_array_get_length (tags) : 0;
camel_folder_freeze (folder);
for (ii = 0; ii < uids->len; ii++) {
@@ -306,13 +311,19 @@ em_utils_flag_for_followup (EMailReader *reader,
camel_message_info_freeze_notifications (info);
- for (jj = 0; jj < tags_len; jj++) {
- const gchar *name = NULL, *value = NULL;
+ if (response == GTK_RESPONSE_REJECT) {
+ camel_message_info_set_user_tag (info, "follow-up", NULL);
+ camel_message_info_set_user_tag (info, "due-by", NULL);
+ camel_message_info_set_user_tag (info, "completed-on", NULL);
+ } else {
+ for (jj = 0; jj < tags_len; jj++) {
+ const gchar *name = NULL, *value = NULL;
- if (!camel_name_value_array_get (tags, jj, &name, &value))
- continue;
+ if (!camel_name_value_array_get (tags, jj, &name, &value))
+ continue;
- camel_message_info_set_user_tag (info, name, value);
+ camel_message_info_set_user_tag (info, name, value);
+ }
}
camel_message_info_thaw_notifications (info);
@@ -322,9 +333,6 @@ em_utils_flag_for_followup (EMailReader *reader,
camel_folder_thaw (folder);
camel_name_value_array_free (tags);
- display = e_mail_reader_get_mail_display (reader);
- e_mail_display_reload (display);
-
exit:
gtk_widget_destroy (GTK_WIDGET (editor));
}
@@ -354,9 +362,11 @@ em_utils_flag_for_followup_clear (GtkWindow *parent,
CamelMessageInfo *mi = camel_folder_get_message_info (folder, uids->pdata[i]);
if (mi) {
+ camel_message_info_freeze_notifications (mi);
camel_message_info_set_user_tag (mi, "follow-up", NULL);
camel_message_info_set_user_tag (mi, "due-by", NULL);
camel_message_info_set_user_tag (mi, "completed-on", NULL);
+ camel_message_info_thaw_notifications (mi);
g_clear_object (&mi);
}
}
diff --git a/src/mail/mail-dialogs.ui b/src/mail/mail-dialogs.ui
index b8b40a4589..2753424f06 100644
--- a/src/mail/mail-dialogs.ui
+++ b/src/mail/mail-dialogs.ui
@@ -145,21 +145,6 @@ Please select a follow up action from the “Flag” menu.</property>
<property name="y_options"/>
</packing>
</child>
- <child>
- <object class="GtkButton" id="clear">
- <property name="label" translatable="yes">_Clear</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"/>
- </packing>
- </child>
<child>
<object class="EDateEdit" id="target_date">
<property name="allow-no-date-set">True</property>
@@ -167,7 +152,7 @@ Please select a follow up action from the “Flag” menu.</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">3</property>
+ <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
@@ -184,7 +169,7 @@ Please select a follow up action from the “Flag” menu.</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">3</property>
+ <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
diff --git a/src/modules/mail/e-mail-shell-content.c b/src/modules/mail/e-mail-shell-content.c
index e12a05e1b4..03f4394c16 100644
--- a/src/modules/mail/e-mail-shell-content.c
+++ b/src/modules/mail/e-mail-shell-content.c
@@ -578,6 +578,23 @@ mail_shell_content_set_folder (EMailReader *reader,
e_mail_reader_set_folder (reader, folder);
}
+static void
+mail_shell_content_reload (EMailReader *reader)
+{
+ EMailShellContent *mail_shell_content;
+
+ mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
+
+ if (!mail_shell_content->priv->mail_view)
+ return;
+
+ /* Forward this to our internal EMailView, which
+ * also implements the EMailReader interface. */
+ reader = E_MAIL_READER (mail_shell_content->priv->mail_view);
+
+ e_mail_reader_reload (reader);
+}
+
static void
e_mail_shell_content_class_init (EMailShellContentClass *class)
{
@@ -666,6 +683,7 @@ e_mail_shell_content_reader_init (EMailReaderInterface *iface)
iface->get_window = mail_shell_content_get_window;
iface->set_folder = mail_shell_content_set_folder;
iface->open_selected_mail = mail_shell_content_open_selected_mail;
+ iface->reload = mail_shell_content_reload;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]