diff --git a/gtk/gtkplacesviewrow.c b/gtk/gtkplacesviewrow.c index 8f54ee6f81..61dd1f5389 100644 --- a/gtk/gtkplacesviewrow.c +++ b/gtk/gtkplacesviewrow.c @@ -33,6 +33,7 @@ #include "gtkintl.h" #include "gtklabel.h" #include "gtkspinner.h" +#include "gtkstack.h" #include "gtktypebuiltins.h" #else #include @@ -43,6 +44,7 @@ struct _GtkPlacesViewRow GtkListBoxRow parent_instance; GtkLabel *available_space_label; + GtkStack *mount_stack; GtkSpinner *busy_spinner; GtkButton *eject_button; GtkImage *eject_icon; @@ -285,15 +287,15 @@ gtk_places_view_row_set_property (GObject *object, case PROP_MOUNT: g_set_object (&self->mount, g_value_get_object (value)); - - /* - * When we hide the eject button, no size is allocated for it. Since - * we want to have alignment between rows, it needs an empty space - * when the eject button is not available. So, call then - * gtk_widget_set_child_visible(), which makes the button allocate the - * size but it stays hidden when needed. - */ - gtk_widget_set_child_visible (GTK_WIDGET (self->eject_button), self->mount != NULL); + if (self->mount != NULL) + { + gtk_stack_set_visible_child (self->mount_stack, GTK_WIDGET (self->eject_button)); + gtk_widget_set_child_visible (GTK_WIDGET (self->mount_stack), TRUE); + } + else + { + gtk_widget_set_child_visible (GTK_WIDGET (self->mount_stack), FALSE); + } measure_available_space (self); break; @@ -376,6 +378,7 @@ gtk_places_view_row_class_init (GtkPlacesViewRowClass *klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkplacesviewrow.ui"); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, available_space_label); + gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, mount_stack); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, busy_spinner); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_button); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_icon); @@ -447,7 +450,15 @@ gtk_places_view_row_set_busy (GtkPlacesViewRow *row, { g_return_if_fail (GTK_IS_PLACES_VIEW_ROW (row)); - gtk_widget_set_visible (GTK_WIDGET (row->busy_spinner), is_busy); + if (is_busy) + { + gtk_stack_set_visible_child (row->mount_stack, GTK_WIDGET (row->busy_spinner)); + gtk_widget_set_child_visible (GTK_WIDGET (row->mount_stack), TRUE); + } + else + { + gtk_widget_set_child_visible (GTK_WIDGET (row->mount_stack), FALSE); + } } gboolean diff --git a/gtk/ui/gtkplacesviewrow.ui b/gtk/ui/gtkplacesviewrow.ui index e39aa0a99e..cce57321f6 100644 --- a/gtk/ui/gtkplacesviewrow.ui +++ b/gtk/ui/gtkplacesviewrow.ui @@ -60,35 +60,42 @@ - + 1 - end - center - Unmount + 1 + 1 - + 1 - media-eject-symbolic - 1 + center + center + Unmount + + + 1 + media-eject-symbolic + 1 + + + + + + + + 1 + 1 + center + center - 4 - - - 1 - - - 5 - -