summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp10
-rw-r--r--src/widgets/widgets/qdockarealayout_p.h1
-rw-r--r--src/widgets/widgets/qkeysequenceedit.cpp3
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp11
-rw-r--r--src/widgets/widgets/qmenu.cpp2
-rw-r--r--src/widgets/widgets/qmenubar.cpp13
-rw-r--r--src/widgets/widgets/qprogressbar.cpp18
7 files changed, 44 insertions, 14 deletions
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index 63f8172bf6..ad19e5d5f9 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -266,6 +266,16 @@ bool QDockAreaLayoutInfo::isEmpty() const
return next(-1) == -1;
}
+bool QDockAreaLayoutInfo::onlyHasPlaceholders() const
+{
+ for (const QDockAreaLayoutItem &item : item_list) {
+ if (!item.placeHolderItem)
+ return false;
+ }
+
+ return true;
+}
+
QSize QDockAreaLayoutInfo::minimumSize() const
{
if (isEmpty())
diff --git a/src/widgets/widgets/qdockarealayout_p.h b/src/widgets/widgets/qdockarealayout_p.h
index f22a3d2de2..21787283f4 100644
--- a/src/widgets/widgets/qdockarealayout_p.h
+++ b/src/widgets/widgets/qdockarealayout_p.h
@@ -167,6 +167,7 @@ public:
void clear();
bool isEmpty() const;
+ bool onlyHasPlaceholders() const;
bool hasFixedSize() const;
QList<int> findSeparator(const QPoint &pos) const;
int next(int idx) const;
diff --git a/src/widgets/widgets/qkeysequenceedit.cpp b/src/widgets/widgets/qkeysequenceedit.cpp
index 2fbc42330d..3252ce5941 100644
--- a/src/widgets/widgets/qkeysequenceedit.cpp
+++ b/src/widgets/widgets/qkeysequenceedit.cpp
@@ -257,7 +257,8 @@ void QKeySequenceEdit::keyPressEvent(QKeyEvent *e)
if (nextKey == Qt::Key_Control
|| nextKey == Qt::Key_Shift
|| nextKey == Qt::Key_Meta
- || nextKey == Qt::Key_Alt) {
+ || nextKey == Qt::Key_Alt
+ || nextKey == Qt::Key_unknown) {
return;
}
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index aef8b9cbd5..14d7f3d835 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -1030,12 +1030,19 @@ bool QMainWindowLayoutState::restoreState(QDataStream &_stream,
Qt::Horizontal, QTabBar::RoundedSouth, mainWindow);
QRect geometry;
stream >> geometry;
- if (!floatingTab->layoutInfo()->restoreState(stream, dockWidgets, false))
+ QDockAreaLayoutInfo *info = floatingTab->layoutInfo();
+ if (!info->restoreState(stream, dockWidgets, false))
return false;
geometry = QDockAreaLayout::constrainedRect(geometry, floatingTab);
floatingTab->move(geometry.topLeft());
floatingTab->resize(geometry.size());
- floatingTab->show();
+
+ // Don't show an empty QDockWidgetGroupWindow if no dock widget is available yet.
+ // reparentWidgets() would be triggered by show(), so do it explicitly here.
+ if (info->onlyHasPlaceholders())
+ info->reparentWidgets(floatingTab);
+ else
+ floatingTab->show();
}
break;
#endif // QT_NO_TABBAR
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 36a8a96b79..2917083415 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -1507,7 +1507,7 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action)
When inserting action items you usually specify a receiver and a
slot. The receiver will be notifed whenever the item is
\l{QAction::triggered()}{triggered()}. In addition, QMenu provides
- two signals, activated() and highlighted(), which signal the
+ two signals, triggered() and hovered(), which signal the
QAction that was triggered from the menu.
You clear a menu with clear() and remove individual action items
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index ce43740524..2a76f1e8a0 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -1267,10 +1267,12 @@ void QMenuBar::actionEvent(QActionEvent *e)
} else if(e->type() == QEvent::ActionRemoved) {
e->action()->disconnect(this);
}
- if (isVisible()) {
+ // updateGeometries() is also needed for native menu bars because
+ // it updates shortcutIndexMap
+ if (isVisible() || isNativeMenuBar())
d->updateGeometries();
+ if (isVisible())
update();
- }
}
/*!
@@ -1683,6 +1685,13 @@ void QMenuBarPrivate::_q_internalShortcutActivated(int id)
{
Q_Q(QMenuBar);
QAction *act = actions.at(id);
+ if (act && act->menu()) {
+ if (QPlatformMenu *platformMenu = act->menu()->platformMenu()) {
+ platformMenu->showPopup(q->windowHandle(), actionRects.at(id), Q_NULLPTR);
+ return;
+ }
+ }
+
setCurrentAction(act, true, true);
if (act && !act->menu()) {
activateAction(act, QAction::Trigger);
diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp
index 10f005e6d3..64f19047b6 100644
--- a/src/widgets/widgets/qprogressbar.cpp
+++ b/src/widgets/widgets/qprogressbar.cpp
@@ -144,16 +144,17 @@ bool QProgressBarPrivate::repaintRequired() const
if (value == lastPaintedValue)
return false;
- int valueDifference = qAbs(value - lastPaintedValue);
-
+ const auto valueDifference = qAbs(qint64(value) - lastPaintedValue);
// Check if the text needs to be repainted
if (value == minimum || value == maximum)
return true;
+
+ const auto totalSteps = qint64(maximum) - minimum;
if (textVisible) {
if ((format.contains(QLatin1String("%v"))))
return true;
if ((format.contains(QLatin1String("%p"))
- && valueDifference >= qAbs((maximum - minimum) / 100)))
+ && valueDifference >= qAbs(totalSteps / 100)))
return true;
}
@@ -166,7 +167,7 @@ bool QProgressBarPrivate::repaintRequired() const
// (valueDifference / (maximum - minimum) > cw / groove.width())
// transformed to avoid integer division.
int grooveBlock = (q->orientation() == Qt::Horizontal) ? groove.width() : groove.height();
- return (valueDifference * grooveBlock > cw * (maximum - minimum));
+ return valueDifference * grooveBlock > cw * totalSteps;
}
/*!
@@ -260,9 +261,10 @@ QProgressBar::~QProgressBar()
void QProgressBar::reset()
{
Q_D(QProgressBar);
- d->value = d->minimum - 1;
if (d->minimum == INT_MIN)
d->value = INT_MIN;
+ else
+ d->value = d->minimum - 1;
repaint();
}
@@ -358,7 +360,7 @@ void QProgressBar::setRange(int minimum, int maximum)
d->minimum = minimum;
d->maximum = qMax(minimum, maximum);
- if (d->value < (d->minimum - 1) || d->value > d->maximum)
+ if (d->value < qint64(d->minimum) - 1 || d->value > d->maximum)
reset();
else
update();
@@ -479,11 +481,11 @@ QString QProgressBar::text() const
// progress bar has one step and that we are on that step. Return
// 100% here in order to avoid division by zero further down.
if (totalSteps == 0) {
- result.replace(QLatin1String("%p"), locale.toString(int(100)));
+ result.replace(QLatin1String("%p"), locale.toString(100));
return result;
}
- int progress = (qreal(d->value) - d->minimum) * 100.0 / totalSteps;
+ const auto progress = static_cast<int>((qint64(d->value) - d->minimum) * 100.0 / totalSteps);
result.replace(QLatin1String("%p"), locale.toString(progress));
return result;
}