Qt: fixed double triggering of OnColumnClick from listView, do not send mouse events from header to listView. issues #18696,#18693

git-svn-id: trunk@29398 -
This commit is contained in:
zeljko 2011-02-05 19:04:24 +00:00
parent 5492a17fbb
commit 0a9654594b

View File

@ -1152,7 +1152,7 @@ type
TQtHeaderView = class (TQtAbstractItemView) TQtHeaderView = class (TQtAbstractItemView)
private private
FSelectionClicked: QHeaderView_hookH; FSectionClicked: QHeaderView_hookH;
function getClickable: Boolean; function getClickable: Boolean;
function getMinSectionSize: Integer; function getMinSectionSize: Integer;
procedure setClickable(const AValue: Boolean); procedure setClickable(const AValue: Boolean);
@ -1163,7 +1163,8 @@ type
procedure AttachEvents; override; procedure AttachEvents; override;
procedure DetachEvents; override; procedure DetachEvents; override;
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure SignalSectionClicked(logicalIndex: Integer) cdecl; function itemViewViewportEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure SignalSectionClicked(logicalIndex: Integer); cdecl;
function getResizeMode(AIndex: Integer): QHeaderViewResizeMode; function getResizeMode(AIndex: Integer): QHeaderViewResizeMode;
procedure setResizeMode(AResizeMode: QHeaderViewResizeMode); overload; procedure setResizeMode(AResizeMode: QHeaderViewResizeMode); overload;
procedure setResizeMode(AIndex: Integer; AResizeMode: QHeaderViewResizeMode); overload; procedure setResizeMode(AIndex: Integer; AResizeMode: QHeaderViewResizeMode); overload;
@ -1206,7 +1207,6 @@ type
private private
FSorting: Boolean; FSorting: Boolean;
FHeader: TQtHeaderView; FHeader: TQtHeaderView;
FSectionClicked: QHeaderView_hookH;
FSortChanged: QHeaderView_hookH; FSortChanged: QHeaderView_hookH;
FCurrentItemChangedHook: QTreeWidget_hookH; FCurrentItemChangedHook: QTreeWidget_hookH;
FItemDoubleClickedHook: QTreeWidget_hookH; FItemDoubleClickedHook: QTreeWidget_hookH;
@ -9441,13 +9441,13 @@ end;
procedure TQtHeaderView.AttachEvents; procedure TQtHeaderView.AttachEvents;
begin begin
inherited AttachEvents; inherited AttachEvents;
FSelectionClicked := QHeaderView_hook_create(Widget); FSectionClicked := QHeaderView_hook_create(Widget);
QHeaderView_hook_hook_sectionClicked(FSelectionClicked, @SignalSectionClicked); QHeaderView_hook_hook_sectionClicked(FSectionClicked, @SignalSectionClicked);
end; end;
procedure TQtHeaderView.DetachEvents; procedure TQtHeaderView.DetachEvents;
begin begin
QHeaderView_hook_destroy(FSelectionClicked); QHeaderView_hook_destroy(FSectionClicked);
inherited DetachEvents; inherited DetachEvents;
end; end;
@ -9468,6 +9468,20 @@ begin
end; end;
end; end;
function TQtHeaderView.itemViewViewportEventFilter(Sender: QObjectH;
Event: QEventH): Boolean; cdecl;
begin
Result := False;
QEvent_accept(Event);
case QEvent_type(Event) of
QEventMouseButtonPress,
QEventMouseButtonRelease,
QEventMouseButtonDblClick: ; {do nothing here - signal is fired}
else
Result := inherited itemViewViewportEventFilter(Sender, Event);
end;
end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Function: TQtHeaderView.SignalSectionClicked Function: TQtHeaderView.SignalSectionClicked
Params: None Params: None
@ -9834,9 +9848,6 @@ begin
FHeader := TQtHeaderView.CreateFrom(LCLObject, QTreeView_header(QTreeViewH(Widget))); FHeader := TQtHeaderView.CreateFrom(LCLObject, QTreeView_header(QTreeViewH(Widget)));
FHeader.FOwner := Self; FHeader.FOwner := Self;
FHeader.FChildOfComplexWidget := ccwTreeWidget; FHeader.FChildOfComplexWidget := ccwTreeWidget;
FSectionClicked := QHeaderView_hook_create(FHeader.Widget);
QHeaderView_hook_hook_sectionClicked(FSectionClicked,
@FHeader.SignalSectionClicked);
FSortChanged := QHeaderView_hook_create(FHeader.Widget); FSortChanged := QHeaderView_hook_create(FHeader.Widget);
QHeaderView_hook_hook_sortIndicatorChanged(FSortChanged, QHeaderView_hook_hook_sortIndicatorChanged(FSortChanged,
@SignalSortIndicatorChanged); @SignalSortIndicatorChanged);
@ -10210,8 +10221,6 @@ begin
QTreeWidget_hook_destroy(FItemEnteredHook); QTreeWidget_hook_destroy(FItemEnteredHook);
QTreeWidget_hook_destroy(FSelectionChangedHook); QTreeWidget_hook_destroy(FSelectionChangedHook);
if FSectionClicked <> nil then
QHeaderView_hook_destroy(FSectionClicked);
if FSortChanged <> nil then if FSortChanged <> nil then
QHeaderView_hook_destroy(FSortChanged); QHeaderView_hook_destroy(FSortChanged);