@@ -46,6 +46,8 @@ END_EVENT_TABLE()
4646// constructor
4747PythonCodeCompletion::PythonCodeCompletion() : m_ActiveCalltipDef(_(" " ))
4848{
49+ m_comp_position.line = 0 ;
50+ m_comp_position.column = 0 ;
4951 // Make sure our resources are available.
5052 // In the generated boilerplate code we have no resources but when
5153 // we add some, it will be nice that this code is in place already ;)
@@ -318,9 +320,29 @@ PythonCodeCompletion::CCProviderStatus PythonCodeCompletion::GetProviderStatusFo
318320std::vector<PythonCodeCompletion::CCToken> PythonCodeCompletion::GetAutocompList (bool isAuto, cbEditor* ed, int & tknStart, int & tknEnd)
319321{
320322 Manager::Get ()->GetLogManager ()->DebugLog (_ (" PYCC: GetAutocompList called" ));
323+
324+ cbStyledTextCtrl* control = ed->GetControl ();
325+ const int line = control->LineFromPosition (tknStart);
326+ const int lnStart = control->PositionFromLine (line);
327+ int column = tknStart - lnStart;
328+ for (; column > 0 ; --column)
329+ {
330+ if ( !wxIsspace (control->GetCharAt (lnStart + column - 1 ))
331+ || (column != 1 && !wxIsspace (control->GetCharAt (lnStart + column - 2 ))) )
332+ {
333+ break ;
334+ }
335+ }
336+
321337 std::vector<CCToken> tokens;
322338 if (m_state == STATE_COMPLETION_RETURNED )
323339 {
340+ if ((m_comp_position.line != line)||(m_comp_position.column != column))
341+ {
342+ Manager::Get ()->GetLogManager ()->DebugLog ( _ (" PYCC: Position has changed since last CC request" ) );
343+ m_state=STATE_NONE ;
344+ return tokens;
345+ }
324346 for (int i = 0 ; i<m_comp_results.Count (); ++i)
325347 {
326348 long int category=-1 ;
@@ -329,7 +351,6 @@ std::vector<PythonCodeCompletion::CCToken> PythonCodeCompletion::GetAutocompList
329351 PythonCodeCompletion::CCToken t (i,m_comp_results[i].BeforeFirst (' ?' ),category);
330352 tokens.push_back (t);
331353 }
332- cbStyledTextCtrl* control = ed->GetControl ();
333354 control->ClearRegisteredImages ();
334355 for (int i = 0 ; i < m_pImageList->GetImageCount (); i++)
335356 control->RegisterImage (i+1 ,m_pImageList->GetBitmap (i));
@@ -341,7 +362,6 @@ std::vector<PythonCodeCompletion::CCToken> PythonCodeCompletion::GetAutocompList
341362// if ( (!ed->AutoCompActive()) // not already active autocompletion
342363// || (ch == _T('.')))
343364 Manager::Get ()->GetLogManager ()->DebugLog (_ (" PYCC: Checking lexical state..." ));
344- cbStyledTextCtrl *control=ed->GetControl ();
345365 int pos = tknEnd;
346366 int style = control->GetStyleAt (pos);
347367 wxChar ch = control->GetCharAt (pos);
@@ -357,6 +377,8 @@ std::vector<PythonCodeCompletion::CCToken> PythonCodeCompletion::GetAutocompList
357377 wxString phrase=control->GetTextRange (tknStart,tknEnd);
358378 Manager::Get ()->GetLogManager ()->DebugLog (_T (" PYCC: Looking for " )+phrase+_T (" in " )+ed->GetFilename ()+wxString::Format (_T (" %i" ),pos));
359379 m_state = STATE_COMPLETION_REQUEST ;
380+ m_comp_position.line = line;
381+ m_comp_position.column = column;
360382 RequestCompletion (control,pos,ed->GetFilename ());
361383 return tokens;
362384 }
0 commit comments