| 390 | } |
| 391 | |
| 392 | void DiffViewsCtrl::gotoSrcLine() |
| 393 | { |
| 394 | auto vData = activeView(); |
| 395 | if (!vData.isValid() || !vData.actView) |
| 396 | return; |
| 397 | |
| 398 | auto* docCtrl = ICore::self()->documentController(); |
| 399 | auto diffLn = vData.actView->cursorPosition().line(); |
| 400 | auto diffCol = vData.actView->cursorPosition().column(); |
| 401 | VcsDiff diff; |
| 402 | diff.setDiff(vData.ktDoc->text()); |
| 403 | |
| 404 | // Find the closest line in the diff which has a corresponding |
| 405 | // source line |
| 406 | auto last_line = vData.ktDoc->documentEnd().line(); |
| 407 | int delta = 0; |
| 408 | while(diffLn - delta >= 1 || diffLn + delta < last_line) { |
| 409 | auto src = diff.diffLineToTarget(diffLn-delta); |
| 410 | if ( src.line < 0 ) src = diff.diffLineToTarget(diffLn+delta); |
| 411 | if ( src.line >= 0 ) { |
| 412 | auto path = KDevelop::Path(vData.project->path(), src.path); |
| 413 | if (auto* srcDoc = docCtrl->openDocument(path.toUrl())) { |
| 414 | srcDoc->setCursorPosition(KTextEditor::Cursor(src.line, diffCol-1)); |
| 415 | docCtrl->activateDocument(srcDoc); |
| 416 | } |
| 417 | return; |
| 418 | } |
| 419 | delta += 1; |
| 420 | } |
| 421 | } |
| 422 | |
| 423 | #include "moc_diffviewsctrl.cpp" |
nothing calls this directly
no test coverage detected