From 6fe6fe4ef91d915a26dc6cce307fa62baf2aba7b Mon Sep 17 00:00:00 2001 From: zeljko Date: Fri, 4 Nov 2011 07:14:35 +0000 Subject: [PATCH] Gtk2: workaround for gtk2 bug.SpinEdit doesnt change values when readonly and clicked up/down.Patch by August Klein.issue #20601 git-svn-id: trunk@33274 - --- lcl/interfaces/gtk2/gtk2wsspin.pp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lcl/interfaces/gtk2/gtk2wsspin.pp b/lcl/interfaces/gtk2/gtk2wsspin.pp index c89baf3319..f667086101 100644 --- a/lcl/interfaces/gtk2/gtk2wsspin.pp +++ b/lcl/interfaces/gtk2/gtk2wsspin.pp @@ -49,6 +49,7 @@ type class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; + class procedure SetReadOnly(const ACustomEdit: TCustomEdit; ReadOnly: boolean); override; class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override; class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; @@ -121,6 +122,29 @@ begin NewLength); end; +class procedure TGtk2WSCustomFloatSpinEdit.SetReadOnly(const ACustomEdit: TCustomEdit; ReadOnly: boolean); +var + Widget: PGtkWidget; + AnAdjustment: PGtkAdjustment; +begin + Widget := PGtkWidget(ACustomEdit.Handle); + if GTK_IS_EDITABLE(Widget) then + gtk_editable_set_editable(PGtkEditable(Widget), not ReadOnly); + + AnAdjustment:=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(Widget)); + if ReadOnly then + begin + AnAdjustment^.lower := TCustomFloatSpinEdit(ACustomEdit).Value; + AnAdjustment^.upper := TCustomFloatSpinEdit(ACustomEdit).Value; + end + else + begin + AnAdjustment^.lower := TCustomFloatSpinEdit(ACustomEdit).MinValue; + AnAdjustment^.upper := TCustomFloatSpinEdit(ACustomEdit).MaxValue; + end; + gtk_spin_button_update(GTK_SPIN_BUTTON(Widget)); +end; + class procedure TGtk2WSCustomFloatSpinEdit.UpdateControl( const ACustomFloatSpinEdit: TCustomFloatSpinEdit); var @@ -156,6 +180,8 @@ begin gtk_spin_button_set_digits(SpinWidget, ACustomFloatSpinEdit.DecimalPlaces); gtk_spin_button_set_value(SpinWidget,ACustomFloatSpinEdit.Value); AnAdjustment^.step_increment := ACustomFloatSpinEdit.Increment; + + SetReadOnly(TCustomEdit(ACustomFloatSpinEdit), ACustomFloatSpinEdit.ReadOnly); end; class function TGtk2WSCustomFloatSpinEdit.CreateHandle(