diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index d5f63972694f88a4f6c9398a051e971f32784331..35b751104d39882b6c8d21426f3f2734b0eb1da0 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -61,6 +61,7 @@
 #include <QtCore/QFile>
 #include <QtGui/QAction>
 #include <QtGui/QApplication>
+#include <QtGui/QDesktopWidget>
 #include <QtGui/QKeyEvent>
 #include <QtGui/QLabel>
 #include <QtGui/QToolButton>
@@ -271,9 +272,6 @@ void FunctionArgumentWidget::showFunctionHint(QList<Function *> functionSymbols,
     m_currentarg = -1;
     updateArgumentHighlight();
 
-    QPoint pos = m_editor->cursorRect(m_startpos).topLeft();
-    pos.setY(pos.y() - m_popupFrame->sizeHint().height() - 1);
-    m_popupFrame->move(pos);
     m_popupFrame->show();
 }
 
@@ -382,6 +380,22 @@ void FunctionArgumentWidget::updateHintText()
     m_numberLabel->setText(tr("%1 of %2").arg(m_current + 1).arg(m_items.size()));
 
     m_popupFrame->setFixedWidth(m_popupFrame->minimumSizeHint().width());
+
+    const QDesktopWidget *desktop = QApplication::desktop();
+#ifdef Q_OS_MAC
+    const QRect screen = desktop->availableGeometry(desktop->screenNumber(m_popupFrame));
+#else
+    const QRect screen = desktop->screenGeometry(desktop->screenNumber(m_popupFrame));
+#endif
+
+    const QSize sz = m_popupFrame->sizeHint();
+    QPoint pos = m_editor->cursorRect(m_startpos).topLeft();
+    pos.setY(pos.y() - sz.height() - 1);
+
+    if (pos.x() + sz.width() > screen.right())
+        pos.setX(screen.right() - sz.width());
+
+    m_popupFrame->move(pos);
 }
 
 CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)