From dfc87736dead105c01d25ea73e4185c3d242cf54 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Mon, 25 May 2009 22:24:49 +0000 Subject: [PATCH] Fix issue #1156: Table editor, checkbox state change although mouse clicked elsewhere in white space. Same goes for index tree. --- source/table_editor.pas | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/source/table_editor.pas b/source/table_editor.pas index d23f91cd..f07f1ad0 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -946,26 +946,26 @@ var VT: TVirtualStringTree; Props: TWideStringlist; dt: TMySQLDataTypeRecord; - Node: PVirtualNode; + Click: THitInfo; begin // Handle click event VT := Sender as TVirtualStringTree; - if not Assigned(VT.FocusedNode) then + VT.GetHitTestInfoAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y, True, Click); + if not Assigned(Click.HitNode) then Exit; - if VT.FocusedColumn in [4, 5] then begin + if Click.HitColumn in [4, 5] then begin // For checkboxes, cell editors are disabled, instead toggle their state - Props := TWideStringList(Columns.Objects[VT.FocusedNode.Index]); + Props := TWideStringList(Columns.Objects[Click.HitNode.Index]); dt := GetDatatypeByName(Props[0]); - if dt.HasUnsigned or (VT.FocusedColumn = 5) then begin - Props[VT.FocusedColumn-2] := BoolToStr(not StrToBool(Props[VT.FocusedColumn-2])); - VT.InvalidateNode(VT.FocusedNode); + if dt.HasUnsigned or (Click.HitColumn = 5) then begin + Props[Click.HitColumn-2] := BoolToStr(not StrToBool(Props[Click.HitColumn-2])); + VT.InvalidateNode(Click.HitNode); end; end else begin // All other cells go into edit mode please // Explicitely done on OnClick, not in OnFocusChanged which seemed annoying for keyboard users - Node := VT.GetNodeAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y); - if Assigned(Node) then - VT.EditNode(Node, VT.FocusedColumn); + if Assigned(Click.HitNode) then + VT.EditNode(Click.HitNode, Click.HitColumn); end; end; @@ -1270,15 +1270,13 @@ end; procedure TfrmTableEditor.treeIndexesClick(Sender: TObject); var VT: TVirtualStringTree; - Node: PVirtualNode; + Click: THitInfo; begin // Handle click event VT := Sender as TVirtualStringTree; - if not Assigned(VT.FocusedNode) then - Exit; - Node := VT.GetNodeAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y); - if Assigned(Node) then - VT.EditNode(Node, VT.FocusedColumn); + VT.GetHitTestInfoAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y, True, Click); + if Assigned(Click.HitNode) then + VT.EditNode(Click.HitNode, Click.HitColumn); end;