aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@novell.com>2010-04-22 00:06:38 +0800
committerMichael Meeks <michael.meeks@novell.com>2010-04-22 00:06:38 +0800
commita84b1a325147e6321b90f491a1dc686e588869dc (patch)
tree409a66488e99ed288c9ff2b4eb90f1993ae537ab /mail
parente9c4388490925de25b029fa0d6437a34a6386c05 (diff)
parentece7dcdcea82d0e1fbc104cf48b2928a449b8748 (diff)
downloadgsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar.gz
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar.bz2
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar.lz
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar.xz
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.tar.zst
gsoc2013-evolution-a84b1a325147e6321b90f491a1dc686e588869dc.zip
Merge commit 'origin/gnome-2-30' into express2
Diffstat (limited to 'mail')
-rw-r--r--mail/em-folder-tree.c89
-rw-r--r--mail/em-folder-tree.h4
-rw-r--r--mail/mail-mt.c2
3 files changed, 94 insertions, 1 deletions
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 */
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);