D15743: Fix removal of external scripts

Amish Naidu noreply at phabricator.kde.org
Thu Sep 27 06:28:45 BST 2018


amhndu added a comment.


  Patch to move the key set as a member:
  
    diff --git a/plugins/externalscript/externalscriptplugin.cpp b/plugins/externalscript/externalscriptplugin.cpp
    index e1009457c8..3f2bddeeff 100644
    --- a/plugins/externalscript/externalscriptplugin.cpp
    +++ b/plugins/externalscript/externalscriptplugin.cpp
    @@ -120,6 +120,7 @@ ExternalScriptPlugin::ExternalScriptPlugin( QObject* parent, const QVariantList&
           item->action()->setShortcut( QKeySequence( script.readEntry( "shortcuts" ) ) );
           item->setShowOutput( script.readEntry( "showOutput", true ) );
           m_model->appendRow( item );
    +      m_keySet.insert( script.name() );
         }
       }
       //END load config
    @@ -350,6 +351,7 @@ void ExternalScriptPlugin::rowsAboutToBeRemoved( const QModelIndex& /*parent*/,
         const ExternalScriptItem* const item = static_cast<ExternalScriptItem*>( m_model->item( row ) );
         KConfigGroup child = config.group( item->key() );
         qCDebug(PLUGIN_EXTERNALSCRIPT) << "removing config group:" << child.name();
    +    m_keySet.remove( item->key() );
         child.deleteGroup();
       }
       config.sync();
    @@ -361,7 +363,10 @@ void ExternalScriptPlugin::updateItem( const ExternalScriptItem* item )
       Q_ASSERT( index.isValid() );
     
       getConfig().group( item->key() ).deleteGroup(); // delete the previous group
    +  m_keySet.remove( item->key() );
    +
       setupKeys( index.row(), index.row() );
    +
       saveItemForRow( index.row() ); // save the new group
     }
     
    @@ -389,28 +394,18 @@ void ExternalScriptPlugin::saveItemForRow( int row )
     
     void ExternalScriptPlugin::setupKeys(int start, int end)
     {
    -  QSet<QString> keySet;
    -  for ( int row = 0; row < m_model->rowCount(); ++row ) {
    -    if (row == start) {
    -      row = end;
    -    } else {
    -      const ExternalScriptItem* const item = static_cast<ExternalScriptItem*>( m_model->item( row ) );
    -      keySet.insert( item->key() );
    -    }
    -  }
    -
       for ( int row = start; row <= end; ++row ) {
         ExternalScriptItem* const item = static_cast<ExternalScriptItem*>( m_model->item( row ) );
     
    -    int maxSuffix = 0;
    -    QString keyCandidate = item->text() + QString::number( maxSuffix );
    -    for (; keySet.contains( keyCandidate ); ++maxSuffix) {
    -      keyCandidate = item->text() + QString::number( maxSuffix);
    +    int nextSuffix = 0;
    +    QString keyCandidate = keyCandidate = item->text() + QString::number( nextSuffix );
    +    for ( ++nextSuffix; m_keySet.contains( keyCandidate ); ++nextSuffix ) {
    +      keyCandidate = item->text() + QString::number( nextSuffix );
         }
     
         qCDebug(PLUGIN_EXTERNALSCRIPT) << "set key" << keyCandidate << "for" << item << item->command();
         item->setKey(keyCandidate);
    -    keySet.insert(keyCandidate);
    +    m_keySet.insert(keyCandidate);
       }
     }
     
    diff --git a/plugins/externalscript/externalscriptplugin.h b/plugins/externalscript/externalscriptplugin.h
    index 068efc2de7..4c7ed73d12 100644
    --- a/plugins/externalscript/externalscriptplugin.h
    +++ b/plugins/externalscript/externalscriptplugin.h
    @@ -26,6 +26,7 @@
     #include <QVariantList>
     #include <KConfigGroup>
     #include <QUrl>
    +#include <QSet>
     
     class ExternalScriptItem;
     
    @@ -101,6 +102,7 @@ private:
     
       QStandardItemModel* m_model;
       QList<QUrl> m_urls;
    +  QSet<QString> m_keySet;
       static ExternalScriptPlugin* m_self;
     
       class ExternalScriptViewFactory *m_factory;

REPOSITORY
  R32 KDevelop

REVISION DETAIL
  https://phabricator.kde.org/D15743

To: amhndu, #kdevelop
Cc: flherne, kdevelop-devel, glebaccon, antismap, iodelay, vbspam, geetamc, Pilzschaf, akshaydeo, surgenight, arrowd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20180927/6e62ac59/attachment-0001.html>


More information about the KDevelop-devel mailing list