diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index c33be89fe..a86f85688 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -1756,9 +1756,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, QStyleHintReturnVariant return value. The QTextFormat::OutlinePen property is used for the outline and QTextFormat::BackgroundBrush for the background of the highlighted area. - \value SH_Menu_FlashTriggeredItem Flash triggered item. - \value SH_Menu_FadeOutOnHide Fade out the menu instead of hiding it immediately. - \value SH_TabWidget_DefaultTabPosition Default position of the tab bar in a tab widget. \value SH_ToolBar_Movable Determines if the tool bar is movable by default. diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index 0684099a0..ebd20e4d9 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -642,8 +642,6 @@ public: SH_TextControl_FocusIndicatorTextCharFormat, SH_ItemView_ArrowKeysNavigateIntoChildren, SH_Menu_Mask, - SH_Menu_FlashTriggeredItem, - SH_Menu_FadeOutOnHide, SH_SpinBox_ClickAutoRepeatThreshold, SH_ItemView_PaintAlternatingRowColorsForEmptyArea, SH_FormLayoutWrapPolicy, diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index 2217fdf6d..d3734cb11 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2372,39 +2372,7 @@ void QComboBox::hidePopup() { Q_D(QComboBox); if (d->container && d->container->isVisible()) { -#if !defined(QT_NO_EFFECTS) - d->model->blockSignals(true); - d->container->itemView()->blockSignals(true); - d->container->blockSignals(true); - // Flash selected/triggered item (if any). - if (style()->styleHint(QStyle::SH_Menu_FlashTriggeredItem)) { - QItemSelectionModel *selectionModel = view() ? view()->selectionModel() : 0; - if (selectionModel && selectionModel->hasSelection()) { - QEventLoop eventLoop; - const QItemSelection selection = selectionModel->selection(); - - // Deselect item and wait 60 ms. - selectionModel->select(selection, QItemSelectionModel::Toggle); - QTimer::singleShot(60, &eventLoop, SLOT(quit())); - eventLoop.exec(); - - // Select item and wait 20 ms. - selectionModel->select(selection, QItemSelectionModel::Toggle); - QTimer::singleShot(20, &eventLoop, SLOT(quit())); - eventLoop.exec(); - } - } - - // Fade out. - const bool needFade = style()->styleHint(QStyle::SH_Menu_FadeOutOnHide); - d->model->blockSignals(false); - d->container->itemView()->blockSignals(false); - d->container->blockSignals(false); - - if (!needFade) -#endif // QT_NO_EFFECTS - // Fade should implicitly hide as well ;-) - d->container->hide(); + d->container->hide(); } d->_q_resetButton(); } diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index f82be33a2..36a861b50 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -355,10 +355,9 @@ QRect QMenuPrivate::actionRect(QAction *act) const void QMenuPrivate::hideUpToMenuBar() { Q_Q(QMenu); - bool fadeMenus = q->style()->styleHint(QStyle::SH_Menu_FadeOutOnHide); if (!tornoff) { QWidget *caused = causedPopup.widget; - hideMenu(q); //hide after getting causedPopup + q->close(); //hide after getting causedPopup while(caused) { #ifndef QT_NO_MENUBAR if (QMenuBar *mb = qobject_cast(caused)) { @@ -370,9 +369,8 @@ void QMenuPrivate::hideUpToMenuBar() if (QMenu *m = qobject_cast(caused)) { caused = m->d_func()->causedPopup.widget; if (!m->d_func()->tornoff) - hideMenu(m, fadeMenus); - if (!fadeMenus) // Mac doesn't clear the action until after hidden. - m->d_func()->setCurrentAction(0); + m->close(); + m->d_func()->setCurrentAction(0); } else { caused = 0; } @@ -381,44 +379,6 @@ void QMenuPrivate::hideUpToMenuBar() setCurrentAction(0); } -void QMenuPrivate::hideMenu(QMenu *menu, bool justRegister) -{ - if (!menu) - return; -#if !defined(QT_NO_EFFECTS) - menu->blockSignals(true); - aboutToHide = true; - // Flash item which is about to trigger (if any). - if (menu->style()->styleHint(QStyle::SH_Menu_FlashTriggeredItem) - && currentAction && currentAction == actionAboutToTrigger - && menu->actions().contains(currentAction)) { - QEventLoop eventLoop; - QAction *activeAction = currentAction; - - menu->setActiveAction(0); - QTimer::singleShot(60, &eventLoop, SLOT(quit())); - eventLoop.exec(); - - // Select and wait 20 ms. - menu->setActiveAction(activeAction); - QTimer::singleShot(20, &eventLoop, SLOT(quit())); - eventLoop.exec(); - } - - // Fade out. - if (menu->style()->styleHint(QStyle::SH_Menu_FadeOutOnHide)) { - // ### Qt 4.4: - // Should be something like: q->transitionWindow(Qt::FadeOutTransition, MenuFadeTimeInSec); - // Hopefully we'll integrate qt/research/windowtransitions into main before 4.4. - // Talk to Richard, Trenton or Bjoern. - } - aboutToHide = false; - menu->blockSignals(false); -#endif // QT_NO_EFFECTS - if (!justRegister) - menu->close(); -} - void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst) { Q_Q(QMenu); @@ -429,9 +389,10 @@ void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst) menuDelayTimer.start(delay, q); if (activateFirst && action->menu()) action->menu()->d_func()->setFirstActionActive(); - } else if (QMenu *menu = activeMenu) { //hide the current item + } else if (QMenu *menu = activeMenu) { + // hide the current item activeMenu = 0; - hideMenu(menu); + menu->close(); } } @@ -545,7 +506,7 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason // kill any running effect qFadeEffect(nullptr); #endif - hideMenu(hideActiveMenu); + hideActiveMenu->close(); } } @@ -2097,7 +2058,7 @@ void QMenu::wheelEvent(QWheelEvent *e) void QMenu::mousePressEvent(QMouseEvent *e) { Q_D(QMenu); - if (d->aboutToHide || d->mouseEventTaken(e)) + if (d->mouseEventTaken(e)) return; if (!rect().contains(e->pos())) { if (d->noReplayFor @@ -2121,7 +2082,7 @@ void QMenu::mousePressEvent(QMouseEvent *e) void QMenu::mouseReleaseEvent(QMouseEvent *e) { Q_D(QMenu); - if (d->aboutToHide || d->mouseEventTaken(e)) + if (d->mouseEventTaken(e)) return; if(d->mouseDown != this) { d->mouseDown = 0; @@ -2437,7 +2398,7 @@ void QMenu::keyPressEvent(QKeyEvent *e) } if (!key_consumed && key == Qt::Key_Left && qobject_cast(d->causedPopup.widget)) { QPointer caused = d->causedPopup.widget; - d->hideMenu(this); + close(); if (caused) caused->setFocus(); key_consumed = true; @@ -2451,7 +2412,7 @@ void QMenu::keyPressEvent(QKeyEvent *e) key_consumed = true; if (style()->styleHint(QStyle::SH_MenuBar_AltKeyNavigation, 0, this)) { - d->hideMenu(this); + close(); #ifndef QT_NO_MENUBAR if (QMenuBar *mb = qobject_cast(QApplication::focusWidget())) { mb->d_func()->setKeyboardMode(false); @@ -2468,7 +2429,7 @@ void QMenu::keyPressEvent(QKeyEvent *e) } { QPointer caused = d->causedPopup.widget; - d->hideMenu(this); // hide after getting causedPopup + close(); // hide after getting causedPopup #ifndef QT_NO_MENUBAR if (QMenuBar *mb = qobject_cast(caused)) { mb->d_func()->setCurrentAction(d->menuAction); @@ -2601,7 +2562,7 @@ void QMenu::keyPressEvent(QKeyEvent *e) void QMenu::mouseMoveEvent(QMouseEvent *e) { Q_D(QMenu); - if (!isVisible() || d->aboutToHide || d->mouseEventTaken(e)) + if (!isVisible() || d->mouseEventTaken(e)) return; d->motions++; if (d->motions == 0) // ignore first mouse move event (see enterEvent()) @@ -2734,7 +2695,7 @@ void QMenu::internalDelayedPopup() //hide the current item if (QMenu *menu = d->activeMenu) { d->activeMenu = 0; - d->hideMenu(menu); + menu->close(); } if (!d->currentAction || !d->currentAction->isEnabled() || !d->currentAction->menu() || diff --git a/src/gui/widgets/qmenu_p.h b/src/gui/widgets/qmenu_p.h index 78379cfde..1626e56e3 100644 --- a/src/gui/widgets/qmenu_p.h +++ b/src/gui/widgets/qmenu_p.h @@ -52,18 +52,21 @@ class QMenuPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QMenu) public: - QMenuPrivate() : itemsDirty(0), maxIconWidth(0), tabWidth(0), ncols(0), - collapsibleSeparators(true), activationRecursionGuard(false), - hasHadMouse(false), aboutToHide(false), motions(0), - currentAction(0), - scroll(0), eventLoop(0), tearoff(false), tornoff(false), tearoffHighlighted(false), - hasCheckableItems(false), sloppyDelayTimer(0), sloppyAction(0), doChildEffects(false) - { } + QMenuPrivate() + : itemsDirty(0), maxIconWidth(0), tabWidth(0), ncols(0), + collapsibleSeparators(true), activationRecursionGuard(false), + hasHadMouse(false), motions(0), + currentAction(0), + scroll(0), eventLoop(0), tearoff(false), tornoff(false), tearoffHighlighted(false), + hasCheckableItems(false), sloppyDelayTimer(0), sloppyAction(0), doChildEffects(false) + { + } + ~QMenuPrivate() { delete scroll; - } + void init(); static QMenuPrivate *get(QMenu *m) { return m->d_func(); } @@ -92,7 +95,6 @@ public: static QMenu *mouseDown; QPoint mousePopupPos; bool hasHadMouse; - bool aboutToHide; int motions; QAction *currentAction; QBasicTimer menuDelayTimer; @@ -122,11 +124,11 @@ public: void scrollMenu(QMenuScroller::ScrollDirection direction, bool page=false, bool active=false); void scrollMenu(QAction *action, QMenuScroller::ScrollLocation location, bool active=false); - //synchronous operation (ie exec()) + // synchronous operation (ie exec()) QEventLoop *eventLoop; QPointer syncAction; - //search buffer + // search buffer QString searchBuffer; QBasicTimer searchBufferTimer; @@ -142,7 +144,6 @@ public: virtual QList > calcCausedStack() const; QMenuCaused causedPopup; void hideUpToMenuBar(); - void hideMenu(QMenu *menu, bool justRegister = false); //index mappings inline QAction *actionAt(int i) const { return q_func()->actions().at(i); }