mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-01 13:20:21 +02:00
gtk1+2 intf: limit Gtk2RangeScrollCB to maximum
git-svn-id: trunk@21505 -
This commit is contained in:
parent
56223815cd
commit
ee7a5a1f0f
@ -121,8 +121,27 @@ function Gtk2RangeScrollCB(ARange: PGtkRange; AScrollType: TGtkScrollType;
|
|||||||
AValue: gdouble; AWidgetInfo: PWidgetInfo): gboolean; cdecl;
|
AValue: gdouble; AWidgetInfo: PWidgetInfo): gboolean; cdecl;
|
||||||
var
|
var
|
||||||
Msg: TLMVScroll;
|
Msg: TLMVScroll;
|
||||||
|
MaxValue: gdouble;
|
||||||
|
ScrolledBeyondMaximum: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := CallBackDefaultReturn;
|
Result := CallBackDefaultReturn;
|
||||||
|
|
||||||
|
ScrolledBeyondMaximum:=false;
|
||||||
|
if (ARange^.adjustment<>nil) then begin
|
||||||
|
MaxValue:=ARange^.adjustment^.upper-Max(ARange^.adjustment^.page_size-1,0);
|
||||||
|
//debugln(['Gtk2RangeScrollCB AValue=',AValue,' MaxValue=',MaxValue]);
|
||||||
|
if AValue>MaxValue then begin
|
||||||
|
// limit to maximum
|
||||||
|
ScrolledBeyondMaximum:=true;
|
||||||
|
AValue:=MaxValue;
|
||||||
|
if AValue=ARange^.adjustment^.value then begin
|
||||||
|
// already at maximum
|
||||||
|
Result:=not Result;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
//Assert(False, Format('Trace:[Gtk2RangeScrollCB] Value: %d', [RoundToInt(AValue)]));
|
//Assert(False, Format('Trace:[Gtk2RangeScrollCB] Value: %d', [RoundToInt(AValue)]));
|
||||||
if G_OBJECT_TYPE(ARange) = gtk_hscrollbar_get_type then
|
if G_OBJECT_TYPE(ARange) = gtk_hscrollbar_get_type then
|
||||||
Msg.Msg := LM_HSCROLL
|
Msg.Msg := LM_HSCROLL
|
||||||
@ -140,6 +159,18 @@ begin
|
|||||||
ScrollCode := GtkScrollTypeToScrollCode(AScrollType);
|
ScrollCode := GtkScrollTypeToScrollCode(AScrollType);
|
||||||
end;
|
end;
|
||||||
Result := DeliverMessage(AWidgetInfo^.LCLObject, Msg) <> 0;
|
Result := DeliverMessage(AWidgetInfo^.LCLObject, Msg) <> 0;
|
||||||
|
|
||||||
|
if (Result=CallBackDefaultReturn) and ScrolledBeyondMaximum
|
||||||
|
and (ARange^.adjustment<>nil) then begin
|
||||||
|
// scroll to maximum
|
||||||
|
// otherwise when dragging fast with the mouse the bar will not reach the maximum
|
||||||
|
MaxValue:=ARange^.adjustment^.upper-Max(ARange^.adjustment^.page_size-1,0);
|
||||||
|
if ARange^.adjustment^.value<>MaxValue then begin
|
||||||
|
ARange^.adjustment^.value:=MaxValue;
|
||||||
|
gtk_adjustment_changed(ARange^.adjustment);
|
||||||
|
end;
|
||||||
|
Result:=not Result;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function Gtk2ScrolledWindowScrollCB(AScrollWindow: PGtkScrolledWindow; AEvent: PGdkEventScroll; AWidgetInfo: PWidgetInfo): gboolean; cdecl;
|
function Gtk2ScrolledWindowScrollCB(AScrollWindow: PGtkScrolledWindow; AEvent: PGdkEventScroll; AWidgetInfo: PWidgetInfo): gboolean; cdecl;
|
||||||
|
Loading…
Reference in New Issue
Block a user