summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qpushbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/widgets/qpushbutton.cpp')
-rw-r--r--src/widgets/widgets/qpushbutton.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index 3d075bf92f..c70cfde3d9 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -326,12 +326,16 @@ void QPushButton::initStyleOption(QStyleOptionButton *option) const
option->features |= QStyleOptionButton::AutoDefaultButton;
if (d->defaultButton)
option->features |= QStyleOptionButton::DefaultButton;
+ if (d->commandLink)
+ option->features |= QStyleOptionButton::CommandLinkButton;
if (d->down || d->menuOpen)
option->state |= QStyle::State_Sunken;
if (d->checked)
option->state |= QStyle::State_On;
if (!d->flat && !d->down)
option->state |= QStyle::State_Raised;
+ if (underMouse() && hasMouseTracking())
+ option->state.setFlag(QStyle::State_MouseOver, d->hovering);
option->text = d->text;
option->icon = d->icon;
option->iconSize = iconSize();
@@ -581,6 +585,13 @@ void QPushButton::showMenu()
d->_q_popupPressed();
}
+void QPushButtonPrivate::init()
+{
+ Q_Q(QPushButton);
+ q->setAttribute(Qt::WA_MacShowFocusRect);
+ resetLayoutItemMargins();
+}
+
void QPushButtonPrivate::_q_popupPressed()
{
Q_Q(QPushButton);
@@ -691,6 +702,18 @@ bool QPushButton::event(QEvent *e)
updateGeometry();
} else if (e->type() == QEvent::PolishRequest) {
updateGeometry();
+ } else if (e->type() == QEvent::MouseMove) {
+ const QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
+ if (testAttribute(Qt::WA_Hover)) {
+ bool hit = false;
+ if (underMouse())
+ hit = hitButton(mouseEvent->pos());
+
+ if (hit != d->hovering) {
+ update(rect());
+ d->hovering = hit;
+ }
+ }
}
return QAbstractButton::event(e);
}