From 9fe5df8f5cc10a7b2bf24974bcb49c8b27d1bc4a Mon Sep 17 00:00:00 2001 From: Kamil Przybylski Date: Thu, 9 Jan 2025 12:00:03 +0100 Subject: [PATCH] 2025-01-09 12:00 UTC+0100 Kamil Przybylski (kprzybylski quay.pl) * src/rtl/listbox.prg ! fixed nTop not being incremented in ListBox:hitTest() for no-box dropdown * replaced inconsistent references to ::nTop with nTop * renamed variables to better reflect their role --- ChangeLog.txt | 6 ++++++ src/rtl/listbox.prg | 33 ++++++++++++++++----------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f0384adaa0..264240639a 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -7,6 +7,12 @@ Entries may not always be in chronological/commit order. See license at the end of file. */ +2025-01-09 12:00 UTC+0100 Kamil Przybylski (kprzybylski quay.pl) + * src/rtl/listbox.prg + ! fixed nTop not being incremented in ListBox:hitTest() for no-box dropdown + * replaced inconsistent references to ::nTop with nTop + * renamed variables to better reflect their role + 2025-01-08 13:14 UTC+0100 Kamil Przybylski (kprzybylski quay.pl) * src/rtl/listbox.prg ! fixed nTop variable not being assigned properly in ListBox:hitTest() diff --git a/src/rtl/listbox.prg b/src/rtl/listbox.prg index c56533ce66..935eb70658 100644 --- a/src/rtl/listbox.prg +++ b/src/rtl/listbox.prg @@ -396,8 +396,8 @@ METHOD getText( nPos ) CLASS ListBox METHOD hitTest( nMRow, nMCol ) CLASS ListBox - LOCAL nRet LOCAL nTop := ::nTop + LOCAL nOffset := 0 LOCAL nHit := 0 /* Check hit on the scrollbar */ @@ -408,13 +408,13 @@ METHOD hitTest( nMRow, nMCol ) CLASS ListBox RETURN nHit ENDIF - IF ! ::lIsOpen .OR. Empty( ::cHotBox + ::cColdBox ) - nRet := 0 - ELSE - IF ::lDropDown - nTop++ - ENDIF + IF ::lIsOpen .AND. ::lDropDown + nTop++ + ENDIF + IF ::lIsOpen .AND. .NOT. Empty( ::cHotBox + ::cColdBox ) + + nOffset := 1 DO CASE CASE nMRow == nTop DO CASE @@ -435,35 +435,34 @@ METHOD hitTest( nMRow, nMCol ) CLASS ListBox RETURN HTBOTTOM ENDCASE CASE nMCol == ::nLeft - IF nMRow >= ::nTop .AND. ; + IF nMRow >= nTop .AND. ; nMRow <= ::nBottom RETURN HTLEFT ELSE RETURN HTNOWHERE ENDIF CASE nMCol == ::nRight - IF nMRow >= ::nTop .AND. ; + IF nMRow >= nTop .AND. ; nMRow <= ::nBottom RETURN HTRIGHT ELSE RETURN HTNOWHERE ENDIF ENDCASE - nRet := 1 ENDIF DO CASE CASE ! ::lIsOpen - CASE nMRow < nTop + nRet - CASE nMRow > ::nBottom - nRet - CASE nMCol < ::nLeft + nRet - CASE nMCol <= ::nRight - nRet - RETURN ::nTopItem + nMRow - ( nTop + nRet ) + CASE nMRow < nTop + nOffset + CASE nMRow > ::nBottom - nOffset + CASE nMCol < ::nLeft + nOffset + CASE nMCol <= ::nRight - nOffset + RETURN ::nTopItem + nMRow - ( nTop + nOffset ) ENDCASE DO CASE CASE ! ::lDropDown - CASE nMRow != ::nTop + CASE nMRow != nTop CASE nMCol < ::nLeft CASE nMCol < ::nRight RETURN HTCLIENT @@ -479,7 +478,7 @@ METHOD hitTest( nMRow, nMCol ) CLASS ListBox RETURN HTCAPTION ENDCASE - RETURN 0 + RETURN HTNOWHERE METHOD insItem( nPos, cText, xData ) CLASS ListBox