diff --git a/src/plugins/coreplugin/fancyactionbar.cpp b/src/plugins/coreplugin/fancyactionbar.cpp
index 707ad14e955acc1a7e299cf47154e9a423ddf5f3..51e1875cabb28bfe56f9d6bbc96f0355aa5481a5 100644
--- a/src/plugins/coreplugin/fancyactionbar.cpp
+++ b/src/plugins/coreplugin/fancyactionbar.cpp
@@ -45,8 +45,9 @@
 #include <QtGui/QStatusBar>
 #include <QtGui/QStyle>
 #include <QtGui/QStyleOption>
-#include <QtCore/QEvent>
 #include <QtGui/QMouseEvent>
+#include <QtGui/QApplication>
+#include <QtCore/QEvent>
 #include <QtCore/QAnimationGroup>
 #include <QtCore/QPropertyAnimation>
 #include <QtCore/QDebug>
@@ -267,11 +268,29 @@ FancyActionBar::FancyActionBar(QWidget *parent)
     setContentsMargins(0,2,0,0);
 
     m_runButton = m_debugButton = 0;
+    m_inDebugMode = false;
 
     connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
             this, SLOT(modeChanged(Core::IMode*)));
+
+#ifdef Q_WS_MAC
+    qApp->installEventFilter(this);
+#endif
+
 }
 
+#ifdef Q_WS_MAC
+bool FancyActionBar::eventFilter(QObject *, QEvent *e)
+{
+    if (e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease) {
+        if (static_cast<QKeyEvent *>(e)->key() == Qt::Key_Alt)
+            updateRunDebug();
+    } else if (e->type() == QEvent::WindowDeactivate)
+        updateRunDebug();
+    return false;
+}
+#endif
+
 void FancyActionBar::addProjectSelector(QAction *action)
 {
     FancyToolButton* toolButton = new FancyToolButton(this);
@@ -295,15 +314,27 @@ void FancyActionBar::insertAction(int index, QAction *action)
 
 void FancyActionBar::modeChanged(Core::IMode *mode)
 {
-    if (m_runButton && m_debugButton) {
-        bool inDebugMode = (mode->id() == QLatin1String("Debugger.Mode.Debug"));
-        layout()->setEnabled(false);
-        m_runButton->forceVisible(!inDebugMode);
-        m_debugButton->forceVisible(inDebugMode);
-        layout()->setEnabled(true);
-    }
+    m_inDebugMode = (mode->id() == QLatin1String("Debugger.Mode.Debug"));
+    updateRunDebug();
 }
 
+void FancyActionBar::updateRunDebug()
+{
+    if (!m_runButton || !m_debugButton)
+        return;
+
+    bool doDebug = m_inDebugMode;
+#ifdef Q_WS_MAC
+    if (QApplication::keyboardModifiers() && Qt::AltModifier)
+        doDebug = !doDebug;
+#endif
+
+    layout()->setEnabled(false);
+    m_runButton->forceVisible(!doDebug);
+    m_debugButton->forceVisible(doDebug);
+    layout()->setEnabled(true);
+
+}
 
 QLayout *FancyActionBar::actionsLayout() const
 {
diff --git a/src/plugins/coreplugin/fancyactionbar.h b/src/plugins/coreplugin/fancyactionbar.h
index 013fdcf8811458c9af2b38bda5a23456ad6dd75d..eb1d52710998921d879ffe5570b9006539074e0f 100644
--- a/src/plugins/coreplugin/fancyactionbar.h
+++ b/src/plugins/coreplugin/fancyactionbar.h
@@ -75,6 +75,9 @@ class FancyActionBar : public QWidget
 public:
     FancyActionBar(QWidget *parent = 0);
 
+#ifdef Q_WS_MAC
+    bool eventFilter(QObject *, QEvent *);
+#endif
     void paintEvent(QPaintEvent *event);
     void insertAction(int index, QAction *action);
     void addProjectSelector(QAction *action);
@@ -84,6 +87,8 @@ private slots:
     void modeChanged(Core::IMode *mode);
 
 private:
+    void updateRunDebug();
+    bool m_inDebugMode;
     QVBoxLayout *m_actionsLayout;
     FancyToolButton *m_runButton;
     FancyToolButton *m_debugButton;