File 003-todo_filepath-4.8.1.patch of Package qtcreator

diff -uprN qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsmodel.cpp qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsmodel.cpp
--- qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsmodel.cpp	2018-03-27 13:44:46.000000000 +0200
+++ qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsmodel.cpp	2018-04-07 13:51:14.043826178 +0200
@@ -31,6 +31,9 @@
 
 #include <utils/theme/theme.h>
 
+#include <projectexplorer/project.h>
+#include <coreplugin/documentmanager.h>
+
 #include <QIcon>
 
 using namespace Utils;
@@ -46,6 +49,28 @@ TodoItemsModel::TodoItemsModel(QObject *
 {
 }
 
+void TodoItemsModel::startupProjectChanged(ProjectExplorer::Project *project)
+{
+    if(project)
+        m_projectDir = QDir(project->projectDirectory().toString());
+
+    m_defaultProjectsDir = QDir(Core::DocumentManager::useProjectsDirectory()
+                                ? Core::DocumentManager::projectsDirectory().toString()
+                                : QString()).canonicalPath();
+}
+
+QString TodoItemsModel::stripProjectPath(const QString& filename) const
+{
+    QString relativePath = m_projectDir.relativeFilePath(filename);
+
+    if(relativePath.startsWith(QString::fromUtf8("..")))
+        relativePath = QString::fromUtf8("~/") + m_defaultProjectsDir.relativeFilePath(filename);
+    if(relativePath.startsWith(QString::fromUtf8("~/..")))
+        relativePath = filename;
+
+    return relativePath;
+}
+
 void TodoItemsModel::setTodoItemsList(QList<TodoItem> *list)
 {
     m_todoItemsList = list;
@@ -87,6 +112,7 @@ QVariant TodoItemsModel::data(const QMod
 
         case Constants::OUTPUT_COLUMN_TEXT:
             switch (role) {
+                case Qt::ToolTipRole:
                 case Qt::DisplayRole:
                     return item.text;
                 case Qt::DecorationRole:
@@ -96,11 +122,13 @@ QVariant TodoItemsModel::data(const QMod
 
         case Constants::OUTPUT_COLUMN_FILE:
             if (role == Qt::DisplayRole)
+                return stripProjectPath(item.file.toUserOutput());
+            if (role == Qt::ToolTipRole)	
                 return item.file.toUserOutput();
             break;
 
         case Constants::OUTPUT_COLUMN_LINE:
-            if (role == Qt::DisplayRole)
+            if ((role == Qt::DisplayRole) || (role == Qt::ToolTipRole))
                 return item.line;
             break;
     }
diff -uprN qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsmodel.h qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsmodel.h
--- qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsmodel.h	2018-03-27 13:44:46.000000000 +0200
+++ qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsmodel.h	2018-04-07 13:51:14.043826178 +0200
@@ -31,6 +31,12 @@
 #include <QAbstractTableModel>
 #include <QList>
 
+#include <QDir>
+
+namespace ProjectExplorer{
+    class Project;
+}
+
 namespace Todo {
 namespace Internal {
 
@@ -50,11 +56,19 @@ public:
 
     void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
     void todoItemsListUpdated();
+public slots:
+    // Needed to keep track of the active project root and of the default project dir :
+    void startupProjectChanged(ProjectExplorer::Project *project);
 
 private:
+    // Wipe the project root (or the defaults document dir) of the filename :
+    QString stripProjectPath(const QString& filename) const;
+
     QList<TodoItem> *m_todoItemsList;
     Constants::OutputColumnIndex m_currentSortColumn;
     Qt::SortOrder m_currentSortOrder;
+    QDir m_projectDir, // This is the root path of the active project.
+         m_defaultProjectsDir; // This is the defaut path for Qt projects.
 };
 
 }
diff -uprN qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsprovider.cpp qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsprovider.cpp
--- qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todoitemsprovider.cpp	2018-03-27 13:44:46.000000000 +0200
+++ qt-creator-opensource-src-4.6.0/src/plugins/todo/todoitemsprovider.cpp	2018-04-07 13:51:14.043826178 +0200
@@ -239,6 +239,9 @@ void TodoItemsProvider::setupItemsModel(
 {
     m_itemsModel = new TodoItemsModel(this);
     m_itemsModel->setTodoItemsList(&m_itemsList);
+
+    connect(SessionManager::instance(),  SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
+             m_itemsModel, SLOT(startupProjectChanged(ProjectExplorer::Project*)));
 }
 
 }
diff -uprN qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todooutputpane.cpp qt-creator-opensource-src-4.6.0/src/plugins/todo/todooutputpane.cpp
--- qt-creator-opensource-src-4.6.0-orig/src/plugins/todo/todooutputpane.cpp	2018-03-27 13:44:46.000000000 +0200
+++ qt-creator-opensource-src-4.6.0/src/plugins/todo/todooutputpane.cpp	2018-04-07 13:51:14.043826178 +0200
@@ -175,9 +175,9 @@ void TodoOutputPane::todoTreeViewClicked
     int row = index.row();
 
     TodoItem item;
-    item.text = index.sibling(row, Constants::OUTPUT_COLUMN_TEXT).data().toString();
-    item.file = Utils::FileName::fromUserInput(index.sibling(row, Constants::OUTPUT_COLUMN_FILE).data().toString());
-    item.line = index.sibling(row, Constants::OUTPUT_COLUMN_LINE).data().toInt();
+    item.text = index.sibling(row, Constants::OUTPUT_COLUMN_TEXT).data(Qt::ToolTipRole).toString();
+    item.file = Utils::FileName::fromUserInput(index.sibling(row, Constants::OUTPUT_COLUMN_FILE).data(Qt::ToolTipRole).toString());
+    item.line = index.sibling(row, Constants::OUTPUT_COLUMN_LINE).data(Qt::ToolTipRole).toInt();
     item.color = index.data(Qt::TextColorRole).value<QColor>();
     item.iconType = static_cast<IconType>(index.sibling(row, Constants::OUTPUT_COLUMN_TEXT)
                                           .data(Qt::UserRole).toInt());
openSUSE Build Service is sponsored by