]> git.saurik.com Git - wxWidgets.git/commitdiff
Really fix resizing of wxGird column/rows after a hidden one.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 5 Feb 2013 20:46:06 +0000 (20:46 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 5 Feb 2013 20:46:06 +0000 (20:46 +0000)
The previous fix (r73399) broke resizing from the side of the preceding grid
line, restore the old code and just add a loop finding the first visible line
before the one being clicked.

See #14947.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73460 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/grid.cpp

index 670f3d5923baed1466aef54087674cd148adc780..9c795c276ba2e79ded33f1dd12bf738cc3c27926 100644 (file)
@@ -6675,17 +6675,28 @@ int wxGrid::PosToEdgeOfLine(int pos, const wxGridOperations& oper) const
     // Get the bottom or rightmost line that could match.
     int line = oper.PosToLine(this, pos, true);
 
     // Get the bottom or rightmost line that could match.
     int line = oper.PosToLine(this, pos, true);
 
-    // Go backwards until we find a line that is big enough.
-    while ( oper.GetLineSize(this, line) <= WXGRID_LABEL_EDGE_ZONE )
-    {
-        line = oper.GetLineBefore(this, line);
-        if ( line <= 0 )
-            break;
-    }
+    if ( oper.GetLineSize(this, line) > WXGRID_LABEL_EDGE_ZONE )
+    {
+        // We know that we are in this line, test whether we are close enough
+        // to start or end border, respectively.
+        if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
+            return line;
+        else if ( line > 0 &&
+                    pos - oper.GetLineStartPos(this,
+                                               line) < WXGRID_LABEL_EDGE_ZONE )
+        {
+            // We need to find the previous visible line, so skip all the
+            // hidden (of size 0) ones.
+            do
+            {
+                line = oper.GetLineBefore(this, line);
+            }
+            while ( line >= 0 && oper.GetLineSize(this, line) == 0 );
 
 
-    // If the bottom or right touches then we have a match
-    if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
-      return line;
+            // It can possibly be -1 here.
+            return line;
+        }
+    }
 
     return -1;
 }
 
     return -1;
 }