diff options
-rw-r--r-- | gui/simple-greeter/gdm-chooser-widget.c | 10 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-scrollable-widget.c | 19 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-scrollable-widget.h | 1 |
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); |