diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp
index ae1882b0093..2db7dc3087f 100644
--- a/src/plugins/cpptools/completionsettingspage.cpp
+++ b/src/plugins/cpptools/completionsettingspage.cpp
@@ -80,7 +80,21 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
         break;
     }
 
+    int completionTriggerIndex = 0;
+    switch (settings.m_completionTrigger) {
+    case TextEditor::ManualCompletion:
+        completionTriggerIndex = 0;
+        break;
+    case TextEditor::TriggeredCompletion:
+        completionTriggerIndex = 1;
+        break;
+    case TextEditor::AutomaticCompletion:
+        completionTriggerIndex = 2;
+        break;
+    }
+
     m_page->caseSensitivity->setCurrentIndex(caseSensitivityIndex);
+    m_page->completionTrigger->setCurrentIndex(completionTriggerIndex);
     m_page->autoInsertBrackets->setChecked(settings.m_autoInsertBrackets);
     m_page->partiallyComplete->setChecked(settings.m_partiallyComplete);
     m_page->spaceAfterFunctionName->setChecked(settings.m_spaceAfterFunctionName);
@@ -88,8 +102,9 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
     if (m_searchKeywords.isEmpty()) {
         QTextStream(&m_searchKeywords) << m_page->caseSensitivityLabel->text()
                 << ' ' << m_page->autoInsertBrackets->text()
-		<< ' ' << m_page->partiallyComplete->text()
-		<< ' ' << m_page->spaceAfterFunctionName->text();
+                << ' ' << m_page->completionTriggerLabel->text()
+                << ' ' << m_page->partiallyComplete->text()
+                << ' ' << m_page->spaceAfterFunctionName->text();
         m_searchKeywords.remove(QLatin1Char('&'));
     }
 
@@ -100,6 +115,7 @@ void CompletionSettingsPage::apply()
 {
     TextEditor::CompletionSettings settings;
     settings.m_caseSensitivity = caseSensitivity();
+    settings.m_completionTrigger = completionTrigger();
     settings.m_autoInsertBrackets = m_page->autoInsertBrackets->isChecked();
     settings.m_partiallyComplete = m_page->partiallyComplete->isChecked();
     settings.m_spaceAfterFunctionName = m_page->spaceAfterFunctionName->isChecked();
@@ -123,3 +139,15 @@ TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const
         return TextEditor::FirstLetterCaseSensitive;
     }
 }
+
+TextEditor::CompletionTrigger CompletionSettingsPage::completionTrigger() const
+{
+    switch (m_page->completionTrigger->currentIndex()) {
+    case 0:
+        return TextEditor::ManualCompletion;
+    case 1:
+        return TextEditor::TriggeredCompletion;
+    default:
+        return TextEditor::AutomaticCompletion;
+    }
+}
diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h
index 4221811ad63..c2b0c56dc30 100644
--- a/src/plugins/cpptools/completionsettingspage.h
+++ b/src/plugins/cpptools/completionsettingspage.h
@@ -60,6 +60,7 @@ public:
 
 private:
     TextEditor::CaseSensitivity caseSensitivity() const;
+    TextEditor::CompletionTrigger completionTrigger() const;
 
     Ui_CompletionSettingsPage *m_page;
     QString m_searchKeywords;
diff --git a/src/plugins/cpptools/completionsettingspage.ui b/src/plugins/cpptools/completionsettingspage.ui
index 98e0da2bc60..6b4f0a1377b 100644
--- a/src/plugins/cpptools/completionsettingspage.ui
+++ b/src/plugins/cpptools/completionsettingspage.ui
@@ -6,8 +6,8 @@
    
     0
     0
-    400
-    300
+    359
+    244
    
   
   
@@ -16,76 +16,95 @@
      
       Behavior
      
