Blame SOURCES/evolution-3.22.6-magic-spacebar-with-caret-mode.patch

a00a81
diff -up evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c.magic-spacebar-with-caret-mode evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c
a00a81
--- evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c.magic-spacebar-with-caret-mode	2016-10-25 22:13:15.000000000 +0200
a00a81
+++ evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c	2017-03-24 13:38:49.059671868 +0100
a00a81
@@ -1361,27 +1361,21 @@ action_mail_send_receive_send_all_cb (Gt
a00a81
 }
a00a81
 
a00a81
 static void
a00a81
-action_mail_smart_backward_cb (GtkAction *action,
a00a81
-                               EMailShellView *mail_shell_view)
a00a81
+mail_shell_view_magic_spacebar (EMailShellView *mail_shell_view,
a00a81
+				gboolean move_forward)
a00a81
 {
a00a81
-	EShellView *shell_view;
a00a81
-	EShellWindow *shell_window;
a00a81
 	EMailShellContent *mail_shell_content;
a00a81
 	EMailShellSidebar *mail_shell_sidebar;
a00a81
 	EMFolderTree *folder_tree;
a00a81
 	EMailReader *reader;
a00a81
 	EMailView *mail_view;
a00a81
 	GtkWidget *message_list;
a00a81
-	GtkToggleAction *toggle_action;
a00a81
 	EMailDisplay *display;
a00a81
 	GSettings *settings;
a00a81
-	gboolean caret_mode;
a00a81
 	gboolean magic_spacebar;
a00a81
 
a00a81
 	/* This implements the so-called "Magic Backspace". */
a00a81
-
a00a81
-	shell_view = E_SHELL_VIEW (mail_shell_view);
a00a81
-	shell_window = e_shell_view_get_shell_window (shell_view);
a00a81
+	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
a00a81
 
a00a81
 	mail_shell_content = mail_shell_view->priv->mail_shell_content;
a00a81
 	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
a00a81
@@ -1397,27 +1391,14 @@ action_mail_smart_backward_cb (GtkAction
a00a81
 	magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar");
a00a81
 	g_object_unref (settings);
a00a81
 
a00a81
-	toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE));
a00a81
-	caret_mode = gtk_toggle_action_get_active (toggle_action);
a00a81
-
a00a81
-	if (!e_mail_display_process_magic_spacebar (display, FALSE)) {
a00a81
+	if (!e_mail_display_process_magic_spacebar (display, move_forward)) {
a00a81
+		guint32 direction = move_forward ? MESSAGE_LIST_SELECT_NEXT : MESSAGE_LIST_SELECT_PREVIOUS;
a00a81
 
a00a81
-		if (caret_mode || !magic_spacebar)
a00a81
+		if (!magic_spacebar)
a00a81
 			return;
a00a81
 
a00a81
-		/* XXX Are two separate calls really necessary? */
a00a81
-
a00a81
-		if (message_list_select (
a00a81
-		    MESSAGE_LIST (message_list),
a00a81
-		    MESSAGE_LIST_SELECT_PREVIOUS |
a00a81
-		    MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED,
a00a81
-		    0, CAMEL_MESSAGE_SEEN))
a00a81
-			return;
a00a81
-
a00a81
-		if (message_list_select (
a00a81
-		    MESSAGE_LIST (message_list),
a00a81
-		    MESSAGE_LIST_SELECT_PREVIOUS |
a00a81
-		    MESSAGE_LIST_SELECT_WRAP |
a00a81
+		if (message_list_select (MESSAGE_LIST (message_list),
a00a81
+		    direction | MESSAGE_LIST_SELECT_WRAP |
a00a81
 		    MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED,
a00a81
 		    0, CAMEL_MESSAGE_SEEN))
a00a81
 			return;
a00a81
@@ -1429,71 +1410,17 @@ action_mail_smart_backward_cb (GtkAction
a00a81
 }
a00a81
 
a00a81
 static void
a00a81
+action_mail_smart_backward_cb (GtkAction *action,
a00a81
+                               EMailShellView *mail_shell_view)
a00a81
+{
a00a81
+	mail_shell_view_magic_spacebar (mail_shell_view, FALSE);
a00a81
+}
a00a81
+
a00a81
+static void
a00a81
 action_mail_smart_forward_cb (GtkAction *action,
a00a81
                               EMailShellView *mail_shell_view)
a00a81
 {
a00a81
-	EShellView *shell_view;
a00a81
-	EShellWindow *shell_window;
a00a81
-	EMailShellContent *mail_shell_content;
a00a81
-	EMailShellSidebar *mail_shell_sidebar;
a00a81
-	EMFolderTree *folder_tree;
a00a81
-	EMailReader *reader;
a00a81
-	EMailView *mail_view;
a00a81
-	GtkWidget *message_list;
a00a81
-	GtkToggleAction *toggle_action;
a00a81
-	EMailDisplay *display;
a00a81
-	GSettings *settings;
a00a81
-	gboolean caret_mode;
a00a81
-	gboolean magic_spacebar;
a00a81
-
a00a81
-	/* This implements the so-called "Magic Spacebar". */
a00a81
-
a00a81
-	shell_view = E_SHELL_VIEW (mail_shell_view);
a00a81
-	shell_window = e_shell_view_get_shell_window (shell_view);
a00a81
-
a00a81
-	mail_shell_content = mail_shell_view->priv->mail_shell_content;
a00a81
-	mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
a00a81
-
a00a81
-	mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
a00a81
-	folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
a00a81
-
a00a81
-	reader = E_MAIL_READER (mail_view);
a00a81
-	display = e_mail_reader_get_mail_display (reader);
a00a81
-	message_list = e_mail_reader_get_message_list (reader);
a00a81
-
a00a81
-	settings = e_util_ref_settings ("org.gnome.evolution.mail");
a00a81
-	magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar");
a00a81
-	g_object_unref (settings);
a00a81
-
a00a81
-	toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE));
a00a81
-	caret_mode = gtk_toggle_action_get_active (toggle_action);
a00a81
-
a00a81
-	if (!e_mail_display_process_magic_spacebar (display, TRUE)) {
a00a81
-
a00a81
-		if (caret_mode || !magic_spacebar)
a00a81
-			return;
a00a81
-
a00a81
-		/* XXX Are two separate calls really necessary? */
a00a81
-
a00a81
-		if (message_list_select (
a00a81
-		    MESSAGE_LIST (message_list),
a00a81
-		    MESSAGE_LIST_SELECT_NEXT |
a00a81
-		    MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED,
a00a81
-		    0, CAMEL_MESSAGE_SEEN))
a00a81
-			return;
a00a81
-
a00a81
-		if (message_list_select (
a00a81
-		    MESSAGE_LIST (message_list),
a00a81
-		    MESSAGE_LIST_SELECT_NEXT |
a00a81
-		    MESSAGE_LIST_SELECT_WRAP |
a00a81
-		    MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED,
a00a81
-		    0, CAMEL_MESSAGE_SEEN))
a00a81
-			return;
a00a81
-
a00a81
-		em_folder_tree_select_next_path (folder_tree, TRUE);
a00a81
-
a00a81
-		gtk_widget_grab_focus (message_list);
a00a81
-	}
a00a81
+	mail_shell_view_magic_spacebar (mail_shell_view, TRUE);
a00a81
 }
a00a81
 
a00a81
 static void