diff options
author | Michael Meeks <michael.meeks@novell.com> | 2010-04-22 00:06:38 +0800 |
---|---|---|
committer | Michael Meeks <michael.meeks@novell.com> | 2010-04-22 00:06:38 +0800 |
commit | a84b1a325147e6321b90f491a1dc686e588869dc (patch) | |
tree | 409a66488e99ed288c9ff2b4eb90f1993ae537ab /mail | |
parent | e9c4388490925de25b029fa0d6437a34a6386c05 (diff) | |
parent | ece7dcdcea82d0e1fbc104cf48b2928a449b8748 (diff) | |
download | gsoc2013-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.c | 89 | ||||
-rw-r--r-- | mail/em-folder-tree.h | 4 | ||||
-rw-r--r-- | mail/mail-mt.c | 2 |
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); |