[nautilus] canvas-container: avoid creating layout if not grid
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] canvas-container: avoid creating layout if not grid
- Date: Tue, 6 Oct 2015 17:12:22 +0000 (UTC)
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]