summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gui/simple-greeter/gdm-chooser-widget.c10
-rw-r--r--gui/simple-greeter/gdm-scrollable-widget.c19
-rw-r--r--gui/simple-greeter/gdm-scrollable-widget.h1
3 files changed, 24 insertions, 6 deletions
diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c
index 41241954..4df03a62 100644
--- a/gui/simple-greeter/gdm-chooser-widget.c
+++ b/gui/simple-greeter/gdm-chooser-widget.c
@@ -97,7 +97,6 @@ struct GdmChooserWidgetPrivate
GdmChooserWidgetState state;
double active_row_normalized_position;
- int height_when_grown;
};
enum {
@@ -552,6 +551,7 @@ set_frame_text (GdmChooserWidget *widget,
static void
on_shrink_animation_step (GdmScrollableWidget *scrollable_widget,
double progress,
+ int *new_height,
GdmChooserWidget *widget)
{
GtkTreePath *active_row_path;
@@ -839,6 +839,7 @@ get_number_of_on_screen_rows (GdmChooserWidget *widget)
static void
on_grow_animation_step (GdmScrollableWidget *scrollable_widget,
double progress,
+ int *new_height,
GdmChooserWidget *widget)
{
int number_of_visible_rows;
@@ -851,6 +852,8 @@ on_grow_animation_step (GdmScrollableWidget *scrollable_widget,
gdm_scrollable_widget_stop_sliding (scrollable_widget);
return;
}
+
+ *new_height = GTK_BIN (scrollable_widget)->child->requisition.height;
}
static void
@@ -870,7 +873,7 @@ start_grow_animation (GdmChooserWidget *widget)
set_inactive_items_visible (widget, TRUE);
gdm_scrollable_widget_slide_to_height (GDM_SCROLLABLE_WIDGET (widget->priv->scrollable_widget),
- widget->priv->height_when_grown,
+ GTK_BIN (widget->priv->scrollable_widget)->child->requisition.height,
(GdmScrollableWidgetSlideStepFunc)
on_grow_animation_step, widget,
(GdmScrollableWidgetSlideDoneFunc)
@@ -1206,9 +1209,6 @@ gdm_chooser_widget_size_allocate (GtkWidget *widget,
chooser_widget = GDM_CHOOSER_WIDGET (widget);
- if (chooser_widget->priv->state == GDM_CHOOSER_WIDGET_STATE_GROWN) {
- chooser_widget->priv->height_when_grown = allocation->height;
- }
}
static gboolean
diff --git a/gui/simple-greeter/gdm-scrollable-widget.c b/gui/simple-greeter/gdm-scrollable-widget.c
index 2c0407dd..6d9dc834 100644
--- a/gui/simple-greeter/gdm-scrollable-widget.c
+++ b/gui/simple-greeter/gdm-scrollable-widget.c
@@ -132,9 +132,26 @@ on_animation_tick (GdmScrollableWidgetAnimation *animation,
gtk_widget_set_size_request (animation->widget, width, height);
if (animation->step_func != NULL) {
+ GdmTimer *timer;
+
+ height = animation->desired_height;
+
+ height -= animation->widget->style->ythickness * 2;
+ height -= GTK_CONTAINER (animation->widget)->border_width * 2;
+
+ timer = g_object_ref (animation->timer);
animation->step_func (GDM_SCROLLABLE_WIDGET (animation->widget),
progress,
+ &height,
animation->step_func_user_data);
+
+ if (gdm_timer_is_started (timer)) {
+ height += animation->widget->style->ythickness * 2;
+ height += GTK_CONTAINER (animation->widget)->border_width * 2;
+
+ animation->desired_height = height;
+ }
+ g_object_unref (timer);
}
}
@@ -708,7 +725,7 @@ gdm_scrollable_widget_slide_to_height (GdmScrollableWidget *scrollable_widget,
if (!input_redirected || gdm_scrollable_widget_animations_are_disabled (scrollable_widget)) {
if (step_func != NULL) {
- step_func (scrollable_widget, 0.0, step_user_data);
+ step_func (scrollable_widget, 0.0, &height, step_user_data);
}
if (done_func != NULL) {
diff --git a/gui/simple-greeter/gdm-scrollable-widget.h b/gui/simple-greeter/gdm-scrollable-widget.h
index 9b8877ee..2241cb19 100644
--- a/gui/simple-greeter/gdm-scrollable-widget.h
+++ b/gui/simple-greeter/gdm-scrollable-widget.h
@@ -40,6 +40,7 @@ typedef struct GdmScrollableWidget GdmScrollableWidget;
typedef struct GdmScrollableWidgetPrivate GdmScrollableWidgetPrivate;
typedef void (* GdmScrollableWidgetSlideStepFunc) (GdmScrollableWidget *scrollable_widget,
double progress,
+ int *new_height,
gpointer *user_data);
typedef void (* GdmScrollableWidgetSlideDoneFunc) (GdmScrollableWidget *scrollable_widget,
gpointer *user_data);