summaryrefslogtreecommitdiff
path: root/vcl/source/control/slider.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/control/slider.cxx')
-rw-r--r--vcl/source/control/slider.cxx52
1 files changed, 30 insertions, 22 deletions
diff --git a/vcl/source/control/slider.cxx b/vcl/source/control/slider.cxx
index f09b493469a0..62a331c73adf 100644
--- a/vcl/source/control/slider.cxx
+++ b/vcl/source/control/slider.cxx
@@ -216,34 +216,12 @@ void Slider::ImplUpdateRects( bool bUpdate )
}
}
-void Slider::ImplSetFieldLink(const Link<>& rLink)
-{
- if (mpLinkedField != nullptr)
- {
- mpLinkedField->SetModifyHdl(rLink);
- mpLinkedField->SetUpHdl(rLink);
- mpLinkedField->SetDownHdl(rLink);
- mpLinkedField->SetFirstHdl(rLink);
- mpLinkedField->SetLastHdl(rLink);
- mpLinkedField->SetLoseFocusHdl(rLink);
- }
-}
-
void Slider::ImplUpdateLinkedField()
{
if (mpLinkedField)
mpLinkedField->SetValue(mnThumbPos);
}
-IMPL_LINK(Slider, LinkedFieldModifyHdl, NumericField*, pField)
-{
- if (pField)
- {
- SetThumbPos(pField->GetValue());
- }
- return 0;
-}
-
long Slider::ImplCalcThumbPos( long nPixPos )
{
// calculate position
@@ -851,8 +829,38 @@ void Slider::Resize()
void Slider::SetLinkedField(VclPtr<NumericField> pField)
{
ImplSetFieldLink(Link<>());
+ if (mpLinkedField)
+ mpLinkedField->SetLoseFocusHdl(Link<Control&,void>());
mpLinkedField = pField;
ImplSetFieldLink(LINK(this, Slider, LinkedFieldModifyHdl));
+ if (mpLinkedField)
+ mpLinkedField->SetLoseFocusHdl(LINK(this, Slider, LinkedFieldLoseFocusHdl));
+}
+
+void Slider::ImplSetFieldLink(const Link<>& rLink)
+{
+ if (mpLinkedField != nullptr)
+ {
+ mpLinkedField->SetModifyHdl(rLink);
+ mpLinkedField->SetUpHdl(rLink);
+ mpLinkedField->SetDownHdl(rLink);
+ mpLinkedField->SetFirstHdl(rLink);
+ mpLinkedField->SetLastHdl(rLink);
+ }
+}
+
+IMPL_LINK_NOARG_TYPED(Slider, LinkedFieldLoseFocusHdl, Control&, void)
+{
+ if (mpLinkedField)
+ SetThumbPos(mpLinkedField->GetValue());
+}
+
+IMPL_LINK(Slider, LinkedFieldModifyHdl, NumericField*, /*pField*/)
+{
+ if (mpLinkedField)
+ SetThumbPos(mpLinkedField->GetValue());
+
+ return 0;
}
void Slider::RequestHelp( const HelpEvent& rHEvt )