diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index 4d3de192b3..e35857d780 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -12827,8 +12827,9 @@ begin else SetItemLastCheckStateInternal(AItem, QtUnChecked); - SendMessage(AItem); + // if AItem is deleted in mouse event FDelayedCheckItem becomes nil and that's fine. issue #32869 FDelayedCheckItem := AItem; + SendMessage(AItem); end; end; end else @@ -12839,6 +12840,8 @@ begin SetItemLastCheckStateInternal(FDelayedCheckItem, QListWidgetItem_checkState(FDelayedCheckItem)); SendMessage(FDelayedCheckItem); end; + if FDelayedCheckItem = nil then // issue #32869 + exit; FDelayedCheckItem := nil; SetItemLastCheckStateInternal(AItem, QListWidgetItem_checkState(AItem)); SendMessage(AItem); @@ -13756,6 +13759,8 @@ begin if (getSelectionMode = QAbstractItemViewSingleSelection) then setCurrentRow(-1); Item := QListWidget_takeitem(QListWidgetH(Widget), AIndex); + if FDelayedCheckItem = Item then + FDelayedCheckItem := nil; QListWidgetItem_destroy(Item); end; @@ -14466,8 +14471,9 @@ begin else SetItemLastCheckStateInternal(AItem, QtUnChecked); - SendMessage(AItem); + // if AItem is deleted in mouse event FDelayedCheckItem becomes nil and that's fine. issue #32869 FDelayedCheckItem := AItem; + SendMessage(AItem); end; end; end else @@ -14478,6 +14484,8 @@ begin SetItemLastCheckStateInternal(FDelayedCheckItem, QTreeWidgetItem_checkState(FDelayedCheckItem, 0)); SendMessage(FDelayedCheckItem); end; + if FDelayedCheckItem = nil then // issue #32869 + exit; FDelayedCheckItem := nil; SetItemLastCheckStateInternal(AItem, QTreeWidgetItem_checkState(AItem, 0)); SendMessage(AItem); @@ -15001,6 +15009,8 @@ begin Index := -1; if Index <> -1 then FSelection.Remove(Item); + if FDelayedCheckItem = Item then + FDelayedCheckItem := nil; Item := takeTopLevelItem(AIndex); if Item <> nil then QTreeWidgetItem_destroy(Item);