mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-29 05:10:13 +02:00
Gtk2: fixed crash with GtkIconView when multiselect is enabled and dbl clicked. issue #22991
git-svn-id: trunk@38868 -
This commit is contained in:
parent
35e042eb08
commit
0b23e9c0ae
@ -1612,6 +1612,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure FixListViewRubberBand(AWidget: PGtkWidget);
|
||||
var
|
||||
Info: PWidgetInfo;
|
||||
IconView: PGtkIconView;
|
||||
Priv: _PGtkIconViewPrivate;
|
||||
begin
|
||||
Info := GetWidgetInfo(AWidget);
|
||||
IconView := PGtkIconView(Info^.CoreWidget);
|
||||
Priv := IconView^.priv;
|
||||
|
||||
if Priv^.doing_rubberband then
|
||||
begin
|
||||
Priv^.doing_rubberband := False;
|
||||
gtk_widget_queue_draw(AWidget);
|
||||
end;
|
||||
end;
|
||||
|
||||
{-------------------------------------------------------------------------------
|
||||
function ControlGetsMouseDownBefore(AControl: TControl): boolean;
|
||||
|
||||
@ -1652,6 +1669,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end else
|
||||
if not (csDesigning in AControl.ComponentState) and
|
||||
(Event^.button = 1) and
|
||||
(gdk_event_get_type(Event) = GDK_BUTTON_PRESS) and
|
||||
(AControl is TWinControl) and
|
||||
(TWinControl(AControl).FCompStyle = csListView) and
|
||||
(TListView(AControl).ViewStyle in [vsIcon, vsSmallIcon]) and
|
||||
TListView(AControl).MultiSelect then
|
||||
begin
|
||||
// issue #22991
|
||||
FixListViewRubberBand(PGtkWidget(TWinControl(AControl).Handle));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2215,24 +2243,6 @@ function gtkMouseBtnRelease(widget: PGtkWidget; event : pgdkEventButton;
|
||||
var
|
||||
DesignOnlySignal: boolean;
|
||||
AForm: TCustomForm;
|
||||
|
||||
procedure FixListViewRubberBand;
|
||||
var
|
||||
Info: PWidgetInfo;
|
||||
IconView: PGtkIconView;
|
||||
Priv: _PGtkIconViewPrivate;
|
||||
begin
|
||||
Info := GetWidgetInfo(Widget);
|
||||
IconView := PGtkIconView(Info^.CoreWidget);
|
||||
Priv := IconView^.priv;
|
||||
|
||||
if Priv^.doing_rubberband then
|
||||
begin
|
||||
Priv^.doing_rubberband := False;
|
||||
gtk_widget_queue_draw(Widget);
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Result := CallBackDefaultReturn;
|
||||
{$IFDEF VerboseMouseBugfix}
|
||||
@ -2259,7 +2269,7 @@ begin
|
||||
TListView(Data).MultiSelect then
|
||||
begin
|
||||
// fixed crash.See issue #22778
|
||||
FixListViewRubberBand;
|
||||
FixListViewRubberBand(Widget);
|
||||
end;
|
||||
|
||||
ReleaseMouseCapture;
|
||||
|
Loading…
Reference in New Issue
Block a user