Author: kelnos
Date: 2007-11-07 06:13:50 +0000 (Wed, 07 Nov 2007)
New Revision: 26269

Modified:
   xfdesktop/branches/xfce_4_4/src/xfdesktop-icon-view.c
   xfdesktop/trunk/src/xfdesktop-icon-view.c
Log:
possibly fix fake drag when double-clicking an icon causes an error dialog
to pop up (bug 3426)


Modified: xfdesktop/branches/xfce_4_4/src/xfdesktop-icon-view.c
===================================================================
--- xfdesktop/branches/xfce_4_4/src/xfdesktop-icon-view.c       2007-11-07 
06:12:01 UTC (rev 26268)
+++ xfdesktop/branches/xfce_4_4/src/xfdesktop-icon-view.c       2007-11-07 
06:13:50 UTC (rev 26269)
@@ -410,6 +410,32 @@
 }
 
 static gboolean
+xfdesktop_icon_view_icon_selected_idled(gpointer data)
+{
+    XfdesktopIcon *icon = data;
+    
+    g_signal_emit(G_OBJECT(xfdesktop_icon_peek_icon_view(icon)),
+                  __signals[SIG_ICON_SELECTED], 0, NULL);
+    xfdesktop_icon_selected(icon);
+    g_object_unref(G_OBJECT(icon));
+    
+    return FALSE;
+}
+
+static gboolean
+xfdesktop_icon_view_icon_activated_idled(gpointer data)
+{
+    XfdesktopIcon *icon = data;
+    
+    g_signal_emit(G_OBJECT(xfdesktop_icon_peek_icon_view(icon)),
+                  __signals[SIG_ICON_ACTIVATED], 0, NULL);
+    xfdesktop_icon_activated(icon);
+    g_object_unref(G_OBJECT(icon));
+    
+    return FALSE;
+}
+
+static gboolean
 xfdesktop_icon_view_button_press(GtkWidget *widget,
                                  GdkEventButton *evt,
                                  gpointer user_data)
@@ -513,10 +539,8 @@
                                                                                
      icon1);
                                     
xfdesktop_icon_view_clear_icon_extents(icon_view,
                                                                            
icon1);
-                                    g_signal_emit(G_OBJECT(icon_view),
-                                                  __signals[SIG_ICON_SELECTED],
-                                                  0, NULL);
-                                    xfdesktop_icon_selected(icon1);
+                                    
g_idle_add(xfdesktop_icon_view_icon_selected_idled,
+                                               g_object_ref(G_OBJECT(icon1)));
                                 }
                             }
                         }
@@ -525,11 +549,8 @@
                     icon_view->priv->selected_icons = 
g_list_prepend(icon_view->priv->selected_icons,
                                                                      icon);
                     xfdesktop_icon_view_clear_icon_extents(icon_view, icon);
-                    
-                    g_signal_emit(G_OBJECT(icon_view),
-                                  __signals[SIG_ICON_SELECTED],
-                                  0, NULL);
-                    xfdesktop_icon_selected(icon);
+                    g_idle_add(xfdesktop_icon_view_icon_selected_idled,
+                               g_object_ref(G_OBJECT(icon)));
                 }
             }
             
@@ -569,9 +590,8 @@
                                                
(GCompareFunc)xfdesktop_check_icon_clicked);
             if(icon_l && (icon = icon_l->data)) {
                 icon_view->priv->last_clicked_item = icon;
-                g_signal_emit(G_OBJECT(icon_view), 
__signals[SIG_ICON_ACTIVATED],
-                              0, NULL);
-                xfdesktop_icon_activated(icon);
+                g_idle_add(xfdesktop_icon_view_icon_activated_idled,
+                           g_object_ref(G_OBJECT(icon)));
             }
         }
         

Modified: xfdesktop/trunk/src/xfdesktop-icon-view.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-icon-view.c   2007-11-07 06:12:01 UTC (rev 
26268)
+++ xfdesktop/trunk/src/xfdesktop-icon-view.c   2007-11-07 06:13:50 UTC (rev 
26269)
@@ -410,6 +410,32 @@
 }
 
 static gboolean
+xfdesktop_icon_view_icon_selected_idled(gpointer data)
+{
+    XfdesktopIcon *icon = data;
+    
+    g_signal_emit(G_OBJECT(xfdesktop_icon_peek_icon_view(icon)),
+                  __signals[SIG_ICON_SELECTED], 0, NULL);
+    xfdesktop_icon_selected(icon);
+    g_object_unref(G_OBJECT(icon));
+    
+    return FALSE;
+}
+
+static gboolean
+xfdesktop_icon_view_icon_activated_idled(gpointer data)
+{
+    XfdesktopIcon *icon = data;
+    
+    g_signal_emit(G_OBJECT(xfdesktop_icon_peek_icon_view(icon)),
+                  __signals[SIG_ICON_ACTIVATED], 0, NULL);
+    xfdesktop_icon_activated(icon);
+    g_object_unref(G_OBJECT(icon));
+    
+    return FALSE;
+}
+
+static gboolean
 xfdesktop_icon_view_button_press(GtkWidget *widget,
                                  GdkEventButton *evt,
                                  gpointer user_data)
@@ -513,10 +539,8 @@
                                                                                
      icon1);
                                     
xfdesktop_icon_view_clear_icon_extents(icon_view,
                                                                            
icon1);
-                                    g_signal_emit(G_OBJECT(icon_view),
-                                                  __signals[SIG_ICON_SELECTED],
-                                                  0, NULL);
-                                    xfdesktop_icon_selected(icon1);
+                                    
g_idle_add(xfdesktop_icon_view_icon_selected_idled,
+                                               g_object_ref(G_OBJECT(icon1)));
                                 }
                             }
                         }
@@ -525,11 +549,8 @@
                     icon_view->priv->selected_icons = 
g_list_prepend(icon_view->priv->selected_icons,
                                                                      icon);
                     xfdesktop_icon_view_clear_icon_extents(icon_view, icon);
-                    
-                    g_signal_emit(G_OBJECT(icon_view),
-                                  __signals[SIG_ICON_SELECTED],
-                                  0, NULL);
-                    xfdesktop_icon_selected(icon);
+                    g_idle_add(xfdesktop_icon_view_icon_selected_idled,
+                               g_object_ref(G_OBJECT(icon)));
                 }
             }
             
@@ -570,9 +591,8 @@
                                                
(GCompareFunc)xfdesktop_check_icon_clicked);
             if(icon_l && (icon = icon_l->data)) {
                 icon_view->priv->last_clicked_item = icon;
-                g_signal_emit(G_OBJECT(icon_view), 
__signals[SIG_ICON_ACTIVATED],
-                              0, NULL);
-                xfdesktop_icon_activated(icon);
+                g_idle_add(xfdesktop_icon_view_icon_activated_idled,
+                           g_object_ref(G_OBJECT(icon)));
             }
         }
         

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to