[Xfce4-commits] <exo:master> Revert "Use an idle function for delayed scrolling."

Jannis Pohlmann jannis at xfce.org
Tue Sep 15 17:44:01 CEST 2009


Updating branch refs/heads/master
         to 5e5d41f658e74e9e0b90bbb30665361f64168ef9 (commit)
       from 8637a16a521a190c63cea91f007637841d396f8b (commit)

commit 5e5d41f658e74e9e0b90bbb30665361f64168ef9
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Tue Sep 15 17:42:15 2009 +0200

    Revert "Use an idle function for delayed scrolling."
    
    This reverts commit 0a7be769f07828953d62e86fbc9da755f9aa8ad6. The
    related GDK bug was fixed upstream by Alexander Larsson (more
    information on https://bugzilla.gnome.org/show_bug.cgi?id=594880).

 exo/exo-icon-view.c |   78 ++++++++++++++------------------------------------
 1 files changed, 22 insertions(+), 56 deletions(-)

diff --git a/exo/exo-icon-view.c b/exo/exo-icon-view.c
index b3b1624..7a64a65 100644
--- a/exo/exo-icon-view.c
+++ b/exo/exo-icon-view.c
@@ -466,7 +466,6 @@ struct _ExoIconViewPrivate
   GtkAdjustment *vadjustment;
 
   gint layout_idle_id;
-  gint scroll_idle_id;
 
   gboolean doing_rubberband;
   gint rubberband_x_1, rubberband_y_1;
@@ -1230,10 +1229,6 @@ exo_icon_view_finalize (GObject *object)
   if (G_UNLIKELY (icon_view->priv->single_click_timeout_id != 0))
     g_source_remove (icon_view->priv->single_click_timeout_id);
 
-  /* kill the scroll idle source */
-  if (G_UNLIKELY (icon_view->priv->scroll_idle_id != 0))
-    g_source_remove (icon_view->priv->scroll_idle_id);
-
   /* kill the layout idle source (it's important to have this last!) */
   if (G_UNLIKELY (icon_view->priv->layout_idle_id != 0))
     g_source_remove (icon_view->priv->layout_idle_id);
@@ -1627,6 +1622,28 @@ exo_icon_view_expose_event (GtkWidget      *widget,
   if (G_UNLIKELY (priv->layout_idle_id != 0))
     return FALSE;
 
+  /* scroll to the previously remembered path (if any) */
+  if (G_UNLIKELY (priv->scroll_to_path != NULL))
+    {
+      /* grab the path from the reference and invalidate the reference */
+      path = gtk_tree_row_reference_get_path (priv->scroll_to_path);
+      gtk_tree_row_reference_free (priv->scroll_to_path);
+      priv->scroll_to_path = NULL;
+
+      /* check if the reference was still valid */
+      if (G_LIKELY (path != NULL))
+        {
+          /* try to scroll again */
+          exo_icon_view_scroll_to_path (icon_view, path,
+                                        priv->scroll_to_use_align,
+                                        priv->scroll_to_row_align,
+                                        priv->scroll_to_col_align);
+
+          /* release the path */
+          gtk_tree_path_free (path);
+        }
+    }
+
   /* check if we need to draw a drag indicator */
   exo_icon_view_get_drag_dest_item (icon_view, &path, &dest_pos);
   if (G_UNLIKELY (path != NULL))
@@ -5400,8 +5417,6 @@ update_text_cell (ExoIconView *icon_view)
     }
 }
 
-
-
 static void
 update_pixbuf_cell (ExoIconView *icon_view)
 {
@@ -5747,46 +5762,6 @@ exo_icon_view_set_cursor (ExoIconView     *icon_view,
 
 
 
-static gboolean
-scroll_delayed (gpointer user_data)
-{
-  ExoIconView *icon_view = user_data;
-  GtkTreePath *path;
-
-  _exo_return_val_if_fail (EXO_IS_ICON_VIEW (icon_view), FALSE);
-  
-  /* schedule the scrolling again if the window still isn't realized or 
-   * the layouting still is not finished */
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (icon_view)) || icon_view->priv->layout_idle_id != 0)
-    return TRUE;
-  
-  /* scroll to the previously remembered path (if any) */
-  if (G_UNLIKELY (icon_view->priv->scroll_to_path != NULL))
-    {
-      /* grab the path from the reference and invalidate the reference */
-      path = gtk_tree_row_reference_get_path (icon_view->priv->scroll_to_path);
-      gtk_tree_row_reference_free (icon_view->priv->scroll_to_path);
-      icon_view->priv->scroll_to_path = NULL;
-
-      /* check if the reference was still valid */
-      if (G_LIKELY (path != NULL))
-        {
-          /* try to scroll again */
-          exo_icon_view_scroll_to_path (icon_view, path,
-                                        icon_view->priv->scroll_to_use_align,
-                                        icon_view->priv->scroll_to_row_align,
-                                        icon_view->priv->scroll_to_col_align);
-
-          /* release the path */
-          gtk_tree_path_free (path);
-        }
-    }
-
-  return FALSE;
-}
-
-
-
 /**
  * exo_icon_view_scroll_to_path:
  * @icon_view: A #ExoIconView.
@@ -5828,10 +5803,6 @@ exo_icon_view_scroll_to_path (ExoIconView *icon_view,
   /* Delay scrolling if either not realized or pending layout() */
   if (!GTK_WIDGET_REALIZED (icon_view) || icon_view->priv->layout_idle_id != 0)
     {
-      /* drop previous scroll idle handler */
-      if (G_UNLIKELY (icon_view->priv->scroll_idle_id != 0))
-        g_source_remove (icon_view->priv->scroll_idle_id);
-
       /* release the previous scroll_to_path reference */
       if (G_UNLIKELY (icon_view->priv->scroll_to_path != NULL))
         gtk_tree_row_reference_free (icon_view->priv->scroll_to_path);
@@ -5841,11 +5812,6 @@ exo_icon_view_scroll_to_path (ExoIconView *icon_view,
       icon_view->priv->scroll_to_use_align = use_align;
       icon_view->priv->scroll_to_row_align = row_align;
       icon_view->priv->scroll_to_col_align = col_align;
-
-      /* schedule an idle handler to scroll to the given path */
-      icon_view->priv->scroll_idle_id = g_idle_add_full (G_PRIORITY_LOW, 
-                                                         scroll_delayed, icon_view, 
-                                                         NULL);
     }
   else
     {



More information about the Xfce4-commits mailing list