aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor/basetexteditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/texteditor/basetexteditor.cpp')
-rw-r--r--src/plugins/texteditor/basetexteditor.cpp87
1 files changed, 80 insertions, 7 deletions
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index dbc908ac3c..1e718f1187 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -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;
}