Totally kill MR 916
... the hard way. Reviewed-by: Trust me (cherry picked from commit 443d5b17619002cd6bb428198c453271a01accab)
This commit is contained in:
parent
c889ddb59d
commit
ebbc98fcb6
@ -1,44 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#include <private/qabstractmenubarimpl_p.h>
|
||||
|
||||
QAbstractMenuBarImpl::~QAbstractMenuBarImpl()
|
||||
{}
|
@ -1,104 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#ifndef QABSTRACTMENUBARIMPL_P_H
|
||||
#define QABSTRACTMENUBARIMPL_P_H
|
||||
|
||||
#include <qglobal.h>
|
||||
|
||||
#ifndef QT_NO_MENUBAR
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QAction;
|
||||
class QActionEvent;
|
||||
class QEvent;
|
||||
class QMenuBar;
|
||||
class QObject;
|
||||
class QWidget;
|
||||
|
||||
/**
|
||||
* The platform-specific implementation of a menubar
|
||||
*/
|
||||
class Q_GUI_EXPORT QAbstractMenuBarImpl
|
||||
{
|
||||
public:
|
||||
virtual ~QAbstractMenuBarImpl();
|
||||
|
||||
// QMenuBarPrivate::init()
|
||||
virtual void init(QMenuBar *) = 0;
|
||||
|
||||
// QMenuBar::setVisible()
|
||||
virtual bool allowSetVisible() const = 0;
|
||||
|
||||
virtual void actionEvent(QActionEvent *) = 0;
|
||||
|
||||
// QMenuBar::handleReparent()
|
||||
virtual void handleReparent(QWidget *oldParent, QWidget *newParent, QWidget *oldWindow, QWidget *newWindow) = 0;
|
||||
|
||||
// QMenuBarPrivate::updateGeometries()
|
||||
// QMenuBar::minimumSizeHint()
|
||||
// QMenuBar::sizeHint()
|
||||
// QMenuBar::heightForWidth()
|
||||
virtual bool allowCornerWidgets() const = 0;
|
||||
|
||||
// QMenuBar::_q_internalShortcutActivated()
|
||||
virtual void popupAction(QAction*) = 0;
|
||||
|
||||
// QMenuBar::setNativeMenuBar()
|
||||
virtual void setNativeMenuBar(bool) = 0;
|
||||
|
||||
virtual bool isNativeMenuBar() const = 0;
|
||||
|
||||
/**
|
||||
* Return true if the native menubar is capable of listening to the
|
||||
* shortcut keys. If false is returned, QMenuBar will trigger actions on
|
||||
* shortcut itself.
|
||||
*/
|
||||
virtual bool shortcutsHandledByNativeMenuBar() const = 0;
|
||||
|
||||
virtual bool menuBarEventFilter(QObject *, QEvent *event) = 0;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QT_NO_MENUBAR
|
||||
|
||||
#endif // QABSTRACTMENUBARIMPL_P_H
|
@ -1639,7 +1639,7 @@ QMenuBarPrivate::QMacMenuBarPrivate::~QMacMenuBarPrivate()
|
||||
}
|
||||
|
||||
void
|
||||
QMenuBarPrivate::QMacMenuBarPrivate::addAction(QAction *a, QAction *before)
|
||||
QMenuBarPrivate::QMacMenuBarPrivate::addAction(QAction *a, QMacMenuAction *before)
|
||||
{
|
||||
if (a->isSeparator() || !menu)
|
||||
return;
|
||||
@ -1649,7 +1649,7 @@ QMenuBarPrivate::QMacMenuBarPrivate::addAction(QAction *a, QAction *before)
|
||||
#ifndef QT_MAC_USE_COCOA
|
||||
action->command = qt_mac_menu_static_cmd_id++;
|
||||
#endif
|
||||
addAction(action, findAction(before));
|
||||
addAction(action, before);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -154,9 +154,6 @@ public:
|
||||
#endif
|
||||
scroll(0), eventLoop(0), tearoff(0), tornoff(0), tearoffHighlighted(0),
|
||||
hasCheckableItems(0), sloppyAction(0), doChildEffects(false)
|
||||
#ifdef QT3_SUPPORT
|
||||
,emitHighlighted(false)
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
,mac_menu(0)
|
||||
#endif
|
||||
@ -165,6 +162,9 @@ public:
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
,symbian_menu(0)
|
||||
#endif
|
||||
#ifdef QT3_SUPPORT
|
||||
,emitHighlighted(false)
|
||||
#endif
|
||||
{ }
|
||||
~QMenuPrivate()
|
||||
|
@ -398,12 +398,12 @@ void QMenuPrivate::QSymbianMenuPrivate::rebuild(bool)
|
||||
{
|
||||
}
|
||||
|
||||
void QMenuBarPrivate::QSymbianMenuBarPrivate::addAction(QAction *a, QAction *before)
|
||||
void QMenuBarPrivate::QSymbianMenuBarPrivate::addAction(QAction *a, QSymbianMenuAction *before)
|
||||
{
|
||||
QSymbianMenuAction *action = new QSymbianMenuAction;
|
||||
action->action = a;
|
||||
action->command = qt_symbian_menu_static_cmd_id++;
|
||||
addAction(action, findAction(before));
|
||||
addAction(action, before);
|
||||
}
|
||||
|
||||
void QMenuBarPrivate::QSymbianMenuBarPrivate::addAction(QSymbianMenuAction *action, QSymbianMenuAction *before)
|
||||
|
@ -504,12 +504,12 @@ void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action)
|
||||
rebuild();
|
||||
}
|
||||
|
||||
void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QAction *before)
|
||||
void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before)
|
||||
{
|
||||
QWceMenuAction *action = new QWceMenuAction;
|
||||
action->action = a;
|
||||
action->command = qt_wce_menu_static_cmd_id++;
|
||||
addAction(action, findAction(before));
|
||||
addAction(action, before);
|
||||
}
|
||||
|
||||
void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before)
|
||||
|
@ -63,10 +63,9 @@
|
||||
#include <qmenudata.h>
|
||||
#endif
|
||||
|
||||
#include "qdebug.h"
|
||||
#include "qmenu_p.h"
|
||||
#include "qmenubar_p.h"
|
||||
#include "qmenubarimpl_p.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
#ifdef Q_WS_WINCE
|
||||
extern bool qt_wince_is_mobile(); //defined in qguifunctions_wce.cpp
|
||||
@ -121,8 +120,8 @@ QSize QMenuBarExtension::sizeHint() const
|
||||
*/
|
||||
QAction *QMenuBarPrivate::actionAt(QPoint p) const
|
||||
{
|
||||
for (int i = 0; i < actions.size(); ++i) {
|
||||
if (actionRect(actions.at(i)).contains(p))
|
||||
for(int i = 0; i < actions.size(); ++i) {
|
||||
if(actionRect(actions.at(i)).contains(p))
|
||||
return actions.at(i);
|
||||
}
|
||||
return 0;
|
||||
@ -170,12 +169,11 @@ bool QMenuBarPrivate::isVisible(QAction *action)
|
||||
void QMenuBarPrivate::updateGeometries()
|
||||
{
|
||||
Q_Q(QMenuBar);
|
||||
if (!itemsDirty)
|
||||
if(!itemsDirty)
|
||||
return;
|
||||
int q_width = q->width()-(q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q)*2);
|
||||
int q_start = -1;
|
||||
|
||||
if (impl->allowCornerWidgets() && (leftWidget || rightWidget)) {
|
||||
if(leftWidget || rightWidget) {
|
||||
int vmargin = q->style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, q)
|
||||
+ q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q);
|
||||
int hmargin = q->style()->pixelMetric(QStyle::PM_MenuBarHMargin, 0, q)
|
||||
@ -197,8 +195,16 @@ void QMenuBarPrivate::updateGeometries()
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
if(q->isNativeMenuBar()) {//nothing to see here folks, move along..
|
||||
itemsDirty = false;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
calcActionRects(q_width, q_start);
|
||||
currentAction = 0;
|
||||
#ifndef QT_NO_SHORTCUT
|
||||
if (!impl->shortcutsHandledByNativeMenuBar() && itemsDirty) {
|
||||
if(itemsDirty) {
|
||||
for(int j = 0; j < shortcutIndexMap.size(); ++j)
|
||||
q->releaseShortcut(shortcutIndexMap.value(j));
|
||||
shortcutIndexMap.resize(0); // faster than clear
|
||||
@ -206,12 +212,6 @@ void QMenuBarPrivate::updateGeometries()
|
||||
shortcutIndexMap.append(q->grabShortcut(QKeySequence::mnemonic(actions.at(i)->text())));
|
||||
}
|
||||
#endif
|
||||
if (q->isNativeMenuBar()) {//nothing to see here folks, move along..
|
||||
itemsDirty = false;
|
||||
return;
|
||||
}
|
||||
calcActionRects(q_width, q_start);
|
||||
currentAction = 0;
|
||||
itemsDirty = false;
|
||||
|
||||
hiddenActions.clear();
|
||||
@ -281,7 +281,7 @@ QRect QMenuBarPrivate::actionRect(QAction *act) const
|
||||
|
||||
void QMenuBarPrivate::focusFirstAction()
|
||||
{
|
||||
if (!currentAction) {
|
||||
if(!currentAction) {
|
||||
updateGeometries();
|
||||
int index = 0;
|
||||
while (index < actions.count() && actionRects.at(index).isNull()) ++index;
|
||||
@ -298,16 +298,16 @@ void QMenuBarPrivate::setKeyboardMode(bool b)
|
||||
return;
|
||||
}
|
||||
keyboardState = b;
|
||||
if (b) {
|
||||
if(b) {
|
||||
QWidget *fw = QApplication::focusWidget();
|
||||
if (fw != q)
|
||||
keyboardFocusWidget = fw;
|
||||
focusFirstAction();
|
||||
q->setFocus(Qt::MenuBarFocusReason);
|
||||
} else {
|
||||
if (!popupState)
|
||||
if(!popupState)
|
||||
setCurrentAction(0);
|
||||
if (keyboardFocusWidget) {
|
||||
if(keyboardFocusWidget) {
|
||||
if (QApplication::focusWidget() == q)
|
||||
keyboardFocusWidget->setFocus(Qt::MenuBarFocusReason);
|
||||
keyboardFocusWidget = 0;
|
||||
@ -319,7 +319,7 @@ void QMenuBarPrivate::setKeyboardMode(bool b)
|
||||
void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
|
||||
{
|
||||
Q_Q(QMenuBar);
|
||||
if (!action || !action->menu() || closePopupMode)
|
||||
if(!action || !action->menu() || closePopupMode)
|
||||
return;
|
||||
popupState = true;
|
||||
if (action->isEnabled() && action->menu()->isEnabled()) {
|
||||
@ -359,10 +359,10 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
|
||||
pos.rx() += actionWidth;
|
||||
}
|
||||
|
||||
if (!defaultPopDown || (fitUp && !fitDown))
|
||||
if(!defaultPopDown || (fitUp && !fitDown))
|
||||
pos.setY(qMax(screenRect.y(), q->mapToGlobal(QPoint(0, adjustedActionRect.top()-popup_size.height())).y()));
|
||||
activeMenu->popup(pos);
|
||||
if (activateFirst)
|
||||
if(activateFirst)
|
||||
activeMenu->d_func()->setFirstActionActive();
|
||||
}
|
||||
q->update(actionRect(action));
|
||||
@ -370,7 +370,7 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
|
||||
|
||||
void QMenuBarPrivate::setCurrentAction(QAction *action, bool popup, bool activateFirst)
|
||||
{
|
||||
if (currentAction == action && popup == popupState)
|
||||
if(currentAction == action && popup == popupState)
|
||||
return;
|
||||
|
||||
autoReleaseTimer.stop();
|
||||
@ -378,7 +378,7 @@ void QMenuBarPrivate::setCurrentAction(QAction *action, bool popup, bool activat
|
||||
doChildEffects = (popup && !activeMenu);
|
||||
Q_Q(QMenuBar);
|
||||
QWidget *fw = 0;
|
||||
if (QMenu *menu = activeMenu) {
|
||||
if(QMenu *menu = activeMenu) {
|
||||
activeMenu = 0;
|
||||
if (popup) {
|
||||
fw = q->window()->focusWidget();
|
||||
@ -387,7 +387,7 @@ void QMenuBarPrivate::setCurrentAction(QAction *action, bool popup, bool activat
|
||||
menu->hide();
|
||||
}
|
||||
|
||||
if (currentAction)
|
||||
if(currentAction)
|
||||
q->update(actionRect(currentAction));
|
||||
|
||||
popupState = popup;
|
||||
@ -397,7 +397,7 @@ void QMenuBarPrivate::setCurrentAction(QAction *action, bool popup, bool activat
|
||||
currentAction = action;
|
||||
if (action) {
|
||||
activateAction(action, QAction::Hover);
|
||||
if (popup)
|
||||
if(popup)
|
||||
popupAction(action, activateFirst);
|
||||
q->update(actionRect(action));
|
||||
#ifndef QT_NO_STATUSTIP
|
||||
@ -415,7 +415,7 @@ void QMenuBarPrivate::calcActionRects(int max_width, int start) const
|
||||
{
|
||||
Q_Q(const QMenuBar);
|
||||
|
||||
if (!itemsDirty)
|
||||
if(!itemsDirty)
|
||||
return;
|
||||
|
||||
//let's reinitialize the buffer
|
||||
@ -434,13 +434,13 @@ void QMenuBarPrivate::calcActionRects(int max_width, int start) const
|
||||
icone = style->pixelMetric(QStyle::PM_SmallIconSize, 0, q);
|
||||
for(int i = 0; i < actions.count(); i++) {
|
||||
QAction *action = actions.at(i);
|
||||
if (!action->isVisible())
|
||||
if(!action->isVisible())
|
||||
continue;
|
||||
|
||||
QSize sz;
|
||||
|
||||
//calc what I think the size is..
|
||||
i f(action->isSeparator()) {
|
||||
if(action->isSeparator()) {
|
||||
if (style->styleHint(QStyle::SH_DrawMenuBarSeparator, 0, q))
|
||||
separator = i;
|
||||
continue; //we don't really position these!
|
||||
@ -459,10 +459,10 @@ void QMenuBarPrivate::calcActionRects(int max_width, int start) const
|
||||
q->initStyleOption(&opt, action);
|
||||
sz = q->style()->sizeFromContents(QStyle::CT_MenuBarItem, &opt, sz, q);
|
||||
|
||||
if (!sz.isEmpty()) {
|
||||
if(!sz.isEmpty()) {
|
||||
{ //update the separator state
|
||||
int iWidth = sz.width() + itemSpacing;
|
||||
if (separator == -1)
|
||||
if(separator == -1)
|
||||
separator_start += iWidth;
|
||||
else
|
||||
separator_len += iWidth;
|
||||
@ -487,9 +487,9 @@ void QMenuBarPrivate::calcActionRects(int max_width, int start) const
|
||||
rect.setHeight(max_item_height);
|
||||
|
||||
//move
|
||||
if (separator != -1 && i >= separator) { //after the separator
|
||||
if(separator != -1 && i >= separator) { //after the separator
|
||||
int left = (max_width - separator_len - hmargin - itemSpacing) + (x - separator_start - hmargin);
|
||||
if (left < separator_start) { //wrap
|
||||
if(left < separator_start) { //wrap
|
||||
separator_start = x = hmargin;
|
||||
y += max_item_height;
|
||||
}
|
||||
@ -516,9 +516,9 @@ void QMenuBarPrivate::activateAction(QAction *action, QAction::ActionEvent actio
|
||||
if (action_e == QAction::Hover)
|
||||
action->showStatusText(q);
|
||||
|
||||
// if (action_e == QAction::Trigger)
|
||||
// if(action_e == QAction::Trigger)
|
||||
// emit q->activated(action);
|
||||
// else if (action_e == QAction::Hover)
|
||||
// else if(action_e == QAction::Hover)
|
||||
// emit q->highlighted(action);
|
||||
}
|
||||
|
||||
@ -728,9 +728,21 @@ void QMenuBarPrivate::init()
|
||||
Q_Q(QMenuBar);
|
||||
q->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
|
||||
q->setAttribute(Qt::WA_CustomWhatsThis);
|
||||
impl = new QMenuBarImpl;
|
||||
impl->init(q);
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
macCreateMenuBar(q->parentWidget());
|
||||
if(mac_menubar)
|
||||
q->hide();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
if (qt_wince_is_mobile()) {
|
||||
wceCreateMenuBar(q->parentWidget());
|
||||
if(wce_menubar)
|
||||
q->hide();
|
||||
}
|
||||
else {
|
||||
QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
|
||||
}
|
||||
#endif
|
||||
q->setBackgroundRole(QPalette::Button);
|
||||
oldWindow = oldParent = 0;
|
||||
#ifdef QT3_SUPPORT
|
||||
@ -739,9 +751,6 @@ void QMenuBarPrivate::init()
|
||||
#ifdef QT_SOFTKEYS_ENABLED
|
||||
menuBarAction = 0;
|
||||
#endif
|
||||
cornerWidgetToolBar = 0;
|
||||
cornerWidgetContainer = 0;
|
||||
|
||||
handleReparent();
|
||||
q->setMouseTracking(q->style()->styleHint(QStyle::SH_MenuBar_MouseTracking, 0, q));
|
||||
|
||||
@ -799,8 +808,19 @@ QMenuBar::QMenuBar(QWidget *parent, const char *name) : QWidget(*new QMenuBarPri
|
||||
*/
|
||||
QMenuBar::~QMenuBar()
|
||||
{
|
||||
#ifdef Q_WS_MAC
|
||||
Q_D(QMenuBar);
|
||||
delete d->cornerWidgetToolBar;
|
||||
d->macDestroyMenuBar();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
Q_D(QMenuBar);
|
||||
if (qt_wince_is_mobile())
|
||||
d->wceDestroyMenuBar();
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
Q_D(QMenuBar);
|
||||
d->symbianDestroyMenuBar();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -1009,7 +1029,7 @@ void QMenuBar::paintEvent(QPaintEvent *e)
|
||||
QRect adjustedActionRect = d->actionRect(action);
|
||||
if (adjustedActionRect.isEmpty() || !d->isVisible(action))
|
||||
continue;
|
||||
if (!e->rect().intersects(adjustedActionRect))
|
||||
if(!e->rect().intersects(adjustedActionRect))
|
||||
continue;
|
||||
|
||||
emptyArea -= adjustedActionRect;
|
||||
@ -1020,7 +1040,7 @@ void QMenuBar::paintEvent(QPaintEvent *e)
|
||||
style()->drawControl(QStyle::CE_MenuBarItem, &opt, &p, this);
|
||||
}
|
||||
//draw border
|
||||
if (int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this)) {
|
||||
if(int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this)) {
|
||||
QRegion borderReg;
|
||||
borderReg += QRect(0, 0, fw, height()); //left
|
||||
borderReg += QRect(width()-fw, 0, fw, height()); //right
|
||||
@ -1052,10 +1072,13 @@ void QMenuBar::paintEvent(QPaintEvent *e)
|
||||
*/
|
||||
void QMenuBar::setVisible(bool visible)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (!d->impl->allowSetVisible()) {
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
if (isNativeMenuBar()) {
|
||||
if (!visible)
|
||||
QWidget::setVisible(false);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
QWidget::setVisible(visible);
|
||||
}
|
||||
|
||||
@ -1065,7 +1088,7 @@ void QMenuBar::setVisible(bool visible)
|
||||
void QMenuBar::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (e->button() != Qt::LeftButton)
|
||||
if(e->button() != Qt::LeftButton)
|
||||
return;
|
||||
|
||||
d->mouseDown = true;
|
||||
@ -1080,13 +1103,13 @@ void QMenuBar::mousePressEvent(QMouseEvent *e)
|
||||
return;
|
||||
}
|
||||
|
||||
if (d->currentAction == action && d->popupState) {
|
||||
if (QMenu *menu = d->activeMenu) {
|
||||
if(d->currentAction == action && d->popupState) {
|
||||
if(QMenu *menu = d->activeMenu) {
|
||||
d->activeMenu = 0;
|
||||
menu->hide();
|
||||
}
|
||||
#ifdef Q_WS_WIN
|
||||
if ((d->closePopupMode = style()->styleHint(QStyle::SH_MenuBar_DismissOnSecondClick)))
|
||||
if((d->closePopupMode = style()->styleHint(QStyle::SH_MenuBar_DismissOnSecondClick)))
|
||||
update(d->actionRect(action));
|
||||
#endif
|
||||
} else {
|
||||
@ -1100,16 +1123,16 @@ void QMenuBar::mousePressEvent(QMouseEvent *e)
|
||||
void QMenuBar::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (e->button() != Qt::LeftButton || !d->mouseDown)
|
||||
if(e->button() != Qt::LeftButton || !d->mouseDown)
|
||||
return;
|
||||
|
||||
d->mouseDown = false;
|
||||
QAction *action = d->actionAt(e->pos());
|
||||
if ((d->closePopupMode && action == d->currentAction) || !action || !action->menu()) {
|
||||
if((d->closePopupMode && action == d->currentAction) || !action || !action->menu()) {
|
||||
//we set the current action before activating
|
||||
//so that we let the leave event set the current back to 0
|
||||
d->setCurrentAction(action, false);
|
||||
if (action)
|
||||
if(action)
|
||||
d->activateAction(action, QAction::Trigger);
|
||||
}
|
||||
d->closePopupMode = 0;
|
||||
@ -1123,15 +1146,15 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
Q_D(QMenuBar);
|
||||
d->updateGeometries();
|
||||
int key = e->key();
|
||||
if (isRightToLeft()) { // in reverse mode open/close key for submenues are reversed
|
||||
if (key == Qt::Key_Left)
|
||||
if(isRightToLeft()) { // in reverse mode open/close key for submenues are reversed
|
||||
if(key == Qt::Key_Left)
|
||||
key = Qt::Key_Right;
|
||||
else if (key == Qt::Key_Right)
|
||||
else if(key == Qt::Key_Right)
|
||||
key = Qt::Key_Left;
|
||||
}
|
||||
if (key == Qt::Key_Tab) //means right
|
||||
if(key == Qt::Key_Tab) //means right
|
||||
key = Qt::Key_Right;
|
||||
else if (key == Qt::Key_Backtab) //means left
|
||||
else if(key == Qt::Key_Backtab) //means left
|
||||
key = Qt::Key_Left;
|
||||
|
||||
bool key_consumed = false;
|
||||
@ -1141,11 +1164,11 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Space:
|
||||
case Qt::Key_Return: {
|
||||
if (!style()->styleHint(QStyle::SH_MenuBar_AltKeyNavigation, 0, this) || !d->currentAction)
|
||||
if(!style()->styleHint(QStyle::SH_MenuBar_AltKeyNavigation, 0, this) || !d->currentAction)
|
||||
break;
|
||||
if (d->currentAction->menu()) {
|
||||
if(d->currentAction->menu()) {
|
||||
d->popupAction(d->currentAction, true);
|
||||
} else if (key == Qt::Key_Enter || key == Qt::Key_Return || key == Qt::Key_Space) {
|
||||
} else if(key == Qt::Key_Enter || key == Qt::Key_Return || key == Qt::Key_Space) {
|
||||
d->activateAction(d->currentAction, QAction::Trigger);
|
||||
d->setCurrentAction(d->currentAction, false);
|
||||
d->setKeyboardMode(false);
|
||||
@ -1155,7 +1178,7 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
|
||||
case Qt::Key_Right:
|
||||
case Qt::Key_Left: {
|
||||
if (d->currentAction) {
|
||||
if(d->currentAction) {
|
||||
int index = d->actions.indexOf(d->currentAction);
|
||||
if (QAction *nextAction = d->getNextAction(index, key == Qt::Key_Left ? -1 : +1)) {
|
||||
d->setCurrentAction(nextAction, d->popupState, true);
|
||||
@ -1174,7 +1197,7 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
key_consumed = false;
|
||||
}
|
||||
|
||||
if (!key_consumed &&
|
||||
if(!key_consumed &&
|
||||
(!e->modifiers() ||
|
||||
(e->modifiers()&(Qt::MetaModifier|Qt::AltModifier))) && e->text().length()==1 && !d->popupState) {
|
||||
int clashCount = 0;
|
||||
@ -1186,14 +1209,14 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
continue;
|
||||
QAction *act = d->actions.at(i);
|
||||
QString s = act->text();
|
||||
if (!s.isEmpty()) {
|
||||
if(!s.isEmpty()) {
|
||||
int ampersand = s.indexOf(QLatin1Char('&'));
|
||||
if (ampersand >= 0) {
|
||||
if (s[ampersand+1].toUpper() == c) {
|
||||
if(ampersand >= 0) {
|
||||
if(s[ampersand+1].toUpper() == c) {
|
||||
clashCount++;
|
||||
if (!first)
|
||||
if(!first)
|
||||
first = act;
|
||||
if (act == d->currentAction)
|
||||
if(act == d->currentAction)
|
||||
currentSelected = act;
|
||||
else if (!firstAfterCurrent && currentSelected)
|
||||
firstAfterCurrent = act;
|
||||
@ -1203,18 +1226,18 @@ void QMenuBar::keyPressEvent(QKeyEvent *e)
|
||||
}
|
||||
}
|
||||
QAction *next_action = 0;
|
||||
if (clashCount >= 1) {
|
||||
if (clashCount == 1 || !d->currentAction || (currentSelected && !firstAfterCurrent))
|
||||
if(clashCount >= 1) {
|
||||
if(clashCount == 1 || !d->currentAction || (currentSelected && !firstAfterCurrent))
|
||||
next_action = first;
|
||||
else
|
||||
next_action = firstAfterCurrent;
|
||||
}
|
||||
if (next_action) {
|
||||
if(next_action) {
|
||||
key_consumed = true;
|
||||
d->setCurrentAction(next_action, true, true);
|
||||
}
|
||||
}
|
||||
if (key_consumed)
|
||||
if(key_consumed)
|
||||
e->accept();
|
||||
else
|
||||
e->ignore();
|
||||
@ -1240,7 +1263,7 @@ void QMenuBar::mouseMoveEvent(QMouseEvent *e)
|
||||
void QMenuBar::leaveEvent(QEvent *)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if ((!hasFocus() && !d->popupState) ||
|
||||
if((!hasFocus() && !d->popupState) ||
|
||||
(d->currentAction && d->currentAction->menu() == 0))
|
||||
d->setCurrentAction(0);
|
||||
}
|
||||
@ -1252,12 +1275,30 @@ void QMenuBar::actionEvent(QActionEvent *e)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
d->itemsDirty = true;
|
||||
d->impl->actionEvent(e);
|
||||
#if defined (Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
if (isNativeMenuBar()) {
|
||||
#ifdef Q_WS_MAC
|
||||
QMenuBarPrivate::QMacMenuBarPrivate *nativeMenuBar = d->mac_menubar;
|
||||
#elif defined(Q_WS_S60)
|
||||
QMenuBarPrivate::QSymbianMenuBarPrivate *nativeMenuBar = d->symbian_menubar;
|
||||
#else
|
||||
QMenuBarPrivate::QWceMenuBarPrivate *nativeMenuBar = d->wce_menubar;
|
||||
#endif
|
||||
if (!nativeMenuBar)
|
||||
return;
|
||||
if(e->type() == QEvent::ActionAdded)
|
||||
nativeMenuBar->addAction(e->action(), nativeMenuBar->findAction(e->before()));
|
||||
else if(e->type() == QEvent::ActionRemoved)
|
||||
nativeMenuBar->removeAction(e->action());
|
||||
else if(e->type() == QEvent::ActionChanged)
|
||||
nativeMenuBar->syncAction(e->action());
|
||||
}
|
||||
#endif
|
||||
|
||||
if (e->type() == QEvent::ActionAdded) {
|
||||
if(e->type() == QEvent::ActionAdded) {
|
||||
connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()));
|
||||
connect(e->action(), SIGNAL(hovered()), this, SLOT(_q_actionHovered()));
|
||||
} else if (e->type() == QEvent::ActionRemoved) {
|
||||
} else if(e->type() == QEvent::ActionRemoved) {
|
||||
e->action()->disconnect(this);
|
||||
}
|
||||
if (isVisible()) {
|
||||
@ -1272,7 +1313,7 @@ void QMenuBar::actionEvent(QActionEvent *e)
|
||||
void QMenuBar::focusInEvent(QFocusEvent *)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (d->keyboardState)
|
||||
if(d->keyboardState)
|
||||
d->focusFirstAction();
|
||||
}
|
||||
|
||||
@ -1282,7 +1323,7 @@ void QMenuBar::focusInEvent(QFocusEvent *)
|
||||
void QMenuBar::focusOutEvent(QFocusEvent *)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (!d->popupState) {
|
||||
if(!d->popupState) {
|
||||
d->setCurrentAction(0);
|
||||
d->setKeyboardMode(false);
|
||||
}
|
||||
@ -1328,10 +1369,55 @@ void QMenuBarPrivate::handleReparent()
|
||||
newWindow->installEventFilter(q);
|
||||
}
|
||||
|
||||
impl->handleReparent(oldParent, newParent, oldWindow, newWindow);
|
||||
|
||||
oldParent = newParent;
|
||||
oldWindow = newWindow;
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
if (q->isNativeMenuBar() && !macWidgetHasNativeMenubar(newParent)) {
|
||||
// If the new parent got a native menubar from before, keep that
|
||||
// menubar rather than replace it with this one (because a parents
|
||||
// menubar has precedence over children menubars).
|
||||
macDestroyMenuBar();
|
||||
macCreateMenuBar(newParent);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_WINCE
|
||||
if (qt_wince_is_mobile() && wce_menubar)
|
||||
wce_menubar->rebuild();
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
|
||||
// Construct symbian_menubar when this code path is entered first time
|
||||
// and when newParent != NULL
|
||||
if (!symbian_menubar)
|
||||
symbianCreateMenuBar(newParent);
|
||||
|
||||
// Reparent and rebuild menubar when parent is changed
|
||||
if (symbian_menubar) {
|
||||
if (oldParent != newParent)
|
||||
reparentMenuBar(oldParent, newParent);
|
||||
q->hide();
|
||||
symbian_menubar->rebuild();
|
||||
}
|
||||
|
||||
#ifdef QT_SOFTKEYS_ENABLED
|
||||
// Constuct menuBarAction when this code path is entered first time
|
||||
if (!menuBarAction) {
|
||||
if (newParent) {
|
||||
menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, newParent);
|
||||
newParent->addAction(menuBarAction);
|
||||
}
|
||||
} else {
|
||||
// If reparenting i.e. we already have menuBarAction, remove it from old parent
|
||||
// and add for a new parent
|
||||
if (oldParent)
|
||||
oldParent->removeAction(menuBarAction);
|
||||
if (newParent)
|
||||
newParent->addAction(menuBarAction);
|
||||
}
|
||||
#endif // QT_SOFTKEYS_ENABLED
|
||||
#endif // Q_WS_S60
|
||||
}
|
||||
|
||||
#ifdef QT3_SUPPORT
|
||||
@ -1372,10 +1458,10 @@ bool QMenuBar::autoGeometry() const
|
||||
void QMenuBar::changeEvent(QEvent *e)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (e->type() == QEvent::StyleChange) {
|
||||
if(e->type() == QEvent::StyleChange) {
|
||||
d->itemsDirty = true;
|
||||
setMouseTracking(style()->styleHint(QStyle::SH_MenuBar_MouseTracking, 0, this));
|
||||
if (parentWidget())
|
||||
if(parentWidget())
|
||||
resize(parentWidget()->width(), heightForWidth(parentWidget()->width()));
|
||||
d->updateGeometries();
|
||||
} else if (e->type() == QEvent::ParentChange) {
|
||||
@ -1404,12 +1490,12 @@ bool QMenuBar::event(QEvent *e)
|
||||
case QEvent::KeyPress: {
|
||||
QKeyEvent *ke = (QKeyEvent*)e;
|
||||
#if 0
|
||||
if (!d->keyboardState) { //all keypresses..
|
||||
if(!d->keyboardState) { //all keypresses..
|
||||
d->setCurrentAction(0);
|
||||
return ;
|
||||
}
|
||||
#endif
|
||||
if (ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Backtab) {
|
||||
if(ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Backtab) {
|
||||
keyPressEvent(ke);
|
||||
return true;
|
||||
}
|
||||
@ -1427,7 +1513,7 @@ bool QMenuBar::event(QEvent *e)
|
||||
#endif
|
||||
case QEvent::Show:
|
||||
#ifdef QT3_SUPPORT
|
||||
if (QWidget *p = parentWidget()) {
|
||||
if(QWidget *p = parentWidget()) {
|
||||
// If itemsDirty == true, updateGeometries sends the MenubarUpdated event.
|
||||
if (!d->itemsDirty) {
|
||||
QMenubarUpdatedEvent menubarUpdated(this);
|
||||
@ -1449,7 +1535,7 @@ bool QMenuBar::event(QEvent *e)
|
||||
|
||||
#ifdef QT3_SUPPORT
|
||||
case QEvent::Hide: {
|
||||
if (QWidget *p = parentWidget()) {
|
||||
if(QWidget *p = parentWidget()) {
|
||||
QMenubarUpdatedEvent menubarUpdated(this);
|
||||
QApplication::sendEvent(p, &menubarUpdated);
|
||||
}
|
||||
@ -1480,9 +1566,6 @@ bool QMenuBar::event(QEvent *e)
|
||||
bool QMenuBar::eventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
if (d->impl->menuBarEventFilter(object, event)) {
|
||||
return true;
|
||||
}
|
||||
if (object == parent() && object) {
|
||||
#ifdef QT3_SUPPORT
|
||||
if (d->doAutoResize && event->type() == QEvent::Resize) {
|
||||
@ -1576,7 +1659,11 @@ QRect QMenuBar::actionGeometry(QAction *act) const
|
||||
QSize QMenuBar::minimumSizeHint() const
|
||||
{
|
||||
Q_D(const QMenuBar);
|
||||
#if defined(Q_WS_MAC) || defined(Q_WS_WINCE) || defined(Q_WS_S60)
|
||||
const bool as_gui_menubar = !isNativeMenuBar();
|
||||
#else
|
||||
const bool as_gui_menubar = true;
|
||||
#endif
|
||||
|
||||
ensurePolished();
|
||||
QSize ret(0, 0);
|
||||
@ -1585,7 +1672,7 @@ QSize QMenuBar::minimumSizeHint() const
|
||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||
if (as_gui_menubar) {
|
||||
if(as_gui_menubar) {
|
||||
int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
||||
d->calcActionRects(w - (2 * fw), 0);
|
||||
for (int i = 0; ret.isNull() && i < d->actions.count(); ++i)
|
||||
@ -1595,21 +1682,19 @@ QSize QMenuBar::minimumSizeHint() const
|
||||
ret += QSize(2*fw + hmargin, 2*fw + vmargin);
|
||||
}
|
||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||
if (d->impl->allowCornerWidgets()) {
|
||||
if (d->leftWidget) {
|
||||
QSize sz = d->leftWidget->minimumSizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if (sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if (d->rightWidget) {
|
||||
QSize sz = d->rightWidget->minimumSizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if (sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if(d->leftWidget) {
|
||||
QSize sz = d->leftWidget->minimumSizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if(sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if (as_gui_menubar) {
|
||||
if(d->rightWidget) {
|
||||
QSize sz = d->rightWidget->minimumSizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if(sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if(as_gui_menubar) {
|
||||
QStyleOptionMenuItem opt;
|
||||
opt.rect = rect();
|
||||
opt.menuRect = rect();
|
||||
@ -1630,7 +1715,12 @@ QSize QMenuBar::minimumSizeHint() const
|
||||
QSize QMenuBar::sizeHint() const
|
||||
{
|
||||
Q_D(const QMenuBar);
|
||||
#if defined(Q_WS_MAC) || defined(Q_WS_WINCE) || defined(Q_WS_S60)
|
||||
const bool as_gui_menubar = !isNativeMenuBar();
|
||||
#else
|
||||
const bool as_gui_menubar = true;
|
||||
#endif
|
||||
|
||||
|
||||
ensurePolished();
|
||||
QSize ret(0, 0);
|
||||
@ -1639,7 +1729,7 @@ QSize QMenuBar::sizeHint() const
|
||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||
if (as_gui_menubar) {
|
||||
if(as_gui_menubar) {
|
||||
const int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
||||
d->calcActionRects(w - (2 * fw), 0);
|
||||
for (int i = 0; i < d->actionRects.count(); ++i) {
|
||||
@ -1651,21 +1741,19 @@ QSize QMenuBar::sizeHint() const
|
||||
ret += QSize(fw + hmargin, fw + vmargin);
|
||||
}
|
||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||
if (d->impl->allowCornerWidgets()) {
|
||||
if (d->leftWidget) {
|
||||
QSize sz = d->leftWidget->sizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if (sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if (d->rightWidget) {
|
||||
QSize sz = d->rightWidget->sizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if (sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if(d->leftWidget) {
|
||||
QSize sz = d->leftWidget->sizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if(sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if (as_gui_menubar) {
|
||||
if(d->rightWidget) {
|
||||
QSize sz = d->rightWidget->sizeHint();
|
||||
ret.setWidth(ret.width() + sz.width());
|
||||
if(sz.height() + margin > ret.height())
|
||||
ret.setHeight(sz.height() + margin);
|
||||
}
|
||||
if(as_gui_menubar) {
|
||||
QStyleOptionMenuItem opt;
|
||||
opt.rect = rect();
|
||||
opt.menuRect = rect();
|
||||
@ -1686,14 +1774,18 @@ QSize QMenuBar::sizeHint() const
|
||||
int QMenuBar::heightForWidth(int) const
|
||||
{
|
||||
Q_D(const QMenuBar);
|
||||
#if defined(Q_WS_MAC) || defined(Q_WS_WINCE) || defined(Q_WS_S60)
|
||||
const bool as_gui_menubar = !isNativeMenuBar();
|
||||
#else
|
||||
const bool as_gui_menubar = true;
|
||||
#endif
|
||||
|
||||
const_cast<QMenuBarPrivate*>(d)->updateGeometries();
|
||||
int height = 0;
|
||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||
if (as_gui_menubar) {
|
||||
if(as_gui_menubar) {
|
||||
for (int i = 0; i < d->actionRects.count(); ++i)
|
||||
height = qMax(height, d->actionRects.at(i).height());
|
||||
if (height) //there is at least one non-null item
|
||||
@ -1702,13 +1794,11 @@ int QMenuBar::heightForWidth(int) const
|
||||
height += 2*vmargin;
|
||||
}
|
||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||
if (d->impl->allowCornerWidgets()) {
|
||||
if (d->leftWidget)
|
||||
height = qMax(d->leftWidget->sizeHint().height() + margin, height);
|
||||
if (d->rightWidget)
|
||||
height = qMax(d->rightWidget->sizeHint().height() + margin, height);
|
||||
}
|
||||
if (as_gui_menubar) {
|
||||
if(d->leftWidget)
|
||||
height = qMax(d->leftWidget->sizeHint().height() + margin, height);
|
||||
if(d->rightWidget)
|
||||
height = qMax(d->rightWidget->sizeHint().height() + margin, height);
|
||||
if(as_gui_menubar) {
|
||||
QStyleOptionMenuItem opt;
|
||||
opt.init(this);
|
||||
opt.menuRect = rect();
|
||||
@ -1727,11 +1817,7 @@ void QMenuBarPrivate::_q_internalShortcutActivated(int id)
|
||||
{
|
||||
Q_Q(QMenuBar);
|
||||
QAction *act = actions.at(id);
|
||||
if (q->isNativeMenuBar()) {
|
||||
impl->popupAction(act);
|
||||
} else {
|
||||
setCurrentAction(act, true, true);
|
||||
}
|
||||
setCurrentAction(act, true, true);
|
||||
if (act && !act->menu()) {
|
||||
activateAction(act, QAction::Trigger);
|
||||
//100 is the same as the default value in QPushButton::animateClick
|
||||
@ -1752,37 +1838,6 @@ void QMenuBarPrivate::_q_updateLayout()
|
||||
}
|
||||
}
|
||||
|
||||
void QMenuBarPrivate::updateCornerWidgetToolBar()
|
||||
{
|
||||
Q_Q(QMenuBar);
|
||||
if (!cornerWidgetToolBar) {
|
||||
QMainWindow *window = qobject_cast<QMainWindow *>(q->window());
|
||||
if (!window) {
|
||||
qWarning() << "Menubar parent is not a QMainWindow, not showing corner widgets";
|
||||
return;
|
||||
}
|
||||
cornerWidgetToolBar = window->addToolBar(QApplication::translate("QMenuBar", "Corner Toolbar"));
|
||||
cornerWidgetToolBar->setObjectName(QLatin1String("CornerToolBar"));
|
||||
cornerWidgetContainer = new QWidget;
|
||||
cornerWidgetToolBar->addWidget(cornerWidgetContainer);
|
||||
new QHBoxLayout(cornerWidgetContainer);
|
||||
} else {
|
||||
QLayout *layout = cornerWidgetContainer->layout();
|
||||
while (layout->count() > 0) {
|
||||
layout->takeAt(0);
|
||||
}
|
||||
}
|
||||
if (leftWidget) {
|
||||
leftWidget->setParent(cornerWidgetContainer);
|
||||
cornerWidgetContainer->layout()->addWidget(leftWidget);
|
||||
}
|
||||
if (rightWidget) {
|
||||
rightWidget->setParent(cornerWidgetContainer);
|
||||
cornerWidgetContainer->layout()->addWidget(rightWidget);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\fn void QMenuBar::setCornerWidget(QWidget *widget, Qt::Corner corner)
|
||||
|
||||
@ -1815,9 +1870,7 @@ void QMenuBar::setCornerWidget(QWidget *w, Qt::Corner corner)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!d->impl->allowCornerWidgets()) {
|
||||
d->updateCornerWidgetToolBar();
|
||||
} else if (w) {
|
||||
if (w) {
|
||||
w->setParent(this);
|
||||
w->installEventFilter(this);
|
||||
}
|
||||
@ -1870,13 +1923,39 @@ QWidget *QMenuBar::cornerWidget(Qt::Corner corner) const
|
||||
void QMenuBar::setNativeMenuBar(bool nativeMenuBar)
|
||||
{
|
||||
Q_D(QMenuBar);
|
||||
d->impl->setNativeMenuBar(nativeMenuBar);
|
||||
if (d->nativeMenuBar == -1 || (nativeMenuBar != bool(d->nativeMenuBar))) {
|
||||
d->nativeMenuBar = nativeMenuBar;
|
||||
#ifdef Q_WS_MAC
|
||||
if (!d->nativeMenuBar) {
|
||||
extern void qt_mac_clear_menubar();
|
||||
qt_mac_clear_menubar();
|
||||
d->macDestroyMenuBar();
|
||||
const QList<QAction *> &menubarActions = actions();
|
||||
for (int i = 0; i < menubarActions.size(); ++i) {
|
||||
const QAction *action = menubarActions.at(i);
|
||||
if (QMenu *menu = action->menu()) {
|
||||
delete menu->d_func()->mac_menu;
|
||||
menu->d_func()->mac_menu = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
d->macCreateMenuBar(parentWidget());
|
||||
}
|
||||
macUpdateMenuBar();
|
||||
updateGeometry();
|
||||
if (!d->nativeMenuBar && parentWidget())
|
||||
setVisible(true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
bool QMenuBar::isNativeMenuBar() const
|
||||
{
|
||||
Q_D(const QMenuBar);
|
||||
return d->impl->isNativeMenuBar();
|
||||
if (d->nativeMenuBar == -1) {
|
||||
return !QApplication::instance()->testAttribute(Qt::AA_DontUseNativeMenuBar);
|
||||
}
|
||||
return d->nativeMenuBar;
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -1913,8 +1992,8 @@ void QMenuBar::setDefaultAction(QAction *act)
|
||||
connect(d->defaultAction, SIGNAL(changed()), this, SLOT(_q_updateDefaultAction()));
|
||||
connect(d->defaultAction, SIGNAL(destroyed()), this, SLOT(_q_updateDefaultAction()));
|
||||
}
|
||||
if (d->impl->nativeMenuBarAdapter()) {
|
||||
d->impl->nativeMenuBarAdapter()->rebuild();
|
||||
if (d->wce_menubar) {
|
||||
d->wce_menubar->rebuild();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -1973,17 +2052,17 @@ int QMenuBar::insertAny(const QIcon *icon, const QString *text, const QObject *r
|
||||
const QKeySequence *shortcut, const QMenu *popup, int id, int index)
|
||||
{
|
||||
QAction *act = popup ? popup->menuAction() : new QAction(this);
|
||||
if (id != -1)
|
||||
if(id != -1)
|
||||
static_cast<QMenuItem*>(act)->setId(id);
|
||||
if (icon)
|
||||
if(icon)
|
||||
act->setIcon(*icon);
|
||||
if (text)
|
||||
if(text)
|
||||
act->setText(*text);
|
||||
if (shortcut)
|
||||
if(shortcut)
|
||||
act->setShortcut(*shortcut);
|
||||
if (receiver && member)
|
||||
if(receiver && member)
|
||||
QObject::connect(act, SIGNAL(triggered(bool)), receiver, member);
|
||||
if (index == -1 || index >= actions().count())
|
||||
if(index == -1 || index >= actions().count())
|
||||
addAction(act);
|
||||
else
|
||||
insertAction(actions().value(index), act);
|
||||
@ -2005,7 +2084,7 @@ int QMenuBar::insertSeparator(int index)
|
||||
{
|
||||
QAction *act = new QAction(this);
|
||||
act->setSeparator(true);
|
||||
if (index == -1 || index >= actions().count())
|
||||
if(index == -1 || index >= actions().count())
|
||||
addAction(act);
|
||||
else
|
||||
insertAction(actions().value(index), act);
|
||||
@ -2017,7 +2096,7 @@ int QMenuBar::insertSeparator(int index)
|
||||
*/
|
||||
bool QMenuBar::setItemParameter(int id, int param)
|
||||
{
|
||||
if (QAction *act = findActionForId(id)) {
|
||||
if(QAction *act = findActionForId(id)) {
|
||||
act->d_func()->param = param;
|
||||
return true;
|
||||
}
|
||||
@ -2029,7 +2108,7 @@ bool QMenuBar::setItemParameter(int id, int param)
|
||||
*/
|
||||
int QMenuBar::itemParameter(int id) const
|
||||
{
|
||||
if (QAction *act = findActionForId(id))
|
||||
if(QAction *act = findActionForId(id))
|
||||
return act->d_func()->param;
|
||||
return id;
|
||||
}
|
||||
|
@ -61,8 +61,6 @@
|
||||
#include "qguifunctions_wince.h"
|
||||
#endif
|
||||
|
||||
#include "qabstractmenubarimpl_p.h"
|
||||
|
||||
#ifndef QT_NO_MENUBAR
|
||||
#ifdef Q_WS_S60
|
||||
class CCoeControl;
|
||||
@ -73,7 +71,6 @@ class CEikMenuBar;
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#ifndef QT_NO_MENUBAR
|
||||
class QToolBar;
|
||||
class QMenuBarExtension;
|
||||
class QMenuBarPrivate : public QWidgetPrivate
|
||||
{
|
||||
@ -81,19 +78,33 @@ class QMenuBarPrivate : public QWidgetPrivate
|
||||
public:
|
||||
QMenuBarPrivate() : itemsDirty(0), currentAction(0), mouseDown(0),
|
||||
closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0),
|
||||
doChildEffects(false)
|
||||
nativeMenuBar(-1), doChildEffects(false)
|
||||
#ifdef QT3_SUPPORT
|
||||
, doAutoResize(false)
|
||||
#endif
|
||||
, impl(0)
|
||||
#ifdef Q_WS_MAC
|
||||
, mac_menubar(0)
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_WINCE
|
||||
, wceClassicMenu(false)
|
||||
, wce_menubar(0), wceClassicMenu(false)
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
, symbian_menubar(0)
|
||||
#endif
|
||||
|
||||
{ }
|
||||
~QMenuBarPrivate()
|
||||
{
|
||||
delete impl;
|
||||
#ifdef Q_WS_MAC
|
||||
delete mac_menubar;
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
delete wce_menubar;
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
delete symbian_menubar;
|
||||
#endif
|
||||
}
|
||||
|
||||
void init();
|
||||
@ -125,6 +136,8 @@ public:
|
||||
uint keyboardState : 1, altPressed : 1;
|
||||
QPointer<QWidget> keyboardFocusWidget;
|
||||
|
||||
|
||||
int nativeMenuBar : 3; // Only has values -1, 0, and 1
|
||||
//firing of events
|
||||
void activateAction(QAction *, QAction::ActionEvent);
|
||||
|
||||
@ -160,14 +173,106 @@ public:
|
||||
#ifdef QT3_SUPPORT
|
||||
bool doAutoResize;
|
||||
#endif
|
||||
QAbstractMenuBarImpl *impl;
|
||||
#ifdef Q_WS_MAC
|
||||
//mac menubar binding
|
||||
struct QMacMenuBarPrivate {
|
||||
QList<QMacMenuAction*> actionItems;
|
||||
OSMenuRef menu, apple_menu;
|
||||
QMacMenuBarPrivate();
|
||||
~QMacMenuBarPrivate();
|
||||
|
||||
void addAction(QAction *, QMacMenuAction* =0);
|
||||
void addAction(QMacMenuAction *, QMacMenuAction* =0);
|
||||
void syncAction(QMacMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QMacMenuAction *);
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QMacMenuAction *findAction(QAction *a) {
|
||||
for(int i = 0; i < actionItems.size(); i++) {
|
||||
QMacMenuAction *act = actionItems[i];
|
||||
if(a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} *mac_menubar;
|
||||
static bool macUpdateMenuBarImmediatly();
|
||||
bool macWidgetHasNativeMenubar(QWidget *widget);
|
||||
void macCreateMenuBar(QWidget *);
|
||||
void macDestroyMenuBar();
|
||||
OSMenuRef macMenu();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
void wceCreateMenuBar(QWidget *);
|
||||
void wceDestroyMenuBar();
|
||||
struct QWceMenuBarPrivate {
|
||||
QList<QWceMenuAction*> actionItems;
|
||||
QList<QWceMenuAction*> actionItemsLeftButton;
|
||||
QList<QList<QWceMenuAction*>> actionItemsClassic;
|
||||
HMENU menuHandle;
|
||||
HMENU leftButtonMenuHandle;
|
||||
HWND menubarHandle;
|
||||
HWND parentWindowHandle;
|
||||
bool leftButtonIsMenu;
|
||||
QPointer<QAction> leftButtonAction;
|
||||
QMenuBarPrivate *d;
|
||||
int leftButtonCommand;
|
||||
|
||||
QWceMenuBarPrivate(QMenuBarPrivate *menubar);
|
||||
~QWceMenuBarPrivate();
|
||||
void addAction(QAction *, QWceMenuAction* =0);
|
||||
void addAction(QWceMenuAction *, QWceMenuAction* =0);
|
||||
void syncAction(QWceMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QWceMenuAction *);
|
||||
void rebuild();
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QWceMenuAction *findAction(QAction *a) {
|
||||
for(int i = 0; i < actionItems.size(); i++) {
|
||||
QWceMenuAction *act = actionItems[i];
|
||||
if(a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} *wce_menubar;
|
||||
bool wceClassicMenu;
|
||||
void wceCommands(uint command);
|
||||
void wceRefresh();
|
||||
bool wceEmitSignals(QList<QWceMenuAction*> actions, uint command);
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
void symbianCreateMenuBar(QWidget *);
|
||||
void symbianDestroyMenuBar();
|
||||
void reparentMenuBar(QWidget *oldParent, QWidget *newParent);
|
||||
struct QSymbianMenuBarPrivate {
|
||||
QList<QSymbianMenuAction*> actionItems;
|
||||
QMenuBarPrivate *d;
|
||||
QSymbianMenuBarPrivate(QMenuBarPrivate *menubar);
|
||||
~QSymbianMenuBarPrivate();
|
||||
void addAction(QAction *, QSymbianMenuAction* =0);
|
||||
void addAction(QSymbianMenuAction *, QSymbianMenuAction* =0);
|
||||
void syncAction(QSymbianMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QSymbianMenuAction *);
|
||||
void rebuild();
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QSymbianMenuAction *findAction(QAction *a) {
|
||||
for(int i = 0; i < actionItems.size(); i++) {
|
||||
QSymbianMenuAction *act = actionItems[i];
|
||||
if(a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void insertNativeMenuItems(const QList<QAction*> &actions);
|
||||
|
||||
} *symbian_menubar;
|
||||
static int symbianCommands(int command);
|
||||
#endif
|
||||
#ifdef QT_SOFTKEYS_ENABLED
|
||||
QAction *menuBarAction;
|
||||
#endif
|
||||
|
||||
void updateCornerWidgetToolBar();
|
||||
QToolBar *cornerWidgetToolBar;
|
||||
QWidget *cornerWidgetContainer;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -1,244 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmenubarimpl_p.h"
|
||||
|
||||
#ifndef QT_NO_MENUBAR
|
||||
|
||||
#include "qapplication.h"
|
||||
#include "qdebug.h"
|
||||
#include "qevent.h"
|
||||
#include "qmenu.h"
|
||||
#include "qmenubar.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QMenuBarImpl::~QMenuBarImpl()
|
||||
{
|
||||
#ifdef Q_WS_MAC
|
||||
macDestroyMenuBar();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
if (qt_wince_is_mobile())
|
||||
wceDestroyMenuBar();
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
symbianDestroyMenuBar();
|
||||
#endif
|
||||
}
|
||||
|
||||
void QMenuBarImpl::init(QMenuBar *_menuBar)
|
||||
{
|
||||
nativeMenuBar = -1;
|
||||
menuBar = _menuBar;
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
adapter = 0;
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
macCreateMenuBar(menuBar->parentWidget());
|
||||
if (adapter)
|
||||
menuBar->hide();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
if (qt_wince_is_mobile()) {
|
||||
wceCreateMenuBar(menuBar->parentWidget());
|
||||
if (adapter)
|
||||
menuBar->hide();
|
||||
} else {
|
||||
QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool QMenuBarImpl::allowSetVisible() const
|
||||
{
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
// FIXME: Port this to a setVisible() method
|
||||
/*
|
||||
if (isNativeMenuBar()) {
|
||||
if (!visible)
|
||||
QWidget::setVisible(false);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
return !isNativeMenuBar();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void QMenuBarImpl::actionEvent(QActionEvent *e)
|
||||
{
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
if (adapter) {
|
||||
if (e->type() == QEvent::ActionAdded)
|
||||
adapter->addAction(e->action(), e->before());
|
||||
else if (e->type() == QEvent::ActionRemoved)
|
||||
adapter->removeAction(e->action());
|
||||
else if (e->type() == QEvent::ActionChanged)
|
||||
adapter->syncAction(e->action());
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(e);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QMenuBarImpl::handleReparent(QWidget *oldParent, QWidget *newParent, QWidget *oldWindow, QWidget *newWindow)
|
||||
{
|
||||
#ifdef Q_WS_X11
|
||||
Q_UNUSED(oldParent)
|
||||
Q_UNUSED(newParent)
|
||||
Q_UNUSED(oldWindow)
|
||||
Q_UNUSED(newWindow)
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
if (isNativeMenuBar() && !macWidgetHasNativeMenubar(newParent)) {
|
||||
// If the new parent got a native menubar from before, keep that
|
||||
// menubar rather than replace it with this one (because a parents
|
||||
// menubar has precedence over children menubars).
|
||||
macDestroyMenuBar();
|
||||
macCreateMenuBar(newParent);
|
||||
}
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
if (qt_wince_is_mobile() && nativeMenuBarAdapter())
|
||||
adapter->rebuild();
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
|
||||
// Construct d->impl->nativeMenuBarAdapter() when this code path is entered first time
|
||||
// and when newParent != NULL
|
||||
if (!adapter)
|
||||
symbianCreateMenuBar(newParent);
|
||||
|
||||
// Reparent and rebuild menubar when parent is changed
|
||||
if (adapter) {
|
||||
if (oldParent != newParent)
|
||||
reparentMenuBar(oldParent, newParent);
|
||||
menuBar->hide();
|
||||
adapter->rebuild();
|
||||
}
|
||||
|
||||
#ifdef QT_SOFTKEYS_ENABLED
|
||||
// Constuct menuBarAction when this code path is entered first time
|
||||
if (!menuBarAction) {
|
||||
if (newParent) {
|
||||
menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, newParent);
|
||||
newParent->addAction(menuBarAction);
|
||||
}
|
||||
} else {
|
||||
// If reparenting i.e. we already have menuBarAction, remove it from old parent
|
||||
// and add for a new parent
|
||||
if (oldParent)
|
||||
oldParent->removeAction(menuBarAction);
|
||||
if (newParent)
|
||||
newParent->addAction(menuBarAction);
|
||||
}
|
||||
#endif // QT_SOFTKEYS_ENABLED
|
||||
#endif // Q_WS_S60
|
||||
}
|
||||
|
||||
bool QMenuBarImpl::allowCornerWidgets() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void QMenuBarImpl::popupAction(QAction *)
|
||||
{
|
||||
}
|
||||
|
||||
void QMenuBarImpl::setNativeMenuBar(bool value)
|
||||
{
|
||||
if (nativeMenuBar == -1 || (value != bool(nativeMenuBar))) {
|
||||
nativeMenuBar = value;
|
||||
#ifdef Q_WS_MAC
|
||||
if (!nativeMenuBar) {
|
||||
extern void qt_mac_clear_menubar();
|
||||
qt_mac_clear_menubar();
|
||||
macDestroyMenuBar();
|
||||
const QList<QAction *> &menubarActions = actions();
|
||||
for (int i = 0; i < menubarActions.size(); ++i) {
|
||||
const QAction *action = menubarActions.at(i);
|
||||
if (QMenu *menu = action->menu()) {
|
||||
delete menu->d_func()->mac_menu;
|
||||
menu->d_func()->mac_menu = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
macCreateMenuBar(parentWidget());
|
||||
}
|
||||
macUpdateMenuBar();
|
||||
updateGeometry();
|
||||
if (!nativeMenuBar && parentWidget())
|
||||
setVisible(true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
bool QMenuBarImpl::isNativeMenuBar() const
|
||||
{
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60)
|
||||
if (nativeMenuBar == -1) {
|
||||
return !QApplication::instance()->testAttribute(Qt::AA_DontUseNativeMenuBar);
|
||||
}
|
||||
return nativeMenuBar;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool QMenuBarImpl::shortcutsHandledByNativeMenuBar() const
|
||||
{
|
||||
#ifdef Q_WS_MAC
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool QMenuBarImpl::menuBarEventFilter(QObject *, QEvent *)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QT_NO_MENUBAR
|
@ -1,183 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMENUBARIMPL_P_H
|
||||
#define QMENUBARIMPL_P_H
|
||||
|
||||
#ifndef QT_NO_MENUBAR
|
||||
|
||||
#include "qabstractmenubarimpl_p.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QMenuBar;
|
||||
|
||||
class QMenuBarImpl : public QAbstractMenuBarImpl
|
||||
{
|
||||
public:
|
||||
~QMenuBarImpl();
|
||||
|
||||
virtual void init(QMenuBar *);
|
||||
|
||||
virtual bool allowSetVisible() const;
|
||||
|
||||
virtual void actionEvent(QActionEvent *e);
|
||||
|
||||
virtual void handleReparent(QWidget *oldParent, QWidget *newParent, QWidget *oldWindow, QWidget *newWindow);
|
||||
|
||||
virtual bool allowCornerWidgets() const;
|
||||
|
||||
virtual void popupAction(QAction*);
|
||||
|
||||
virtual void setNativeMenuBar(bool);
|
||||
virtual bool isNativeMenuBar() const;
|
||||
|
||||
virtual bool shortcutsHandledByNativeMenuBar() const;
|
||||
virtual bool menuBarEventFilter(QObject *, QEvent *event);
|
||||
|
||||
private:
|
||||
QMenuBar *menuBar;
|
||||
int nativeMenuBar : 3; // Only has values -1, 0, and 1
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
//mac menubar binding
|
||||
struct QMacMenuBarPrivate {
|
||||
QList<QMacMenuAction*> actionItems;
|
||||
OSMenuRef menu, apple_menu;
|
||||
QMacMenuBarPrivate();
|
||||
~QMacMenuBarPrivate();
|
||||
|
||||
void addAction(QAction *, QAction* =0);
|
||||
void addAction(QMacMenuAction *, QMacMenuAction* =0);
|
||||
void syncAction(QMacMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QMacMenuAction *);
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QMacMenuAction *findAction(QAction *a) {
|
||||
for (int i = 0; i < actionItems.size(); i++) {
|
||||
QMacMenuAction *act = actionItems[i];
|
||||
if (a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} adapter;
|
||||
static bool macUpdateMenuBarImmediatly();
|
||||
bool macWidgetHasNativeMenubar(QWidget *widget);
|
||||
void macCreateMenuBar(QWidget *);
|
||||
void macDestroyMenuBar();
|
||||
OSMenuRef macMenu();
|
||||
#endif
|
||||
#ifdef Q_WS_WINCE
|
||||
void wceCreateMenuBar(QWidget *);
|
||||
void wceDestroyMenuBar();
|
||||
struct QWceMenuBarPrivate {
|
||||
QList<QWceMenuAction*> actionItems;
|
||||
QList<QWceMenuAction*> actionItemsLeftButton;
|
||||
QList<QList<QWceMenuAction*>> actionItemsClassic;
|
||||
HMENU menuHandle;
|
||||
HMENU leftButtonMenuHandle;
|
||||
HWND menubarHandle;
|
||||
HWND parentWindowHandle;
|
||||
bool leftButtonIsMenu;
|
||||
QPointer<QAction> leftButtonAction;
|
||||
QMenuBarPrivate *d;
|
||||
int leftButtonCommand;
|
||||
|
||||
QWceMenuBarPrivate(QMenuBarPrivate *menubar);
|
||||
~QWceMenuBarPrivate();
|
||||
void addAction(QAction *, QAction* =0);
|
||||
void addAction(QWceMenuAction *, QWceMenuAction* =0);
|
||||
void syncAction(QWceMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QWceMenuAction *);
|
||||
void rebuild();
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QWceMenuAction *findAction(QAction *a) {
|
||||
for (int i = 0; i < actionItems.size(); i++) {
|
||||
QWceMenuAction *act = actionItems[i];
|
||||
if (a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} adapter;
|
||||
bool wceClassicMenu;
|
||||
void wceCommands(uint command);
|
||||
void wceRefresh();
|
||||
bool wceEmitSignals(QList<QWceMenuAction*> actions, uint command);
|
||||
#endif
|
||||
#ifdef Q_WS_S60
|
||||
void symbianCreateMenuBar(QWidget *);
|
||||
void symbianDestroyMenuBar();
|
||||
void reparentMenuBar(QWidget *oldParent, QWidget *newParent);
|
||||
struct QSymbianMenuBarPrivate {
|
||||
QList<QSymbianMenuAction*> actionItems;
|
||||
QMenuBarPrivate *d;
|
||||
QSymbianMenuBarPrivate(QMenuBarPrivate *menubar);
|
||||
~QSymbianMenuBarPrivate();
|
||||
void addAction(QAction *, QAction* =0);
|
||||
void addAction(QSymbianMenuAction *, QSymbianMenuAction* =0);
|
||||
void syncAction(QSymbianMenuAction *);
|
||||
inline void syncAction(QAction *a) { syncAction(findAction(a)); }
|
||||
void removeAction(QSymbianMenuAction *);
|
||||
void rebuild();
|
||||
inline void removeAction(QAction *a) { removeAction(findAction(a)); }
|
||||
inline QSymbianMenuAction *findAction(QAction *a) {
|
||||
for (int i = 0; i < actionItems.size(); i++) {
|
||||
QSymbianMenuAction *act = actionItems[i];
|
||||
if (a == act->action)
|
||||
return act;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void insertNativeMenuItems(const QList<QAction*> &actions);
|
||||
|
||||
} adapter;
|
||||
static int symbianCommands(int command);
|
||||
#endif
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QT_NO_MENUBAR
|
||||
|
||||
#endif /* QMENUBARIMPL_P_H */
|
@ -4,7 +4,6 @@ HEADERS += \
|
||||
widgets/qbuttongroup.h \
|
||||
widgets/qabstractbutton.h \
|
||||
widgets/qabstractbutton_p.h \
|
||||
widgets/qabstractmenubarimpl_p.h \
|
||||
widgets/qabstractslider.h \
|
||||
widgets/qabstractslider_p.h \
|
||||
widgets/qabstractspinbox.h \
|
||||
@ -85,7 +84,6 @@ HEADERS += \
|
||||
widgets/qprintpreviewwidget.h
|
||||
SOURCES += \
|
||||
widgets/qabstractbutton.cpp \
|
||||
widgets/qabstractmenubarimpl_p.cpp \
|
||||
widgets/qabstractslider.cpp \
|
||||
widgets/qabstractspinbox.cpp \
|
||||
widgets/qcalendarwidget.cpp \
|
||||
@ -112,7 +110,6 @@ SOURCES += \
|
||||
widgets/qmdisubwindow.cpp \
|
||||
widgets/qmenu.cpp \
|
||||
widgets/qmenubar.cpp \
|
||||
widgets/qmenubarimpl.cpp \
|
||||
widgets/qmenudata.cpp \
|
||||
widgets/qprogressbar.cpp \
|
||||
widgets/qpushbutton.cpp \
|
||||
|
Loading…
Reference in New Issue
Block a user