[evolution] Bug 787612 - Option to 'Go to the previous message after message deletion'
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 787612 - Option to 'Go to the previous message after message deletion'
- Date: Wed, 13 Sep 2017 17:31:28 +0000 (UTC)
commit 209351ace5f1be5293bfe902e9b1fb1edbe4955d
Author: Milan Crha <mcrha redhat com>
Date: Wed Sep 13 19:30:40 2017 +0200
Bug 787612 - Option to 'Go to the previous message after message deletion'
data/org.gnome.evolution.mail.gschema.xml.in | 5 +++
src/mail/e-mail-browser.c | 22 +++++++++++-
src/mail/e-mail-paned-view.c | 22 +++++++++++-
src/mail/e-mail-reader-utils.c | 23 ++++++++++++
src/mail/e-mail-reader-utils.h | 3 ++
src/mail/e-mail-reader.c | 48 +++++++++++++++++++++++-
src/mail/e-mail-reader.h | 5 +++
src/mail/mail-config.ui | 16 ++++++++
src/modules/mail/e-mail-shell-content.c | 21 ++++++++++-
src/modules/mail/em-mailer-prefs.c | 6 +++
src/modules/settings/e-settings-mail-reader.c | 5 +++
11 files changed, 171 insertions(+), 5 deletions(-)
---
diff --git a/data/org.gnome.evolution.mail.gschema.xml.in b/data/org.gnome.evolution.mail.gschema.xml.in
index a46fb8b..bc3eb31 100644
--- a/data/org.gnome.evolution.mail.gschema.xml.in
+++ b/data/org.gnome.evolution.mail.gschema.xml.in
@@ -698,6 +698,11 @@
<_summary>Show start up wizard</_summary>
<_description>Whether show start up wizard when there is no mail account configured.</_description>
</key>
+ <key name="delete-selects-previous" type="b">
+ <default>false</default>
+ <_summary>Whether go to the previous message after message deletion</_summary>
+ <_description>If set to true, goes to the previous message when the selected is deleted; or to the
next message, when it's set to false.</_description>
+ </key>
<!-- The following keys are deprecated. -->
diff --git a/src/mail/e-mail-browser.c b/src/mail/e-mail-browser.c
index 1928ae4..de246c4 100644
--- a/src/mail/e-mail-browser.c
+++ b/src/mail/e-mail-browser.c
@@ -75,7 +75,8 @@ enum {
PROP_MARK_SEEN_ALWAYS,
PROP_SHOW_DELETED,
PROP_SHOW_JUNK,
- PROP_UI_MANAGER
+ PROP_UI_MANAGER,
+ PROP_DELETE_SELECTS_PREVIOUS
};
/* This is too trivial to put in a file.
@@ -467,6 +468,12 @@ mail_browser_set_property (GObject *object,
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ e_mail_reader_set_delete_selects_previous (
+ E_MAIL_READER (object),
+ g_value_get_boolean (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -555,6 +562,13 @@ mail_browser_get_property (GObject *object,
e_mail_reader_get_mark_seen_always (
E_MAIL_READER (object)));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ g_value_set_boolean (
+ value,
+ e_mail_reader_get_delete_selects_previous (
+ E_MAIL_READER (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1035,6 +1049,12 @@ e_mail_browser_class_init (EMailBrowserClass *class)
PROP_MARK_SEEN_ALWAYS,
"mark-seen-always");
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
+ object_class,
+ PROP_DELETE_SELECTS_PREVIOUS,
+ "delete-selects-previous");
+
g_object_class_install_property (
object_class,
PROP_SHOW_DELETED,
diff --git a/src/mail/e-mail-paned-view.c b/src/mail/e-mail-paned-view.c
index cb7e94e..acc66e1 100644
--- a/src/mail/e-mail-paned-view.c
+++ b/src/mail/e-mail-paned-view.c
@@ -64,7 +64,8 @@ enum {
PROP_FORWARD_STYLE,
PROP_GROUP_BY_THREADS,
PROP_REPLY_STYLE,
- PROP_MARK_SEEN_ALWAYS
+ PROP_MARK_SEEN_ALWAYS,
+ PROP_DELETE_SELECTS_PREVIOUS
};
#define STATE_KEY_GROUP_BY_THREADS "GroupByThreads"
@@ -319,6 +320,12 @@ mail_paned_view_set_property (GObject *object,
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ e_mail_reader_set_delete_selects_previous (
+ E_MAIL_READER (object),
+ g_value_get_boolean (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -358,6 +365,13 @@ mail_paned_view_get_property (GObject *object,
e_mail_reader_get_mark_seen_always (
E_MAIL_READER (object)));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ g_value_set_boolean (
+ value,
+ e_mail_reader_get_delete_selects_previous (
+ E_MAIL_READER (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1150,6 +1164,12 @@ e_mail_paned_view_class_init (EMailPanedViewClass *class)
object_class,
PROP_MARK_SEEN_ALWAYS,
"mark-seen-always");
+
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
+ object_class,
+ PROP_DELETE_SELECTS_PREVIOUS,
+ "delete-selects-previous");
}
static void
diff --git a/src/mail/e-mail-reader-utils.c b/src/mail/e-mail-reader-utils.c
index 89f48c7..34c0ad4 100644
--- a/src/mail/e-mail-reader-utils.c
+++ b/src/mail/e-mail-reader-utils.c
@@ -2935,6 +2935,29 @@ e_mail_reader_select_next_message (EMailReader *reader,
MESSAGE_LIST_SELECT_PREVIOUS, 0, 0);
}
+void
+e_mail_reader_select_previous_message (EMailReader *reader,
+ gboolean or_else_next)
+{
+ GtkWidget *message_list;
+ gboolean hide_deleted;
+ gboolean success;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ hide_deleted = e_mail_reader_get_hide_deleted (reader);
+ message_list = e_mail_reader_get_message_list (reader);
+
+ success = message_list_select (
+ MESSAGE_LIST (message_list),
+ MESSAGE_LIST_SELECT_PREVIOUS, 0, 0);
+
+ if (!success && (hide_deleted || or_else_next))
+ message_list_select (
+ MESSAGE_LIST (message_list),
+ MESSAGE_LIST_SELECT_NEXT, 0, 0);
+}
+
/* Helper for e_mail_reader_create_filter_from_selected() */
static void
mail_reader_create_filter_cb (GObject *source_object,
diff --git a/src/mail/e-mail-reader-utils.h b/src/mail/e-mail-reader-utils.h
index 1fbd338..115079f 100644
--- a/src/mail/e-mail-reader-utils.h
+++ b/src/mail/e-mail-reader-utils.h
@@ -91,6 +91,9 @@ void e_mail_reader_save_messages (EMailReader *reader);
void e_mail_reader_select_next_message
(EMailReader *reader,
gboolean or_else_previous);
+void e_mail_reader_select_previous_message
+ (EMailReader *reader,
+ gboolean or_else_next);
void e_mail_reader_create_filter_from_selected
(EMailReader *reader,
gint filter_type);
diff --git a/src/mail/e-mail-reader.c b/src/mail/e-mail-reader.c
index c2ad8f7..a0927a5 100644
--- a/src/mail/e-mail-reader.c
+++ b/src/mail/e-mail-reader.c
@@ -89,6 +89,7 @@ struct _EMailReaderPrivate {
guint group_by_threads : 1;
guint mark_seen_always : 1;
+ guint delete_selects_previous : 1;
/* to be able to start the mark_seen timeout only after
* the message is loaded into the EMailDisplay */
@@ -507,8 +508,12 @@ action_mail_delete_cb (GtkAction *action,
/* FIXME Verify all selected messages are deletable.
* But handle it by disabling this action. */
- if (e_mail_reader_mark_selected (reader, mask, set) != 0)
- e_mail_reader_select_next_message (reader, FALSE);
+ if (e_mail_reader_mark_selected (reader, mask, set) != 0) {
+ if (e_mail_reader_get_delete_selects_previous (reader))
+ e_mail_reader_select_previous_message (reader, FALSE);
+ else
+ e_mail_reader_select_next_message (reader, FALSE);
+ }
}
static void
@@ -4109,6 +4114,15 @@ e_mail_reader_default_init (EMailReaderInterface *iface)
FALSE,
G_PARAM_READWRITE));
+ g_object_interface_install_property (
+ iface,
+ g_param_spec_boolean (
+ "delete-selects-previous",
+ "Delete Selects Previous",
+ "Whether go to the previous message after message deletion",
+ FALSE,
+ G_PARAM_READWRITE));
+
signals[CHANGED] = g_signal_new (
"changed",
G_OBJECT_CLASS_TYPE (iface),
@@ -5057,6 +5071,36 @@ e_mail_reader_set_mark_seen_always (EMailReader *reader,
g_object_notify (G_OBJECT (reader), "mark-seen-always");
}
+gboolean
+e_mail_reader_get_delete_selects_previous (EMailReader *reader)
+{
+ EMailReaderPrivate *priv;
+
+ g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE);
+
+ priv = E_MAIL_READER_GET_PRIVATE (reader);
+
+ return priv->delete_selects_previous;
+}
+
+void
+e_mail_reader_set_delete_selects_previous (EMailReader *reader,
+ gboolean delete_selects_previous)
+{
+ EMailReaderPrivate *priv;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ priv = E_MAIL_READER_GET_PRIVATE (reader);
+
+ if (priv->delete_selects_previous == delete_selects_previous)
+ return;
+
+ priv->delete_selects_previous = delete_selects_previous;
+
+ g_object_notify (G_OBJECT (reader), "delete-selects-previous");
+}
+
void
e_mail_reader_create_charset_menu (EMailReader *reader,
GtkUIManager *ui_manager,
diff --git a/src/mail/e-mail-reader.h b/src/mail/e-mail-reader.h
index a2cebaf..6f3fb26 100644
--- a/src/mail/e-mail-reader.h
+++ b/src/mail/e-mail-reader.h
@@ -180,6 +180,11 @@ gboolean e_mail_reader_get_mark_seen_always
void e_mail_reader_set_mark_seen_always
(EMailReader *reader,
gboolean mark_seen_always);
+gboolean e_mail_reader_get_delete_selects_previous
+ (EMailReader *reader);
+void e_mail_reader_set_delete_selects_previous
+ (EMailReader *reader,
+ gboolean delete_selects_previous);
void e_mail_reader_create_charset_menu
(EMailReader *reader,
GtkUIManager *ui_manager,
diff --git a/src/mail/mail-config.ui b/src/mail/mail-config.ui
index 22e975c..3613380 100644
--- a/src/mail/mail-config.ui
+++ b/src/mail/mail-config.ui
@@ -2151,6 +2151,22 @@
<property name="position">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="chkDeleteSelectsPrevious">
+ <property name="label" translatable="yes">Go to the previ_ous message after message
deletion</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0.5</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/src/modules/mail/e-mail-shell-content.c b/src/modules/mail/e-mail-shell-content.c
index 60ac7a3..39c6356 100644
--- a/src/modules/mail/e-mail-shell-content.c
+++ b/src/modules/mail/e-mail-shell-content.c
@@ -53,7 +53,8 @@ enum {
PROP_MAIL_VIEW,
PROP_REPLY_STYLE,
PROP_MARK_SEEN_ALWAYS,
- PROP_TO_DO_PANE
+ PROP_TO_DO_PANE,
+ PROP_DELETE_SELECTS_PREVIOUS
};
/* Forward Declarations */
@@ -134,6 +135,12 @@ mail_shell_content_set_property (GObject *object,
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ e_mail_reader_set_delete_selects_previous (
+ E_MAIL_READER (object),
+ g_value_get_boolean (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -181,6 +188,12 @@ mail_shell_content_get_property (GObject *object,
value, e_mail_shell_content_get_to_do_pane (
E_MAIL_SHELL_CONTENT (object)));
return;
+
+ case PROP_DELETE_SELECTS_PREVIOUS:
+ g_value_set_boolean (
+ value, e_mail_reader_get_delete_selects_previous (
+ E_MAIL_READER (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -535,6 +548,12 @@ e_mail_shell_content_class_init (EMailShellContentClass *class)
PROP_MARK_SEEN_ALWAYS,
"mark-seen-always");
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
+ object_class,
+ PROP_DELETE_SELECTS_PREVIOUS,
+ "delete-selects-previous");
+
g_object_class_install_property (
object_class,
PROP_TO_DO_PANE,
diff --git a/src/modules/mail/em-mailer-prefs.c b/src/modules/mail/em-mailer-prefs.c
index 1949f8d..3dea3d4 100644
--- a/src/modules/mail/em-mailer-prefs.c
+++ b/src/modules/mail/em-mailer-prefs.c
@@ -1288,6 +1288,12 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
widget, "active",
G_SETTINGS_BIND_DEFAULT);
+ widget = e_builder_get_widget (prefs->priv->builder, "chkDeleteSelectsPrevious");
+ g_settings_bind (
+ settings, "delete-selects-previous",
+ widget, "active",
+ G_SETTINGS_BIND_DEFAULT);
+
/* Mail Fonts */
widget = e_builder_get_widget (prefs->priv->builder, "radFontUseSame");
g_settings_bind (
diff --git a/src/modules/settings/e-settings-mail-reader.c b/src/modules/settings/e-settings-mail-reader.c
index 2875d0f..780a181 100644
--- a/src/modules/settings/e-settings-mail-reader.c
+++ b/src/modules/settings/e-settings-mail-reader.c
@@ -64,6 +64,11 @@ settings_mail_reader_idle_cb (EExtension *extension)
extensible, "mark-seen-always",
G_SETTINGS_BIND_GET);
+ g_settings_bind (
+ settings, "delete-selects-previous",
+ extensible, "delete-selects-previous",
+ G_SETTINGS_BIND_GET);
+
g_object_unref (settings);
action_group = e_mail_reader_get_action_group (
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]