mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-29 15:09:36 +02:00
Gtk2: fixed crash with TListView when viewstyle is vsIcon or vsSmallIcon. issue #22778
git-svn-id: trunk@38519 -
This commit is contained in:
parent
09d24bbe54
commit
eb63241bf4
@ -2215,6 +2215,24 @@ function gtkMouseBtnRelease(widget: PGtkWidget; event : pgdkEventButton;
|
|||||||
var
|
var
|
||||||
DesignOnlySignal: boolean;
|
DesignOnlySignal: boolean;
|
||||||
AForm: TCustomForm;
|
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
|
begin
|
||||||
Result := CallBackDefaultReturn;
|
Result := CallBackDefaultReturn;
|
||||||
{$IFDEF VerboseMouseBugfix}
|
{$IFDEF VerboseMouseBugfix}
|
||||||
@ -2235,6 +2253,15 @@ begin
|
|||||||
if not (csDesigning in TComponent(Data).ComponentState) then
|
if not (csDesigning in TComponent(Data).ComponentState) then
|
||||||
begin
|
begin
|
||||||
DesignOnlySignal := GetDesignOnlySignalFlag(Widget, dstMouseRelease);
|
DesignOnlySignal := GetDesignOnlySignalFlag(Widget, dstMouseRelease);
|
||||||
|
|
||||||
|
if (TControl(Data) is TCustomListView) and
|
||||||
|
(TListView(Data).ViewStyle in [vsIcon, vsSmallIcon]) and
|
||||||
|
TListView(Data).MultiSelect then
|
||||||
|
begin
|
||||||
|
// fixed crash.See issue #22778
|
||||||
|
FixListViewRubberBand;
|
||||||
|
end;
|
||||||
|
|
||||||
ReleaseMouseCapture;
|
ReleaseMouseCapture;
|
||||||
if DesignOnlySignal or (not ControlGetsMouseUpBefore(TControl(Data))) then
|
if DesignOnlySignal or (not ControlGetsMouseUpBefore(TControl(Data))) then
|
||||||
Exit;
|
Exit;
|
||||||
|
@ -224,6 +224,87 @@ function gdk_screen_get_rgba_colormap(screen: PGdkScreen): PGdkColormap; cdecl;
|
|||||||
procedure gdk_window_move_region(window: PGdkWindow ; region: PGdkRegion; dx, dy: gint);cdecl; external gdklib;
|
procedure gdk_window_move_region(window: PGdkWindow ; region: PGdkRegion; dx, dy: gint);cdecl; external gdklib;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
_PGtkIconViewPrivate = ^_GtkIconViewPrivate; {private struct of GtkIconView, used to fix #22778}
|
||||||
|
_GtkIconViewPrivate = record
|
||||||
|
Width: Gint;
|
||||||
|
Height: Gint;
|
||||||
|
Selection_Mode: PGtkSelectionMode;
|
||||||
|
|
||||||
|
bin_window: PGdkWindow;
|
||||||
|
children: PGList;
|
||||||
|
Model: PGtkTreeModel;
|
||||||
|
Items: PGList;
|
||||||
|
|
||||||
|
hadjustment: PGtkAdjustment;
|
||||||
|
vadjustment: PGtkAdjustment;
|
||||||
|
|
||||||
|
layout_idle_id: guint;
|
||||||
|
|
||||||
|
doing_rubberband: gboolean;
|
||||||
|
rubberband_x1: gint;
|
||||||
|
rubberband_y1: gint;
|
||||||
|
rubberband_x2: gint;
|
||||||
|
rubberband_y2: gint;
|
||||||
|
scroll_timeout_id: guint;
|
||||||
|
scroll_value_diff: gint;
|
||||||
|
event_last_x: gint;
|
||||||
|
event_last_y: gint;
|
||||||
|
anchor_item: Pointer; // PGtkIconViewItem;
|
||||||
|
cursor_item: Pointer; // PGtkIconViewItem;
|
||||||
|
edited_item: Pointer; // PGtkIconViewItem;
|
||||||
|
editable_item: Pointer; // PGtkCellEditable;
|
||||||
|
last_single_clicked: Pointer; // PGtkIconViewItem;
|
||||||
|
|
||||||
|
cell_list: PGList;
|
||||||
|
n_cells: guint;
|
||||||
|
cursor_cell: gint;
|
||||||
|
|
||||||
|
|
||||||
|
orientation: TGtkOrientation;
|
||||||
|
|
||||||
|
columns: gint;
|
||||||
|
item_width: gint;
|
||||||
|
spacing: gint;
|
||||||
|
row_spacing: gint;
|
||||||
|
column_spacing: gint;
|
||||||
|
margin: gint;
|
||||||
|
item_padding: gint;
|
||||||
|
text_column: gint;
|
||||||
|
markup_column: gint;
|
||||||
|
pixbuf_column: gint;
|
||||||
|
pixbuf_cell: gint;
|
||||||
|
text_cell: gint;
|
||||||
|
tooltip_column: gint;
|
||||||
|
|
||||||
|
// * Drag-and-drop. */
|
||||||
|
start_button_mask: TGdkModifierType;
|
||||||
|
pressed_button: gint;
|
||||||
|
press_start_x: gint;
|
||||||
|
press_start_y: gint;
|
||||||
|
|
||||||
|
source_actions: TGdkDragAction;
|
||||||
|
dest_actions: TGdkDragAction;
|
||||||
|
|
||||||
|
dest_item: PGtkTreeRowReference;
|
||||||
|
dest_pos: guint; // TGtkIconViewDropPosition;
|
||||||
|
|
||||||
|
// * scroll to */
|
||||||
|
scroll_to_path: PGtkTreeRowReference;
|
||||||
|
scroll_to_row_align: gfloat;
|
||||||
|
scroll_to_col_align: gfloat;
|
||||||
|
scroll_to_use_align: guint;
|
||||||
|
|
||||||
|
source_set: guint;
|
||||||
|
dest_set: guint;
|
||||||
|
reorderable: guint;
|
||||||
|
empty_view_drop: guint;
|
||||||
|
|
||||||
|
ctrl_pressed: guint;
|
||||||
|
shift_pressed: guint;
|
||||||
|
|
||||||
|
draw_focus: guint;
|
||||||
|
end;
|
||||||
|
|
||||||
TGtkPackDirection = longint;
|
TGtkPackDirection = longint;
|
||||||
|
|
||||||
const
|
const
|
||||||
|
Loading…
Reference in New Issue
Block a user