[brasero] Fix a long time nagging warning in eggtreemultidnd and GtkFileChooserDialog when you double clicked



commit 1ae053cfb8107278c98feb072ecac7eb82cdd6f8
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Sun May 24 11:14:13 2009 +0200

    Fix a long time nagging warning in eggtreemultidnd and GtkFileChooserDialog when you double clicked on a file
---
 src/eggtreemultidnd.c |   32 +++++++++++++++++++++++++-------
 1 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/eggtreemultidnd.c b/src/eggtreemultidnd.c
index b694846..35a085f 100644
--- a/src/eggtreemultidnd.c
+++ b/src/eggtreemultidnd.c
@@ -28,9 +28,9 @@ typedef struct
   guint pressed_button;
   gint x;
   gint y;
-  guint motion_notify_handler;
-  guint button_release_handler;
-  guint drag_data_get_handler;
+  gulong motion_notify_handler;
+  gulong button_release_handler;
+  gulong drag_data_get_handler;
   GSList *event_list;
 } EggTreeMultiDndData;
 
@@ -173,8 +173,6 @@ stop_drag_check (GtkWidget *widget)
   
   g_slist_free (priv_data->event_list);
   priv_data->event_list = NULL;
-  g_signal_handler_disconnect (widget, priv_data->motion_notify_handler);
-  g_signal_handler_disconnect (widget, priv_data->button_release_handler);
 }
 
 static gboolean
@@ -187,9 +185,20 @@ egg_tree_multi_drag_button_release_event (GtkWidget      *widget,
 
   priv_data = g_object_get_data (G_OBJECT (widget), EGG_TREE_MULTI_DND_STRING);
 
+  /* disconnect before sending all queued events to avoid a warning with
+   * GtkFileChooserDialog and double click. */
+  if (priv_data->motion_notify_handler) {
+    g_signal_handler_disconnect (widget, priv_data->motion_notify_handler);
+    priv_data->motion_notify_handler = 0;
+  }
+  if (priv_data->button_release_handler) {
+    g_signal_handler_disconnect (widget, priv_data->button_release_handler);
+    priv_data->button_release_handler = 0;
+  }
+
   for (l = priv_data->event_list; l != NULL; l = l->next) 
     gtk_propagate_event (widget, l->data);
-  
+
   stop_drag_check (widget);
 
   return FALSE;
@@ -309,6 +318,14 @@ egg_tree_multi_drag_motion_event (GtkWidget      *widget,
 	return FALSE;
       
       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+      if (priv_data->motion_notify_handler) {
+        g_signal_handler_disconnect (widget, priv_data->motion_notify_handler);
+        priv_data->motion_notify_handler = 0;
+      }
+      if (priv_data->button_release_handler) {
+        g_signal_handler_disconnect (widget, priv_data->button_release_handler);
+        priv_data->button_release_handler = 0;
+      }
       stop_drag_check (widget);
       gtk_tree_selection_selected_foreach (selection, selection_foreach, &path_list);
       path_list = g_list_reverse (path_list);
@@ -399,9 +416,10 @@ egg_tree_multi_drag_button_press_event (GtkWidget      *widget,
       priv_data->x = event->x;
       priv_data->y = event->y;
       priv_data->event_list = g_slist_append (priv_data->event_list, gdk_event_copy ((GdkEvent*)event));
+
       priv_data->motion_notify_handler =
 	g_signal_connect (G_OBJECT (tree_view), "motion_notify_event", G_CALLBACK (egg_tree_multi_drag_motion_event), NULL);
-      priv_data->button_release_handler =
+     priv_data->button_release_handler =
 	g_signal_connect (G_OBJECT (tree_view), "button_release_event", G_CALLBACK (egg_tree_multi_drag_button_release_event), NULL);
 
       if (priv_data->drag_data_get_handler == 0) 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]