From 196f47cafaa0c3bff74b103ddb6dd799dfdcf19e Mon Sep 17 00:00:00 2001 From: Liu Chao Date: Tue, 20 Feb 2018 21:14:34 +0800 Subject: [PATCH] fix(widget): Scrollbar_BindBox() not working after scrollbar initialize --- src/gui/widget/scrollbar.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gui/widget/scrollbar.c b/src/gui/widget/scrollbar.c index 74c645ec8..334dad96a 100644 --- a/src/gui/widget/scrollbar.c +++ b/src/gui/widget/scrollbar.c @@ -309,6 +309,14 @@ static void Slider_OnMouseDown( LCUI_Widget slider, Widget_BindEvent( slider, "mouseup", Slider_OnMouseUp, w, NULL ); } +static void ScrollBar_OnLink( LCUI_Widget w, LCUI_WidgetEvent e, void *arg ) +{ + LCUI_ScrollBar scrollbar = Widget_GetData( w, self.prototype ); + if( !scrollbar->box ) { + ScrollBar_BindBox( w, w->parent ); + } +} + static void ScrollBar_OnInit( LCUI_Widget w ) { LCUI_Widget slider; @@ -329,9 +337,9 @@ static void ScrollBar_OnInit( LCUI_Widget w ) InitInertialScrolling( &scrollbar->effect ); Widget_BindEvent( slider, "mousedown", Slider_OnMouseDown, w, NULL ); + Widget_BindEvent( w, "link", ScrollBar_OnLink, NULL, NULL ); Widget_AddClass( slider, "scrollbar-slider" ); Widget_Append( w, slider ); - ScrollBar_BindBox( w, w->parent ); } static void ScrollBar_UpdateSize( LCUI_Widget w ) @@ -493,8 +501,10 @@ void ScrollBar_BindBox( LCUI_Widget w, LCUI_Widget box ) ScrollBar_OnUpdateSize ); } scrollbar->box = box; - Widget_BindEvent( box, "resize", ScrollBar_OnUpdateSize, w, NULL ); - Widget_BindEvent( box, "setscroll", ScrollBar_OnSetPosition, w, NULL ); + if( box ) { + Widget_BindEvent( box, "resize", ScrollBar_OnUpdateSize, w, NULL ); + Widget_BindEvent( box, "setscroll", ScrollBar_OnSetPosition, w, NULL ); + } ScrollBar_UpdateSize( w ); }