From 94b2a0f16dc048a6495f53872f0fd9602dac4596 Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 13 Mar 2015 08:56:23 +0000 Subject: [PATCH] RichEdit: Fixed issue with UnitEdit and GTK (strtod problem) git-svn-id: svn://ultimatepp.org/upp/trunk@8262 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/RichEdit/RichEdit.h | 1 + uppsrc/RichEdit/UnitEdit.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/uppsrc/RichEdit/RichEdit.h b/uppsrc/RichEdit/RichEdit.h index 0590c6892..bed4f16e6 100644 --- a/uppsrc/RichEdit/RichEdit.h +++ b/uppsrc/RichEdit/RichEdit.h @@ -92,6 +92,7 @@ public: virtual Value Format(const Value& v) const; virtual void SetData(const Value& v); virtual bool Key(dword key, int repcnt); + virtual void MouseWheel(Point p, int zdelta, dword keyflags); private: SpinButtons spin; diff --git a/uppsrc/RichEdit/UnitEdit.cpp b/uppsrc/RichEdit/UnitEdit.cpp index 04c98621e..1b9cd4a2a 100644 --- a/uppsrc/RichEdit/UnitEdit.cpp +++ b/uppsrc/RichEdit/UnitEdit.cpp @@ -34,7 +34,7 @@ void UnitEdit::Read(double& d, int& u) const u = unit; d = Null; if(s && *s) { - char *e; + const char *e; int sign = 1; for(;;) { if(*s == '-' && sgn) @@ -44,7 +44,10 @@ void UnitEdit::Read(double& d, int& u) const break; s++; } - d = sign * strtod(s, &e); + d = ScanDouble(s, &e); + if(IsNull(d)) + return; + d *= sign; if(e == s) { d = Null; return; @@ -104,6 +107,11 @@ bool UnitEdit::Key(dword key, int repcnt) return EditField::Key(key, repcnt); } +void UnitEdit::MouseWheel(Point p, int zdelta, dword keyflags) +{ + Spin(zdelta < 0 ? -1 : 1); +} + void UnitEdit::Spin(int delta) { double q;