mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-24 19:02:59 +00:00
QMenuBar cleanup
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
parent
4663dcf97b
commit
2817bf1ce1
13 changed files with 65 additions and 630 deletions
|
@ -407,9 +407,8 @@ public:
|
||||||
AA_DontShowIconsInMenus = 1,
|
AA_DontShowIconsInMenus = 1,
|
||||||
AA_NativeWindows = 2,
|
AA_NativeWindows = 2,
|
||||||
AA_DontCreateNativeWidgetSiblings = 3,
|
AA_DontCreateNativeWidgetSiblings = 3,
|
||||||
AA_DontUseNativeMenuBar = 4,
|
AA_X11InitThreads = 4,
|
||||||
AA_X11InitThreads = 5,
|
AA_CaptureMultimediaKeys = 5,
|
||||||
AA_CaptureMultimediaKeys = 6,
|
|
||||||
|
|
||||||
// Add new attributes before this line
|
// Add new attributes before this line
|
||||||
AA_AttributeCount
|
AA_AttributeCount
|
||||||
|
|
|
@ -126,9 +126,6 @@
|
||||||
widgets stay non-native unless specifically set by the
|
widgets stay non-native unless specifically set by the
|
||||||
Qt::WA_NativeWindow attribute.
|
Qt::WA_NativeWindow attribute.
|
||||||
|
|
||||||
\value AA_DontUseNativeMenuBar All menubars created while this attribute is
|
|
||||||
set to true won't be used as a native menubar.
|
|
||||||
|
|
||||||
\value AA_X11InitThreads Calls XInitThreads() as part of the QApplication
|
\value AA_X11InitThreads Calls XInitThreads() as part of the QApplication
|
||||||
construction in order to make Xlib calls thread-safe. This
|
construction in order to make Xlib calls thread-safe. This
|
||||||
attribute must be set before QApplication is constructed.
|
attribute must be set before QApplication is constructed.
|
||||||
|
|
|
@ -571,20 +571,6 @@ void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on)
|
||||||
QCoreApplicationPrivate::attribs |= 1 << attribute;
|
QCoreApplicationPrivate::attribs |= 1 << attribute;
|
||||||
else
|
else
|
||||||
QCoreApplicationPrivate::attribs &= ~(1 << attribute);
|
QCoreApplicationPrivate::attribs &= ~(1 << attribute);
|
||||||
#ifdef Q_OS_MAC
|
|
||||||
// Turn on the no native menubar here, since we used to
|
|
||||||
// do this implicitly. We DO NOT flip it off if someone sets
|
|
||||||
// it to false.
|
|
||||||
// Ideally, we'd have magic that would be something along the lines of
|
|
||||||
// "follow MacPluginApplication" unless explicitly set.
|
|
||||||
// Considering this attribute isn't only at the beginning
|
|
||||||
// it's unlikely it will ever be a problem, but I want
|
|
||||||
// to have the behavior documented here.
|
|
||||||
if (attribute == Qt::AA_MacPluginApplication && on
|
|
||||||
&& !testAttribute(Qt::AA_DontUseNativeMenuBar)) {
|
|
||||||
setAttribute(Qt::AA_DontUseNativeMenuBar, true);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -603,12 +603,6 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent)
|
||||||
setVisible(createFakeProperty(QLatin1String("windowOpacity"), double(1.0)), false);
|
setVisible(createFakeProperty(QLatin1String("windowOpacity"), double(1.0)), false);
|
||||||
if (qobject_cast<const QToolBar *>(d->m_object)) { // prevent toolbars from being dragged off
|
if (qobject_cast<const QToolBar *>(d->m_object)) { // prevent toolbars from being dragged off
|
||||||
createFakeProperty(QLatin1String("floatable"), QVariant(true));
|
createFakeProperty(QLatin1String("floatable"), QVariant(true));
|
||||||
} else {
|
|
||||||
if (qobject_cast<const QMenuBar *>(d->m_object)) {
|
|
||||||
// Keep the menu bar editable in the form even if a native menu bar is used.
|
|
||||||
const bool nativeMenuBarDefault = !qApp->testAttribute(Qt::AA_DontUseNativeMenuBar);
|
|
||||||
createFakeProperty(QLatin1String("nativeMenuBar"), QVariant(nativeMenuBarDefault));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (d->m_canHaveLayoutAttributes) {
|
if (d->m_canHaveLayoutAttributes) {
|
||||||
static const QString layoutGroup = QLatin1String("Layout");
|
static const QString layoutGroup = QLatin1String("Layout");
|
||||||
|
|
|
@ -661,13 +661,7 @@ bool QShortcutMap::correctContext(const QShortcutEntry &item) const {
|
||||||
|
|
||||||
bool QShortcutMap::correctWidgetContext(Qt::ShortcutContext context, QWidget *w, QWidget *active_window) const
|
bool QShortcutMap::correctWidgetContext(Qt::ShortcutContext context, QWidget *w, QWidget *active_window) const
|
||||||
{
|
{
|
||||||
bool visible = w->isVisible();
|
if (!w->isVisible() || !w->isEnabled())
|
||||||
#ifdef Q_WS_MAC
|
|
||||||
if (!qApp->testAttribute(Qt::AA_DontUseNativeMenuBar) && qobject_cast<QMenuBar *>(w))
|
|
||||||
visible = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!visible || !w->isEnabled())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (context == Qt::ApplicationShortcut)
|
if (context == Qt::ApplicationShortcut)
|
||||||
|
@ -724,13 +718,7 @@ bool QShortcutMap::correctWidgetContext(Qt::ShortcutContext context, QWidget *w,
|
||||||
#ifndef QT_NO_GRAPHICSVIEW
|
#ifndef QT_NO_GRAPHICSVIEW
|
||||||
bool QShortcutMap::correctGraphicsWidgetContext(Qt::ShortcutContext context, QGraphicsWidget *w, QWidget *active_window) const
|
bool QShortcutMap::correctGraphicsWidgetContext(Qt::ShortcutContext context, QGraphicsWidget *w, QWidget *active_window) const
|
||||||
{
|
{
|
||||||
bool visible = w->isVisible();
|
if (!w->isVisible() || !w->isEnabled() || !w->scene())
|
||||||
#ifdef Q_WS_MAC
|
|
||||||
if (!qApp->testAttribute(Qt::AA_DontUseNativeMenuBar) && qobject_cast<QMenuBar *>(w))
|
|
||||||
visible = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!visible || !w->isEnabled() || !w->scene())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (context == Qt::ApplicationShortcut) {
|
if (context == Qt::ApplicationShortcut) {
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
|
||||||
** Contact: http://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** 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 or version 3 as published by the Free
|
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
|
||||||
** following information to ensure the GNU Lesser General Public License
|
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU
|
|
||||||
** General Public License version 3.0 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
|
||||||
** packaging of this file. Please review the following information to
|
|
||||||
** ensure the GNU General Public License version 3.0 requirements will be
|
|
||||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef QABSTRACTPLATFORMMENUBAR_P_H
|
|
||||||
#define QABSTRACTPLATFORMMENUBAR_P_H
|
|
||||||
|
|
||||||
#include <qfactoryinterface.h>
|
|
||||||
#include <qglobal.h>
|
|
||||||
#include <qplugin.h>
|
|
||||||
|
|
||||||
#ifndef QT_NO_MENUBAR
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
class QAction;
|
|
||||||
class QActionEvent;
|
|
||||||
class QEvent;
|
|
||||||
class QMenuBar;
|
|
||||||
class QObject;
|
|
||||||
class QWidget;
|
|
||||||
|
|
||||||
class QAbstractPlatformMenuBar;
|
|
||||||
|
|
||||||
struct QPlatformMenuBarFactoryInterface : public QFactoryInterface
|
|
||||||
{
|
|
||||||
virtual QAbstractPlatformMenuBar *create() = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define QPlatformMenuBarFactoryInterface_iid "com.nokia.qt.QPlatformMenuBarFactoryInterface"
|
|
||||||
Q_DECLARE_INTERFACE(QPlatformMenuBarFactoryInterface, QPlatformMenuBarFactoryInterface_iid)
|
|
||||||
|
|
||||||
/*!
|
|
||||||
The platform-specific implementation of a menubar
|
|
||||||
*/
|
|
||||||
class QAbstractPlatformMenuBar
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~QAbstractPlatformMenuBar() {}
|
|
||||||
|
|
||||||
virtual void init(QMenuBar *) = 0;
|
|
||||||
|
|
||||||
virtual void setVisible(bool visible) = 0;
|
|
||||||
|
|
||||||
virtual void actionEvent(QActionEvent *) = 0;
|
|
||||||
|
|
||||||
virtual void handleReparent(QWidget *oldParent, QWidget *newParent, QWidget *oldWindow, QWidget *newWindow) = 0;
|
|
||||||
|
|
||||||
virtual bool allowCornerWidgets() const = 0;
|
|
||||||
|
|
||||||
virtual void popupAction(QAction *) = 0;
|
|
||||||
|
|
||||||
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 // QABSTRACTPLATFORMMENUBAR_P_H
|
|
|
@ -65,9 +65,6 @@
|
||||||
#include "qmenu_p.h"
|
#include "qmenu_p.h"
|
||||||
#include "qmenubar_p.h"
|
#include "qmenubar_p.h"
|
||||||
#include "qdebug.h"
|
#include "qdebug.h"
|
||||||
#ifdef Q_WS_X11
|
|
||||||
#include "qmenubar_x11_p.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -167,11 +164,7 @@ void QMenuBarPrivate::updateGeometries()
|
||||||
return;
|
return;
|
||||||
int q_width = q->width()-(q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q)*2);
|
int q_width = q->width()-(q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q)*2);
|
||||||
int q_start = -1;
|
int q_start = -1;
|
||||||
if(
|
if(leftWidget || rightWidget) {
|
||||||
#ifdef Q_WS_X11
|
|
||||||
platformMenuBar->allowCornerWidgets() &&
|
|
||||||
#endif
|
|
||||||
(leftWidget || rightWidget)) {
|
|
||||||
int vmargin = q->style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, q)
|
int vmargin = q->style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, q)
|
||||||
+ q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q);
|
+ q->style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, q);
|
||||||
int hmargin = q->style()->pixelMetric(QStyle::PM_MenuBarHMargin, 0, q)
|
int hmargin = q->style()->pixelMetric(QStyle::PM_MenuBarHMargin, 0, q)
|
||||||
|
@ -196,23 +189,13 @@ void QMenuBarPrivate::updateGeometries()
|
||||||
calcActionRects(q_width, q_start);
|
calcActionRects(q_width, q_start);
|
||||||
currentAction = 0;
|
currentAction = 0;
|
||||||
#ifndef QT_NO_SHORTCUT
|
#ifndef QT_NO_SHORTCUT
|
||||||
if(
|
if(itemsDirty) {
|
||||||
#ifdef Q_WS_X11
|
|
||||||
!platformMenuBar->shortcutsHandledByNativeMenuBar() &&
|
|
||||||
#endif
|
|
||||||
itemsDirty) {
|
|
||||||
for(int j = 0; j < shortcutIndexMap.size(); ++j)
|
for(int j = 0; j < shortcutIndexMap.size(); ++j)
|
||||||
q->releaseShortcut(shortcutIndexMap.value(j));
|
q->releaseShortcut(shortcutIndexMap.value(j));
|
||||||
shortcutIndexMap.resize(0); // faster than clear
|
shortcutIndexMap.resize(0); // faster than clear
|
||||||
for(int i = 0; i < actions.count(); i++)
|
for(int i = 0; i < actions.count(); i++)
|
||||||
shortcutIndexMap.append(q->grabShortcut(QKeySequence::mnemonic(actions.at(i)->text())));
|
shortcutIndexMap.append(q->grabShortcut(QKeySequence::mnemonic(actions.at(i)->text())));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if(q->isNativeMenuBar()) {//nothing to see here folks, move along..
|
|
||||||
itemsDirty = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
itemsDirty = false;
|
itemsDirty = false;
|
||||||
|
|
||||||
|
@ -718,10 +701,6 @@ void QMenuBarPrivate::init()
|
||||||
Q_Q(QMenuBar);
|
Q_Q(QMenuBar);
|
||||||
q->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
|
q->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
|
||||||
q->setAttribute(Qt::WA_CustomWhatsThis);
|
q->setAttribute(Qt::WA_CustomWhatsThis);
|
||||||
#ifdef Q_WS_X11
|
|
||||||
platformMenuBar = qt_guiPlatformMenuBarFactory()->create();
|
|
||||||
platformMenuBar->init(q);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
q->setBackgroundRole(QPalette::Button);
|
q->setBackgroundRole(QPalette::Button);
|
||||||
oldWindow = oldParent = 0;
|
oldWindow = oldParent = 0;
|
||||||
|
@ -1024,19 +1003,6 @@ void QMenuBar::paintEvent(QPaintEvent *e)
|
||||||
style()->drawControl(QStyle::CE_MenuBarEmptyArea, &menuOpt, &p, this);
|
style()->drawControl(QStyle::CE_MenuBarEmptyArea, &menuOpt, &p, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
\reimp
|
|
||||||
*/
|
|
||||||
void QMenuBar::setVisible(bool visible)
|
|
||||||
{
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
Q_D(QMenuBar);
|
|
||||||
d->platformMenuBar->setVisible(visible);
|
|
||||||
#else
|
|
||||||
QWidget::setVisible(visible);
|
|
||||||
#endif // Q_WS_X11
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\reimp
|
\reimp
|
||||||
*/
|
*/
|
||||||
|
@ -1226,9 +1192,6 @@ void QMenuBar::actionEvent(QActionEvent *e)
|
||||||
{
|
{
|
||||||
Q_D(QMenuBar);
|
Q_D(QMenuBar);
|
||||||
d->itemsDirty = true;
|
d->itemsDirty = true;
|
||||||
#ifdef Q_WS_X11
|
|
||||||
d->platformMenuBar->actionEvent(e);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(e->type() == QEvent::ActionAdded) {
|
if(e->type() == QEvent::ActionAdded) {
|
||||||
connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()));
|
connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()));
|
||||||
|
@ -1304,10 +1267,6 @@ void QMenuBarPrivate::handleReparent()
|
||||||
newWindow->installEventFilter(q);
|
newWindow->installEventFilter(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
platformMenuBar->handleReparent(oldParent, newParent, oldWindow, newWindow);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
oldParent = newParent;
|
oldParent = newParent;
|
||||||
oldWindow = newWindow;
|
oldWindow = newWindow;
|
||||||
}
|
}
|
||||||
|
@ -1405,11 +1364,6 @@ bool QMenuBar::event(QEvent *e)
|
||||||
bool QMenuBar::eventFilter(QObject *object, QEvent *event)
|
bool QMenuBar::eventFilter(QObject *object, QEvent *event)
|
||||||
{
|
{
|
||||||
Q_D(QMenuBar);
|
Q_D(QMenuBar);
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if (d->platformMenuBar->menuBarEventFilter(object, event)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (object == parent() && object) {
|
if (object == parent() && object) {
|
||||||
if (event->type() == QEvent::ParentChange) //GrandparentChange
|
if (event->type() == QEvent::ParentChange) //GrandparentChange
|
||||||
d->handleReparent();
|
d->handleReparent();
|
||||||
|
@ -1495,11 +1449,6 @@ QRect QMenuBar::actionGeometry(QAction *act) const
|
||||||
QSize QMenuBar::minimumSizeHint() const
|
QSize QMenuBar::minimumSizeHint() const
|
||||||
{
|
{
|
||||||
Q_D(const QMenuBar);
|
Q_D(const QMenuBar);
|
||||||
#if defined(Q_WS_X11)
|
|
||||||
const bool as_gui_menubar = !isNativeMenuBar();
|
|
||||||
#else
|
|
||||||
const bool as_gui_menubar = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ensurePolished();
|
ensurePolished();
|
||||||
QSize ret(0, 0);
|
QSize ret(0, 0);
|
||||||
|
@ -1508,19 +1457,16 @@ QSize QMenuBar::minimumSizeHint() const
|
||||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||||
if(as_gui_menubar) {
|
|
||||||
int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
||||||
d->calcActionRects(w - (2 * fw), 0);
|
d->calcActionRects(w - (2 * fw), 0);
|
||||||
for (int i = 0; ret.isNull() && i < d->actions.count(); ++i)
|
for (int i = 0; ret.isNull() && i < d->actions.count(); ++i)
|
||||||
ret = d->actionRects.at(i).size();
|
ret = d->actionRects.at(i).size();
|
||||||
if (!d->extension->isHidden())
|
if (!d->extension->isHidden())
|
||||||
ret += QSize(d->extension->sizeHint().width(), 0);
|
ret += QSize(d->extension->sizeHint().width(), 0);
|
||||||
ret += QSize(2*fw + hmargin, 2*fw + vmargin);
|
ret += QSize(2*fw + hmargin, 2*fw + vmargin);
|
||||||
}
|
|
||||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if (d->platformMenuBar->allowCornerWidgets()) {
|
|
||||||
#endif
|
|
||||||
if(d->leftWidget) {
|
if(d->leftWidget) {
|
||||||
QSize sz = d->leftWidget->minimumSizeHint();
|
QSize sz = d->leftWidget->minimumSizeHint();
|
||||||
ret.setWidth(ret.width() + sz.width());
|
ret.setWidth(ret.width() + sz.width());
|
||||||
|
@ -1533,22 +1479,16 @@ QSize QMenuBar::minimumSizeHint() const
|
||||||
if(sz.height() + margin > ret.height())
|
if(sz.height() + margin > ret.height())
|
||||||
ret.setHeight(sz.height() + margin);
|
ret.setHeight(sz.height() + margin);
|
||||||
}
|
}
|
||||||
#ifdef Q_WS_X11
|
QStyleOptionMenuItem opt;
|
||||||
}
|
opt.rect = rect();
|
||||||
#endif
|
opt.menuRect = rect();
|
||||||
if(as_gui_menubar) {
|
opt.state = QStyle::State_None;
|
||||||
QStyleOptionMenuItem opt;
|
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
||||||
opt.rect = rect();
|
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
||||||
opt.menuRect = rect();
|
opt.palette = palette();
|
||||||
opt.state = QStyle::State_None;
|
return (style()->sizeFromContents(QStyle::CT_MenuBar, &opt,
|
||||||
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
ret.expandedTo(QApplication::globalStrut()),
|
||||||
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
this));
|
||||||
opt.palette = palette();
|
|
||||||
return (style()->sizeFromContents(QStyle::CT_MenuBar, &opt,
|
|
||||||
ret.expandedTo(QApplication::globalStrut()),
|
|
||||||
this));
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1557,12 +1497,6 @@ QSize QMenuBar::minimumSizeHint() const
|
||||||
QSize QMenuBar::sizeHint() const
|
QSize QMenuBar::sizeHint() const
|
||||||
{
|
{
|
||||||
Q_D(const QMenuBar);
|
Q_D(const QMenuBar);
|
||||||
#if defined(Q_WS_X11)
|
|
||||||
const bool as_gui_menubar = !isNativeMenuBar();
|
|
||||||
#else
|
|
||||||
const bool as_gui_menubar = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
ensurePolished();
|
ensurePolished();
|
||||||
QSize ret(0, 0);
|
QSize ret(0, 0);
|
||||||
|
@ -1571,21 +1505,18 @@ QSize QMenuBar::sizeHint() const
|
||||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||||
if(as_gui_menubar) {
|
|
||||||
const int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
const int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width();
|
||||||
d->calcActionRects(w - (2 * fw), 0);
|
d->calcActionRects(w - (2 * fw), 0);
|
||||||
for (int i = 0; i < d->actionRects.count(); ++i) {
|
for (int i = 0; i < d->actionRects.count(); ++i) {
|
||||||
const QRect &actionRect = d->actionRects.at(i);
|
const QRect &actionRect = d->actionRects.at(i);
|
||||||
ret = ret.expandedTo(QSize(actionRect.x() + actionRect.width(), actionRect.y() + actionRect.height()));
|
ret = ret.expandedTo(QSize(actionRect.x() + actionRect.width(), actionRect.y() + actionRect.height()));
|
||||||
}
|
|
||||||
//the action geometries already contain the top and left
|
|
||||||
//margins. So we only need to add those from right and bottom.
|
|
||||||
ret += QSize(fw + hmargin, fw + vmargin);
|
|
||||||
}
|
}
|
||||||
|
//the action geometries already contain the top and left
|
||||||
|
//margins. So we only need to add those from right and bottom.
|
||||||
|
ret += QSize(fw + hmargin, fw + vmargin);
|
||||||
|
|
||||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if(d->platformMenuBar->allowCornerWidgets()) {
|
|
||||||
#endif
|
|
||||||
if(d->leftWidget) {
|
if(d->leftWidget) {
|
||||||
QSize sz = d->leftWidget->sizeHint();
|
QSize sz = d->leftWidget->sizeHint();
|
||||||
ret.setWidth(ret.width() + sz.width());
|
ret.setWidth(ret.width() + sz.width());
|
||||||
|
@ -1598,22 +1529,17 @@ QSize QMenuBar::sizeHint() const
|
||||||
if(sz.height() + margin > ret.height())
|
if(sz.height() + margin > ret.height())
|
||||||
ret.setHeight(sz.height() + margin);
|
ret.setHeight(sz.height() + margin);
|
||||||
}
|
}
|
||||||
#ifdef Q_WS_X11
|
|
||||||
}
|
QStyleOptionMenuItem opt;
|
||||||
#endif
|
opt.rect = rect();
|
||||||
if(as_gui_menubar) {
|
opt.menuRect = rect();
|
||||||
QStyleOptionMenuItem opt;
|
opt.state = QStyle::State_None;
|
||||||
opt.rect = rect();
|
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
||||||
opt.menuRect = rect();
|
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
||||||
opt.state = QStyle::State_None;
|
opt.palette = palette();
|
||||||
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
return (style()->sizeFromContents(QStyle::CT_MenuBar, &opt,
|
||||||
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
ret.expandedTo(QApplication::globalStrut()),
|
||||||
opt.palette = palette();
|
this));
|
||||||
return (style()->sizeFromContents(QStyle::CT_MenuBar, &opt,
|
|
||||||
ret.expandedTo(QApplication::globalStrut()),
|
|
||||||
this));
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1622,46 +1548,33 @@ QSize QMenuBar::sizeHint() const
|
||||||
int QMenuBar::heightForWidth(int) const
|
int QMenuBar::heightForWidth(int) const
|
||||||
{
|
{
|
||||||
Q_D(const QMenuBar);
|
Q_D(const QMenuBar);
|
||||||
#if defined(Q_WS_X11)
|
|
||||||
const bool as_gui_menubar = !isNativeMenuBar();
|
|
||||||
#else
|
|
||||||
const bool as_gui_menubar = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const_cast<QMenuBarPrivate*>(d)->updateGeometries();
|
const_cast<QMenuBarPrivate*>(d)->updateGeometries();
|
||||||
int height = 0;
|
int height = 0;
|
||||||
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
const int vmargin = style()->pixelMetric(QStyle::PM_MenuBarVMargin, 0, this);
|
||||||
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this);
|
||||||
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this);
|
||||||
if(as_gui_menubar) {
|
|
||||||
for (int i = 0; i < d->actionRects.count(); ++i)
|
for (int i = 0; i < d->actionRects.count(); ++i)
|
||||||
height = qMax(height, d->actionRects.at(i).height());
|
height = qMax(height, d->actionRects.at(i).height());
|
||||||
if (height) //there is at least one non-null item
|
if (height) //there is at least one non-null item
|
||||||
height += spaceBelowMenuBar;
|
height += spaceBelowMenuBar;
|
||||||
height += 2*fw;
|
height += 2*fw;
|
||||||
height += 2*vmargin;
|
height += 2*vmargin;
|
||||||
}
|
|
||||||
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
int margin = 2*vmargin + 2*fw + spaceBelowMenuBar;
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if(d->platformMenuBar->allowCornerWidgets()) {
|
|
||||||
#endif
|
|
||||||
if(d->leftWidget)
|
if(d->leftWidget)
|
||||||
height = qMax(d->leftWidget->sizeHint().height() + margin, height);
|
height = qMax(d->leftWidget->sizeHint().height() + margin, height);
|
||||||
if(d->rightWidget)
|
if(d->rightWidget)
|
||||||
height = qMax(d->rightWidget->sizeHint().height() + margin, height);
|
height = qMax(d->rightWidget->sizeHint().height() + margin, height);
|
||||||
#ifdef Q_WS_X11
|
|
||||||
}
|
QStyleOptionMenuItem opt;
|
||||||
#endif
|
opt.init(this);
|
||||||
if(as_gui_menubar) {
|
opt.menuRect = rect();
|
||||||
QStyleOptionMenuItem opt;
|
opt.state = QStyle::State_None;
|
||||||
opt.init(this);
|
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
||||||
opt.menuRect = rect();
|
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
||||||
opt.state = QStyle::State_None;
|
return style()->sizeFromContents(QStyle::CT_MenuBar, &opt, QSize(0, height), this).height(); //not pretty..
|
||||||
opt.menuItemType = QStyleOptionMenuItem::Normal;
|
|
||||||
opt.checkType = QStyleOptionMenuItem::NotCheckable;
|
|
||||||
return style()->sizeFromContents(QStyle::CT_MenuBar, &opt, QSize(0, height), this).height(); //not pretty..
|
|
||||||
}
|
|
||||||
return height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1671,15 +1584,8 @@ void QMenuBarPrivate::_q_internalShortcutActivated(int id)
|
||||||
{
|
{
|
||||||
Q_Q(QMenuBar);
|
Q_Q(QMenuBar);
|
||||||
QAction *act = actions.at(id);
|
QAction *act = actions.at(id);
|
||||||
#ifdef Q_WS_X11
|
setCurrentAction(act, true, true);
|
||||||
if (q->isNativeMenuBar()) {
|
|
||||||
platformMenuBar->popupAction(act);
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
setCurrentAction(act, true, true);
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (act && !act->menu()) {
|
if (act && !act->menu()) {
|
||||||
activateAction(act, QAction::Trigger);
|
activateAction(act, QAction::Trigger);
|
||||||
//100 is the same as the default value in QPushButton::animateClick
|
//100 is the same as the default value in QPushButton::animateClick
|
||||||
|
@ -1765,18 +1671,10 @@ void QMenuBar::setCornerWidget(QWidget *w, Qt::Corner corner)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
if(!d->platformMenuBar->allowCornerWidgets()) {
|
|
||||||
d->updateCornerWidgetToolBar();
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
if (w) {
|
if (w) {
|
||||||
w->setParent(this);
|
w->setParent(this);
|
||||||
w->installEventFilter(this);
|
w->installEventFilter(this);
|
||||||
}
|
}
|
||||||
#ifdef Q_WS_X11
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
d->_q_updateLayout();
|
d->_q_updateLayout();
|
||||||
}
|
}
|
||||||
|
@ -1807,49 +1705,6 @@ QWidget *QMenuBar::cornerWidget(Qt::Corner corner) const
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
\property QMenuBar::nativeMenuBar
|
|
||||||
\brief Whether or not a menubar will be used as a native menubar on platforms that support it
|
|
||||||
\since 4.6
|
|
||||||
|
|
||||||
This property specifies whether or not the menubar should be used as a native menubar on platforms
|
|
||||||
that support it. The currently supported platforms are Mac OS X and Windows CE. On these platforms
|
|
||||||
if this property is true, the menubar is used in the native menubar and is not in the window of
|
|
||||||
its parent, if false the menubar remains in the window. On other platforms the value of this
|
|
||||||
attribute has no effect.
|
|
||||||
|
|
||||||
The default is to follow whether the Qt::AA_DontUseNativeMenuBar attribute
|
|
||||||
is set for the application. Explicitly settings this property overrides
|
|
||||||
the presence (or abscence) of the attribute.
|
|
||||||
|
|
||||||
\sa void-qt-mac-set-native-menubar-bool-enable
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QMenuBar::setNativeMenuBar(bool nativeMenuBar)
|
|
||||||
{
|
|
||||||
Q_D(QMenuBar);
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
d->platformMenuBar->setNativeMenuBar(nativeMenuBar);
|
|
||||||
#else
|
|
||||||
if (d->nativeMenuBar == -1 || (nativeMenuBar != bool(d->nativeMenuBar))) {
|
|
||||||
d->nativeMenuBar = nativeMenuBar;
|
|
||||||
}
|
|
||||||
#endif // Q_WS_X11
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QMenuBar::isNativeMenuBar() const
|
|
||||||
{
|
|
||||||
Q_D(const QMenuBar);
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
return d->platformMenuBar->isNativeMenuBar();
|
|
||||||
#else
|
|
||||||
if (d->nativeMenuBar == -1) {
|
|
||||||
return !QApplication::instance()->testAttribute(Qt::AA_DontUseNativeMenuBar);
|
|
||||||
}
|
|
||||||
return d->nativeMenuBar;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn void QMenuBar::triggered(QAction *action)
|
\fn void QMenuBar::triggered(QAction *action)
|
||||||
|
|
||||||
|
|
|
@ -105,9 +105,6 @@ public:
|
||||||
bool isNativeMenuBar() const;
|
bool isNativeMenuBar() const;
|
||||||
void setNativeMenuBar(bool nativeMenuBar);
|
void setNativeMenuBar(bool nativeMenuBar);
|
||||||
|
|
||||||
public Q_SLOTS:
|
|
||||||
virtual void setVisible(bool visible);
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void triggered(QAction *action);
|
void triggered(QAction *action);
|
||||||
void hovered(QAction *action);
|
void hovered(QAction *action);
|
||||||
|
|
|
@ -57,10 +57,6 @@
|
||||||
#include "qwidget_p.h"
|
#include "qwidget_p.h"
|
||||||
#include "qbasictimer.h"
|
#include "qbasictimer.h"
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
#include "qabstractplatformmenubar_p.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
#ifndef QT_NO_MENUBAR
|
#ifndef QT_NO_MENUBAR
|
||||||
|
@ -72,21 +68,11 @@ class QMenuBarPrivate : public QWidgetPrivate
|
||||||
public:
|
public:
|
||||||
QMenuBarPrivate() : itemsDirty(0), currentAction(0), mouseDown(0),
|
QMenuBarPrivate() : itemsDirty(0), currentAction(0), mouseDown(0),
|
||||||
closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0)
|
closePopupMode(0), defaultPopDown(1), popupState(0), keyboardState(0), altPressed(0)
|
||||||
#ifndef Q_WS_X11
|
|
||||||
, nativeMenuBar(-1)
|
|
||||||
#endif
|
|
||||||
, doChildEffects(false)
|
, doChildEffects(false)
|
||||||
#ifdef Q_WS_X11
|
|
||||||
, platformMenuBar(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{ }
|
{ }
|
||||||
~QMenuBarPrivate()
|
~QMenuBarPrivate()
|
||||||
{
|
{ }
|
||||||
#ifdef Q_WS_X11
|
|
||||||
delete platformMenuBar;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
QAction *getNextAction(const int start, const int increment) const;
|
QAction *getNextAction(const int start, const int increment) const;
|
||||||
|
@ -117,9 +103,6 @@ public:
|
||||||
uint keyboardState : 1, altPressed : 1;
|
uint keyboardState : 1, altPressed : 1;
|
||||||
QPointer<QWidget> keyboardFocusWidget;
|
QPointer<QWidget> keyboardFocusWidget;
|
||||||
|
|
||||||
#ifndef Q_WS_X11
|
|
||||||
int nativeMenuBar : 3; // Only has values -1, 0, and 1
|
|
||||||
#endif
|
|
||||||
//firing of events
|
//firing of events
|
||||||
void activateAction(QAction *, QAction::ActionEvent);
|
void activateAction(QAction *, QAction::ActionEvent);
|
||||||
|
|
||||||
|
@ -148,9 +131,6 @@ public:
|
||||||
QPointer<QAction> defaultAction;
|
QPointer<QAction> defaultAction;
|
||||||
|
|
||||||
QBasicTimer autoReleaseTimer;
|
QBasicTimer autoReleaseTimer;
|
||||||
#ifdef Q_WS_X11
|
|
||||||
QAbstractPlatformMenuBar *platformMenuBar;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
#ifdef Q_WS_X11
|
||||||
void updateCornerWidgetToolBar();
|
void updateCornerWidgetToolBar();
|
||||||
|
|
|
@ -1,141 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
|
||||||
** Contact: http://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** 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 or version 3 as published by the Free
|
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
|
||||||
** following information to ensure the GNU Lesser General Public License
|
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU
|
|
||||||
** General Public License version 3.0 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
|
||||||
** packaging of this file. Please review the following information to
|
|
||||||
** ensure the GNU General Public License version 3.0 requirements will be
|
|
||||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "qmenubar_x11_p.h"
|
|
||||||
|
|
||||||
#ifndef QT_NO_MENUBAR
|
|
||||||
|
|
||||||
#include "qapplication.h"
|
|
||||||
#include "qdebug.h"
|
|
||||||
#include "qevent.h"
|
|
||||||
#include "qmenu.h"
|
|
||||||
#include "qmenubar.h"
|
|
||||||
|
|
||||||
#include <qfactoryloader_p.h>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
QX11MenuBar::~QX11MenuBar()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::init(QMenuBar *_menuBar)
|
|
||||||
{
|
|
||||||
nativeMenuBar = -1;
|
|
||||||
menuBar = _menuBar;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::setVisible(bool visible)
|
|
||||||
{
|
|
||||||
menuBar->QWidget::setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::actionEvent(QActionEvent *e)
|
|
||||||
{
|
|
||||||
Q_UNUSED(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::handleReparent(QWidget *oldParent, QWidget *newParent, QWidget *oldWindow, QWidget *newWindow)
|
|
||||||
{
|
|
||||||
Q_UNUSED(oldParent)
|
|
||||||
Q_UNUSED(newParent)
|
|
||||||
Q_UNUSED(oldWindow)
|
|
||||||
Q_UNUSED(newWindow)
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QX11MenuBar::allowCornerWidgets() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::popupAction(QAction *)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QX11MenuBar::setNativeMenuBar(bool value)
|
|
||||||
{
|
|
||||||
if (nativeMenuBar == -1 || (value != bool(nativeMenuBar))) {
|
|
||||||
nativeMenuBar = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QX11MenuBar::isNativeMenuBar() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QX11MenuBar::shortcutsHandledByNativeMenuBar() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QX11MenuBar::menuBarEventFilter(QObject *, QEvent *)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QX11MenuBarFactory : public QPlatformMenuBarFactoryInterface
|
|
||||||
{
|
|
||||||
QAbstractPlatformMenuBar *create() { return new QX11MenuBar; }
|
|
||||||
virtual QStringList keys() const { return QStringList(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
QPlatformMenuBarFactoryInterface *qt_guiPlatformMenuBarFactory()
|
|
||||||
{
|
|
||||||
static QPlatformMenuBarFactoryInterface *factory = 0;
|
|
||||||
if (!factory) {
|
|
||||||
#ifndef QT_NO_LIBRARY
|
|
||||||
QFactoryLoader loader(QPlatformMenuBarFactoryInterface_iid, QLatin1String("/menubar"));
|
|
||||||
factory = qobject_cast<QPlatformMenuBarFactoryInterface *>(loader.instance(QLatin1String("default")));
|
|
||||||
#endif // QT_NO_LIBRARY
|
|
||||||
if(!factory) {
|
|
||||||
static QX11MenuBarFactory def;
|
|
||||||
factory = &def;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
#endif // QT_NO_MENUBAR
|
|
||||||
|
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2015 The Qt Company Ltd.
|
|
||||||
** Contact: http://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the QtGui module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at http://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** 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 or version 3 as published by the Free
|
|
||||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
|
||||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
|
||||||
** following information to ensure the GNU Lesser General Public License
|
|
||||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
|
||||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
**
|
|
||||||
** As a special exception, The Qt Company gives you certain additional
|
|
||||||
** rights. These rights are described in The Qt Company LGPL Exception
|
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU
|
|
||||||
** General Public License version 3.0 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
|
||||||
** packaging of this file. Please review the following information to
|
|
||||||
** ensure the GNU General Public License version 3.0 requirements will be
|
|
||||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef QX11MENUBAR_P_H
|
|
||||||
#define QX11MENUBAR_P_H
|
|
||||||
|
|
||||||
#ifndef QT_NO_MENUBAR
|
|
||||||
|
|
||||||
#include "qabstractplatformmenubar_p.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
|
|
||||||
class QMenuBar;
|
|
||||||
|
|
||||||
class QX11MenuBar : public QAbstractPlatformMenuBar
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
~QX11MenuBar();
|
|
||||||
|
|
||||||
virtual void init(QMenuBar *);
|
|
||||||
|
|
||||||
virtual void setVisible(bool visible);
|
|
||||||
|
|
||||||
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
|
|
||||||
};
|
|
||||||
|
|
||||||
QPlatformMenuBarFactoryInterface *qt_guiPlatformMenuBarFactory();
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
#endif // QT_NO_MENUBAR
|
|
||||||
|
|
||||||
#endif /* QX11MENUBAR_P_H */
|
|
|
@ -146,14 +146,3 @@ set(GUI_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qplaintextedit.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qplaintextedit.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qprintpreviewwidget.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qprintpreviewwidget.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WITH_X11 AND X11_FOUND)
|
|
||||||
set(GUI_HEADERS
|
|
||||||
${GUI_HEADERS}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qabstractplatformmenubar_p.h
|
|
||||||
)
|
|
||||||
set(GUI_SOURCES
|
|
||||||
${GUI_SOURCES}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/widgets/qmenubar_x11.cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
|
@ -407,9 +407,6 @@ void QDesignerWorkbench::switchToDockedMode()
|
||||||
|
|
||||||
switchToNeutralMode();
|
switchToNeutralMode();
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, false);
|
|
||||||
#endif
|
|
||||||
QDesignerToolWindow *widgetBoxWrapper = widgetBoxToolWindow();
|
QDesignerToolWindow *widgetBoxWrapper = widgetBoxToolWindow();
|
||||||
widgetBoxWrapper->action()->setVisible(true);
|
widgetBoxWrapper->action()->setVisible(true);
|
||||||
widgetBoxWrapper->setWindowTitle(tr("Widget Box"));
|
widgetBoxWrapper->setWindowTitle(tr("Widget Box"));
|
||||||
|
@ -471,22 +468,11 @@ void QDesignerWorkbench::switchToTopLevelMode()
|
||||||
|
|
||||||
// The widget box is special, it gets the menubar and gets to be the main widget.
|
// The widget box is special, it gets the menubar and gets to be the main widget.
|
||||||
|
|
||||||
m_core->setTopLevel(widgetBoxWrapper);
|
|
||||||
#ifdef Q_WS_X11
|
|
||||||
// For now the appmenu protocol does not make it possible to associate a
|
|
||||||
// menubar with all application windows. This means in top level mode you
|
|
||||||
// can only reach the menubar when the widgetbox window is active. Since
|
|
||||||
// this is quite inconvenient, better not use the native menubar in this
|
|
||||||
// configuration and keep the menubar in the widgetbox window.
|
|
||||||
QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
|
|
||||||
#endif
|
|
||||||
#ifndef Q_WS_MAC
|
|
||||||
widgetBoxWrapper->setMenuBar(m_globalMenuBar);
|
widgetBoxWrapper->setMenuBar(m_globalMenuBar);
|
||||||
widgetBoxWrapper->action()->setVisible(false);
|
widgetBoxWrapper->action()->setVisible(false);
|
||||||
widgetBoxWrapper->setCloseEventPolicy(MainWindowBase::EmitCloseEventSignal);
|
widgetBoxWrapper->setCloseEventPolicy(MainWindowBase::EmitCloseEventSignal);
|
||||||
qDesigner->setMainWindow(widgetBoxWrapper);
|
qDesigner->setMainWindow(widgetBoxWrapper);
|
||||||
widgetBoxWrapper->setWindowTitle(MainWindowBase::mainWindowTitle());
|
widgetBoxWrapper->setWindowTitle(MainWindowBase::mainWindowTitle());
|
||||||
#endif
|
|
||||||
|
|
||||||
const QDesignerSettings settings(m_core);
|
const QDesignerSettings settings(m_core);
|
||||||
m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager, false);
|
m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager, false);
|
||||||
|
|
Loading…
Add table
Reference in a new issue