[nautilus] canvas-container: avoid creating layout if not grid



commit b189ddf0d35d373f93433725dbdd91d8da6671c4
Author: Carlos Soriano <csoriano gnome org>
Date:   Tue Oct 6 19:08:06 2015 +0200

    canvas-container: avoid creating layout if not grid
    
    When relayouting we want to finish adding and layouting
    the previous layout, but sometimes we can try to layout
    when it's actually not possible to create a grid, for
    instance if the size of the desktop is not enough or is
    not yet allocated.
    To prevent that, return early if we try to relayout in
    that case and schedule a relayout.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=755582

 libnautilus-private/nautilus-canvas-container.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/libnautilus-private/nautilus-canvas-container.c b/libnautilus-private/nautilus-canvas-container.c
index 042dd58..45bc6db 100644
--- a/libnautilus-private/nautilus-canvas-container.c
+++ b/libnautilus-private/nautilus-canvas-container.c
@@ -178,6 +178,7 @@ static int compare_icons_vertical (NautilusCanvasContainer *container,
                                     NautilusCanvasIcon *icon_b);
 
 static void store_layout_timestamps_now (NautilusCanvasContainer *container);
+static void schedule_redo_layout (NautilusCanvasContainer *container);
 
 static const char *nautilus_canvas_container_accessible_action_names[] = {
        "activate",
@@ -1885,7 +1886,13 @@ lay_down_icons (NautilusCanvasContainer *container, GList *icons, double start_y
 static void
 redo_layout_internal (NautilusCanvasContainer *container)
 {
-       finish_adding_new_icons (container);
+        gboolean layout_possible;
+
+       layout_possible = finish_adding_new_icons (container);
+        if (!layout_possible) {
+                schedule_redo_layout (container);
+                return;
+        }
 
        /* Don't do any re-laying-out during stretching. Later we
         * might add smart logic that does this and leaves room for
@@ -5968,7 +5975,7 @@ finish_adding_icon (NautilusCanvasContainer *container,
        g_signal_emit (container, signals[ICON_ADDED], 0, icon->data);
 }
 
-static void
+static gboolean
 finish_adding_new_icons (NautilusCanvasContainer *container)
 {
        GList *p, *new_icons, *no_position_icons, *semi_position_icons;
@@ -6007,6 +6014,10 @@ finish_adding_new_icons (NautilusCanvasContainer *container)
                 * Thus, we pass FALSE for tight, like lay_down_icons_tblr */
                grid = placement_grid_new (container, FALSE);
 
+                /* we can do nothing, just return */
+                if (grid == NULL)
+                        return FALSE;
+
                for (p = container->details->icons; p != NULL; p = p->next) {
                        icon = p->data;
 
@@ -6068,6 +6079,8 @@ finish_adding_new_icons (NautilusCanvasContainer *container)
                store_layout_timestamps_now (container);
                container->details->store_layout_timestamps_when_finishing_new_icons = FALSE;
        }
+
+        return TRUE;
 }
 
 static gboolean


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