From 4502a5afc2447e4a500b593a825ea13ba2afb2f2 Mon Sep 17 00:00:00 2001
From: punit <jpunit@novell.com>
Date: Tue, 13 Apr 2010 14:28:23 +0200
Subject: Bug #610229 - Status bar progress goes beyond 100 percentage

---
 mail/mail-mt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'mail')

diff --git a/mail/mail-mt.c b/mail/mail-mt.c
index eefbd6d0d4..5f656c9ec9 100644
--- a/mail/mail-mt.c
+++ b/mail/mail-mt.c
@@ -940,7 +940,7 @@ op_status_exec (struct _op_status_msg *m)
 		}
 	} else if (data->activity != NULL) {
 		e_activity_set_primary_text (data->activity, out);
-		e_activity_set_percent (data->activity, pc / 100.0);
+		e_activity_set_percent (data->activity, pc);
 		g_mutex_unlock (mail_msg_lock);
 	} else {
 		g_mutex_unlock (mail_msg_lock);
-- 
cgit v1.2.3


From 7841714fe56cf575af6df31b30015a781630b7c1 Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Mon, 19 Apr 2010 12:37:29 +0200
Subject: Bug #615331 - Message list/Folder tree focus policy has changed

---
 mail/em-folder-tree.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++
 mail/em-folder-tree.h |  4 +++
 2 files changed, 93 insertions(+)

(limited to 'mail')

diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index bbb9ec379b..b1f204df4b 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -54,6 +54,8 @@
 #include "e-util/e-alert-dialog.h"
 #include "e-util/e-util.h"
 
+#include "misc/e-selectable.h"
+
 #include "em-vfolder-rule.h"
 
 #include "mail-mt.h"
@@ -110,6 +112,8 @@ struct _EMFolderTreePrivate {
 
 	GtkCellRenderer *text_renderer;
 
+	GtkWidget *selectable; /* an ESelectable, where to pass selectable calls */
+
 	/* Signal handler IDs */
 	gulong selection_changed_handler_id;
 };
@@ -1160,6 +1164,8 @@ folder_tree_new (EMFolderTree *folder_tree)
 	tree = GTK_WIDGET (folder_tree);
 	GTK_WIDGET_SET_FLAGS(tree, GTK_CAN_FOCUS);
 
+	folder_tree->priv->selectable = NULL;
+
 	column = gtk_tree_view_column_new ();
 	gtk_tree_view_append_column ((GtkTreeView *) tree, column);
 
@@ -1292,6 +1298,80 @@ folder_tree_init (EMFolderTree *folder_tree)
 	em_folder_tree_construct (folder_tree);
 }
 
+/* Sets a selectable widget, which will be used for update-actions and select-all
+   selectable interface functions. This can be NULL, then nothing can be selected
+   and calling selectable function does nothing. */
+void
+em_folder_tree_set_selectable_widget (EMFolderTree *folder_tree, GtkWidget *selectable)
+{
+	if (selectable)
+		g_return_if_fail (E_IS_SELECTABLE (selectable));
+
+	folder_tree->priv->selectable = selectable;
+}
+
+static void
+folder_tree_selectable_update_actions (ESelectable *selectable,
+                                        EFocusTracker *focus_tracker,
+                                        GdkAtom *clipboard_targets,
+                                        gint n_clipboard_targets)
+{
+	EMFolderTree *folder_tree;
+
+	folder_tree = EM_FOLDER_TREE (selectable);
+	g_return_if_fail (folder_tree != NULL);
+
+	if (folder_tree->priv->selectable) {
+		ESelectableInterface *iface = E_SELECTABLE_GET_INTERFACE (folder_tree->priv->selectable);
+
+		g_return_if_fail (iface != NULL);
+		g_return_if_fail (iface->update_actions != NULL);
+
+		iface->update_actions (E_SELECTABLE (folder_tree->priv->selectable), focus_tracker, clipboard_targets, n_clipboard_targets);
+	}
+}
+
+#define folder_tree_selectable_func(_func)									\
+static void													\
+folder_tree_selectable_ ## _func (ESelectable *selectable)							\
+{														\
+	EMFolderTree *folder_tree;										\
+														\
+	folder_tree = EM_FOLDER_TREE (selectable);								\
+	g_return_if_fail (folder_tree != NULL);									\
+														\
+	if (folder_tree->priv->selectable) {									\
+		ESelectableInterface *iface = E_SELECTABLE_GET_INTERFACE (folder_tree->priv->selectable);	\
+														\
+		g_return_if_fail (iface != NULL);								\
+		if (iface-> _func ) {										\
+			if (gtk_widget_get_can_focus (folder_tree->priv->selectable) &&				\
+			    !gtk_widget_has_focus (folder_tree->priv->selectable))				\
+				gtk_widget_grab_focus (folder_tree->priv->selectable);				\
+			iface-> _func (E_SELECTABLE (folder_tree->priv->selectable));				\
+		}												\
+	}													\
+}
+
+folder_tree_selectable_func (cut_clipboard);
+folder_tree_selectable_func (copy_clipboard);
+folder_tree_selectable_func (paste_clipboard);
+folder_tree_selectable_func (delete_selection);
+folder_tree_selectable_func (select_all);
+
+#undef folder_tree_selectable_func
+
+static void
+folder_tree_selectable_init (ESelectableInterface *interface)
+{
+	interface->update_actions = folder_tree_selectable_update_actions;
+	interface->cut_clipboard = folder_tree_selectable_cut_clipboard;
+	interface->copy_clipboard = folder_tree_selectable_copy_clipboard;
+	interface->paste_clipboard = folder_tree_selectable_paste_clipboard;
+	interface->delete_selection = folder_tree_selectable_delete_selection;
+	interface->select_all = folder_tree_selectable_select_all;
+}
+
 GType
 em_folder_tree_get_type (void)
 {
@@ -1311,8 +1391,17 @@ em_folder_tree_get_type (void)
 			NULL   /* value_table */
 		};
 
+		static const GInterfaceInfo selectable_info = {
+			(GInterfaceInitFunc) folder_tree_selectable_init,
+			(GInterfaceFinalizeFunc) NULL,
+			NULL   /* interface_data */
+		};
+
 		type = g_type_register_static (
 			GTK_TYPE_TREE_VIEW, "EMFolderTree", &type_info, 0);
+
+		g_type_add_interface_static (
+			type, E_TYPE_SELECTABLE, &selectable_info);
 	}
 
 	return type;
diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h
index 273a87aedf..b1583df99f 100644
--- a/mail/em-folder-tree.h
+++ b/mail/em-folder-tree.h
@@ -127,6 +127,10 @@ void		em_folder_tree_set_skip_double_click
 
 void		em_folder_tree_restore_state	(EMFolderTree *folder_tree,
 						 GKeyFile *key_file);
+
+void		em_folder_tree_set_selectable_widget
+						(EMFolderTree *folder_tree,
+						 GtkWidget *selectable);
 G_END_DECLS
 
 #endif /* EM_FOLDER_TREE_H */
-- 
cgit v1.2.3