Skip to content

Commit 2030a91

Browse files
committed
fix: work around unused Header.PopupMenu menu on Linux when a tree has a PopupMenu
Refs #2271
1 parent ba40947 commit 2030a91

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

source/apphelpers.pas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,6 +1520,7 @@ procedure FixVT(VT: TVirtualStringTree; IsResultGrid: Boolean=False);
15201520
VT.OnStartOperation := Mainform.AnyGridStartOperation;
15211521
VT.OnEndOperation := Mainform.AnyGridEndOperation;
15221522
VT.BorderStyle := bsNone; // Cosmetic
1523+
VT.OnContextPopup := MainForm.AnyGridContextPopup;
15231524
end;
15241525

15251526

source/main.lfm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2136,6 +2136,7 @@ object MainForm: TMainForm
21362136
OnBeforePaint = ListTablesBeforePaint
21372137
OnChange = ListTablesChange
21382138
OnCompareNodes = AnyGridCompareNodes
2139+
OnContextPopup = AnyGridContextPopup
21392140
OnDblClick = ListTablesDblClick
21402141
OnEditing = ListTablesEditing
21412142
OnGetText = ListTablesGetText

source/main.pas

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,8 @@ TMainForm = class(TExtForm)
837837
procedure actDataEditWithoutLookupExecute(Sender: TObject);
838838
procedure actNextTabExecute(Sender: TObject);
839839
procedure actPreviousTabExecute(Sender: TObject);
840+
procedure AnyGridContextPopup(Sender: TObject; MousePos: TPoint;
841+
var Handled: Boolean);
840842
procedure DataGridContextPopup(Sender: TObject; MousePos: TPoint;
841843
var Handled: Boolean);
842844
procedure FormActivate(Sender: TObject);
@@ -4538,6 +4540,25 @@ procedure TMainForm.actPreviousTabExecute(Sender: TObject);
45384540
PageControlMain.SelectNextPage(False);
45394541
end;
45404542

4543+
procedure TMainForm.AnyGridContextPopup(Sender: TObject; MousePos: TPoint;
4544+
var Handled: Boolean);
4545+
var
4546+
Tree: TLazVirtualStringTree;
4547+
P: TPoint;
4548+
begin
4549+
Tree := Sender as TLazVirtualStringTree;
4550+
if Tree.Header.PopupMenu = nil then
4551+
Exit;
4552+
if Tree.Header.InHeader(MousePos) then begin
4553+
// Issue #2271:
4554+
// We get here through a wrong event path, when mouse right-clicks the header area
4555+
Tree.Header.PopupMenu.PopupComponent := Tree;
4556+
P := Tree.ClientToScreen(MousePos);
4557+
Tree.Header.PopupMenu.Popup(P.X, P.Y); // This is the actually wanted header context menu
4558+
Handled := True;
4559+
end;
4560+
end;
4561+
45414562
procedure TMainForm.DataGridContextPopup(Sender: TObject; MousePos: TPoint;
45424563
var Handled: Boolean);
45434564
var

0 commit comments

Comments
 (0)