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;