-     
-      - 
-       
-        - 
-         
-          
-           &Case-sensitivity:
-          
-          
-           caseSensitivity
-          
-         
-        -
- 
-         
-          
-           Qt::Horizontal
-          
-          
-           QSizePolicy::Maximum
-          
-          
-           
-            20
-            20
-           
-          
-         
-        -
- 
-         
-          
-           
-            0
-            0
-           
-          
-          - 
-           
-            Full
-           
-          -
- 
-           
-            None
-           
-          -
- 
-           
-            First Letter
-           
-          -         
-
-- 
-         
-          
-           Qt::Horizontal
-          
-          
-           
-            0
-            0
-           
-          
-         
-        -       
+     
+
- 
+       
+        
+         &Case-sensitivity:
+        
+        
+         caseSensitivity
+        
+       
       -
- 
+      - 
+       
+        
+         
+          0
+          0
+         
+        
+        - 
+         
+          Full
+         
+        +
- 
+         
+          None
+         
+        +
- 
+         
+          First Letter
+         
+        +       
+
+- 
+       
+        
+         Qt::Horizontal
+        
+        
+         
+          70
+          24
+         
+        
+       
+      +
- 
+       
+        
+         Activate completion:
+        
+       
+      +
- 
+       
+        - 
+         
+          Manually
+         
+        +
- 
+         
+          When Triggered
+         
+        +
- 
+         
+          Always
+         
+        +       
+
+- 
+       
+        
+         Qt::Horizontal
+        
+        
+         
+          40
+          24
+         
+        
+       
+      +
- 
        
         
          Automatically insert (, ) and ; when appropriate.
@@ -98,7 +117,7 @@
         
        
       -
- 
+      - 
        
         
          Insert the common prefix of available completion items.
@@ -111,7 +130,7 @@
         
        
       -
- 
+      - 
        
         
          true
@@ -138,6 +157,10 @@
     
    
+  groupBox
+  autoInsertBrackets
+  partiallyComplete
+  spaceAfterFunctionName
  
  
  
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index d3e46ea06c5..993aef82e0c 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -655,7 +655,7 @@ bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor)
         }
 
         return true;
