瀏覽代碼

Bug fix: Panel column context menus were working incorrectly when panel was horizontally scrolled

Source commit: 070fad04e0948378ca184d27a8a50928a98f454a
Martin Prikryl 7 年之前
父節點
當前提交
277bb638ea

+ 6 - 1
source/forms/CustomScpExplorer.cpp

@@ -4820,7 +4820,6 @@ void __fastcall TCustomScpExplorerForm::DirViewColumnRightClick(
 {
 {
   DebugAssert(NonVisualDataModule && Column && Sender);
   DebugAssert(NonVisualDataModule && Column && Sender);
   NonVisualDataModule->ListColumn = Column;
   NonVisualDataModule->ListColumn = Column;
-  TPoint ScreenPoint = ((TControl*)Sender)->ClientToScreen(Point);
   TPopupMenu * DirViewColumnMenu;
   TPopupMenu * DirViewColumnMenu;
   if (Sender == RemoteDirView)
   if (Sender == RemoteDirView)
   {
   {
@@ -4838,6 +4837,12 @@ void __fastcall TCustomScpExplorerForm::DirViewColumnRightClick(
     NonVisualDataModule->LocalFormatSizeBytesPopupItem->Visible =
     NonVisualDataModule->LocalFormatSizeBytesPopupItem->Visible =
       (Column->Index == dvSize);
       (Column->Index == dvSize);
   }
   }
+
+  TCustomListView * ListView = DebugNotNull(dynamic_cast<TCustomListView *>(Sender));
+  TPoint ScreenPoint = ListView->ClientToScreen(Point);
+
+  ScreenPoint.x -= GetScrollPos(ListView->Handle, SB_HORZ);
+
   DirViewColumnMenu->Popup(ScreenPoint.x, ScreenPoint.y);
   DirViewColumnMenu->Popup(ScreenPoint.x, ScreenPoint.y);
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------

+ 1 - 0
source/forms/SynchronizeChecklist.cpp

@@ -433,6 +433,7 @@ TRect __fastcall TSynchronizeChecklistDialog::GetColumnHeaderRect(int Index)
   TRect R;
   TRect R;
   Header_GetItemRect(HeaderHandle, Index, &R);
   Header_GetItemRect(HeaderHandle, Index, &R);
 
 
+  // Can be simplified using GetScrollPos
   TScrollInfo ScrollInfo;
   TScrollInfo ScrollInfo;
   ZeroMemory(&ScrollInfo, sizeof(ScrollInfo));
   ZeroMemory(&ScrollInfo, sizeof(ScrollInfo));
   ScrollInfo.cbSize = sizeof(ScrollInfo);
   ScrollInfo.cbSize = sizeof(ScrollInfo);

+ 0 - 12
source/packages/my/NortonLikeListView.pas

@@ -62,7 +62,6 @@ type
     function CanChangeSelection(Item: TListItem; Select: Boolean): Boolean; virtual;
     function CanChangeSelection(Item: TListItem; Select: Boolean): Boolean; virtual;
     procedure ClearItems; virtual;
     procedure ClearItems; virtual;
     procedure ItemsReordered;
     procedure ItemsReordered;
-    procedure ColRightClick(Column: TListColumn; Point: TPoint); override;
     procedure Delete(Item: TListItem); override;
     procedure Delete(Item: TListItem); override;
     function ExCanChange(Item: TListItem; Change: Integer;
     function ExCanChange(Item: TListItem; Change: Integer;
       NewState, OldState: Word): Boolean; dynamic;
       NewState, OldState: Word): Boolean; dynamic;
@@ -291,17 +290,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TCustomNortonLikeListView.ColRightClick(Column: TListColumn; Point: TPoint);
-var
-  HitInfo: TLVHitTestInfo;
-begin
-  // Fix: Otherwise we get wrong column when view is horizontally scrolled
-  HitInfo.pt := Point;
-  if ListView_SubItemHitTest(Handle, @HitInfo) = 0 then
-    Column := Columns[HitInfo.iSubItem];
-  inherited ColRightClick(Column, Point);
-end;
-
 function TCustomNortonLikeListView.ClosestUnselected(Item: TListItem): TListItem;
 function TCustomNortonLikeListView.ClosestUnselected(Item: TListItem): TListItem;
 var
 var
   Index: Integer;
   Index: Integer;