Browse Source

ccmake: Fix search with '/'

Commit 7a18dd8e (Add searching of variables, 2003-03-07) added method
cmCursesMainForm::JumpToCacheEntry to search for cache entries whose
names match a given search string.  The method also had a useless
argument "int idx" probably left from earlier development iterations and
hard-coded in all calls to the value '-1'.  The method compared this
argument to the "NumberOfVisibleEntries" member which at the time was of
type "int" also.

Commit ff1f8d0b (Fix or cast more integer conversions in cmake,
2010-06-29) changed the type of "NumberOfVisibleEntries" to size_t to
fix other integer conversion warnings.  An unsigned type makes sense
given the purpose of the member.  However, this caused the '-1' signed
value to be converted to a large unsigned value in the above-mentioned
comparison, leading to incorrect behavior.

Fix the problem by removing the useless argument and the comparison.
Brad King 15 years ago
parent
commit
5d7c3c0a59
2 changed files with 7 additions and 12 deletions
  1. 5 9
      Source/CursesDialog/cmCursesMainForm.cxx
  2. 2 3
      Source/CursesDialog/cmCursesMainForm.h

+ 5 - 9
Source/CursesDialog/cmCursesMainForm.cxx

@@ -902,7 +902,7 @@ void cmCursesMainForm::HandleInput()
         this->SearchMode = false;
         if ( this->SearchString.size() > 0 )
           {
-          this->JumpToCacheEntry(-1, this->SearchString.c_str());
+          this->JumpToCacheEntry(this->SearchString.c_str());
           this->OldSearchString = this->SearchString;
           }
         this->SearchString = "";
@@ -1076,7 +1076,7 @@ void cmCursesMainForm::HandleInput()
         {
         if ( this->OldSearchString.size() > 0 )
           {
-          this->JumpToCacheEntry(-1, this->OldSearchString.c_str());
+          this->JumpToCacheEntry(this->OldSearchString.c_str());
           }
         }
       // switch advanced on/off
@@ -1191,7 +1191,7 @@ int cmCursesMainForm::LoadCache(const char *)
   return r;
 }
   
-void cmCursesMainForm::JumpToCacheEntry(int idx, const char* astr)
+void cmCursesMainForm::JumpToCacheEntry(const char* astr)
 {
   std::string str;
   if ( astr )
@@ -1199,18 +1199,14 @@ void cmCursesMainForm::JumpToCacheEntry(int idx, const char* astr)
     str = cmSystemTools::LowerCase(astr);
     }
 
-  if ( size_t(idx) > this->NumberOfVisibleEntries )
-    {
-    return;
-    }
-  if ( idx < 0 && str.size() == 0)
+  if(str.empty())
     {
     return;
     }
   FIELD* cur = current_field(this->Form);
   int start_index = field_index(cur);
   int findex = start_index;
-  while ( (findex / 3) != idx ) 
+  for(;;)
     {
     if ( str.size() > 0 )
       {

+ 2 - 3
Source/CursesDialog/cmCursesMainForm.h

@@ -122,9 +122,8 @@ protected:
   // Remove an entry from the interface and the cache.
   void RemoveEntry(const char* value);
 
-  // Jump to the cache value with index idx. If string str is
-  // specified, it will stop on widget that contain that string.
-  void JumpToCacheEntry(int idx, const char* str);
+  // Jump to the cache entry whose name matches the string.
+  void JumpToCacheEntry(const char* str);
 
   // Copies of cache entries stored in the user interface
   std::vector<cmCursesCacheEntryComposite*>* Entries;