summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2015-10-06 19:08:06 +0200
committerCarlos Soriano <csoriano@gnome.org>2015-10-06 19:10:17 +0200
commitb189ddf0d35d373f93433725dbdd91d8da6671c4 (patch)
tree16c72e320e0e0b0e6cf01f1b362104e458356d47
parent9ee7c173b50f2866b2af9fe09b78b09132897ca8 (diff)
downloadnautilus-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.c17
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