evolution r35732 - trunk/mail
- From: mcrha svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r35732 - trunk/mail
- Date: Wed, 9 Jul 2008 07:53:25 +0000 (UTC)
Author: mcrha
Date: Wed Jul 9 07:53:24 2008
New Revision: 35732
URL: http://svn.gnome.org/viewvc/evolution?rev=35732&view=rev
Log:
2008-07-09 Milan Crha <mcrha redhat com>
** Fix for bug #207802 (Patch suggested by Veerapuram Varadhan.)
* message-list.c: (struct search_child_struct), (search_child_cb),
(is_tree_widget_children), (ml_tree_drag_motion): Do not allow drop
messages to the same message list as is the source. Also do not
allow drop over message list if it doesn't have set a folder.
Modified:
trunk/mail/ChangeLog
trunk/mail/message-list.c
Modified: trunk/mail/message-list.c
==============================================================================
--- trunk/mail/message-list.c (original)
+++ trunk/mail/message-list.c Wed Jul 9 07:53:24 2008
@@ -2100,12 +2100,50 @@
}
}
+struct search_child_struct {
+ gboolean found;
+ gconstpointer looking_for;
+};
+
+static void
+search_child_cb (GtkWidget *widget, gpointer data)
+{
+ struct search_child_struct *search = (struct search_child_struct *) data;
+
+ search->found = search->found || g_direct_equal (widget, search->looking_for);
+}
+
+static gboolean
+is_tree_widget_children (ETree *tree, gconstpointer widget)
+{
+ struct search_child_struct search;
+
+ search.found = FALSE;
+ search.looking_for = widget;
+
+ gtk_container_foreach (GTK_CONTAINER (tree), search_child_cb, &search);
+
+ return search.found;
+}
+
static gboolean
ml_tree_drag_motion(ETree *tree, GdkDragContext *context, gint x, gint y, guint time, MessageList *ml)
{
GList *targets;
GdkDragAction action, actions = 0;
+ /* If drop target is name of the account/store and not actual folder, don't allow any action */
+ if (!ml->folder) {
+ gdk_drag_status (context, 0, time);
+ return TRUE;
+ }
+
+ /* If source widget is packed under 'tree', don't allow any action */
+ if (is_tree_widget_children (tree, gtk_drag_get_source_widget (context))) {
+ gdk_drag_status (context, 0, time);
+ return TRUE;
+ }
+
for (targets = context->targets; targets; targets = targets->next) {
int i;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]