-    } else {
+    } else if (completionSettings().m_completionTrigger == TextEditor::AutomaticCompletion) {
         // Trigger completion after at least three characters of a name have been typed
         const int startOfName = findStartOfName(pos);
         if (pos - startOfName > 2) {
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index 5f28d8acac3..9b84cd2dd81 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -40,6 +40,7 @@
 #include 
 
 #include 
+#include 
 
 #include 
 #include 
@@ -546,6 +547,8 @@ bool CodeCompletion::maybeTriggersCompletion(TextEditor::ITextEditable *editor)
 
     if (ch == QLatin1Char('(') || ch == QLatin1Char('.'))
         return true;
+    if (completionSettings().m_completionTrigger != TextEditor::AutomaticCompletion)
+        return false;
 
     const QChar characterUnderCursor = editor->characterAt(cursorPosition);
 
diff --git a/src/plugins/texteditor/completionsettings.cpp b/src/plugins/texteditor/completionsettings.cpp
index dc4bba31162..399415c9d6d 100644
--- a/src/plugins/texteditor/completionsettings.cpp
+++ b/src/plugins/texteditor/completionsettings.cpp
@@ -33,6 +33,7 @@
 
 static const char * const groupPostfix = "Completion";
 static const char * const caseSensitivityKey = "CaseSensitivity";
+static const char * const completionTriggerKey = "CompletionTrigger";
 static const char * const autoInsertBracesKey = "AutoInsertBraces";
 static const char * const partiallyCompleteKey = "PartiallyComplete";
 static const char * const spaceAfterFunctionNameKey = "SpaceAfterFunctionName";
@@ -41,6 +42,7 @@ using namespace TextEditor;
 
 CompletionSettings::CompletionSettings()
     : m_caseSensitivity(CaseInsensitive)
+    , m_completionTrigger(AutomaticCompletion)
     , m_autoInsertBrackets(true)
     , m_partiallyComplete(true)
     , m_spaceAfterFunctionName(false)
@@ -55,6 +57,7 @@ void CompletionSettings::toSettings(const QString &category, QSettings *s) const
 
     s->beginGroup(group);
     s->setValue(QLatin1String(caseSensitivityKey), (int) m_caseSensitivity);
+    s->setValue(QLatin1String(completionTriggerKey), (int) m_completionTrigger);
     s->setValue(QLatin1String(autoInsertBracesKey), m_autoInsertBrackets);
     s->setValue(QLatin1String(partiallyCompleteKey), m_partiallyComplete);
     s->setValue(QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName);
@@ -71,6 +74,7 @@ void CompletionSettings::fromSettings(const QString &category, const QSettings *
     *this = CompletionSettings(); // Assign defaults
 
     m_caseSensitivity = (CaseSensitivity) s->value(group + QLatin1String(caseSensitivityKey), m_caseSensitivity).toInt();
+    m_completionTrigger = (CompletionTrigger) s->value(group + QLatin1String(completionTriggerKey), m_completionTrigger).toInt();
     m_autoInsertBrackets = s->value(group + QLatin1String(autoInsertBracesKey), m_autoInsertBrackets).toBool();
     m_partiallyComplete = s->value(group + QLatin1String(partiallyCompleteKey), m_partiallyComplete).toBool();
     m_spaceAfterFunctionName = s->value(group + QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName).toBool();
@@ -79,6 +83,7 @@ void CompletionSettings::fromSettings(const QString &category, const QSettings *
 bool CompletionSettings::equals(const CompletionSettings &cs) const
 {
     return m_caseSensitivity == cs.m_caseSensitivity
+        && m_completionTrigger == cs.m_completionTrigger
         && m_autoInsertBrackets == cs.m_autoInsertBrackets
         && m_partiallyComplete == cs.m_partiallyComplete
         && m_spaceAfterFunctionName == cs.m_spaceAfterFunctionName
diff --git a/src/plugins/texteditor/completionsettings.h b/src/plugins/texteditor/completionsettings.h
index 0d35abf9bb3..dcec5cc4f1f 100644
--- a/src/plugins/texteditor/completionsettings.h
+++ b/src/plugins/texteditor/completionsettings.h
@@ -44,6 +44,12 @@ enum CaseSensitivity {
     FirstLetterCaseSensitive
 };
 
+enum CompletionTrigger {
+    ManualCompletion,
+    TriggeredCompletion,
+    AutomaticCompletion
+};
+
 /**
  * Settings that describe how the code completion behaves.
  */
@@ -57,6 +63,7 @@ struct TEXTEDITOR_EXPORT CompletionSettings
     bool equals(const CompletionSettings &bs) const;
 
     CaseSensitivity m_caseSensitivity;
+    CompletionTrigger m_completionTrigger;
     bool m_autoInsertBrackets;
     bool m_partiallyComplete;
     bool m_spaceAfterFunctionName;
diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp
index bd6cc6c12ec..1ae51b106b5 100644
--- a/src/plugins/texteditor/completionsupport.cpp
+++ b/src/plugins/texteditor/completionsupport.cpp
@@ -34,6 +34,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -126,8 +127,13 @@ void CompletionSupport::autoComplete_helper(ITextEditable *editor, bool forced,
     QList completionItems;
 
     if (!m_completionList) {
-        if (!forced && !m_completionCollector->triggersCompletion(editor))
-            return;
+        if (!forced) {
+            const CompletionSettings &completionSettings = m_completionCollector->completionSettings();
+            if (completionSettings.m_completionTrigger == ManualCompletion)
+                return;
+            if (!m_completionCollector->triggersCompletion(editor))
+                return;
+        }
 
         m_startPosition = m_completionCollector->startCompletion(editor);
         completionItems = getCompletions();