forked from qt-creator/qt-creator
Editor: Allow to open links in a new split.
This changes current behavior while opening links. Link is now opened in next split by default. If you use CTRL+Click to open links, it will also open in next split. However, by using CTRL+ALT+click it will open in current split. There are two new checkboxes in Tools/Options/Text Editor/Display: - "Open Links in New Split" - if it is checked, links will not be opened in current split. However, if document with link is already opened, it will be used to open the split - "Force open links in next split" - Links will always open in next split, even if their document is already opened somewhere else. Task-number: QTCREATORBUG-8117 Change-Id: Ib99075b55d9e9683ed2c2386767227457de0a3fc Reviewed-by: David Schulz <david.schulz@digia.com>
This commit is contained in:
committed by
David Schulz
parent
c0e7b65db3
commit
39e9c5ef20
@@ -1068,7 +1068,35 @@ void BaseTextEditorWidget::unindent()
|
||||
|
||||
void BaseTextEditorWidget::openLinkUnderCursor()
|
||||
{
|
||||
openLink(findLinkAt(textCursor()));
|
||||
Core::EditorManager* editorManager = Core::EditorManager::instance();
|
||||
Link symbolLink = findLinkAt(textCursor());
|
||||
|
||||
if (!openLinksInNextSplit() || !editorManager->hasSplitter()) {
|
||||
openLink(symbolLink);
|
||||
return;
|
||||
}
|
||||
|
||||
Core::IEditor *editor = Core::EditorManager::currentEditor();
|
||||
|
||||
if (forceOpenLinksInNextSplit()) {
|
||||
editorManager->gotoOtherSplit();
|
||||
} else {
|
||||
bool isVisible = false;
|
||||
foreach (Core::IEditor *visEditor, editorManager->visibleEditors()) {
|
||||
if (visEditor->document() &&
|
||||
(symbolLink.fileName == visEditor->document()->fileName()) &&
|
||||
(visEditor != editor)) {
|
||||
isVisible = true;
|
||||
editorManager->activateEditor(visEditor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isVisible)
|
||||
editorManager->gotoOtherSplit();
|
||||
}
|
||||
openLink(symbolLink);
|
||||
editorManager->activateEditor(editor);
|
||||
}
|
||||
|
||||
void BaseTextEditorWidget::moveLineUpDown(bool up)
|
||||
@@ -2297,6 +2325,26 @@ bool BaseTextEditorWidget::lineNumbersVisible() const
|
||||
return d->m_lineNumbersVisible;
|
||||
}
|
||||
|
||||
void BaseTextEditorWidget::setOpenLinksInNextSplit(bool b)
|
||||
{
|
||||
d->m_displaySettings.m_openLinksInNextSplit = b;
|
||||
}
|
||||
|
||||
bool BaseTextEditorWidget::openLinksInNextSplit() const
|
||||
{
|
||||
return d->m_displaySettings.m_openLinksInNextSplit;
|
||||
}
|
||||
|
||||
void BaseTextEditorWidget::setForceOpenLinksInNextSplit(bool b)
|
||||
{
|
||||
d->m_displaySettings.m_forceOpenLinksInNextSplit = b;
|
||||
}
|
||||
|
||||
bool BaseTextEditorWidget::forceOpenLinksInNextSplit() const
|
||||
{
|
||||
return d->m_displaySettings.m_forceOpenLinksInNextSplit;
|
||||
}
|
||||
|
||||
void BaseTextEditorWidget::setMarksVisible(bool b)
|
||||
{
|
||||
d->m_marksVisible = b;
|
||||
@@ -4256,13 +4304,38 @@ void BaseTextEditorWidget::mousePressEvent(QMouseEvent *e)
|
||||
void BaseTextEditorWidget::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
if (mouseNavigationEnabled()
|
||||
&& d->m_linkPressed
|
||||
&& e->modifiers() & Qt::ControlModifier
|
||||
&& !(e->modifiers() & Qt::ShiftModifier)
|
||||
&& e->button() == Qt::LeftButton
|
||||
) {
|
||||
&& d->m_linkPressed
|
||||
&& e->modifiers() & Qt::ControlModifier
|
||||
&& !(e->modifiers() & Qt::ShiftModifier)
|
||||
&& e->button() == Qt::LeftButton
|
||||
) {
|
||||
|
||||
Core::EditorManager* editorManager = Core::EditorManager::instance();
|
||||
editorManager->addCurrentPositionToNavigationHistory();
|
||||
Core::IEditor *editor = Core::EditorManager::currentEditor();
|
||||
const QTextCursor cursor = cursorForPosition(e->pos());
|
||||
if (openLink(findLinkAt(cursor))) {
|
||||
Link symbolLink = findLinkAt(cursor);
|
||||
if (((!(e->modifiers() & Qt::AltModifier)) == openLinksInNextSplit()) &&
|
||||
(editorManager->hasSplitter())) {
|
||||
if (forceOpenLinksInNextSplit()) {
|
||||
editorManager->gotoOtherSplit();
|
||||
} else {
|
||||
bool isVisible = false;
|
||||
foreach (Core::IEditor *visEditor, editorManager->visibleEditors())
|
||||
if (visEditor->document() &&
|
||||
(symbolLink.fileName == visEditor->document()->fileName()) &&
|
||||
(editor != visEditor)) {
|
||||
isVisible = true;
|
||||
editorManager->activateEditor(visEditor);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!isVisible)
|
||||
editorManager->gotoOtherSplit();
|
||||
}
|
||||
}
|
||||
|
||||
if (openLink(symbolLink)) {
|
||||
clearLink();
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user