mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 20:59:12 +02:00
Qt: postpone mouse release event in TQtListWidget when it's lclobject is TListView class.
git-svn-id: trunk@26518 -
This commit is contained in:
parent
afba07ab92
commit
a1c909bffc
@ -8261,7 +8261,14 @@ begin
|
|||||||
QEventHideToParent: TQtComboBox(FOwner).SlotDropListVisibility(False);
|
QEventHideToParent: TQtComboBox(FOwner).SlotDropListVisibility(False);
|
||||||
end;
|
end;
|
||||||
end else
|
end else
|
||||||
Result:=inherited EventFilter(Sender, Event);
|
begin
|
||||||
|
if (ViewStyle >= 0) and ((QEvent_type(Event) = QEventMouseButtonPress) or
|
||||||
|
(QEvent_type(Event) = QEventMouseButtonRelease)) then
|
||||||
|
{eat mouse button events when we are TListView class.
|
||||||
|
Such events are handled by itemViewportEventFilter.}
|
||||||
|
else
|
||||||
|
Result:=inherited EventFilter(Sender, Event);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TQtListWidget.itemViewViewportEventFilter(Sender: QObjectH;
|
function TQtListWidget.itemViewViewportEventFilter(Sender: QObjectH;
|
||||||
@ -8274,15 +8281,13 @@ var
|
|||||||
procedure SendEventToParent;
|
procedure SendEventToParent;
|
||||||
var
|
var
|
||||||
AEvent: QEventH;
|
AEvent: QEventH;
|
||||||
Modifiers: QtKeyboardModifiers;
|
|
||||||
begin
|
begin
|
||||||
Modifiers := QApplication_keyboardModifiers();
|
|
||||||
AEvent := QMouseEvent_create(QEvent_type(Event),
|
AEvent := QMouseEvent_create(QEvent_type(Event),
|
||||||
QMouseEvent_pos(QMouseEventH(Event)),
|
QMouseEvent_pos(QMouseEventH(Event)),
|
||||||
QMouseEvent_globalPos(QMouseEventH(Event)),
|
QMouseEvent_globalPos(QMouseEventH(Event)),
|
||||||
QMouseEvent_button(QMouseEventH(Event)),
|
QMouseEvent_button(QMouseEventH(Event)),
|
||||||
QMouseEvent_buttons(QMouseEventH(Event)),
|
QMouseEvent_buttons(QMouseEventH(Event)),
|
||||||
Modifiers);
|
QInputEvent_modifiers(QInputEventH(Event)));
|
||||||
QCoreApplication_postEvent(Widget, AEvent, 1);
|
QCoreApplication_postEvent(Widget, AEvent, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -8295,6 +8300,13 @@ begin
|
|||||||
|
|
||||||
if (LCLObject <> nil) then
|
if (LCLObject <> nil) then
|
||||||
begin
|
begin
|
||||||
|
if ViewStyle >= 0 then
|
||||||
|
begin
|
||||||
|
if QEvent_type(Event) = QEventMouseButtonRelease then
|
||||||
|
PostponedMouseRelease(Event)
|
||||||
|
else
|
||||||
|
Result := inherited itemViewViewportEventFilter(Sender, Event);
|
||||||
|
end else
|
||||||
case QEvent_type(Event) of
|
case QEvent_type(Event) of
|
||||||
QEventMouseButtonPress,
|
QEventMouseButtonPress,
|
||||||
QEventMouseButtonRelease,
|
QEventMouseButtonRelease,
|
||||||
@ -8421,6 +8433,9 @@ begin
|
|||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if ViewStyle >= 0 then
|
||||||
|
exit;
|
||||||
|
|
||||||
FillChar(Msg, SizeOf(Msg), #0);
|
FillChar(Msg, SizeOf(Msg), #0);
|
||||||
Msg.Msg := LM_SELCHANGE;
|
Msg.Msg := LM_SELCHANGE;
|
||||||
if (getSelCount > 0) and (FChildOfComplexWidget <> ccwComboBox) then
|
if (getSelCount > 0) and (FChildOfComplexWidget <> ccwComboBox) then
|
||||||
@ -8443,10 +8458,61 @@ procedure TQtListWidget.signalItemClicked(item: QListWidgetItemH)cdecl;
|
|||||||
var
|
var
|
||||||
Msg: TLMessage;
|
Msg: TLMessage;
|
||||||
ItemRow: Integer;
|
ItemRow: Integer;
|
||||||
|
MsgN: TLMNotify;
|
||||||
|
NMLV: TNMListView;
|
||||||
|
R: TRect;
|
||||||
|
Pt: TPoint;
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
{$ifdef VerboseQt}
|
{$ifdef VerboseQt}
|
||||||
WriteLn('TQtListWidget.signalItemClicked');
|
WriteLn('TQtListWidget.signalItemClicked');
|
||||||
{$endif}
|
{$endif}
|
||||||
|
if (ViewStyle >= 0) and (FChildOfComplexWidget <> ccwComboBox) then
|
||||||
|
begin
|
||||||
|
FillChar(MsgN, SizeOf(MsgN), #0);
|
||||||
|
FillChar(NMLV, SizeOf(NMLV), #0);
|
||||||
|
|
||||||
|
MsgN.Msg := LM_CLICKED;
|
||||||
|
|
||||||
|
NMLV.hdr.hwndfrom := LCLObject.Handle;
|
||||||
|
NMLV.hdr.code := NM_CLICK;
|
||||||
|
|
||||||
|
NMLV.iItem := getRow(Item);
|
||||||
|
|
||||||
|
NMLV.iSubItem := 0;
|
||||||
|
NMLV.uNewState := UINT(NM_CLICK);
|
||||||
|
NMLV.uChanged := LVIS_SELECTED;
|
||||||
|
|
||||||
|
QListWidget_visualItemRect(QListWidgetH(Widget), @R, Item);
|
||||||
|
|
||||||
|
pt.X := R.Left;
|
||||||
|
pt.Y := R.Top;
|
||||||
|
|
||||||
|
NMLV.ptAction := pt;
|
||||||
|
|
||||||
|
MsgN.NMHdr := @NMLV.hdr;
|
||||||
|
|
||||||
|
DeliverMessage(MsgN);
|
||||||
|
|
||||||
|
{sync LCL items for selected property}
|
||||||
|
if (LCLObject <> nil) and (LCLObject is TListView) then
|
||||||
|
for i := 0 to TListView(LCLObject).Items.Count - 1 do
|
||||||
|
TListView(LCLObject).Items[i].Selected;
|
||||||
|
|
||||||
|
{inform LCL about current change}
|
||||||
|
MsgN.Msg := CN_NOTIFY;
|
||||||
|
NMLV.hdr.code := LVN_ITEMCHANGED;
|
||||||
|
NMLV.uNewState := 0;
|
||||||
|
NMLV.uOldState := 0;
|
||||||
|
if QListWidget_isItemSelected(QListWidgetH(Widget), Item) then
|
||||||
|
NMLV.uNewState := LVIS_SELECTED
|
||||||
|
else
|
||||||
|
NMLV.uOldState := LVIS_SELECTED;
|
||||||
|
NMLV.uChanged := LVIF_STATE;
|
||||||
|
MsgN.NMHdr := @NMLV.hdr;
|
||||||
|
DeliverMessage(Msgn);
|
||||||
|
end;
|
||||||
|
|
||||||
if Checkable then
|
if Checkable then
|
||||||
begin
|
begin
|
||||||
FillChar(Msg, SizeOf(Msg), #0);
|
FillChar(Msg, SizeOf(Msg), #0);
|
||||||
@ -8455,6 +8521,7 @@ begin
|
|||||||
Msg.WParam := ItemRow;
|
Msg.WParam := ItemRow;
|
||||||
DeliverMessage(Msg);
|
DeliverMessage(Msg);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtListWidget.ItemDelegatePaint(painter: QPainterH;
|
procedure TQtListWidget.ItemDelegatePaint(painter: QPainterH;
|
||||||
|
Loading…
Reference in New Issue
Block a user