diff options
author | Carlos Soriano <csoriano@gnome.org> | 2015-10-06 19:08:06 +0200 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2015-10-06 19:10:17 +0200 |
commit | b189ddf0d35d373f93433725dbdd91d8da6671c4 (patch) | |
tree | 16c72e320e0e0b0e6cf01f1b362104e458356d47 | |
parent | 9ee7c173b50f2866b2af9fe09b78b09132897ca8 (diff) | |
download | nautilus-b189ddf0d35d373f93433725dbdd91d8da6671c4.tar.gz |
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
-rw-r--r-- | 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 042dd5886..45bc6db5d 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 |